]> git.saurik.com Git - wxWidgets.git/blame - utils/wxPython/src/controls2.i
Added ogl to the module list
[wxWidgets.git] / utils / 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
RD
16#include "helpers.h"
17#include <wx/listctrl.h>
18#include <wx/treectrl.h>
7bf85405
RD
19%}
20
21//----------------------------------------------------------------------
22
23%include typemaps.i
24%include my_typemaps.i
25
26// Import some definitions of other classes, etc.
27%import _defs.i
28%import misc.i
29%import windows.i
30%import gdi.i
31%import events.i
32%import controls.i
33
b8b8dda7 34%pragma(python) code = "import wx"
9c039d08 35
7bf85405
RD
36//----------------------------------------------------------------------
37
38%{
39extern wxValidator wxPyDefaultValidator;
40%}
41
42//----------------------------------------------------------------------
43
af309447
RD
44enum {
45 wxLIST_MASK_TEXT,
46 wxLIST_MASK_IMAGE,
47 wxLIST_MASK_DATA,
48 wxLIST_MASK_WIDTH,
49 wxLIST_MASK_FORMAT,
bb0054cd 50 wxLIST_MASK_STATE,
af309447
RD
51 wxLIST_STATE_DONTCARE,
52 wxLIST_STATE_DROPHILITED,
53 wxLIST_STATE_FOCUSED,
54 wxLIST_STATE_SELECTED,
55 wxLIST_STATE_CUT,
56 wxLIST_HITTEST_ABOVE,
57 wxLIST_HITTEST_BELOW,
58 wxLIST_HITTEST_NOWHERE,
59 wxLIST_HITTEST_ONITEMICON,
60 wxLIST_HITTEST_ONITEMLABEL,
61 wxLIST_HITTEST_ONITEMRIGHT,
62 wxLIST_HITTEST_ONITEMSTATEICON,
63 wxLIST_HITTEST_TOLEFT,
64 wxLIST_HITTEST_TORIGHT,
65 wxLIST_HITTEST_ONITEM,
66 wxLIST_NEXT_ABOVE,
67 wxLIST_NEXT_ALL,
68 wxLIST_NEXT_BELOW,
69 wxLIST_NEXT_LEFT,
70 wxLIST_NEXT_RIGHT,
71 wxLIST_ALIGN_DEFAULT,
72 wxLIST_ALIGN_LEFT,
73 wxLIST_ALIGN_TOP,
74 wxLIST_ALIGN_SNAP_TO_GRID,
75 wxLIST_FORMAT_LEFT,
76 wxLIST_FORMAT_RIGHT,
77 wxLIST_FORMAT_CENTRE,
78 wxLIST_FORMAT_CENTER,
79 wxLIST_AUTOSIZE,
80 wxLIST_AUTOSIZE_USEHEADER,
81 wxLIST_RECT_BOUNDS,
82 wxLIST_RECT_ICON,
83 wxLIST_RECT_LABEL,
84 wxLIST_FIND_UP,
85 wxLIST_FIND_DOWN,
86 wxLIST_FIND_LEFT,
87 wxLIST_FIND_RIGHT,
88};
89
90
7bf85405
RD
91class wxListItem {
92public:
93 long m_mask; // Indicates what fields are valid
94 long m_itemId; // The zero-based item position
95 int m_col; // Zero-based column, if in report mode
96 long m_state; // The state of the item
97 long m_stateMask; // Which flags of m_state are valid (uses same flags)
98 wxString m_text; // The label/header text
99 int m_image; // The zero-based index into an image list
100 long m_data; // App-defined data
101// wxColour *m_colour; // only wxGLC, not supported by Windows ;->
102
103 // For columns only
104 int m_format; // left, right, centre
105 int m_width; // width of column
106
107 wxListItem();
108 ~wxListItem();
109};
110
111class wxListEvent: public wxCommandEvent {
112public:
113 int m_code;
114 long m_itemIndex;
115 long m_oldItemIndex;
116 int m_col;
117 bool m_cancelled;
118 wxPoint m_pointDrag;
119 wxListItem m_item;
120};
121
122
123
124
125class wxListCtrl : public wxControl {
126public:
127 wxListCtrl(wxWindow* parent, wxWindowID id,
128 const wxPoint& pos = wxPyDefaultPosition,
129 const wxSize& size = wxPyDefaultSize,
130 long style = wxLC_ICON,
131 const wxValidator& validator = wxPyDefaultValidator,
132 char* name = "listCtrl");
133
b8b8dda7 134 %pragma(python) addtomethod = "__init__:wx._StdWindowCallbacks(self)"
9c039d08 135
7bf85405
RD
136 bool Arrange(int flag = wxLIST_ALIGN_DEFAULT);
137 bool DeleteItem(long item);
138 bool DeleteAllItems();
139 bool DeleteColumn(int col);
140 bool DeleteAllColumns(void);
141 void ClearAll(void);
4f22cf8d 142#ifdef __WXMSW__
7bf85405
RD
143 wxTextCtrl* EditLabel(long item);
144 bool EndEditLabel(bool cancel);
4f22cf8d 145 wxTextCtrl* GetEditControl();
8bf5d46e
RD
146#else
147 void EditLabel(long item);
fb5e0af0 148#endif
7bf85405
RD
149 bool EnsureVisible(long item);
150 long FindItem(long start, const wxString& str, bool partial = FALSE);
151 %name(FindItemData)long FindItem(long start, long data);
152 %name(FindItemAtPos)long FindItem(long start, const wxPoint& pt,
153 int direction);
154 bool GetColumn(int col, wxListItem& item);
155 int GetColumnWidth(int col);
156 int GetCountPerPage();
7bf85405
RD
157 wxImageList* GetImageList(int which);
158 long GetItemData(long item);
159
160 %addmethods {
0699c864 161 %new wxListItem* GetItem(long itemId) {
7bf85405 162 wxListItem* info = new wxListItem;
0699c864 163 info->m_itemId = itemId;
7bf85405
RD
164 self->GetItem(*info);
165 return info;
166 }
167 %new wxPoint* GetItemPosition(long item) {
168 wxPoint* pos = new wxPoint;
169 self->GetItemPosition(item, *pos);
170 return pos;
171 }
172 %new wxRect* GetItemRect(long item, int code = wxLIST_RECT_BOUNDS) {
173 wxRect* rect= new wxRect;
174 self->GetItemRect(item, *rect, code);
175 return rect;
176 }
177 }
178
179 int GetItemState(long item, long stateMask);
180 int GetItemCount();
181 int GetItemSpacing(bool isSmall);
182 wxString GetItemText(long item);
183 long GetNextItem(long item,
184 int geometry = wxLIST_NEXT_ALL,
185 int state = wxLIST_STATE_DONTCARE);
186 int GetSelectedItemCount();
fb5e0af0 187#ifdef __WXMSW__
7bf85405 188 wxColour GetTextColour();
4f22cf8d 189 void SetTextColour(const wxColour& col);
fb5e0af0 190#endif
7bf85405
RD
191 long GetTopItem();
192 long HitTest(const wxPoint& point, int& OUTPUT);
0699c864 193 %name(InsertColumnWith)long InsertColumn(long col, wxListItem& info);
7bf85405
RD
194 long InsertColumn(long col, const wxString& heading,
195 int format = wxLIST_FORMAT_LEFT,
196 int width = -1);
197
198 long InsertItem(wxListItem& info);
199 %name(InsertStringItem) long InsertItem(long index, const wxString& label);
200 %name(InsertImageItem) long InsertItem(long index, int imageIndex);
201 %name(InsertImageStringItem)long InsertItem(long index, const wxString& label,
202 int imageIndex);
203
204 bool ScrollList(int dx, int dy);
205 void SetBackgroundColour(const wxColour& col);
206 bool SetColumn(int col, wxListItem& item);
207 bool SetColumnWidth(int col, int width);
208 void SetImageList(wxImageList* imageList, int which);
af309447 209
7bf85405 210 bool SetItem(wxListItem& info);
af309447 211 %name(SetStringItem)long SetItem(long index, int col, const wxString& label,
7bf85405 212 int imageId = -1);
af309447 213
7bf85405
RD
214 bool SetItemData(long item, long data);
215 bool SetItemImage(long item, int image, int selImage);
216 bool SetItemPosition(long item, const wxPoint& pos);
217 bool SetItemState(long item, long state, long stateMask);
218 void SetItemText(long item, const wxString& text);
219 void SetSingleStyle(long style, bool add = TRUE);
7bf85405
RD
220 void SetWindowStyleFlag(long style);
221 // TODO: bool SortItems(wxListCtrlCompare fn, long data);
222};
223
224
225
226//----------------------------------------------------------------------
227
228
d5c9047a
RD
229class wxTreeItemId {
230public:
231 wxTreeItemId();
232 ~wxTreeItemId();
bb0054cd 233 bool IsOk();
d5c9047a 234
d5c9047a
RD
235};
236
237
238
cf694132
RD
239%{
240class wxPyTreeItemData : public wxTreeItemData {
d5c9047a 241public:
cf694132
RD
242 wxPyTreeItemData(PyObject* obj = NULL) {
243 if (obj == NULL)
244 obj = Py_None;
245 Py_INCREF(obj);
246 m_obj = obj;
247 }
d5c9047a 248
cf694132 249 ~wxPyTreeItemData() {
1afc06c2 250 bool doSave = wxPyRestoreThread();
cf694132 251 Py_DECREF(m_obj);
1afc06c2 252 wxPySaveThread(doSave);
cf694132
RD
253 }
254
255 PyObject* GetData() {
256 Py_INCREF(m_obj);
257 return m_obj;
258 }
259
260 void SetData(PyObject* obj) {
261 Py_DECREF(m_obj);
262 m_obj = obj;
263 Py_INCREF(obj);
264 }
265
266 PyObject* m_obj;
d5c9047a 267};
cf694132 268%}
d5c9047a
RD
269
270
271
cf694132
RD
272%name(wxTreeItemData) class wxPyTreeItemData {
273public:
274 wxPyTreeItemData(PyObject* obj = NULL);
275
276 PyObject* GetData();
277 void SetData(PyObject* obj);
278
279 const wxTreeItemId& GetId();
280 void SetId(const wxTreeItemId& id);
281};
282
283
d5c9047a 284
8bf5d46e 285class wxTreeEvent : public wxNotifyEvent {
d5c9047a
RD
286public:
287 wxTreeItemId GetItem();
288 wxTreeItemId GetOldItem();
289 wxPoint GetPoint();
290 int GetCode();
8bf5d46e 291 const wxString& GetLabel();
d5c9047a
RD
292};
293
294
295// These are for the GetFirstChild/GetNextChild methods below
296%typemap(python, in) long& INOUT = long* INOUT;
297%typemap(python, argout) long& INOUT = long* INOUT;
298
299
300class wxTreeCtrl : public wxControl {
301public:
302 wxTreeCtrl(wxWindow *parent, wxWindowID id = -1,
303 const wxPoint& pos = wxPyDefaultPosition,
304 const wxSize& size = wxPyDefaultSize,
305 long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT,
306 const wxValidator& validator = wxPyDefaultValidator,
307 char* name = "wxTreeCtrl");
308
b8b8dda7 309 %pragma(python) addtomethod = "__init__:wx._StdWindowCallbacks(self)"
d5c9047a
RD
310
311 size_t GetCount();
312 unsigned int GetIndent();
313 void SetIndent(unsigned int indent);
314 wxImageList *GetImageList();
315 wxImageList *GetStateImageList();
316 void SetImageList(wxImageList *imageList);
317 void SetStateImageList(wxImageList *imageList);
318
319 wxString GetItemText(const wxTreeItemId& item);
320 int GetItemImage(const wxTreeItemId& item);
321 int GetItemSelectedImage(const wxTreeItemId& item);
d5c9047a
RD
322
323 void SetItemText(const wxTreeItemId& item, const wxString& text);
324 void SetItemImage(const wxTreeItemId& item, int image);
325 void SetItemSelectedImage(const wxTreeItemId& item, int image);
08127323 326 void SetItemHasChildren(const wxTreeItemId& item, bool hasChildren = TRUE);
d5c9047a 327
cf694132
RD
328 %addmethods {
329 // [Get|Set]ItemData substitutes. Automatically create wxPyTreeItemData
330 // if needed.
331 wxPyTreeItemData* GetItemData(const wxTreeItemId& item) {
332 wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
333 if (data == NULL) {
334 data = new wxPyTreeItemData();
335 self->SetItemData(item, data);
336 }
337 return data;
338 }
339
340 void SetItemData(const wxTreeItemId& item, wxPyTreeItemData* data) {
341 self->SetItemData(item, data);
342 }
343
344 // [Get|Set]PyData are short-cuts. Also made somewhat crash-proof by
345 // automatically creating data classes.
346 PyObject* GetPyData(const wxTreeItemId& item) {
347 wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
348 if (data == NULL) {
349 data = new wxPyTreeItemData();
350 self->SetItemData(item, data);
351 }
352 return data->GetData();
353 }
354
355 void SetPyData(const wxTreeItemId& item, PyObject* obj) {
356 wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
357 if (data == NULL) {
358 data = new wxPyTreeItemData(obj);
359 self->SetItemData(item, data);
360 } else
361 data->SetData(obj);
362 }
363 }
364
365
d5c9047a
RD
366 bool IsVisible(const wxTreeItemId& item);
367 bool ItemHasChildren(const wxTreeItemId& item);
368 bool IsExpanded(const wxTreeItemId& item);
369 bool IsSelected(const wxTreeItemId& item);
370
371 wxTreeItemId GetRootItem();
372 wxTreeItemId GetSelection();
373 wxTreeItemId GetParent(const wxTreeItemId& item);
d426c97e
RD
374 //size_t GetSelections(wxArrayTreeItemIds& selection);
375 %addmethods {
376 PyObject* GetSelections() {
377 PyObject* rval = PyList_New(0);
378 wxArrayTreeItemIds array;
379 size_t num, x;
380 num = self->GetSelections(array);
381 for (x=0; x < num; x++) {
382 PyObject* item = wxPyConstructObject((void*)&array.Item(x),
383 "wxTreeItemId");
384 PyList_Append(rval, item);
385 }
386 return rval;
387 }
388 }
389
390
d5c9047a 391
bb0054cd
RD
392 size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE);
393
d5c9047a
RD
394 wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& INOUT);
395 wxTreeItemId GetNextChild(const wxTreeItemId& item, long& INOUT);
396 wxTreeItemId GetNextSibling(const wxTreeItemId& item);
397 wxTreeItemId GetPrevSibling(const wxTreeItemId& item);
398 wxTreeItemId GetFirstVisibleItem();
399 wxTreeItemId GetNextVisible(const wxTreeItemId& item);
400 wxTreeItemId GetPrevVisible(const wxTreeItemId& item);
d426c97e
RD
401 wxTreeItemId GetLastChild(const wxTreeItemId& item);
402
d5c9047a
RD
403
404
405 wxTreeItemId AddRoot(const wxString& text,
406 int image = -1, int selectedImage = -1,
cf694132 407 wxPyTreeItemData *data = NULL);
d5c9047a
RD
408 wxTreeItemId PrependItem(const wxTreeItemId& parent,
409 const wxString& text,
410 int image = -1, int selectedImage = -1,
cf694132 411 wxPyTreeItemData *data = NULL);
d5c9047a
RD
412 wxTreeItemId InsertItem(const wxTreeItemId& parent,
413 const wxTreeItemId& idPrevious,
414 const wxString& text,
415 int image = -1, int selectedImage = -1,
cf694132 416 wxPyTreeItemData *data = NULL);
d5c9047a
RD
417 wxTreeItemId AppendItem(const wxTreeItemId& parent,
418 const wxString& text,
419 int image = -1, int selectedImage = -1,
cf694132 420 wxPyTreeItemData *data = NULL);
d5c9047a
RD
421
422 void Delete(const wxTreeItemId& item);
08127323 423 void DeleteChildren(const wxTreeItemId& item);
d5c9047a
RD
424 void DeleteAllItems();
425
426 void Expand(const wxTreeItemId& item);
427 void Collapse(const wxTreeItemId& item);
428 void CollapseAndReset(const wxTreeItemId& item);
429 void Toggle(const wxTreeItemId& item);
430
431 void Unselect();
8bf5d46e 432 void UnselectAll();
d5c9047a
RD
433 void SelectItem(const wxTreeItemId& item);
434 void EnsureVisible(const wxTreeItemId& item);
435 void ScrollTo(const wxTreeItemId& item);
8bf5d46e 436#ifdef __WXMSW__
d5c9047a 437 wxTextCtrl* EditLabel(const wxTreeItemId& item);
d5c9047a
RD
438 wxTextCtrl* GetEditControl();
439 void EndEditLabel(const wxTreeItemId& item, bool discardChanges = FALSE);
8bf5d46e
RD
440#else
441 void EditLabel(const wxTreeItemId& item);
442#endif
d5c9047a 443
d426c97e 444 void SortChildren(const wxTreeItemId& item);
d5c9047a 445
b8b8dda7
RD
446 void SetItemBold(const wxTreeItemId& item, bool bold = TRUE);
447 bool IsBold(const wxTreeItemId& item) const;
448 wxTreeItemId HitTest(const wxPoint& point);
c127177f 449
d426c97e
RD
450 //bool GetBoundingRect(const wxTreeItemId& item, wxRect& rect, int textOnly = FALSE)
451 %addmethods {
452 PyObject* GetBoundingRect(const wxTreeItemId& item, int textOnly = FALSE) {
453 wxRect rect;
454 if (self->GetBoundingRect(item, rect, textOnly))
455 return wxPyConstructObject((void*)&rect, "wxRect");
456 else {
457 Py_INCREF(Py_None);
458 return Py_None;
459 }
460 }
461 }
462
c127177f
RD
463%pragma(python) addtoclass = "
464 # Redefine a couple methods that SWIG gets a bit confused on...
465 def GetFirstChild(self,arg0,arg1):
466 val1, val2 = controls2c.wxTreeCtrl_GetFirstChild(self.this,arg0.this,arg1)
467 val1 = wxTreeItemIdPtr(val1)
468 val1.thisown = 1
469 return (val1,val2)
470 def GetNextChild(self,arg0,arg1):
bb0054cd 471 val1, val2 = controls2c.wxTreeCtrl_GetNextChild(self.this,arg0.this,arg1)
c127177f
RD
472 val1 = wxTreeItemIdPtr(val1)
473 val1.thisown = 1
474 return (val1,val2)
475"
d5c9047a
RD
476};
477
d5c9047a 478
7bf85405
RD
479//----------------------------------------------------------------------
480
9c039d08 481#ifdef SKIPTHIS
fb5e0af0 482#ifdef __WXMSW__
7bf85405
RD
483class wxTabEvent : public wxCommandEvent {
484public:
485};
486
487
488
489class wxTabCtrl : public wxControl {
490public:
491 wxTabCtrl(wxWindow* parent, wxWindowID id,
492 const wxPoint& pos = wxPyDefaultPosition,
493 const wxSize& size = wxPyDefaultSize,
494 long style = 0,
495 char* name = "tabCtrl");
496
b8b8dda7 497 %pragma(python) addtomethod = "__init__:wx._StdWindowCallbacks(self)"
9c039d08 498
7bf85405
RD
499 bool DeleteAllItems();
500 bool DeleteItem(int item);
501 wxImageList* GetImageList();
502 int GetItemCount();
503 // TODO: void* GetItemData();
504 int GetItemImage(int item);
505
506 %addmethods {
507 %new wxRect* GetItemRect(int item) {
508 wxRect* rect = new wxRect;
509 self->GetItemRect(item, *rect);
510 return rect;
511 }
512 }
513
514 wxString GetItemText(int item);
515 bool GetRowCount();
516 int GetSelection();
517 int HitTest(const wxPoint& pt, long& OUTPUT);
518 void InsertItem(int item, const wxString& text,
519 int imageId = -1, void* clientData = NULL);
520 // TODO: bool SetItemData(int item, void* data);
521 bool SetItemImage(int item, int image);
522 void SetImageList(wxImageList* imageList);
523 void SetItemSize(const wxSize& size);
524 bool SetItemText(int item, const wxString& text);
525 void SetPadding(const wxSize& padding);
526 int SetSelection(int item);
527
528};
529
9c039d08 530#endif
fb5e0af0
RD
531#endif
532
7bf85405
RD
533//----------------------------------------------------------------------
534
535