X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cd096152351bd8a1a2073b4e5816f3c4efad563e..16d38102e8ad5534d185cc532b9aa8077a75e0a4:/wxPython/src/controls2.i diff --git a/wxPython/src/controls2.i b/wxPython/src/controls2.i index 9f1f91c662..11e599148c 100644 --- a/wxPython/src/controls2.i +++ b/wxPython/src/controls2.i @@ -60,6 +60,11 @@ enum { wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK, wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxEVT_COMMAND_LIST_CACHE_HINT, + wxEVT_COMMAND_LIST_COL_RIGHT_CLICK, + wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, + wxEVT_COMMAND_LIST_COL_DRAGGING, + wxEVT_COMMAND_LIST_COL_END_DRAG, + }; @@ -103,6 +108,18 @@ def EVT_LIST_INSERT_ITEM(win, id, func): def EVT_LIST_COL_CLICK(win, id, func): win.Connect(id, -1, wxEVT_COMMAND_LIST_COL_CLICK, func) +def EVT_LIST_COL_RIGHT_CLICK(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_LIST_COL_RIGHT_CLICK, func) + +def EVT_LIST_COL_BEGIN_DRAG(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, func) + +def EVT_LIST_COL_DRAGGING(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_LIST_COL_DRAGGING, func) + +def EVT_LIST_COL_END_DRAG(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_LIST_COL_END_DRAG, func) + def EVT_LIST_ITEM_RIGHT_CLICK(win, id, func): win.Connect(id, -1, wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, func) @@ -142,6 +159,7 @@ enum { wxLC_MASK_ALIGN, wxLC_MASK_SORT, + wxLC_USER_TEXT, }; @@ -308,6 +326,8 @@ public: class wxListEvent: public wxNotifyEvent { public: + wxListEvent(wxEventType commandType = wxEVT_NULL, int id = 0); + int m_code; long m_itemIndex; long m_oldItemIndex; @@ -329,13 +349,17 @@ public: long GetData(); long GetMask(); const wxListItem& GetItem(); + + long GetCacheFrom(); + long GetCacheTo(); }; -%{ +%{ // C++ Version of a Python aware class class wxPyListCtrl : public wxListCtrl { DECLARE_ABSTRACT_CLASS(wxPyListCtrl); public: + wxPyListCtrl() : wxListCtrl() {} wxPyListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, @@ -344,6 +368,15 @@ public: char* name) : wxListCtrl(parent, id, pos, size, style, validator, name) {} + bool Create(wxWindow* parent, wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + char* name) { + return wxListCtrl::Create(parent, id, pos, size, style, validator, name); + } + DEC_PYCALLBACK_STRING_LONGLONG(OnGetItemText); DEC_PYCALLBACK_INT_LONG(OnGetItemImage); DEC_PYCALLBACK_LISTATTR_LONG(OnGetItemAttr); @@ -359,6 +392,7 @@ IMP_PYCALLBACK_LISTATTR_LONG(wxPyListCtrl, wxListCtrl, OnGetItemAttr); %} + %name(wxListCtrl)class wxPyListCtrl : public wxControl { public: wxPyListCtrl(wxWindow* parent, wxWindowID id = -1, @@ -367,9 +401,16 @@ public: long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator, char* name = "listCtrl"); + %name(wxPreListCtrl)wxPyListCtrl(); + + bool Create(wxWindow* parent, wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxLC_ICON, + const wxValidator& validator = wxDefaultValidator, + char* name = "listCtrl"); void _setSelf(PyObject* self, PyObject* _class); - %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)" %pragma(python) addtomethod = "__init__:self._setSelf(self, wxListCtrl)" @@ -450,8 +491,9 @@ public: //bool GetItemRect(long item, wxRect& rect, int code = wxLIST_RECT_BOUNDS) const ; //bool GetItemPosition(long item, wxPoint& pos) const ; + + // Gets the item position %addmethods { - // Gets the item position %new wxPoint* GetItemPosition(long item) { wxPoint* pos = new wxPoint; self->GetItemPosition(item, *pos); @@ -615,15 +657,46 @@ public: } } + %pragma(python) addtoclass = " + # Some helpers... + + def Select(self, idx, on=1): + '''[de]select an item''' + if on: state = wxLIST_STATE_SELECTED + else: state = 0 + self.SetItemState(idx, state, wxLIST_STATE_SELECTED) + + def Focus(self, idx): + '''Focus and show the given item''' + self.SetItemState(idx, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED) + self.EnsureVisible(idx) + + def GetFocusedItem(self): + '''get the currently focused item or -1 if none''' + return self.GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED) + + def IsSelected(self, idx): + '''return TRUE if the item is selected''' + return self.GetItemState(idx, wxLIST_STATE_SELECTED) != 0 + + def SetColumnImage(self, col, image): + item = wxListItem() + item.SetMask(wxLIST_MASK_IMAGE) + item.SetImage(image) + self.SetColumn(col, item) + + def ClearColumnImage(self, col): + self.SetColumnImage(col, -1) + " }; -%{ +%{ // Python aware sorting function for wxPyListCtrl int wxCALLBACK wxPyListCtrl_SortItems(long item1, long item2, long funcPtr) { int retval = 0; PyObject* func = (PyObject*)funcPtr; - bool doSave = wxPyRestoreThread(); + wxPyTState* state = wxPyBeginBlockThreads(); PyObject* args = Py_BuildValue("(ii)", item1, item2); PyObject* result = PyEval_CallObject(func, args); @@ -633,7 +706,7 @@ public: Py_DECREF(result); } - wxPySaveThread(doSave); + wxPyEndBlockThreads(state); return retval; } @@ -641,6 +714,71 @@ public: //---------------------------------------------------------------------- +class wxListView : public wxPyListCtrl +{ +public: + wxListView( wxWindow *parent, + wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxLC_REPORT, + const wxValidator& validator = wxDefaultValidator, + const wxString &name = "listctrl" ); + %name(wxPreListView)wxListView(); + + bool Create( wxWindow *parent, + wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxLC_REPORT, + const wxValidator& validator = wxDefaultValidator, + const wxString &name = "listctrl" ); + + + // [de]select an item + void Select(long n, bool on = TRUE); + + // focus and show the given item + void Focus(long index); + + // get the currently focused item or -1 if none + long GetFocusedItem() const; + + // get first and subsequent selected items, return -1 when no more + long GetNextSelected(long item) const; + long GetFirstSelected() const; + + // return TRUE if the item is selected + bool IsSelected(long index); + + void SetColumnImage(int col, int image); + void ClearColumnImage(int col); +}; + + +//---------------------------------------------------------------------- + +// wxTreeCtrl flags +enum { + wxTR_NO_BUTTONS, + wxTR_HAS_BUTTONS, + wxTR_TWIST_BUTTONS, + wxTR_NO_LINES, + wxTR_MAC_BUTTONS, + + wxTR_SINGLE, + wxTR_MULTIPLE, + wxTR_EXTENDED, + + wxTR_EDIT_LABELS, + wxTR_LINES_AT_ROOT, + wxTR_HIDE_ROOT, + wxTR_ROW_LINES, + wxTR_HAS_VARIABLE_ROW_HEIGHT, + + wxTR_DEFAULT_STYLE, +}; + enum wxTreeItemIcon { wxTreeItemIcon_Normal, // not selected, not expanded @@ -693,6 +831,89 @@ enum { }; +%pragma(python) code = " +# wxTreeCtrl events +def EVT_TREE_BEGIN_DRAG(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_BEGIN_DRAG, func) + +def EVT_TREE_BEGIN_RDRAG(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_BEGIN_RDRAG, func) + +def EVT_TREE_END_DRAG(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_END_DRAG, func) + +def EVT_TREE_BEGIN_LABEL_EDIT(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, func) + +def EVT_TREE_END_LABEL_EDIT(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_END_LABEL_EDIT, func) + +def EVT_TREE_GET_INFO(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_GET_INFO, func) + +def EVT_TREE_SET_INFO(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_SET_INFO, func) + +def EVT_TREE_ITEM_EXPANDED(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_ITEM_EXPANDED, func) + +def EVT_TREE_ITEM_EXPANDING(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_ITEM_EXPANDING, func) + +def EVT_TREE_ITEM_COLLAPSED(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_ITEM_COLLAPSED, func) + +def EVT_TREE_ITEM_COLLAPSING(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_ITEM_COLLAPSING, func) + +def EVT_TREE_SEL_CHANGED(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_SEL_CHANGED, func) + +def EVT_TREE_SEL_CHANGING(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_SEL_CHANGING, func) + +def EVT_TREE_KEY_DOWN(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_KEY_DOWN, func) + +def EVT_TREE_DELETE_ITEM(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_DELETE_ITEM, func) + +def EVT_TREE_ITEM_ACTIVATED(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_ITEM_ACTIVATED, func) + +def EVT_TREE_ITEM_RIGHT_CLICK(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK, func) + +def EVT_TREE_ITEM_MIDDLE_CLICK(win, id, func): + win.Connect(id, -1, wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, func) +" + + +class wxTreeItemAttr +{ +public: + // ctors + //wxTreeItemAttr() { } + wxTreeItemAttr(const wxColour& colText = wxNullColour, + const wxColour& colBack = wxNullColour, + const wxFont& font = wxNullFont); + + // setters + void SetTextColour(const wxColour& colText); + void SetBackgroundColour(const wxColour& colBack); + void SetFont(const wxFont& font); + + // accessors + bool HasTextColour(); + bool HasBackgroundColour(); + bool HasFont(); + + const wxColour& GetTextColour(); + const wxColour& GetBackgroundColour(); + const wxFont& GetFont(); +}; + + class wxTreeItemId { public: wxTreeItemId(); @@ -720,9 +941,9 @@ public: } ~wxPyTreeItemData() { - bool doSave = wxPyRestoreThread(); + wxPyTState* state = wxPyBeginBlockThreads(); Py_DECREF(m_obj); - wxPySaveThread(doSave); + wxPyEndBlockThreads(state); } PyObject* GetData() { @@ -731,9 +952,9 @@ public: } void SetData(PyObject* obj) { - bool doSave = wxPyRestoreThread(); + wxPyTState* state = wxPyBeginBlockThreads(); Py_DECREF(m_obj); - wxPySaveThread(doSave); + wxPyEndBlockThreads(state); m_obj = obj; Py_INCREF(obj); } @@ -759,19 +980,23 @@ public: class wxTreeEvent : public wxNotifyEvent { public: + wxTreeEvent(wxEventType commandType = wxEVT_NULL, int id = 0); + wxTreeItemId GetItem(); wxTreeItemId GetOldItem(); wxPoint GetPoint(); + const wxKeyEvent& GetKeyEvent(); int GetCode(); const wxString& GetLabel(); }; -%{ +%{ // C++ version of Python aware wxTreeCtrl class wxPyTreeCtrl : public wxTreeCtrl { DECLARE_ABSTRACT_CLASS(wxPyTreeCtrl); public: + wxPyTreeCtrl() : wxTreeCtrl() {} wxPyTreeCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, @@ -780,18 +1005,29 @@ public: char* name) : wxTreeCtrl(parent, id, pos, size, style, validator, name) {} + bool Create(wxWindow *parent, wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + char* name) { + return wxTreeCtrl::Create(parent, id, pos, size, style, validator, name); + } + + int OnCompareItems(const wxTreeItemId& item1, const wxTreeItemId& item2) { int rval = 0; - bool doSave = wxPyRestoreThread(); - if (m_myInst.findCallback("OnCompareItems")) + bool found; + wxPyTState* state = wxPyBeginBlockThreads(); + if ((found = m_myInst.findCallback("OnCompareItems"))) rval = m_myInst.callCallback(Py_BuildValue( "(OO)", wxPyConstructObject((void*)&item1, "wxTreeItemId"), wxPyConstructObject((void*)&item2, "wxTreeItemId"))); - else + wxPyEndBlockThreads(state); + if (! found) rval = wxTreeCtrl::OnCompareItems(item1, item2); - wxPySaveThread(doSave); return rval; } PYPRIVATE; @@ -814,13 +1050,18 @@ public: long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT, const wxValidator& validator = wxDefaultValidator, char* name = "wxTreeCtrl"); + %name(wxPreTreeCtrl)wxPyTreeCtrl(); + + bool Create(wxWindow *parent, wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT, + const wxValidator& validator = wxDefaultValidator, + char* name = "wxTreeCtrl"); void _setSelf(PyObject* self, PyObject* _class); - %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)" %pragma(python) addtomethod = "__init__:self._setSelf(self, wxTreeCtrl)" - void AssignImageList(wxImageList* imageList); - %pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0" size_t GetCount(); unsigned int GetIndent(); void SetIndent(unsigned int indent); @@ -828,6 +1069,10 @@ public: wxImageList *GetStateImageList(); void SetImageList(wxImageList *imageList); void SetStateImageList(wxImageList *imageList); + void AssignImageList(wxImageList* imageList); + %pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0" + void AssignStateImageList(wxImageList* imageList); + %pragma(python) addtomethod = "AssignStateImageList:_args[0].thisown = 0" unsigned int GetSpacing(); void SetSpacing(unsigned int spacing); @@ -896,7 +1141,7 @@ public: //size_t GetSelections(wxArrayTreeItemIds& selection); %addmethods { PyObject* GetSelections() { - bool doSave = wxPyRestoreThread(); + wxPyTState* state = wxPyBeginBlockThreads(); PyObject* rval = PyList_New(0); wxArrayTreeItemIds array; size_t num, x; @@ -906,7 +1151,7 @@ public: PyObject* item = wxPyConstructObject((void*)tii, "wxTreeItemId", TRUE); PyList_Append(rval, item); } - wxPySaveThread(doSave); + wxPyEndBlockThreads(state); return rval; } } @@ -991,10 +1236,10 @@ public: PyObject* GetBoundingRect(const wxTreeItemId& item, int textOnly = FALSE) { wxRect rect; if (self->GetBoundingRect(item, rect, textOnly)) { - bool doSave = wxPyRestoreThread(); + wxPyTState* state = wxPyBeginBlockThreads(); wxRect* r = new wxRect(rect); PyObject* val = wxPyConstructObject((void*)r, "wxRect"); - wxPySaveThread(doSave); + wxPyEndBlockThreads(state); return val; } else { @@ -1026,74 +1271,13 @@ public: }; -//---------------------------------------------------------------------- - -#ifdef SKIPTHIS -#ifdef __WXMSW__ - - -enum { - /* tab control event types */ - wxEVT_COMMAND_TAB_SEL_CHANGED, - wxEVT_COMMAND_TAB_SEL_CHANGING, -}; - - -class wxTabEvent : public wxCommandEvent { -public: -}; - - - -class wxTabCtrl : public wxControl { -public: - wxTabCtrl(wxWindow* parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - char* name = "tabCtrl"); - - %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)" - - bool DeleteAllItems(); - bool DeleteItem(int item); - wxImageList* GetImageList(); - int GetItemCount(); - // TODO: void* GetItemData(); - int GetItemImage(int item); - - %addmethods { - %new wxRect* GetItemRect(int item) { - wxRect* rect = new wxRect; - self->GetItemRect(item, *rect); - return rect; - } - } - - wxString GetItemText(int item); - bool GetRowCount(); - int GetSelection(); - int HitTest(const wxPoint& pt, long& OUTPUT); - void InsertItem(int item, const wxString& text, - int imageId = -1, void* clientData = NULL); - // TODO: bool SetItemData(int item, void* data); - bool SetItemImage(int item, int image); - void SetImageList(wxImageList* imageList); - void SetItemSize(const wxSize& size); - bool SetItemText(int item, const wxString& text); - void SetPadding(const wxSize& padding); - int SetSelection(int item); - -}; - -#endif -#endif - //---------------------------------------------------------------------- %init %{ + // Map renamed classes back to their common name for OOR wxPyPtrTypeMap_Add("wxTreeItemData", "wxPyTreeItemData"); wxPyPtrTypeMap_Add("wxTreeCtrl", "wxPyTreeCtrl"); + wxPyPtrTypeMap_Add("wxListCtrl", "wxPyListCtrl"); %} //----------------------------------------------------------------------