]> git.saurik.com Git - wxWidgets.git/blame - wxPython/src/controls2.i
correction for Mac OS compilation
[wxWidgets.git] / wxPython / src / controls2.i
CommitLineData
7bf85405
RD
1/////////////////////////////////////////////////////////////////////////////
2// Name: controls2.i
3// Purpose: More control (widget) classes for wxPython
4//
5// Author: Robin Dunn
6//
7// Created: 6/10/98
8// RCS-ID: $Id$
9// Copyright: (c) 1998 by Total Control Software
10// Licence: wxWindows license
11/////////////////////////////////////////////////////////////////////////////
12
03e9bead 13%module controls2
7bf85405 14
03e9bead 15%{
7bf85405 16#include "helpers.h"
2f90df85
RD
17#ifdef __WXMSW__
18#include <windows.h>
19#endif
7bf85405
RD
20#include <wx/listctrl.h>
21#include <wx/treectrl.h>
9416aa89 22#include <wx/imaglist.h>
7bf85405
RD
23%}
24
25//----------------------------------------------------------------------
26
27%include typemaps.i
28%include my_typemaps.i
29
30// Import some definitions of other classes, etc.
31%import _defs.i
32%import misc.i
33%import windows.i
34%import gdi.i
35%import events.i
36%import controls.i
37
b8b8dda7 38%pragma(python) code = "import wx"
9c039d08 39
7bf85405
RD
40//----------------------------------------------------------------------
41
7bf85405 42
af309447
RD
43enum {
44 wxLIST_MASK_TEXT,
45 wxLIST_MASK_IMAGE,
46 wxLIST_MASK_DATA,
47 wxLIST_MASK_WIDTH,
48 wxLIST_MASK_FORMAT,
bb0054cd 49 wxLIST_MASK_STATE,
af309447
RD
50 wxLIST_STATE_DONTCARE,
51 wxLIST_STATE_DROPHILITED,
52 wxLIST_STATE_FOCUSED,
53 wxLIST_STATE_SELECTED,
54 wxLIST_STATE_CUT,
55 wxLIST_HITTEST_ABOVE,
56 wxLIST_HITTEST_BELOW,
57 wxLIST_HITTEST_NOWHERE,
58 wxLIST_HITTEST_ONITEMICON,
59 wxLIST_HITTEST_ONITEMLABEL,
60 wxLIST_HITTEST_ONITEMRIGHT,
61 wxLIST_HITTEST_ONITEMSTATEICON,
62 wxLIST_HITTEST_TOLEFT,
63 wxLIST_HITTEST_TORIGHT,
64 wxLIST_HITTEST_ONITEM,
65 wxLIST_NEXT_ABOVE,
66 wxLIST_NEXT_ALL,
67 wxLIST_NEXT_BELOW,
68 wxLIST_NEXT_LEFT,
69 wxLIST_NEXT_RIGHT,
70 wxLIST_ALIGN_DEFAULT,
71 wxLIST_ALIGN_LEFT,
72 wxLIST_ALIGN_TOP,
73 wxLIST_ALIGN_SNAP_TO_GRID,
af309447
RD
74 wxLIST_AUTOSIZE,
75 wxLIST_AUTOSIZE_USEHEADER,
76 wxLIST_RECT_BOUNDS,
77 wxLIST_RECT_ICON,
78 wxLIST_RECT_LABEL,
79 wxLIST_FIND_UP,
80 wxLIST_FIND_DOWN,
81 wxLIST_FIND_LEFT,
82 wxLIST_FIND_RIGHT,
83};
84
85
f6bcfd97
BP
86enum wxListColumnFormat
87{
88 wxLIST_FORMAT_LEFT,
89 wxLIST_FORMAT_RIGHT,
90 wxLIST_FORMAT_CENTRE,
91 wxLIST_FORMAT_CENTER = wxLIST_FORMAT_CENTRE
92};
93
94
1b62f00d
RD
95enum {
96 /* List control event types */
97 wxEVT_COMMAND_LIST_BEGIN_DRAG,
98 wxEVT_COMMAND_LIST_BEGIN_RDRAG,
99 wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT,
100 wxEVT_COMMAND_LIST_END_LABEL_EDIT,
101 wxEVT_COMMAND_LIST_DELETE_ITEM,
102 wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS,
103 wxEVT_COMMAND_LIST_GET_INFO,
104 wxEVT_COMMAND_LIST_SET_INFO,
105 wxEVT_COMMAND_LIST_ITEM_SELECTED,
106 wxEVT_COMMAND_LIST_ITEM_DESELECTED,
107 wxEVT_COMMAND_LIST_KEY_DOWN,
108 wxEVT_COMMAND_LIST_INSERT_ITEM,
109 wxEVT_COMMAND_LIST_COL_CLICK,
110 wxEVT_COMMAND_LIST_ITEM_ACTIVATED,
111 wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK,
112 wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK,
113};
114
0adbc166
RD
115enum {
116 /* Style flags */
117 wxLC_ICON,
118 wxLC_SMALL_ICON,
119 wxLC_LIST,
120 wxLC_REPORT,
121 wxLC_ALIGN_TOP,
122 wxLC_ALIGN_LEFT,
123 wxLC_AUTOARRANGE,
124 wxLC_USER_TEXT,
125 wxLC_EDIT_LABELS,
126 wxLC_NO_HEADER,
127 wxLC_NO_SORT_HEADER,
128 wxLC_SINGLE_SEL,
129 wxLC_SORT_ASCENDING,
130 wxLC_SORT_DESCENDING,
131 wxLC_MASK_TYPE,
132 wxLC_MASK_ALIGN,
133 wxLC_MASK_SORT,
134 wxLC_HRULES,
135 wxLC_VRULES,
136 wxLC_VIRTUAL,
137};
138
1b62f00d
RD
139
140
f6bcfd97
BP
141class wxListItemAttr
142{
143public:
144 // ctors
145 wxListItemAttr();
146 //wxListItemAttr(const wxColour& colText,
147 // const wxColour& colBack,
148 // const wxFont& font)
149 // : m_colText(colText), m_colBack(colBack), m_font(font) { }
150
151 // setters
152 void SetTextColour(const wxColour& colText);
153 void SetBackgroundColour(const wxColour& colBack);
154 void SetFont(const wxFont& font);
155
156 // accessors
157 bool HasTextColour();
158 bool HasBackgroundColour();
159 bool HasFont();
160
161 const wxColour& GetTextColour();
162 const wxColour& GetBackgroundColour();
163 const wxFont& GetFont();
164};
165
166
9416aa89 167class wxListItem : public wxObject {
7bf85405 168public:
f6bcfd97
BP
169 wxListItem();
170 ~wxListItem();
171
172 // resetting
173 void Clear();
174 void ClearAttributes();
175
176 // setters
177 void SetMask(long mask);
178 void SetId(long id);
179 void SetColumn(int col);
180 void SetState(long state);
181 void SetStateMask(long stateMask);
182 void SetText(const wxString& text);
183 void SetImage(int image);
184 void SetData(long data);
185
186 void SetWidth(int width);
187 void SetAlign(wxListColumnFormat align);
188
189 void SetTextColour(const wxColour& colText);
190 void SetBackgroundColour(const wxColour& colBack);
191 void SetFont(const wxFont& font);
192
193 // accessors
194 long GetMask();
195 long GetId();
196 int GetColumn();
197 long GetState();
198 const wxString& GetText();
199 int GetImage();
200 long GetData();
201
202 int GetWidth();
203 wxListColumnFormat GetAlign();
204
205 wxListItemAttr *GetAttributes();
206 bool HasAttributes();
207
208 wxColour GetTextColour() const;
209 wxColour GetBackgroundColour() const;
210 wxFont GetFont() const;
211
212 // these members are public for compatibility
7bf85405
RD
213 long m_mask; // Indicates what fields are valid
214 long m_itemId; // The zero-based item position
215 int m_col; // Zero-based column, if in report mode
216 long m_state; // The state of the item
f6bcfd97 217 long m_stateMask;// Which flags of m_state are valid (uses same flags)
7bf85405
RD
218 wxString m_text; // The label/header text
219 int m_image; // The zero-based index into an image list
220 long m_data; // App-defined data
7bf85405
RD
221
222 // For columns only
223 int m_format; // left, right, centre
224 int m_width; // width of column
225
7bf85405
RD
226};
227
f6bcfd97 228
c368d904 229class wxListEvent: public wxNotifyEvent {
7bf85405
RD
230public:
231 int m_code;
232 long m_itemIndex;
233 long m_oldItemIndex;
234 int m_col;
235 bool m_cancelled;
236 wxPoint m_pointDrag;
237 wxListItem m_item;
7bf85405 238
f6bcfd97
BP
239 int GetCode();
240 long GetIndex();
241 long GetOldIndex();
242 long GetOldItem();
243 int GetColumn();
244 bool Cancelled();
245 wxPoint GetPoint();
246 const wxString& GetLabel();
247 const wxString& GetText();
248 int GetImage();
249 long GetData();
250 long GetMask();
251 const wxListItem& GetItem();
252};
7bf85405
RD
253
254
255
256class wxListCtrl : public wxControl {
257public:
258 wxListCtrl(wxWindow* parent, wxWindowID id,
b68dc582
RD
259 const wxPoint& pos = wxDefaultPosition,
260 const wxSize& size = wxDefaultSize,
7bf85405 261 long style = wxLC_ICON,
b68dc582 262 const wxValidator& validator = wxDefaultValidator,
7bf85405
RD
263 char* name = "listCtrl");
264
f6bcfd97 265 %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)"
9c039d08 266
7bf85405 267 bool Arrange(int flag = wxLIST_ALIGN_DEFAULT);
1b62f00d 268 void AssignImageList(wxImageList* imageList, int which);
9416aa89 269 %pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0"
7bf85405
RD
270 bool DeleteItem(long item);
271 bool DeleteAllItems();
272 bool DeleteColumn(int col);
273 bool DeleteAllColumns(void);
274 void ClearAll(void);
4f22cf8d 275#ifdef __WXMSW__
7bf85405
RD
276 wxTextCtrl* EditLabel(long item);
277 bool EndEditLabel(bool cancel);
4f22cf8d 278 wxTextCtrl* GetEditControl();
8bf5d46e
RD
279#else
280 void EditLabel(long item);
fb5e0af0 281#endif
7bf85405
RD
282 bool EnsureVisible(long item);
283 long FindItem(long start, const wxString& str, bool partial = FALSE);
284 %name(FindItemData)long FindItem(long start, long data);
285 %name(FindItemAtPos)long FindItem(long start, const wxPoint& pt,
286 int direction);
287 bool GetColumn(int col, wxListItem& item);
288 int GetColumnWidth(int col);
289 int GetCountPerPage();
7bf85405
RD
290 wxImageList* GetImageList(int which);
291 long GetItemData(long item);
292
293 %addmethods {
e166644c 294 %new wxListItem* GetItem(long itemId, int col=0) {
7bf85405 295 wxListItem* info = new wxListItem;
0699c864 296 info->m_itemId = itemId;
e166644c 297 info->m_col = col;
f17fee68 298 info->m_mask = 0xFFFF;
7bf85405
RD
299 self->GetItem(*info);
300 return info;
301 }
302 %new wxPoint* GetItemPosition(long item) {
303 wxPoint* pos = new wxPoint;
304 self->GetItemPosition(item, *pos);
305 return pos;
306 }
307 %new wxRect* GetItemRect(long item, int code = wxLIST_RECT_BOUNDS) {
308 wxRect* rect= new wxRect;
309 self->GetItemRect(item, *rect, code);
310 return rect;
311 }
312 }
313
314 int GetItemState(long item, long stateMask);
315 int GetItemCount();
316 int GetItemSpacing(bool isSmall);
317 wxString GetItemText(long item);
318 long GetNextItem(long item,
319 int geometry = wxLIST_NEXT_ALL,
320 int state = wxLIST_STATE_DONTCARE);
321 int GetSelectedItemCount();
fb5e0af0 322#ifdef __WXMSW__
7bf85405 323 wxColour GetTextColour();
4f22cf8d 324 void SetTextColour(const wxColour& col);
fb5e0af0 325#endif
7bf85405
RD
326 long GetTopItem();
327 long HitTest(const wxPoint& point, int& OUTPUT);
c368d904 328 %name(InsertColumnInfo)long InsertColumn(long col, wxListItem& info);
7bf85405
RD
329 long InsertColumn(long col, const wxString& heading,
330 int format = wxLIST_FORMAT_LEFT,
331 int width = -1);
332
333 long InsertItem(wxListItem& info);
334 %name(InsertStringItem) long InsertItem(long index, const wxString& label);
335 %name(InsertImageItem) long InsertItem(long index, int imageIndex);
336 %name(InsertImageStringItem)long InsertItem(long index, const wxString& label,
337 int imageIndex);
338
339 bool ScrollList(int dx, int dy);
340 void SetBackgroundColour(const wxColour& col);
341 bool SetColumn(int col, wxListItem& item);
342 bool SetColumnWidth(int col, int width);
343 void SetImageList(wxImageList* imageList, int which);
af309447 344
7bf85405 345 bool SetItem(wxListItem& info);
af309447 346 %name(SetStringItem)long SetItem(long index, int col, const wxString& label,
7bf85405 347 int imageId = -1);
af309447 348
7bf85405
RD
349 bool SetItemData(long item, long data);
350 bool SetItemImage(long item, int image, int selImage);
351 bool SetItemPosition(long item, const wxPoint& pos);
352 bool SetItemState(long item, long state, long stateMask);
353 void SetItemText(long item, const wxString& text);
354 void SetSingleStyle(long style, bool add = TRUE);
7bf85405 355 void SetWindowStyleFlag(long style);
dcd38683
RD
356
357 // bool SortItems(wxListCtrlCompare fn, long data);
358 %addmethods {
359 bool SortItems(PyObject* func) {
360 if (!PyCallable_Check(func))
361 return FALSE;
362
f6bcfd97 363 return self->SortItems(wxPyListCtrl_SortItems, (long)func);
dcd38683
RD
364 }
365 }
7bf85405
RD
366};
367
dcd38683 368%{
f6bcfd97 369 int wxCALLBACK wxPyListCtrl_SortItems(long item1, long item2, long funcPtr) {
dcd38683
RD
370 int retval = 0;
371 PyObject* func = (PyObject*)funcPtr;
372 bool doSave = wxPyRestoreThread();
7bf85405 373
dcd38683
RD
374 PyObject* args = Py_BuildValue("(ii)", item1, item2);
375 PyObject* result = PyEval_CallObject(func, args);
376 Py_DECREF(args);
377 if (result) {
378 retval = PyInt_AsLong(result);
379 Py_DECREF(result);
380 }
381
382 wxPySaveThread(doSave);
383 return retval;
384 }
385
386%}
7bf85405
RD
387
388//----------------------------------------------------------------------
389
694759cf
RD
390enum wxTreeItemIcon
391{
392 wxTreeItemIcon_Normal, // not selected, not expanded
393 wxTreeItemIcon_Selected, // selected, not expanded
394 wxTreeItemIcon_Expanded, // not selected, expanded
395 wxTreeItemIcon_SelectedExpanded, // selected, expanded
396 wxTreeItemIcon_Max
397};
398
7bf85405 399
164b735b
RD
400// constants for HitTest
401enum {
402 wxTREE_HITTEST_ABOVE,
403 wxTREE_HITTEST_BELOW,
404 wxTREE_HITTEST_NOWHERE,
405 wxTREE_HITTEST_ONITEMBUTTON,
406 wxTREE_HITTEST_ONITEMICON,
407 wxTREE_HITTEST_ONITEMINDENT,
408 wxTREE_HITTEST_ONITEMLABEL,
409 wxTREE_HITTEST_ONITEMRIGHT,
410 wxTREE_HITTEST_ONITEMSTATEICON,
411 wxTREE_HITTEST_TOLEFT,
412 wxTREE_HITTEST_TORIGHT,
413 wxTREE_HITTEST_ONITEMUPPERPART,
414 wxTREE_HITTEST_ONITEMLOWERPART,
415 wxTREE_HITTEST_ONITEM
416};
417
418
1b62f00d
RD
419enum {
420 /* Tree control event types */
421 wxEVT_COMMAND_TREE_BEGIN_DRAG,
422 wxEVT_COMMAND_TREE_BEGIN_RDRAG,
423 wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT,
424 wxEVT_COMMAND_TREE_END_LABEL_EDIT,
425 wxEVT_COMMAND_TREE_DELETE_ITEM,
426 wxEVT_COMMAND_TREE_GET_INFO,
427 wxEVT_COMMAND_TREE_SET_INFO,
428 wxEVT_COMMAND_TREE_ITEM_EXPANDED,
429 wxEVT_COMMAND_TREE_ITEM_EXPANDING,
430 wxEVT_COMMAND_TREE_ITEM_COLLAPSED,
431 wxEVT_COMMAND_TREE_ITEM_COLLAPSING,
432 wxEVT_COMMAND_TREE_SEL_CHANGED,
433 wxEVT_COMMAND_TREE_SEL_CHANGING,
434 wxEVT_COMMAND_TREE_KEY_DOWN,
435 wxEVT_COMMAND_TREE_ITEM_ACTIVATED,
436 wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK,
437 wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK,
d1679124 438 wxEVT_COMMAND_TREE_END_DRAG,
1b62f00d
RD
439};
440
441
d5c9047a
RD
442class wxTreeItemId {
443public:
444 wxTreeItemId();
445 ~wxTreeItemId();
bb0054cd 446 bool IsOk();
d5c9047a 447
f6bcfd97
BP
448 %addmethods {
449 int __cmp__(wxTreeItemId* other) {
c368d904 450 if (! other) return -1;
f6bcfd97
BP
451 return *self != *other;
452 }
453 }
d5c9047a
RD
454};
455
456
457
cf694132
RD
458%{
459class wxPyTreeItemData : public wxTreeItemData {
d5c9047a 460public:
cf694132 461 wxPyTreeItemData(PyObject* obj = NULL) {
c368d904 462 if (obj == NULL)
cf694132 463 obj = Py_None;
c368d904
RD
464 Py_INCREF(obj);
465 m_obj = obj;
cf694132 466 }
d5c9047a 467
cf694132 468 ~wxPyTreeItemData() {
1afc06c2 469 bool doSave = wxPyRestoreThread();
c368d904 470 Py_DECREF(m_obj);
1afc06c2 471 wxPySaveThread(doSave);
cf694132
RD
472 }
473
474 PyObject* GetData() {
475 Py_INCREF(m_obj);
476 return m_obj;
477 }
478
479 void SetData(PyObject* obj) {
c368d904 480 bool doSave = wxPyRestoreThread();
cf694132 481 Py_DECREF(m_obj);
c368d904 482 wxPySaveThread(doSave);
cf694132
RD
483 m_obj = obj;
484 Py_INCREF(obj);
485 }
486
487 PyObject* m_obj;
d5c9047a 488};
cf694132 489%}
d5c9047a
RD
490
491
492
9416aa89 493%name(wxTreeItemData) class wxPyTreeItemData : public wxObject {
cf694132
RD
494public:
495 wxPyTreeItemData(PyObject* obj = NULL);
496
497 PyObject* GetData();
498 void SetData(PyObject* obj);
499
500 const wxTreeItemId& GetId();
501 void SetId(const wxTreeItemId& id);
502};
503
504
d5c9047a 505
8bf5d46e 506class wxTreeEvent : public wxNotifyEvent {
d5c9047a
RD
507public:
508 wxTreeItemId GetItem();
509 wxTreeItemId GetOldItem();
510 wxPoint GetPoint();
511 int GetCode();
8bf5d46e 512 const wxString& GetLabel();
d5c9047a
RD
513};
514
515
f6bcfd97
BP
516
517%{
518class wxPyTreeCtrl : public wxTreeCtrl {
3b36695d 519 DECLARE_ABSTRACT_CLASS(wxPyTreeCtrl);
f6bcfd97
BP
520public:
521 wxPyTreeCtrl(wxWindow *parent, wxWindowID id,
522 const wxPoint& pos,
523 const wxSize& size,
524 long style,
525 const wxValidator& validator,
526 char* name) :
527 wxTreeCtrl(parent, id, pos, size, style, validator, name) {}
528
f6bcfd97
BP
529 int OnCompareItems(const wxTreeItemId& item1,
530 const wxTreeItemId& item2) {
531 int rval = 0;
532 bool doSave = wxPyRestoreThread();
533 if (m_myInst.findCallback("OnCompareItems"))
534 rval = m_myInst.callCallback(Py_BuildValue(
535 "(OO)",
536 wxPyConstructObject((void*)&item1, "wxTreeItemId"),
537 wxPyConstructObject((void*)&item2, "wxTreeItemId")));
538 else
539 rval = wxTreeCtrl::OnCompareItems(item1, item2);
540 wxPySaveThread(doSave);
541 return rval;
542 }
543 PYPRIVATE;
544};
545
3b36695d
RD
546IMPLEMENT_ABSTRACT_CLASS(wxPyTreeCtrl, wxTreeCtrl);
547
f6bcfd97
BP
548%}
549
d5c9047a
RD
550// These are for the GetFirstChild/GetNextChild methods below
551%typemap(python, in) long& INOUT = long* INOUT;
552%typemap(python, argout) long& INOUT = long* INOUT;
553
554
f6bcfd97 555%name(wxTreeCtrl)class wxPyTreeCtrl : public wxControl {
d5c9047a 556public:
f6bcfd97 557 wxPyTreeCtrl(wxWindow *parent, wxWindowID id = -1,
b68dc582
RD
558 const wxPoint& pos = wxDefaultPosition,
559 const wxSize& size = wxDefaultSize,
d5c9047a 560 long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT,
b68dc582 561 const wxValidator& validator = wxDefaultValidator,
d5c9047a
RD
562 char* name = "wxTreeCtrl");
563
f6bcfd97
BP
564 void _setSelf(PyObject* self, PyObject* _class);
565 %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)"
566 %pragma(python) addtomethod = "__init__:self._setSelf(self, wxTreeCtrl)"
d5c9047a 567
1b62f00d 568 void AssignImageList(wxImageList* imageList);
9416aa89 569 %pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0"
d5c9047a
RD
570 size_t GetCount();
571 unsigned int GetIndent();
572 void SetIndent(unsigned int indent);
573 wxImageList *GetImageList();
574 wxImageList *GetStateImageList();
1b62f00d 575 void SetImageList(wxImageList *imageList);
d5c9047a
RD
576 void SetStateImageList(wxImageList *imageList);
577
b1462dfa
RD
578 unsigned int GetSpacing();
579 void SetSpacing(unsigned int spacing);
580
d5c9047a 581 wxString GetItemText(const wxTreeItemId& item);
694759cf
RD
582 int GetItemImage(const wxTreeItemId& item,
583 wxTreeItemIcon which = wxTreeItemIcon_Normal);
d5c9047a 584 int GetItemSelectedImage(const wxTreeItemId& item);
d5c9047a
RD
585
586 void SetItemText(const wxTreeItemId& item, const wxString& text);
694759cf
RD
587 void SetItemImage(const wxTreeItemId& item, int image,
588 wxTreeItemIcon which = wxTreeItemIcon_Normal);
d5c9047a 589 void SetItemSelectedImage(const wxTreeItemId& item, int image);
08127323 590 void SetItemHasChildren(const wxTreeItemId& item, bool hasChildren = TRUE);
d5c9047a 591
cf694132 592 %addmethods {
c368d904
RD
593 // [Get|Set]ItemData substitutes. Automatically create wxPyTreeItemData
594 // if needed.
cf694132
RD
595 wxPyTreeItemData* GetItemData(const wxTreeItemId& item) {
596 wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
597 if (data == NULL) {
598 data = new wxPyTreeItemData();
f6bcfd97 599 data->SetId(item); // set the id
cf694132
RD
600 self->SetItemData(item, data);
601 }
602 return data;
603 }
604
605 void SetItemData(const wxTreeItemId& item, wxPyTreeItemData* data) {
f6bcfd97
BP
606 data->SetId(item); // set the id
607 self->SetItemData(item, data);
c368d904 608 }
cf694132 609
c368d904
RD
610 // [Get|Set]PyData are short-cuts. Also made somewhat crash-proof by
611 // automatically creating data classes.
612 PyObject* GetPyData(const wxTreeItemId& item) {
cf694132
RD
613 wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
614 if (data == NULL) {
615 data = new wxPyTreeItemData();
f6bcfd97 616 data->SetId(item); // set the id
cf694132
RD
617 self->SetItemData(item, data);
618 }
619 return data->GetData();
c368d904 620 }
cf694132
RD
621
622 void SetPyData(const wxTreeItemId& item, PyObject* obj) {
623 wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
624 if (data == NULL) {
625 data = new wxPyTreeItemData(obj);
f6bcfd97 626 data->SetId(item); // set the id
cf694132
RD
627 self->SetItemData(item, data);
628 } else
629 data->SetData(obj);
c368d904 630 }
cf694132
RD
631 }
632
633
d5c9047a
RD
634 bool IsVisible(const wxTreeItemId& item);
635 bool ItemHasChildren(const wxTreeItemId& item);
636 bool IsExpanded(const wxTreeItemId& item);
637 bool IsSelected(const wxTreeItemId& item);
638
639 wxTreeItemId GetRootItem();
640 wxTreeItemId GetSelection();
eb715945 641 %name(GetItemParent) wxTreeItemId GetParent(const wxTreeItemId& item);
d426c97e
RD
642 //size_t GetSelections(wxArrayTreeItemIds& selection);
643 %addmethods {
644 PyObject* GetSelections() {
26b9cf27 645 bool doSave = wxPyRestoreThread();
d426c97e
RD
646 PyObject* rval = PyList_New(0);
647 wxArrayTreeItemIds array;
648 size_t num, x;
649 num = self->GetSelections(array);
650 for (x=0; x < num; x++) {
c368d904
RD
651 wxTreeItemId *tii = new wxTreeItemId(array.Item(x));
652 PyObject* item = wxPyConstructObject((void*)tii, "wxTreeItemId", TRUE);
d426c97e
RD
653 PyList_Append(rval, item);
654 }
26b9cf27 655 wxPySaveThread(doSave);
d426c97e
RD
656 return rval;
657 }
658 }
659
660
d5c9047a 661
bb0054cd
RD
662 size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE);
663
d5c9047a
RD
664 wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& INOUT);
665 wxTreeItemId GetNextChild(const wxTreeItemId& item, long& INOUT);
666 wxTreeItemId GetNextSibling(const wxTreeItemId& item);
667 wxTreeItemId GetPrevSibling(const wxTreeItemId& item);
668 wxTreeItemId GetFirstVisibleItem();
669 wxTreeItemId GetNextVisible(const wxTreeItemId& item);
670 wxTreeItemId GetPrevVisible(const wxTreeItemId& item);
d426c97e
RD
671 wxTreeItemId GetLastChild(const wxTreeItemId& item);
672
d5c9047a
RD
673
674
675 wxTreeItemId AddRoot(const wxString& text,
676 int image = -1, int selectedImage = -1,
cf694132 677 wxPyTreeItemData *data = NULL);
d5c9047a
RD
678 wxTreeItemId PrependItem(const wxTreeItemId& parent,
679 const wxString& text,
680 int image = -1, int selectedImage = -1,
cf694132 681 wxPyTreeItemData *data = NULL);
d5c9047a
RD
682 wxTreeItemId InsertItem(const wxTreeItemId& parent,
683 const wxTreeItemId& idPrevious,
684 const wxString& text,
685 int image = -1, int selectedImage = -1,
cf694132 686 wxPyTreeItemData *data = NULL);
f6bcfd97
BP
687 %name(InsertItemBefore)
688 wxTreeItemId InsertItem(const wxTreeItemId& parent,
689 size_t before,
690 const wxString& text,
691 int image = -1, int selectedImage = -1,
692 wxTreeItemData *data = NULL);
d5c9047a
RD
693 wxTreeItemId AppendItem(const wxTreeItemId& parent,
694 const wxString& text,
695 int image = -1, int selectedImage = -1,
cf694132 696 wxPyTreeItemData *data = NULL);
d5c9047a
RD
697
698 void Delete(const wxTreeItemId& item);
08127323 699 void DeleteChildren(const wxTreeItemId& item);
d5c9047a
RD
700 void DeleteAllItems();
701
702 void Expand(const wxTreeItemId& item);
703 void Collapse(const wxTreeItemId& item);
704 void CollapseAndReset(const wxTreeItemId& item);
705 void Toggle(const wxTreeItemId& item);
706
707 void Unselect();
8bf5d46e 708 void UnselectAll();
d5c9047a
RD
709 void SelectItem(const wxTreeItemId& item);
710 void EnsureVisible(const wxTreeItemId& item);
711 void ScrollTo(const wxTreeItemId& item);
8bf5d46e 712#ifdef __WXMSW__
d5c9047a 713 wxTextCtrl* EditLabel(const wxTreeItemId& item);
d5c9047a 714 wxTextCtrl* GetEditControl();
b1462dfa 715 void EndEditLabel(const wxTreeItemId& item, int discardChanges = FALSE);
8bf5d46e
RD
716#else
717 void EditLabel(const wxTreeItemId& item);
718#endif
d5c9047a 719
d426c97e 720 void SortChildren(const wxTreeItemId& item);
d5c9047a 721
b1462dfa 722 void SetItemBold(const wxTreeItemId& item, int bold = TRUE);
b8b8dda7 723 bool IsBold(const wxTreeItemId& item) const;
164b735b 724 wxTreeItemId HitTest(const wxPoint& point, int& OUTPUT);
c127177f 725
f6bcfd97
BP
726
727
b7e72427
RD
728 void SetItemTextColour(const wxTreeItemId& item, const wxColour& col);
729 void SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& col);
730 void SetItemFont(const wxTreeItemId& item, const wxFont& font);
731
4120ef2b 732#ifdef __WXMSW__
b1462dfa
RD
733 void SetItemDropHighlight(const wxTreeItemId& item, int highlight = TRUE);
734
d426c97e
RD
735 //bool GetBoundingRect(const wxTreeItemId& item, wxRect& rect, int textOnly = FALSE)
736 %addmethods {
737 PyObject* GetBoundingRect(const wxTreeItemId& item, int textOnly = FALSE) {
738 wxRect rect;
164b735b
RD
739 if (self->GetBoundingRect(item, rect, textOnly)) {
740 bool doSave = wxPyRestoreThread();
741 wxRect* r = new wxRect(rect);
742 PyObject* val = wxPyConstructObject((void*)r, "wxRect");
743 wxPySaveThread(doSave);
744 return val;
745 }
d426c97e
RD
746 else {
747 Py_INCREF(Py_None);
748 return Py_None;
749 }
750 }
751 }
761a9d2b 752#endif
d426c97e 753
c127177f 754%pragma(python) addtoclass = "
f6bcfd97
BP
755 # Redefine some methods that SWIG gets a bit confused on...
756 def GetFirstChild(self, *_args, **_kwargs):
757 val1,val2 = apply(controls2c.wxTreeCtrl_GetFirstChild,(self,) + _args, _kwargs)
758 val1 = wxTreeItemIdPtr(val1)
759 val1.thisown = 1
760 return (val1,val2)
761 def GetNextChild(self, *_args, **_kwargs):
762 val1,val2 = apply(controls2c.wxTreeCtrl_GetNextChild,(self,) + _args, _kwargs)
c127177f
RD
763 val1 = wxTreeItemIdPtr(val1)
764 val1.thisown = 1
765 return (val1,val2)
f6bcfd97
BP
766 def HitTest(self, *_args, **_kwargs):
767 val1, val2 = apply(controls2c.wxTreeCtrl_HitTest,(self,) + _args, _kwargs)
c127177f
RD
768 val1 = wxTreeItemIdPtr(val1)
769 val1.thisown = 1
770 return (val1,val2)
771"
d5c9047a
RD
772};
773
d5c9047a 774
7bf85405
RD
775//----------------------------------------------------------------------
776
9c039d08 777#ifdef SKIPTHIS
fb5e0af0 778#ifdef __WXMSW__
1b62f00d
RD
779
780
781enum {
782 /* tab control event types */
783 wxEVT_COMMAND_TAB_SEL_CHANGED,
784 wxEVT_COMMAND_TAB_SEL_CHANGING,
785};
786
787
7bf85405
RD
788class wxTabEvent : public wxCommandEvent {
789public:
790};
791
792
793
794class wxTabCtrl : public wxControl {
795public:
796 wxTabCtrl(wxWindow* parent, wxWindowID id,
b68dc582
RD
797 const wxPoint& pos = wxDefaultPosition,
798 const wxSize& size = wxDefaultSize,
7bf85405
RD
799 long style = 0,
800 char* name = "tabCtrl");
801
f6bcfd97 802 %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)"
9c039d08 803
7bf85405
RD
804 bool DeleteAllItems();
805 bool DeleteItem(int item);
806 wxImageList* GetImageList();
807 int GetItemCount();
808 // TODO: void* GetItemData();
809 int GetItemImage(int item);
810
811 %addmethods {
812 %new wxRect* GetItemRect(int item) {
813 wxRect* rect = new wxRect;
814 self->GetItemRect(item, *rect);
815 return rect;
816 }
817 }
818
819 wxString GetItemText(int item);
820 bool GetRowCount();
821 int GetSelection();
822 int HitTest(const wxPoint& pt, long& OUTPUT);
823 void InsertItem(int item, const wxString& text,
824 int imageId = -1, void* clientData = NULL);
825 // TODO: bool SetItemData(int item, void* data);
826 bool SetItemImage(int item, int image);
827 void SetImageList(wxImageList* imageList);
828 void SetItemSize(const wxSize& size);
829 bool SetItemText(int item, const wxString& text);
830 void SetPadding(const wxSize& padding);
831 int SetSelection(int item);
832
833};
834
9c039d08 835#endif
fb5e0af0
RD
836#endif
837
7bf85405
RD
838//----------------------------------------------------------------------
839
9416aa89
RD
840%init %{
841 wxPyPtrTypeMap_Add("wxTreeItemData", "wxPyTreeItemData");
842 wxPyPtrTypeMap_Add("wxTreeCtrl", "wxPyTreeCtrl");
843%}
844
845//----------------------------------------------------------------------
846
7bf85405 847