X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0812732316f715a480526cedcd481e7fc31a130c..944930d5f525ffa2d10b7cefb1ecacaf1e95275c:/utils/wxPython/src/controls2.i diff --git a/utils/wxPython/src/controls2.i b/utils/wxPython/src/controls2.i index 17906593c0..804b3465c7 100644 --- a/utils/wxPython/src/controls2.i +++ b/utils/wxPython/src/controls2.i @@ -14,6 +14,9 @@ %{ #include "helpers.h" +#ifdef __WXMSW__ +#include +#endif #include #include %} @@ -41,6 +44,53 @@ extern wxValidator wxPyDefaultValidator; //---------------------------------------------------------------------- +enum { + wxLIST_MASK_TEXT, + wxLIST_MASK_IMAGE, + wxLIST_MASK_DATA, + wxLIST_MASK_WIDTH, + wxLIST_MASK_FORMAT, + wxLIST_MASK_STATE, + wxLIST_STATE_DONTCARE, + wxLIST_STATE_DROPHILITED, + wxLIST_STATE_FOCUSED, + wxLIST_STATE_SELECTED, + wxLIST_STATE_CUT, + wxLIST_HITTEST_ABOVE, + wxLIST_HITTEST_BELOW, + wxLIST_HITTEST_NOWHERE, + wxLIST_HITTEST_ONITEMICON, + wxLIST_HITTEST_ONITEMLABEL, + wxLIST_HITTEST_ONITEMRIGHT, + wxLIST_HITTEST_ONITEMSTATEICON, + wxLIST_HITTEST_TOLEFT, + wxLIST_HITTEST_TORIGHT, + wxLIST_HITTEST_ONITEM, + wxLIST_NEXT_ABOVE, + wxLIST_NEXT_ALL, + wxLIST_NEXT_BELOW, + wxLIST_NEXT_LEFT, + wxLIST_NEXT_RIGHT, + wxLIST_ALIGN_DEFAULT, + wxLIST_ALIGN_LEFT, + wxLIST_ALIGN_TOP, + wxLIST_ALIGN_SNAP_TO_GRID, + wxLIST_FORMAT_LEFT, + wxLIST_FORMAT_RIGHT, + wxLIST_FORMAT_CENTRE, + wxLIST_FORMAT_CENTER, + wxLIST_AUTOSIZE, + wxLIST_AUTOSIZE_USEHEADER, + wxLIST_RECT_BOUNDS, + wxLIST_RECT_ICON, + wxLIST_RECT_LABEL, + wxLIST_FIND_UP, + wxLIST_FIND_DOWN, + wxLIST_FIND_LEFT, + wxLIST_FIND_RIGHT, +}; + + class wxListItem { public: long m_mask; // Indicates what fields are valid @@ -96,6 +146,8 @@ public: wxTextCtrl* EditLabel(long item); bool EndEditLabel(bool cancel); wxTextCtrl* GetEditControl(); +#else + void EditLabel(long item); #endif bool EnsureVisible(long item); long FindItem(long start, const wxString& str, bool partial = FALSE); @@ -109,8 +161,10 @@ public: long GetItemData(long item); %addmethods { - %new wxListItem* GetItem() { + %new wxListItem* GetItem(long itemId, int col=0) { wxListItem* info = new wxListItem; + info->m_itemId = itemId; + info->m_col = col; self->GetItem(*info); return info; } @@ -140,7 +194,7 @@ public: #endif long GetTopItem(); long HitTest(const wxPoint& point, int& OUTPUT); - %name(InsertColumnWithInfo)long InsertColumn(long col, wxListItem& info); + %name(InsertColumnWith)long InsertColumn(long col, wxListItem& info); long InsertColumn(long col, const wxString& heading, int format = wxLIST_FORMAT_LEFT, int width = -1); @@ -156,9 +210,11 @@ public: bool SetColumn(int col, wxListItem& item); bool SetColumnWidth(int col, int width); void SetImageList(wxImageList* imageList, int which); + bool SetItem(wxListItem& info); - %name(SetItemString)long SetItem(long index, int col, const wxString& label, + %name(SetStringItem)long SetItem(long index, int col, const wxString& label, int imageId = -1); + bool SetItemData(long item, long data); bool SetItemImage(long item, int image, int selImage); bool SetItemPosition(long item, const wxPoint& pos); @@ -178,36 +234,65 @@ class wxTreeItemId { public: wxTreeItemId(); ~wxTreeItemId(); - bool IsOk() const { return m_itemId != 0; } + bool IsOk(); -// %addmethods { -// long GetId() { return (long)(*self); } -// } }; -// **** This isn't very useful yet. This needs to be specialized to enable -// derived Python classes... -class wxTreeItemData { +%{ +class wxPyTreeItemData : public wxTreeItemData { public: - wxTreeItemData(); - ~wxTreeItemData(); + wxPyTreeItemData(PyObject* obj = NULL) { + if (obj == NULL) + obj = Py_None; + Py_INCREF(obj); + m_obj = obj; + } - const wxTreeItemId& GetId(); - void SetId(const wxTreeItemId& id); + ~wxPyTreeItemData() { + bool doSave = wxPyRestoreThread(); + Py_DECREF(m_obj); + wxPySaveThread(doSave); + } + + PyObject* GetData() { + Py_INCREF(m_obj); + return m_obj; + } + + void SetData(PyObject* obj) { + Py_DECREF(m_obj); + m_obj = obj; + Py_INCREF(obj); + } + + PyObject* m_obj; }; +%} + + + +%name(wxTreeItemData) class wxPyTreeItemData { +public: + wxPyTreeItemData(PyObject* obj = NULL); + PyObject* GetData(); + void SetData(PyObject* obj); + const wxTreeItemId& GetId(); + void SetId(const wxTreeItemId& id); +}; -class wxTreeEvent : public wxCommandEvent { + +class wxTreeEvent : public wxNotifyEvent { public: wxTreeItemId GetItem(); wxTreeItemId GetOldItem(); wxPoint GetPoint(); int GetCode(); - void Veto(); + const wxString& GetLabel(); }; @@ -235,17 +320,56 @@ public: void SetImageList(wxImageList *imageList); void SetStateImageList(wxImageList *imageList); + unsigned int GetSpacing(); + void SetSpacing(unsigned int spacing); + wxString GetItemText(const wxTreeItemId& item); int GetItemImage(const wxTreeItemId& item); int GetItemSelectedImage(const wxTreeItemId& item); - wxTreeItemData *GetItemData(const wxTreeItemId& item); void SetItemText(const wxTreeItemId& item, const wxString& text); void SetItemImage(const wxTreeItemId& item, int image); void SetItemSelectedImage(const wxTreeItemId& item, int image); - void SetItemData(const wxTreeItemId& item, wxTreeItemData *data); void SetItemHasChildren(const wxTreeItemId& item, bool hasChildren = TRUE); + %addmethods { + // [Get|Set]ItemData substitutes. Automatically create wxPyTreeItemData + // if needed. + wxPyTreeItemData* GetItemData(const wxTreeItemId& item) { + wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item); + if (data == NULL) { + data = new wxPyTreeItemData(); + self->SetItemData(item, data); + } + return data; + } + + void SetItemData(const wxTreeItemId& item, wxPyTreeItemData* data) { + self->SetItemData(item, data); + } + + // [Get|Set]PyData are short-cuts. Also made somewhat crash-proof by + // automatically creating data classes. + PyObject* GetPyData(const wxTreeItemId& item) { + wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item); + if (data == NULL) { + data = new wxPyTreeItemData(); + self->SetItemData(item, data); + } + return data->GetData(); + } + + void SetPyData(const wxTreeItemId& item, PyObject* obj) { + wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item); + if (data == NULL) { + data = new wxPyTreeItemData(obj); + self->SetItemData(item, data); + } else + data->SetData(obj); + } + } + + bool IsVisible(const wxTreeItemId& item); bool ItemHasChildren(const wxTreeItemId& item); bool IsExpanded(const wxTreeItemId& item); @@ -254,6 +378,25 @@ public: wxTreeItemId GetRootItem(); wxTreeItemId GetSelection(); wxTreeItemId GetParent(const wxTreeItemId& item); + //size_t GetSelections(wxArrayTreeItemIds& selection); + %addmethods { + PyObject* GetSelections() { + PyObject* rval = PyList_New(0); + wxArrayTreeItemIds array; + size_t num, x; + num = self->GetSelections(array); + for (x=0; x < num; x++) { + PyObject* item = wxPyConstructObject((void*)&array.Item(x), + "wxTreeItemId"); + PyList_Append(rval, item); + } + return rval; + } + } + + + + size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE); wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& INOUT); wxTreeItemId GetNextChild(const wxTreeItemId& item, long& INOUT); @@ -262,24 +405,26 @@ public: wxTreeItemId GetFirstVisibleItem(); wxTreeItemId GetNextVisible(const wxTreeItemId& item); wxTreeItemId GetPrevVisible(const wxTreeItemId& item); + wxTreeItemId GetLastChild(const wxTreeItemId& item); + wxTreeItemId AddRoot(const wxString& text, int image = -1, int selectedImage = -1, - wxTreeItemData *data = NULL); + wxPyTreeItemData *data = NULL); wxTreeItemId PrependItem(const wxTreeItemId& parent, const wxString& text, int image = -1, int selectedImage = -1, - wxTreeItemData *data = NULL); + wxPyTreeItemData *data = NULL); wxTreeItemId InsertItem(const wxTreeItemId& parent, const wxTreeItemId& idPrevious, const wxString& text, int image = -1, int selectedImage = -1, - wxTreeItemData *data = NULL); + wxPyTreeItemData *data = NULL); wxTreeItemId AppendItem(const wxTreeItemId& parent, const wxString& text, int image = -1, int selectedImage = -1, - wxTreeItemData *data = NULL); + wxPyTreeItemData *data = NULL); void Delete(const wxTreeItemId& item); void DeleteChildren(const wxTreeItemId& item); @@ -291,23 +436,54 @@ public: void Toggle(const wxTreeItemId& item); void Unselect(); + void UnselectAll(); void SelectItem(const wxTreeItemId& item); void EnsureVisible(const wxTreeItemId& item); void ScrollTo(const wxTreeItemId& item); - +#ifdef __WXMSW__ wxTextCtrl* EditLabel(const wxTreeItemId& item); - // **** figure out how to do this - // wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)); wxTextCtrl* GetEditControl(); - void EndEditLabel(const wxTreeItemId& item, bool discardChanges = FALSE); + void EndEditLabel(const wxTreeItemId& item, int discardChanges = FALSE); +#else + void EditLabel(const wxTreeItemId& item); +#endif -// void SortChildren(const wxTreeItemId& item); - // **** And this too - // wxTreeItemCmpFunc *cmpFunction = NULL); + void SortChildren(const wxTreeItemId& item); - void SetItemBold(const wxTreeItemId& item, bool bold = TRUE); + void SetItemBold(const wxTreeItemId& item, int bold = TRUE); bool IsBold(const wxTreeItemId& item) const; wxTreeItemId HitTest(const wxPoint& point); + +#ifdef __WXMSW__ + void SetItemDropHighlight(const wxTreeItemId& item, int highlight = TRUE); + + //bool GetBoundingRect(const wxTreeItemId& item, wxRect& rect, int textOnly = FALSE) + %addmethods { + PyObject* GetBoundingRect(const wxTreeItemId& item, int textOnly = FALSE) { + wxRect rect; + if (self->GetBoundingRect(item, rect, textOnly)) + return wxPyConstructObject((void*)&rect, "wxRect"); + else { + Py_INCREF(Py_None); + return Py_None; + } + } + } +#endif + +%pragma(python) addtoclass = " + # Redefine a couple methods that SWIG gets a bit confused on... + def GetFirstChild(self,arg0,arg1): + val1, val2 = controls2c.wxTreeCtrl_GetFirstChild(self.this,arg0.this,arg1) + val1 = wxTreeItemIdPtr(val1) + val1.thisown = 1 + return (val1,val2) + def GetNextChild(self,arg0,arg1): + val1, val2 = controls2c.wxTreeCtrl_GetNextChild(self.this,arg0.this,arg1) + val1 = wxTreeItemIdPtr(val1) + val1.thisown = 1 + return (val1,val2) +" }; @@ -368,84 +544,3 @@ public: //---------------------------------------------------------------------- -///////////////////////////////////////////////////////////////////////////// -// -// $Log$ -// Revision 1.14 1999/01/30 07:30:10 RD -// Added wxSashWindow, wxSashEvent, wxLayoutAlgorithm, etc. -// -// Various cleanup, tweaks, minor additions, etc. to maintain -// compatibility with the current wxWindows. -// -// Revision 1.13 1998/12/17 14:07:34 RR -// -// Removed minor differences between wxMSW and wxGTK -// -// Revision 1.12 1998/12/16 22:10:52 RD -// -// Tweaks needed to be able to build wxPython with wxGTK. -// -// Revision 1.11 1998/12/15 20:41:16 RD -// Changed the import semantics from "from wxPython import *" to "from -// wxPython.wx import *" This is for people who are worried about -// namespace pollution, they can use "from wxPython import wx" and then -// prefix all the wxPython identifiers with "wx." -// -// Added wxTaskbarIcon for wxMSW. -// -// Made the events work for wxGrid. -// -// Added wxConfig. -// -// Added wxMiniFrame for wxGTK, (untested.) -// -// Changed many of the args and return values that were pointers to gdi -// objects to references to reflect changes in the wxWindows API. -// -// Other assorted fixes and additions. -// -// Revision 1.10 1998/11/25 08:45:23 RD -// -// Added wxPalette, wxRegion, wxRegionIterator, wxTaskbarIcon -// Added events for wxGrid -// Other various fixes and additions -// -// Revision 1.9 1998/11/16 00:00:54 RD -// Generic treectrl for wxPython/GTK compiles... -// -// Revision 1.8 1998/11/11 04:40:20 RD -// wxTreeCtrl now works (sort of) for wxPython-GTK. This is the new -// TreeCtrl in src/gtk/treectrl.cpp not the old generic one. -// -// Revision 1.7 1998/11/11 03:12:25 RD -// -// Additions for wxTreeCtrl -// -// Revision 1.6 1998/10/20 06:43:55 RD -// New wxTreeCtrl wrappers (untested) -// some changes in helpers -// etc. -// -// Revision 1.5 1998/10/07 07:34:33 RD -// Version 0.4.1 for wxGTK -// -// Revision 1.4 1998/10/02 06:40:36 RD -// -// Version 0.4 of wxPython for MSW. -// -// Revision 1.3 1998/08/18 19:48:15 RD -// more wxGTK compatibility things. -// -// It builds now but there are serious runtime problems... -// -// Revision 1.2 1998/08/15 07:36:30 RD -// - Moved the header in the .i files out of the code that gets put into -// the .cpp files. It caused CVS conflicts because of the RCS ID being -// different each time. -// -// - A few minor fixes. -// -// Revision 1.1 1998/08/09 08:25:49 RD -// Initial version -// -//