]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_treectrl.i
reSWIGged
[wxWidgets.git] / wxPython / src / _treectrl.i
index d0076c526ecdba05649b045b2930fd5d19bd85d7..50830f0e57ae67ce2e15cd79de51f2e3c0132bc9 100644 (file)
 %{
 #include <wx/treectrl.h>
 #include "wx/wxPython/pytree.h"
-    
-    const wxChar* wx_TreeCtrlNameStr = _T("wxTreeCtrl");
-    DECLARE_DEF_STRING(_TreeCtrlNameStr);
 %}
+    
+MAKE_CONST_WXSTRING2(TreeCtrlNameStr, _T("wxTreeCtrl"));
 
 //---------------------------------------------------------------------------
 %newgroup
@@ -83,7 +82,6 @@ enum {
 //---------------------------------------------------------------------------
 %newgroup
 
-typedef void *wxTreeItemIdValue;
 
 // wxTreeItemId identifies an element of the tree. In this implementation, it's
 // just a trivial wrapper around Win32 HTREEITEM or a pointer to some private
@@ -98,18 +96,11 @@ public:
     bool IsOk() const;
 
     %extend {
-        bool operator==(const wxTreeItemId* other) {
-            if (!other) return false;
-            return *self == *other;
-        }
-
-        bool operator!=(const wxTreeItemId* other) {
-            if (!other) return true;
-            return *self != *other;
-        }
+        bool __eq__(const wxTreeItemId* other) { return other ? (*self == *other) : false; }
+        bool __ne__(const wxTreeItemId* other) { return other ? (*self != *other) : true;  }
     }
 
-    wxTreeItemIdValue m_pItem;
+    void*  m_pItem;
 
 
     %pythoncode {
@@ -196,7 +187,7 @@ public:
 %constant wxEventType wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK;
 %constant wxEventType wxEVT_COMMAND_TREE_END_DRAG;
 %constant wxEventType wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK;
-
+%constant wxEventType wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP;
 
 
 %pythoncode {
@@ -220,7 +211,7 @@ EVT_TREE_ITEM_RIGHT_CLICK  = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLIC
 EVT_TREE_ITEM_MIDDLE_CLICK = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, 1)
 EVT_TREE_END_DRAG          = wx.PyEventBinder(wxEVT_COMMAND_TREE_END_DRAG         , 1)
 EVT_TREE_STATE_IMAGE_CLICK = wx.PyEventBinder(wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK, 1)
-
+EVT_TREE_ITEM_GETTOOLTIP   = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP,   1)
 }
 
 
@@ -261,6 +252,8 @@ public:
     bool IsEditCancelled() const;
     void SetEditCanceled(bool editCancelled);
 
+        // Set the tooltip for the item (for EVT_TREE_ITEM_GETTOOLTIP events)
+    void SetToolTip(const wxString& toolTip);
 };
 
 //---------------------------------------------------------------------------
@@ -293,7 +286,7 @@ public:
                        const wxTreeItemId& item2) {
         int rval = 0;
         bool found;
-        wxPyBeginBlockThreads();
+        bool blocked = wxPyBeginBlockThreads();
         if ((found = wxPyCBH_findCallback(m_myInst, "OnCompareItems"))) {
             PyObject *o1 = wxPyConstructObject((void*)&item1, wxT("wxTreeItemId"), false);
             PyObject *o2 = wxPyConstructObject((void*)&item2, wxT("wxTreeItemId"), false);
@@ -301,7 +294,7 @@ public:
             Py_DECREF(o1);
             Py_DECREF(o2);
         }
-        wxPyEndBlockThreads();
+        wxPyEndBlockThreads(blocked);
         if (! found)
             rval = wxTreeCtrl::OnCompareItems(item1, item2);
         return rval;
@@ -316,25 +309,31 @@ IMPLEMENT_ABSTRACT_CLASS(wxPyTreeCtrl, wxTreeCtrl);
 
 
  
+MustHaveApp(wxPyTreeCtrl);
+
 %name(TreeCtrl)class wxPyTreeCtrl : public wxControl {
 public:
-    %addtofunc wxPyTreeCtrl         "self._setOORInfo(self);self._setCallbackInfo(self, TreeCtrl)"
-    %addtofunc wxPyTreeCtrl()       ""
+    %pythonAppend wxPyTreeCtrl         "self._setOORInfo(self);self._setCallbackInfo(self, TreeCtrl)"
+    %pythonAppend wxPyTreeCtrl()       ""
+    %typemap(out) wxPyTreeCtrl*;    // turn off this typemap
    
     wxPyTreeCtrl(wxWindow *parent, wxWindowID id = -1,
                  const wxPoint& pos = wxDefaultPosition,
                  const wxSize& size = wxDefaultSize,
                  long style = wxTR_DEFAULT_STYLE,
                  const wxValidator& validator = wxDefaultValidator,
-                 const wxString& name = wxPy_TreeCtrlNameStr);
+                 const wxString& name = wxPyTreeCtrlNameStr);
     %name(PreTreeCtrl)wxPyTreeCtrl();
 
+    // Turn it back on again
+    %typemap(out) wxPyTreeCtrl* { $result = wxPyMake_wxObject($1, $owner); }
+
     bool Create(wxWindow *parent, wxWindowID id = -1,
                 const wxPoint& pos = wxDefaultPosition,
                 const wxSize& size = wxDefaultSize,
                 long style = wxTR_DEFAULT_STYLE,
                 const wxValidator& validator = wxDefaultValidator,
-                const wxString& name = wxPy_TreeCtrlNameStr);
+                const wxString& name = wxPyTreeCtrlNameStr);
 
     void _setCallbackInfo(PyObject* self, PyObject* _class);
 
@@ -370,10 +369,10 @@ public:
     void SetImageList(wxImageList *imageList);
     void SetStateImageList(wxImageList *imageList);
 
-    %addtofunc AssignImageList      "args[1].thisown = 0";
-    %addtofunc AssignStateImageList "args[1].thisown = 0";
+    %apply SWIGTYPE *DISOWN { wxImageList *imageList };
     void AssignImageList(wxImageList *imageList);
     void AssignStateImageList(wxImageList *imageList);
+    %clear wxImageList *imageList;
     
 
     // retrieve items label
@@ -451,14 +450,14 @@ public:
     // allow the user to expand the items which don't have any children now
     // - but instead add them only when needed, thus minimizing memory
     // usage and loading time.
-    void SetItemHasChildren(const wxTreeItemId& item, bool has = TRUE);
+    void SetItemHasChildren(const wxTreeItemId& item, bool has = true);
 
     // the item will be shown in bold
-    void SetItemBold(const wxTreeItemId& item, bool bold = TRUE);
+    void SetItemBold(const wxTreeItemId& item, bool bold = true);
 
 #ifdef __WXMSW__
     // the item will be shown with a drop highlight
-    void SetItemDropHighlight(const wxTreeItemId& item, bool highlight = TRUE);
+    void SetItemDropHighlight(const wxTreeItemId& item, bool highlight = true);
 #endif
     
     // set the items text colour
@@ -487,19 +486,19 @@ public:
     bool IsBold(const wxTreeItemId& item) const;
 
 
-    // if 'recursively' is FALSE, only immediate children count, otherwise
+    // if 'recursively' is False, only immediate children count, otherwise
     // the returned number is the number of all items in this branch
     size_t GetChildrenCount(const wxTreeItemId& item,
-                            bool recursively = TRUE) /*const*/;
+                            bool recursively = true) /*const*/;
 
 
 
     // get the root tree item
-    // wxTreeItemId.IsOk() will return FALSE if there is no such item
+    // wxTreeItemId.IsOk() will return False if there is no such item
     wxTreeItemId GetRootItem() const;
 
     // get the item currently selected 
-    // wxTreeItemId.IsOk() will return FALSE if there is no such item
+    // wxTreeItemId.IsOk() will return False if there is no such item
     wxTreeItemId GetSelection() const;
 
     %extend {
@@ -508,7 +507,7 @@ public:
         // NB: this operation is expensive and can take a long time for a
         //     control with a lot of items (~ O(number of items)).
         PyObject* GetSelections() {
-            wxPyBeginBlockThreads();
+            bool blocked = wxPyBeginBlockThreads();
             PyObject*           rval = PyList_New(0);
             wxArrayTreeItemIds  array;
             size_t              num, x;
@@ -517,29 +516,32 @@ public:
                 wxTreeItemId *tii = new wxTreeItemId(array.Item(x));
                 PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), true);
                 PyList_Append(rval, item);
+                Py_DECREF(item);
             }
-            wxPyEndBlockThreads();
+            wxPyEndBlockThreads(blocked);
             return rval;
         }
     }
 
     // get the parent of this item
-    // wxTreeItemId.IsOk() will return FALSE if there is no such item
+    // wxTreeItemId.IsOk() will return False if there is no such item
     wxTreeItemId GetItemParent(const wxTreeItemId& item) const;
 
 
+    // NOTE: These are a copy of the same methods in gizmos.i, be sure to
+    // update both at the same time.  (Or find a good way to refactor!)
     %extend {
         // Get the first child of this item.  Returns a wxTreeItemId and an
         // opaque "cookie" value that should be passed to GetNextChild in
         // order to continue the search.
         PyObject* GetFirstChild(const wxTreeItemId& item) {
-            wxTreeItemIdValue cookie = 0;
-            wxTreeItemId ritem = self->GetFirstChild(item, cookie);
-            wxPyBeginBlockThreads();
+            void* cookie = 0;
+            wxTreeItemId* ritem = new wxTreeItemId(self->GetFirstChild(item, cookie));
+            bool blocked = wxPyBeginBlockThreads();
             PyObject* tup = PyTuple_New(2);
-            PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(&ritem, wxT("wxTreeItemId"), true));
-            PyTuple_SET_ITEM(tup, 1, wxPyConstructObject(cookie, wxT("wxTreeItemIdValue"), true));
-            wxPyEndBlockThreads();
+            PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), true));
+            PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void")));
+            wxPyEndBlockThreads(blocked);
             return tup;
         }
 
@@ -548,13 +550,13 @@ public:
         // value returned from GetFirstChild or the previous GetNextChild.
         // Returns a wxTreeItemId and an opaque "cookie" value that should be
         // passed to GetNextChild in order to continue the search.
-        PyObject* GetNextChild(const wxTreeItemId& item, wxTreeItemIdValue& cookie) {
-            wxTreeItemId ritem = self->GetNextChild(item, cookie);
-            wxPyBeginBlockThreads();
+        PyObject* GetNextChild(const wxTreeItemId& item, void* cookie) {
+            wxTreeItemId* ritem = new wxTreeItemId(self->GetNextChild(item, cookie));
+            bool blocked = wxPyBeginBlockThreads();
             PyObject* tup = PyTuple_New(2);
-            PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(&ritem, wxT("wxTreeItemId"), true));
-            PyTuple_SET_ITEM(tup, 1, wxPyConstructObject(cookie, wxT("wxTreeItemIdValue"), true));
-            wxPyEndBlockThreads();
+            PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), true));
+            PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void")));
+            wxPyEndBlockThreads(blocked);
             return tup;
         }            
     }
@@ -642,12 +644,19 @@ public:
     // remove the selection from currently selected item (if any)
     void Unselect();
 
+    // remove the selection from the given one (multiselect mode only)
+    void UnselectItem(const wxTreeItemId& item);
+    
     // unselect all items (only makes sense for multiple selection control)
     void UnselectAll();
 
     // select this item
-    void SelectItem(const wxTreeItemId& item);
+    void SelectItem(const wxTreeItemId& item, bool select = true);
 
+    // toggle the item selection
+    void ToggleItemSelection(const wxTreeItemId& item);
+
+    
     // make sure this item is visible (expanding the parent item and/or
     // scrolling to this item if necessary)
     void EnsureVisible(const wxTreeItemId& item);
@@ -669,7 +678,7 @@ public:
 
 #ifdef __WXMSW__
     // end editing and accept or discard the changes to item label
-    void EndEditLabel(const wxTreeItemId& item, bool discardChanges = FALSE);
+    void EndEditLabel(const wxTreeItemId& item, bool discardChanges = false);
 #endif
 
 
@@ -682,23 +691,24 @@ public:
 
 
 
-    // determine to which item (if any) belongs the given point (the
-    // coordinates specified are relative to the client area of tree ctrl)
-    // and fill the flags parameter with a bitmask of wxTREE_HITTEST_xxx
-    // constants.
-    //
-    wxTreeItemId HitTest(const wxPoint& point, int& OUTPUT);
+    DocDeclAStr(
+        wxTreeItemId, HitTest(const wxPoint& point, int& OUTPUT),
+        "HitTest(Point point) -> (item, where)",
+        "Determine which item (if any) belongs the given point.  The coordinates
+specified are relative to the client area of tree ctrl and the where return
+value is set to a bitmask of wxTREE_HITTEST_xxx constants.
+", "");
     
 
     %extend {
         // get the bounding rectangle of the item (or of its label only)
-        PyObject* GetBoundingRect(const wxTreeItemId& item,  bool textOnly = FALSE) {
+        PyObject* GetBoundingRect(const wxTreeItemId& item,  bool textOnly = false) {
              wxRect rect;
             if (self->GetBoundingRect(item, rect, textOnly)) {
-                wxPyBeginBlockThreads();
+                bool blocked = wxPyBeginBlockThreads();
                 wxRect* r = new wxRect(rect);
                 PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), true);
-                wxPyEndBlockThreads();
+                wxPyEndBlockThreads(blocked);
                 return val;
             }
             else
@@ -706,7 +716,14 @@ public:
         }
     }
 
+#ifdef __WXMSW__
+    // set/get the item state.image (state == -1 means cycle to the next one)
+    void SetState(const wxTreeItemId& node, int state);
+    int GetState(const wxTreeItemId& node);
+#endif
 
+    static wxVisualAttributes
+    GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
 };