1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Wrappers for the "gizmo" classes in wx/contrib
7 // Created: 23-Nov-2001
9 // Copyright: (c) 2001 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
14 "Various *gizmo* classes: `DynamicSashWindow`, `EditableListBox`,
15 `LEDNumberCtrl`, `TreeListCtrl`, etc."
18 %module(package="wx", docstring=DOCSTRING) gizmos
22 #include "wx/wxPython/wxPython.h"
23 #include "wx/wxPython/pyclasses.h"
25 #include <wx/gizmos/dynamicsash.h>
26 #include <wx/gizmos/editlbox.h>
27 #include <wx/gizmos/splittree.h>
28 #include <wx/gizmos/ledctrl.h>
29 #include <wx/gizmos/statpict.h>
31 #include <wx/listctrl.h>
32 #include <wx/treectrl.h>
33 #include <wx/imaglist.h>
35 #include "wx/treelistctrl.h"
36 #include "wx/wxPython/pytree.h"
40 //---------------------------------------------------------------------------
44 %pythoncode { import wx }
45 %pythoncode { __docfilter__ = wx._core.__DocFilter(globals()) }
48 MAKE_CONST_WXSTRING2(DynamicSashNameStr, wxT("dynamicSashWindow"));
49 MAKE_CONST_WXSTRING2(EditableListBoxNameStr, wxT("editableListBox"));
50 MAKE_CONST_WXSTRING2(TreeListCtrlNameStr, wxT("treelistctrl"));
51 MAKE_CONST_WXSTRING(StaticPictureNameStr);
53 MAKE_CONST_WXSTRING_NOSWIG(EmptyString);
56 %include _gizmos_rename.i
58 //---------------------------------------------------------------------------
61 wxDS_MANAGE_SCROLLBARS,
65 %constant wxEventType wxEVT_DYNAMIC_SASH_SPLIT;
66 %constant wxEventType wxEVT_DYNAMIC_SASH_UNIFY;
70 wxDynamicSashSplitEvents are sent to your view by wxDynamicSashWindow
71 whenever your view is being split by the user. It is your
72 responsibility to handle this event by creating a new view window as
73 a child of the wxDynamicSashWindow. wxDynamicSashWindow will
74 automatically reparent it to the proper place in its window hierarchy.
76 class wxDynamicSashSplitEvent : public wxCommandEvent {
78 wxDynamicSashSplitEvent(wxObject *target);
83 wxDynamicSashUnifyEvents are sent to your view by wxDynamicSashWindow
84 whenever the sash which splits your view and its sibling is being
85 reunified such that your view is expanding to replace its sibling.
86 You needn't do anything with this event if you are allowing
87 wxDynamicSashWindow to manage your view's scrollbars, but it is useful
88 if you are managing the scrollbars yourself so that you can keep
89 the scrollbars' event handlers connected to your view's event handler
92 class wxDynamicSashUnifyEvent : public wxCommandEvent {
94 wxDynamicSashUnifyEvent(wxObject *target);
103 wxDynamicSashWindow widgets manages the way other widgets are viewed.
104 When a wxDynamicSashWindow is first shown, it will contain one child
105 view, a viewport for that child, and a pair of scrollbars to allow the
106 user to navigate the child view area. Next to each scrollbar is a small
107 tab. By clicking on either tab and dragging to the appropriate spot, a
108 user can split the view area into two smaller views separated by a
109 draggable sash. Later, when the user wishes to reunify the two subviews,
110 the user simply drags the sash to the side of the window.
111 wxDynamicSashWindow will automatically reparent the appropriate child
112 view back up the window hierarchy, and the wxDynamicSashWindow will have
113 only one child view once again.
115 As an application developer, you will simply create a wxDynamicSashWindow
116 using either the Create() function or the more complex constructor
117 provided below, and then create a view window whose parent is the
118 wxDynamicSashWindow. The child should respond to
119 wxDynamicSashSplitEvents -- perhaps with an OnSplit() event handler -- by
120 constructing a new view window whose parent is also the
121 wxDynamicSashWindow. That's it! Now your users can dynamically split
122 and reunify the view you provided.
124 If you wish to handle the scrollbar events for your view, rather than
125 allowing wxDynamicSashWindow to do it for you, things are a bit more
126 complex. (You might want to handle scrollbar events yourself, if,
127 for instance, you wish to scroll a subwindow of the view you add to
128 your wxDynamicSashWindow object, rather than scrolling the whole view.)
129 In this case, you will need to construct your wxDynamicSashWindow without
130 the wxDS_MANAGE_SCROLLBARS style and you will need to use the
131 GetHScrollBar() and GetVScrollBar() methods to retrieve the scrollbar
132 controls and call SetEventHanler() on them to redirect the scrolling
133 events whenever your window is reparented by wxDyanmicSashWindow.
134 You will need to set the scrollbars' event handler at three times:
136 * When your view is created
137 * When your view receives a wxDynamicSashSplitEvent
138 * When your view receives a wxDynamicSashUnifyEvent
140 See the dynsash_switch sample application for an example which does this.
144 MustHaveApp(wxDynamicSashWindow);
146 class wxDynamicSashWindow : public wxWindow {
148 %pythonAppend wxDynamicSashWindow "self._setOORInfo(self)"
149 %pythonAppend wxDynamicSashWindow() ""
151 wxDynamicSashWindow(wxWindow *parent, wxWindowID id=-1,
152 const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
153 long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER,
154 const wxString& name = wxPyDynamicSashNameStr);
155 %RenameCtor(PreDynamicSashWindow, wxDynamicSashWindow());
157 bool Create(wxWindow *parent, wxWindowID id=-1,
158 const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
159 long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER,
160 const wxString& name = wxPyDynamicSashNameStr);
162 wxScrollBar *GetHScrollBar(const wxWindow *child) const;
163 wxScrollBar *GetVScrollBar(const wxWindow *child) const;
169 EVT_DYNAMIC_SASH_SPLIT = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_SPLIT, 1 )
170 EVT_DYNAMIC_SASH_UNIFY = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_UNIFY, 1 )
173 //---------------------------------------------------------------------------
174 //---------------------------------------------------------------------------
182 // This class provides a composite control that lets the
183 // user easily enter list of strings
184 MustHaveApp(wxEditableListBox);
185 class wxEditableListBox : public wxPanel
188 %pythonAppend wxEditableListBox "self._setOORInfo(self)"
189 %pythonAppend wxEditableListBox() ""
191 wxEditableListBox(wxWindow *parent, wxWindowID id=-1,
192 const wxString& label = wxPyEmptyString,
193 const wxPoint& pos = wxDefaultPosition,
194 const wxSize& size = wxDefaultSize,
195 long style = wxEL_ALLOW_NEW | wxEL_ALLOW_EDIT | wxEL_ALLOW_DELETE,
196 const wxString& name = wxPyEditableListBoxNameStr);
199 void SetStrings(const wxArrayString& strings);
201 //void GetStrings(wxArrayString& strings);
203 PyObject* GetStrings() {
204 wxArrayString strings;
205 self->GetStrings(strings);
206 return wxArrayString2PyList_helper(strings);
210 wxPyListCtrl* GetListCtrl();
211 wxBitmapButton* GetDelButton();
212 wxBitmapButton* GetNewButton();
213 wxBitmapButton* GetUpButton();
214 wxBitmapButton* GetDownButton();
215 wxBitmapButton* GetEditButton();
220 //---------------------------------------------------------------------------
224 * wxRemotelyScrolledTreeCtrl
226 * This tree control disables its vertical scrollbar and catches scroll
227 * events passed by a scrolled window higher in the hierarchy.
228 * It also updates the scrolled window vertical scrollbar as appropriate.
232 typedef wxTreeCtrl wxPyTreeCtrl;
235 MustHaveApp(wxRemotelyScrolledTreeCtrl);
237 class wxRemotelyScrolledTreeCtrl: public wxPyTreeCtrl
240 %pythonAppend wxRemotelyScrolledTreeCtrl "self._setOORInfo(self)"
241 %pythonAppend wxRemotelyScrolledTreeCtrl() ""
243 wxRemotelyScrolledTreeCtrl(wxWindow* parent, wxWindowID id,
244 const wxPoint& pos = wxDefaultPosition,
245 const wxSize& size = wxDefaultSize,
246 long style = wxTR_HAS_BUTTONS);
249 void HideVScrollbar();
251 // Adjust the containing wxScrolledWindow's scrollbars appropriately
252 void AdjustRemoteScrollbars();
254 // Find the scrolled window that contains this control
255 wxScrolledWindow* GetScrolledWindow() const;
257 // Scroll to the given line (in scroll units where each unit is
258 // the height of an item)
259 void ScrollToLine(int posHoriz, int posVert);
261 // The companion window is one which will get notified when certain
262 // events happen such as node expansion
263 void SetCompanionWindow(wxWindow* companion);
264 wxWindow* GetCompanionWindow() const;
270 * wxTreeCompanionWindow
272 * A window displaying values associated with tree control items.
276 class wxPyTreeCompanionWindow: public wxTreeCompanionWindow
279 wxPyTreeCompanionWindow(wxWindow* parent, wxWindowID id = -1,
280 const wxPoint& pos = wxDefaultPosition,
281 const wxSize& size = wxDefaultSize,
283 : wxTreeCompanionWindow(parent, id, pos, size, style) {}
286 virtual void DrawItem(wxDC& dc, wxTreeItemId id, const wxRect& rect) {
288 wxPyBlock_t blocked = wxPyBeginBlockThreads();
289 if ((found = wxPyCBH_findCallback(m_myInst, "DrawItem"))) {
290 PyObject* dcobj = wxPyMake_wxObject(&dc,false);
291 PyObject* idobj = wxPyConstructObject((void*)&id, wxT("wxTreeItemId"), false);
292 PyObject* recobj= wxPyConstructObject((void*)&rect, wxT("wxRect"), false);
293 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOO)", dcobj, idobj, recobj));
298 wxPyEndBlockThreads(blocked);
300 wxTreeCompanionWindow::DrawItem(dc, id, rect);
308 MustHaveApp(wxPyTreeCompanionWindow);
310 %rename(TreeCompanionWindow) wxPyTreeCompanionWindow;
311 class wxPyTreeCompanionWindow: public wxWindow
314 %pythonAppend wxPyTreeCompanionWindow "self._setOORInfo(self);self._setCallbackInfo(self, TreeCompanionWindow)"
315 %pythonAppend wxPyTreeCompanionWindow() ""
317 wxPyTreeCompanionWindow(wxWindow* parent, wxWindowID id = -1,
318 const wxPoint& pos = wxDefaultPosition,
319 const wxSize& size = wxDefaultSize,
321 void _setCallbackInfo(PyObject* self, PyObject* _class);
323 wxRemotelyScrolledTreeCtrl* GetTreeCtrl() const;
324 void SetTreeCtrl(wxRemotelyScrolledTreeCtrl* treeCtrl);
330 * wxThinSplitterWindow
332 * Implements a splitter with a less obvious sash
333 * than the usual one.
336 MustHaveApp(wxThinSplitterWindow);
338 class wxThinSplitterWindow: public wxSplitterWindow
341 %pythonAppend wxThinSplitterWindow "self._setOORInfo(self)"
342 %pythonAppend wxThinSplitterWindow() ""
344 wxThinSplitterWindow(wxWindow* parent, wxWindowID id = -1,
345 const wxPoint& pos = wxDefaultPosition,
346 const wxSize& size = wxDefaultSize,
347 long style = wxSP_3D | wxCLIP_CHILDREN);
353 * wxSplitterScrolledWindow
355 * This scrolled window is aware of the fact that one of its
356 * children is a splitter window. It passes on its scroll events
357 * (after some processing) to both splitter children for them
358 * scroll appropriately.
361 MustHaveApp(wxSplitterScrolledWindow);
363 class wxSplitterScrolledWindow: public wxScrolledWindow
366 %pythonAppend wxSplitterScrolledWindow "self._setOORInfo(self)"
367 %pythonAppend wxSplitterScrolledWindow() ""
369 wxSplitterScrolledWindow(wxWindow* parent, wxWindowID id = -1,
370 const wxPoint& pos = wxDefaultPosition,
371 const wxSize& size = wxDefaultSize,
376 //---------------------------------------------------------------------------
377 //---------------------------------------------------------------------------
392 MustHaveApp(wxLEDNumberCtrl);
394 class wxLEDNumberCtrl : public wxControl
397 %pythonAppend wxLEDNumberCtrl "self._setOORInfo(self)"
398 %pythonAppend wxLEDNumberCtrl() ""
400 wxLEDNumberCtrl(wxWindow *parent, wxWindowID id = -1,
401 const wxPoint& pos = wxDefaultPosition,
402 const wxSize& size = wxDefaultSize,
403 long style = wxLED_ALIGN_LEFT | wxLED_DRAW_FADED);
404 %RenameCtor(PreLEDNumberCtrl, wxLEDNumberCtrl());
406 bool Create(wxWindow *parent, wxWindowID id = -1,
407 const wxPoint& pos = wxDefaultPosition,
408 const wxSize& size = wxDefaultSize,
409 long style = wxLED_ALIGN_LEFT | wxLED_DRAW_FADED);
411 wxLEDValueAlign GetAlignment() const;
412 bool GetDrawFaded() const;
413 const wxString &GetValue() const;
415 void SetAlignment(wxLEDValueAlign Alignment, bool Redraw = true);
416 void SetDrawFaded(bool DrawFaded, bool Redraw = true);
417 void SetValue(const wxString &Value, bool Redraw = true);
423 //----------------------------------------------------------------------------
424 // wxTreeListCtrl - the multicolumn tree control
425 //----------------------------------------------------------------------------
427 enum wxTreeListColumnAlign {
436 wxTREE_HITTEST_ONITEMCOLUMN
441 // flags for FindItem
453 %pythoncode { wx.TR_DONT_ADJUST_MAC = TR_DONT_ADJUST_MAC }
456 class wxTreeListColumnInfo: public wxObject {
458 wxTreeListColumnInfo(const wxString& text = wxPyEmptyString,
462 wxTreeListColumnAlign alignment = wxTL_ALIGN_LEFT);
464 ~wxTreeListColumnInfo();
466 bool GetShown() const;
467 wxTreeListColumnAlign GetAlignment() const;
468 wxString GetText() const;
469 int GetImage() const;
470 int GetSelectedImage() const;
471 size_t GetWidth() const;
473 // TODO: These all actually return wxTreeListColumnInfo&, any problem with doing it for Python too?
474 void SetShown(bool shown);
475 void SetAlignment(wxTreeListColumnAlign alignment);
476 void SetText(const wxString& text);
477 void SetImage(int image);
478 void SetSelectedImage(int image);
479 void SetWidth(size_t with);
485 %{ // C++ version of Python aware control
486 class wxPyTreeListCtrl : public wxTreeListCtrl {
487 DECLARE_ABSTRACT_CLASS(wxPyTreeListCtrl);
489 wxPyTreeListCtrl() : wxTreeListCtrl() {}
490 wxPyTreeListCtrl(wxWindow *parent, wxWindowID id,
494 const wxValidator &validator,
495 const wxString& name) :
496 wxTreeListCtrl(parent, id, pos, size, style, validator, name) {}
498 int OnCompareItems(const wxTreeItemId& item1,
499 const wxTreeItemId& item2) {
502 wxPyBlock_t blocked = wxPyBeginBlockThreads();
503 if ((found = wxPyCBH_findCallback(m_myInst, "OnCompareItems"))) {
504 PyObject *o1 = wxPyConstructObject((void*)&item1, wxT("wxTreeItemId"), 0);
505 PyObject *o2 = wxPyConstructObject((void*)&item2, wxT("wxTreeItemId"), 0);
506 rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OO)",o1,o2));
510 wxPyEndBlockThreads(blocked);
512 rval = wxTreeListCtrl::OnCompareItems(item1, item2);
518 IMPLEMENT_ABSTRACT_CLASS(wxPyTreeListCtrl, wxTreeListCtrl)
527 MustHaveApp(wxPyTreeListCtrl);
529 %rename(TreeListCtrl) wxPyTreeListCtrl;
530 class wxPyTreeListCtrl : public wxControl
533 %pythonAppend wxPyTreeListCtrl "self._setOORInfo(self);self._setCallbackInfo(self, TreeListCtrl)"
534 %pythonAppend wxPyTreeListCtrl() ""
536 wxPyTreeListCtrl(wxWindow *parent, wxWindowID id = -1,
537 const wxPoint& pos = wxDefaultPosition,
538 const wxSize& size = wxDefaultSize,
539 long style = wxTR_DEFAULT_STYLE,
540 const wxValidator &validator = wxDefaultValidator,
541 const wxString& name = wxPyTreeListCtrlNameStr );
542 %RenameCtor(PreTreeListCtrl, wxPyTreeListCtrl());
544 bool Create(wxWindow *parent, wxWindowID id = -1,
545 const wxPoint& pos = wxDefaultPosition,
546 const wxSize& size = wxDefaultSize,
547 long style = wxTR_DEFAULT_STYLE,
548 const wxValidator &validator = wxDefaultValidator,
549 const wxString& name = wxPyTreeListCtrlNameStr );
551 void _setCallbackInfo(PyObject* self, PyObject* _class);
554 // get the total number of items in the control
555 size_t GetCount() const;
557 // indent is the number of pixels the children are indented relative to
558 // the parents position. SetIndent() also redraws the control
560 unsigned int GetIndent() const;
561 void SetIndent(unsigned int indent);
563 // line spacing is the space above and below the text on each line
564 unsigned int GetLineSpacing() const;
565 void SetLineSpacing(unsigned int spacing);
567 // image list: these functions allow to associate an image list with
568 // the control and retrieve it. Note that when assigned with
569 // SetImageList, the control does _not_ delete
570 // the associated image list when it's deleted in order to allow image
571 // lists to be shared between different controls. If you use
572 // AssignImageList, the control _does_ delete the image list.
574 // The normal image list is for the icons which correspond to the
575 // normal tree item state (whether it is selected or not).
576 // Additionally, the application might choose to show a state icon
577 // which corresponds to an app-defined item state (for example,
578 // checked/unchecked) which are taken from the state image list.
579 wxImageList *GetImageList() const;
580 wxImageList *GetStateImageList() const;
581 wxImageList *GetButtonsImageList() const;
583 void SetImageList(wxImageList *imageList);
584 void SetStateImageList(wxImageList *imageList);
585 void SetButtonsImageList(wxImageList *imageList);
587 %disownarg( wxImageList *imageList );
588 void AssignImageList(wxImageList *imageList);
589 void AssignStateImageList(wxImageList *imageList);
590 void AssignButtonsImageList(wxImageList *imageList);
591 %cleardisown( wxImageList *imageList );
595 void AddColumn(const wxString& text);
596 // void AddColumn(const wxString& text,
598 // wxTreeListColumnAlign alignment = wxTL_ALIGN_LEFT);
599 %Rename(AddColumnInfo, void, AddColumn(const wxTreeListColumnInfo& col));
601 // inserts a column before the given one
602 void InsertColumn(size_t before, const wxString& text);
603 %Rename(InsertColumnInfo, void, InsertColumn(size_t before, const wxTreeListColumnInfo& col));
605 // deletes the given column - does not delete the corresponding column
607 void RemoveColumn(size_t column);
609 // returns the number of columns in the ctrl
610 size_t GetColumnCount() const;
612 void SetColumnWidth(size_t column, size_t width);
613 int GetColumnWidth(size_t column) const;
615 // tells which column is the "main" one, i.e. the "threaded" one
616 void SetMainColumn(size_t column);
617 size_t GetMainColumn() const;
619 void SetColumnText(size_t column, const wxString& text);
620 wxString GetColumnText(size_t column) const;
622 void SetColumn(size_t column, const wxTreeListColumnInfo& info);
623 wxTreeListColumnInfo& GetColumn(size_t column);
625 // other column-related methods
626 void SetColumnAlignment(size_t column, wxTreeListColumnAlign align);
627 wxTreeListColumnAlign GetColumnAlignment(size_t column) const;
629 void SetColumnImage(size_t column, int image);
630 int GetColumnImage(size_t column) const;
632 void ShowColumn(size_t column, bool shown);
633 bool IsColumnShown(size_t column) const;
636 // retrieves item's label of the given column (main column by default)
637 wxString GetItemText(const wxTreeItemId& item, int column = -1) {
638 if (column < 0) column = self->GetMainColumn();
639 return self->GetItemText(item, column);
642 // get one of the images associated with the item (normal by default)
643 int GetItemImage(const wxTreeItemId& item, int column = -1,
644 wxTreeItemIcon which = wxTreeItemIcon_Normal) {
645 if (column < 0) column = self->GetMainColumn();
646 return self->GetItemImage(item, column, which);
649 // set item's label (main column by default)
650 void SetItemText(const wxTreeItemId& item, const wxString& text, int column = -1) {
651 if (column < 0) column = self->GetMainColumn();
652 self->SetItemText(item, column, text);
655 // set one of the images associated with the item (normal by default)
656 // the which parameter is ignored for all columns but the main one
657 void SetItemImage(const wxTreeItemId& item, int image, int column = -1,
658 wxTreeItemIcon which = wxTreeItemIcon_Normal) {
659 if (column < 0) column = self->GetMainColumn();
660 self->SetItemImage(item, column, image, which);
664 // [Get|Set]ItemData substitutes. Automatically create wxPyTreeItemData
666 wxPyTreeItemData* GetItemData(const wxTreeItemId& item) {
667 wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
669 data = new wxPyTreeItemData();
670 data->SetId(item); // set the id
671 self->SetItemData(item, data);
676 %disownarg( wxPyTreeItemData* data );
677 void SetItemData(const wxTreeItemId& item, wxPyTreeItemData* data) {
678 data->SetId(item); // set the id
679 self->SetItemData(item, data);
681 %cleardisown(wxPyTreeItemData* data );
683 // [Get|Set]ItemPyData are short-cuts. Also made somewhat crash-proof by
684 // automatically creating data classes.
685 PyObject* GetItemPyData(const wxTreeItemId& item) {
686 wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
688 data = new wxPyTreeItemData();
689 data->SetId(item); // set the id
690 self->SetItemData(item, data);
692 return data->GetData();
695 void SetItemPyData(const wxTreeItemId& item, PyObject* obj) {
696 wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
698 data = new wxPyTreeItemData(obj);
699 data->SetId(item); // set the id
700 self->SetItemData(item, data);
705 %pythoncode { GetPyData = GetItemPyData }
706 %pythoncode { SetPyData = SetItemPyData }
709 // force appearance of [+] button near the item. This is useful to
710 // allow the user to expand the items which don't have any children now
711 // - but instead add them only when needed, thus minimizing memory
712 // usage and loading time.
713 void SetItemHasChildren(const wxTreeItemId& item, bool has = true);
715 // the item will be shown in bold
716 void SetItemBold(const wxTreeItemId& item, bool bold = true);
718 // set the item's text colour
719 void SetItemTextColour(const wxTreeItemId& item, const wxColour& colour);
721 // set the item's background colour
722 void SetItemBackgroundColour(const wxTreeItemId& item,
723 const wxColour& colour);
725 // set the item's font (should be of the same height for all items)
726 void SetItemFont(const wxTreeItemId& item, const wxFont& font);
729 bool GetItemBold(const wxTreeItemId& item) const;
730 wxColour GetItemTextColour(const wxTreeItemId& item) const;
731 wxColour GetItemBackgroundColour(const wxTreeItemId& item) const;
732 wxFont GetItemFont(const wxTreeItemId& item) const;
734 // is the item visible (it might be outside the view or not expanded)?
735 bool IsVisible(const wxTreeItemId& item) const;
737 // does the item has any children?
738 bool ItemHasChildren(const wxTreeItemId& item) const;
740 // is the item expanded (only makes sense if HasChildren())?
741 bool IsExpanded(const wxTreeItemId& item) const;
743 // is this item currently selected (the same as has focus)?
744 bool IsSelected(const wxTreeItemId& item) const;
746 // is item text in bold font?
747 bool IsBold(const wxTreeItemId& item) const;
749 // if 'recursively' is False, only immediate children count, otherwise
750 // the returned number is the number of all items in this branch
751 size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = true);
754 // wxTreeItemId.IsOk() will return False if there is no such item
756 // get the root tree item
757 wxTreeItemId GetRootItem() const;
759 // get the item currently selected (may return NULL if no selection)
760 wxTreeItemId GetSelection() const;
762 // get the items currently selected, return the number of such item
763 //size_t GetSelections(wxArrayTreeItemIds&) const;
765 PyObject* GetSelections() {
766 wxPyBlock_t blocked = wxPyBeginBlockThreads();
767 PyObject* rval = PyList_New(0);
768 wxArrayTreeItemIds array;
770 num = self->GetSelections(array);
771 for (x=0; x < num; x++) {
772 wxTreeItemId *tii = new wxTreeItemId(array.Item(x));
773 PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), true);
774 PyList_Append(rval, item);
777 wxPyEndBlockThreads(blocked);
783 // get the parent of this item (may return NULL if root)
784 wxTreeItemId GetItemParent(const wxTreeItemId& item) const;
786 // for this enumeration function you must pass in a "cookie" parameter
787 // which is opaque for the application but is necessary for the library
788 // to make these functions reentrant (i.e. allow more than one
789 // enumeration on one and the same object simultaneously). Of course,
790 // the "cookie" passed to GetFirstChild() and GetNextChild() should be
794 // NOTE: These are a copy of the same methods in _treectrl.i, be sure to
795 // update both at the same time. (Or find a good way to refactor!)
797 // Get the first child of this item. Returns a wxTreeItemId and an
798 // opaque "cookie" value that should be passed to GetNextChild in
799 // order to continue the search.
800 PyObject* GetFirstChild(const wxTreeItemId& item) {
802 wxTreeItemId* ritem = new wxTreeItemId(self->GetFirstChild(item, cookie));
803 wxPyBlock_t blocked = wxPyBeginBlockThreads();
804 PyObject* tup = PyTuple_New(2);
805 PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), true));
806 PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void")));
807 wxPyEndBlockThreads(blocked);
812 // Get the next child of this item. The cookie parameter is the 2nd
813 // value returned from GetFirstChild or the previous GetNextChild.
814 // Returns a wxTreeItemId and an opaque "cookie" value that should be
815 // passed to GetNextChild in order to continue the search.
816 PyObject* GetNextChild(const wxTreeItemId& item, void* cookie) {
817 wxTreeItemId* ritem = new wxTreeItemId(self->GetNextChild(item, cookie));
818 wxPyBlock_t blocked = wxPyBeginBlockThreads();
819 PyObject* tup = PyTuple_New(2);
820 PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), true));
821 PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void")));
822 wxPyEndBlockThreads(blocked);
827 // TODO: GetPrevChild
831 // get the last child of this item - this method doesn't use cookies
832 wxTreeItemId GetLastChild(const wxTreeItemId& item) const;
834 // get the next sibling of this item
835 wxTreeItemId GetNextSibling(const wxTreeItemId& item) const;
837 // get the previous sibling
838 wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const;
840 // get first visible item
841 wxTreeItemId GetFirstVisibleItem() const;
843 // get the next visible item: item must be visible itself!
844 // see IsVisible() and wxTreeCtrl::GetFirstVisibleItem()
845 wxTreeItemId GetNextVisible(const wxTreeItemId& item) const;
847 // get the previous visible item: item must be visible itself!
848 wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const;
850 // Only for internal use right now, but should probably be public
851 wxTreeItemId GetNext(const wxTreeItemId& item) const;
854 %disownarg( wxPyTreeItemData* data );
856 // add the root node to the tree
857 wxTreeItemId AddRoot(const wxString& text,
858 int image = -1, int selectedImage = -1,
859 wxPyTreeItemData *data = NULL);
861 // insert a new item in as the first child of the parent
862 wxTreeItemId PrependItem(const wxTreeItemId& parent,
863 const wxString& text,
864 int image = -1, int selectedImage = -1,
865 wxPyTreeItemData *data = NULL);
867 // insert a new item after a given one
868 wxTreeItemId InsertItem(const wxTreeItemId& parent,
869 const wxTreeItemId& idPrevious,
870 const wxString& text,
871 int image = -1, int selectedImage = -1,
872 wxPyTreeItemData *data = NULL);
874 // insert a new item before the one with the given index
875 %Rename(InsertItemBefore,
876 wxTreeItemId, InsertItem(const wxTreeItemId& parent,
878 const wxString& text,
879 int image = -1, int selectedImage = -1,
880 wxPyTreeItemData *data = NULL));
882 // insert a new item in as the last child of the parent
883 wxTreeItemId AppendItem(const wxTreeItemId& parent,
884 const wxString& text,
885 int image = -1, int selectedImage = -1,
886 wxPyTreeItemData *data = NULL);
888 %cleardisown(wxPyTreeItemData* data );
890 // delete this item and associated data if any
891 void Delete(const wxTreeItemId& item);
893 // delete all children (but don't delete the item itself)
894 // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
895 void DeleteChildren(const wxTreeItemId& item);
897 // delete all items from the tree
898 // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
899 void DeleteAllItems();
902 void Expand(const wxTreeItemId& item);
904 // expand this item and all subitems recursively
905 void ExpandAll(const wxTreeItemId& item);
907 // collapse the item without removing its children
908 void Collapse(const wxTreeItemId& item);
910 // collapse the item and remove all children
911 void CollapseAndReset(const wxTreeItemId& item);
913 // toggles the current state
914 void Toggle(const wxTreeItemId& item);
916 // remove the selection from currently selected item (if any)
921 void SelectItem(const wxTreeItemId& item, bool unselect_others=true,
922 bool extended_select=false);
924 void SelectAll(bool extended_select=false);
926 // make sure this item is visible (expanding the parent item and/or
927 // scrolling to this item if necessary)
928 void EnsureVisible(const wxTreeItemId& item);
930 // scroll to this item (but don't expand its parent)
931 void ScrollTo(const wxTreeItemId& item);
933 // Returns wxTreeItemId, flags, and column
934 wxTreeItemId HitTest(const wxPoint& point, int& OUTPUT, int& OUTPUT);
937 // get the bounding rectangle of the item (or of its label only)
938 PyObject* GetBoundingRect(const wxTreeItemId& item, bool textOnly = false) {
940 if (self->GetBoundingRect(item, rect, textOnly)) {
941 wxPyBlock_t blocked = wxPyBeginBlockThreads();
942 wxRect* r = new wxRect(rect);
943 PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), 1);
944 wxPyEndBlockThreads(blocked);
954 // Start editing the item label: this (temporarily) replaces the item
955 // with a one line edit control. The item will be selected if it hadn't
957 void EditLabel( const wxTreeItemId& item );
958 void Edit( const wxTreeItemId& item );
960 // sort the children of this item using OnCompareItems
961 void SortChildren(const wxTreeItemId& item);
964 wxTreeItemId FindItem (const wxTreeItemId& item, const wxString& str, int flags = 0);
966 wxWindow* GetHeaderWindow() const;
967 wxScrolledWindow* GetMainWindow() const;
971 //----------------------------------------------------------------------
981 MustHaveApp(wxStaticPicture);
983 class wxStaticPicture : public wxControl
986 %pythonAppend wxStaticPicture "self._setOORInfo(self)"
987 %pythonAppend wxStaticPicture() ""
989 wxStaticPicture( wxWindow* parent, wxWindowID id=-1,
990 const wxBitmap& label=wxNullBitmap,
991 const wxPoint& pos = wxDefaultPosition,
992 const wxSize& size = wxDefaultSize,
994 const wxString& name = wxPyStaticPictureNameStr );
996 %RenameCtor(PreStaticPicture, wxStaticPicture());
998 bool Create( wxWindow* parent, wxWindowID id=-1,
999 const wxBitmap& label=wxNullBitmap,
1000 const wxPoint& pos = wxDefaultPosition,
1001 const wxSize& size = wxDefaultSize,
1003 const wxString& name = wxPyStaticPictureNameStr );
1005 void SetBitmap( const wxBitmap& bmp );
1006 wxBitmap GetBitmap() const;
1007 void SetIcon( const wxIcon& icon );
1008 wxIcon GetIcon() const;
1010 void SetAlignment( int align );
1011 int GetAlignment() const;
1013 void SetScale( int scale );
1014 int GetScale() const;
1016 void SetCustomScale( float sx, float sy );
1017 void GetCustomScale( float* OUTPUT, float* OUTPUT ) const;
1022 //----------------------------------------------------------------------
1023 //----------------------------------------------------------------------
1027 wxPyPtrTypeMap_Add("wxTreeCompanionWindow", "wxPyTreeCompanionWindow");
1028 wxPyPtrTypeMap_Add("wxTreeListCtrl", "wxPyTreeListCtrl");
1032 %pragma(python) include="_gizmoextras.py";
1034 //----------------------------------------------------------------------
1035 //----------------------------------------------------------------------