X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/00b6c4e33bdb2fcc1b56d429653963182608674b..2beb01db001c9c22e4865fba3ba9b46ff5fc2dda:/wxPython/src/controls2.i diff --git a/wxPython/src/controls2.i b/wxPython/src/controls2.i index 4539b8e79d..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)" @@ -616,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); @@ -634,12 +706,56 @@ public: Py_DECREF(result); } - wxPySaveThread(doSave); + wxPyEndBlockThreads(state); return retval; } %} +//---------------------------------------------------------------------- + +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 @@ -825,9 +941,9 @@ public: } ~wxPyTreeItemData() { - bool doSave = wxPyRestoreThread(); + wxPyTState* state = wxPyBeginBlockThreads(); Py_DECREF(m_obj); - wxPySaveThread(doSave); + wxPyEndBlockThreads(state); } PyObject* GetData() { @@ -836,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); } @@ -869,16 +985,18 @@ public: 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, @@ -887,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; @@ -921,9 +1050,16 @@ 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)" size_t GetCount(); @@ -1005,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; @@ -1015,7 +1151,7 @@ public: PyObject* item = wxPyConstructObject((void*)tii, "wxTreeItemId", TRUE); PyList_Append(rval, item); } - wxPySaveThread(doSave); + wxPyEndBlockThreads(state); return rval; } } @@ -1100,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 { @@ -1135,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"); %} //----------------------------------------------------------------------