]> git.saurik.com Git - wxWidgets.git/blame - wxPython/src/windows3.i
use univ/setup.h when building wxUniv
[wxWidgets.git] / wxPython / src / windows3.i
CommitLineData
08127323
RD
1/////////////////////////////////////////////////////////////////////////////
2// Name: windows3.i
3// Purpose: SWIG definitions of MORE window classes
4//
5// Author: Robin Dunn
6//
7// Created: 22-Dec-1998
8// RCS-ID: $Id$
9// Copyright: (c) 1998 by Total Control Software
10// Licence: wxWindows license
11/////////////////////////////////////////////////////////////////////////////
12
13%module windows3
14
15%{
16#include "helpers.h"
17#include <wx/sashwin.h>
18#include <wx/laywin.h>
0122b7e3 19#include <wx/popupwin.h>
4416b508 20#include <wx/tipwin.h>
08127323
RD
21%}
22
23//----------------------------------------------------------------------
24
25%include typemaps.i
26%include my_typemaps.i
27
28// Import some definitions of other classes, etc.
29%import _defs.i
30%import misc.i
31%import gdi.i
32%import windows.i
33%import windows2.i
34%import mdi.i
35%import events.i
36
37%pragma(python) code = "import wx"
38
137b5242
RD
39//----------------------------------------------------------------------
40
41%{
42 // Put some wx default wxChar* values into wxStrings.
43 static const wxChar* wxSashNameStr = wxT("sashWindow");
44 DECLARE_DEF_STRING(SashNameStr);
45 static const wxChar* wxSashLayoutNameStr = wxT("layoutWindow");
46 DECLARE_DEF_STRING(SashLayoutNameStr);
47%}
08127323
RD
48//---------------------------------------------------------------------------
49
50enum wxSashEdgePosition {
51 wxSASH_TOP = 0,
52 wxSASH_RIGHT,
53 wxSASH_BOTTOM,
54 wxSASH_LEFT,
55 wxSASH_NONE = 100
56};
57
58enum {
59 wxEVT_SASH_DRAGGED,
60 wxSW_3D,
1b62f00d
RD
61 wxSW_3DSASH,
62 wxSW_3DBORDER,
63 wxSW_BORDER
08127323
RD
64};
65
66enum wxSashDragStatus
67{
68 wxSASH_STATUS_OK,
69 wxSASH_STATUS_OUT_OF_RANGE
70};
71
72
73class wxSashEvent : public wxCommandEvent {
74public:
09f3d4e6
RD
75 wxSashEvent(int id = 0, wxSashEdgePosition edge = wxSASH_NONE);
76
08127323
RD
77 void SetEdge(wxSashEdgePosition edge);
78 wxSashEdgePosition GetEdge();
79 void SetDragRect(const wxRect& rect);
80 wxRect GetDragRect();
81 void SetDragStatus(wxSashDragStatus status);
82 wxSashDragStatus GetDragStatus();
83};
84
85
86
87class wxSashWindow: public wxWindow {
88public:
89 wxSashWindow(wxWindow* parent, wxWindowID id,
b68dc582
RD
90 const wxPoint& pos = wxDefaultPosition,
91 const wxSize& size = wxDefaultSize,
08127323 92 long style = wxCLIP_CHILDREN | wxSW_3D,
137b5242 93 const wxString& name = wxPySashNameStr);
09f3d4e6 94 %name(wxPreSashWindow)wxSashWindow();
08127323 95
09f3d4e6
RD
96 bool Create(wxWindow* parent, wxWindowID id,
97 const wxPoint& pos = wxDefaultPosition,
98 const wxSize& size = wxDefaultSize,
99 long style = wxCLIP_CHILDREN | wxSW_3D,
137b5242 100 const wxString& name = wxPySashNameStr);
08127323 101
0122b7e3 102 %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
17c0e08c 103 %pragma(python) addtomethod = "wxPreSashWindow:val._setOORInfo(val)"
0122b7e3 104
08127323
RD
105 bool GetSashVisible(wxSashEdgePosition edge);
106 int GetDefaultBorderSize();
107 int GetEdgeMargin(wxSashEdgePosition edge);
108 int GetExtraBorderSize();
109 int GetMaximumSizeX();
110 int GetMaximumSizeY();
111 int GetMinimumSizeX();
112 int GetMinimumSizeY();
113 bool HasBorder(wxSashEdgePosition edge);
114 void SetDefaultBorderSize(int width);
115 void SetExtraBorderSize(int width);
116 void SetMaximumSizeX(int min);
117 void SetMaximumSizeY(int min);
118 void SetMinimumSizeX(int min);
119 void SetMinimumSizeY(int min);
120 void SetSashVisible(wxSashEdgePosition edge, bool visible);
121 void SetSashBorder(wxSashEdgePosition edge, bool hasBorder);
122
123};
124
125
126//---------------------------------------------------------------------------
127
128enum wxLayoutOrientation {
129 wxLAYOUT_HORIZONTAL,
130 wxLAYOUT_VERTICAL
131};
132
133enum wxLayoutAlignment {
134 wxLAYOUT_NONE,
135 wxLAYOUT_TOP,
136 wxLAYOUT_LEFT,
137 wxLAYOUT_RIGHT,
138 wxLAYOUT_BOTTOM,
139};
140
141
142enum {
143 wxEVT_QUERY_LAYOUT_INFO,
144 wxEVT_CALCULATE_LAYOUT,
145};
146
147
148class wxQueryLayoutInfoEvent: public wxEvent {
149public:
09f3d4e6 150 wxQueryLayoutInfoEvent(wxWindowID id = 0);
08127323
RD
151
152 void SetRequestedLength(int length);
153 int GetRequestedLength();
154 void SetFlags(int flags);
155 int GetFlags();
156 void SetSize(const wxSize& size);
157 wxSize GetSize();
158 void SetOrientation(wxLayoutOrientation orient);
159 wxLayoutOrientation GetOrientation();
160 void SetAlignment(wxLayoutAlignment align);
161 wxLayoutAlignment GetAlignment();
162};
163
164
165
166class wxCalculateLayoutEvent: public wxEvent {
167public:
09f3d4e6
RD
168 wxCalculateLayoutEvent(wxWindowID id = 0);
169
08127323
RD
170 void SetFlags(int flags);
171 int GetFlags();
172 void SetRect(const wxRect& rect);
173 wxRect GetRect();
174};
175
176
177class wxSashLayoutWindow: public wxSashWindow {
178public:
179 wxSashLayoutWindow(wxWindow* parent, wxWindowID id,
b68dc582
RD
180 const wxPoint& pos = wxDefaultPosition,
181 const wxSize& size = wxDefaultSize,
08127323 182 long style = wxCLIP_CHILDREN | wxSW_3D,
137b5242 183 const wxString& name = wxPySashLayoutNameStr);
09f3d4e6 184 %name(wxPreSashLayoutWindow)wxSashLayoutWindow();
08127323 185
09f3d4e6
RD
186 bool Create(wxWindow* parent, wxWindowID id,
187 const wxPoint& pos = wxDefaultPosition,
188 const wxSize& size = wxDefaultSize,
189 long style = wxCLIP_CHILDREN | wxSW_3D,
137b5242 190 const wxString& name = wxPySashLayoutNameStr);
08127323 191
0122b7e3 192 %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
17c0e08c 193 %pragma(python) addtomethod = "wxPreSashLayoutWindow:val._setOORInfo(val)"
0122b7e3 194
08127323
RD
195 wxLayoutAlignment GetAlignment();
196 wxLayoutOrientation GetOrientation();
197 void SetAlignment(wxLayoutAlignment alignment);
198 void SetDefaultSize(const wxSize& size);
199 void SetOrientation(wxLayoutOrientation orientation);
200};
201
202//---------------------------------------------------------------------------
203
9416aa89 204class wxLayoutAlgorithm : public wxObject {
08127323
RD
205public:
206 wxLayoutAlgorithm();
207 ~wxLayoutAlgorithm();
208
209 bool LayoutMDIFrame(wxMDIParentFrame* frame, wxRect* rect = NULL);
210 bool LayoutFrame(wxFrame* frame, wxWindow* mainWindow = NULL);
cf694132 211 bool LayoutWindow(wxWindow* parent, wxWindow* mainWindow = NULL);
08127323
RD
212};
213
214
215//---------------------------------------------------------------------------
e6056257 216#ifndef __WXMAC__
2abc0a0f 217
0122b7e3
RD
218// wxPopupWindow: a special kind of top level window used for popup menus,
219// combobox popups and such.
220class wxPopupWindow : public wxWindow {
221public:
222 wxPopupWindow(wxWindow *parent, int flags = wxBORDER_NONE);
223 %name(wxPrePopupWindow)wxPopupWindow();
224
225 %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
17c0e08c 226 %pragma(python) addtomethod = "wxPrePopupWindow:val._setOORInfo(val)"
0122b7e3
RD
227
228 bool Create(wxWindow *parent, int flags = wxBORDER_NONE);
229
98624b49 230 // the point must be given in screen coordinates!
0122b7e3
RD
231 void Position(const wxPoint& ptOrigin,
232 const wxSize& size);
233};
234
235
236%{
237class wxPyPopupTransientWindow : public wxPopupTransientWindow
238{
239public:
240 wxPyPopupTransientWindow() : wxPopupTransientWindow() {}
241 wxPyPopupTransientWindow(wxWindow* parent, int style = wxBORDER_NONE)
242 : wxPopupTransientWindow(parent, style) {}
243
244 DEC_PYCALLBACK_BOOL_ME(ProcessLeftDown);
a57d56d6 245 DEC_PYCALLBACK__(OnDismiss);
79f1d86c 246 DEC_PYCALLBACK_BOOL_(CanDismiss);
0122b7e3
RD
247 PYPRIVATE;
248};
249
250IMP_PYCALLBACK_BOOL_ME(wxPyPopupTransientWindow, wxPopupTransientWindow, ProcessLeftDown);
a57d56d6 251IMP_PYCALLBACK__(wxPyPopupTransientWindow, wxPopupTransientWindow, OnDismiss);
79f1d86c 252IMP_PYCALLBACK_BOOL_(wxPyPopupTransientWindow, wxPopupTransientWindow, CanDismiss);
0122b7e3
RD
253%}
254
255
256
257// wxPopupTransientWindow: a wxPopupWindow which disappears automatically
258// when the user clicks mouse outside it or if it loses focus in any other way
259%name(wxPopupTransientWindow) class wxPyPopupTransientWindow : public wxPopupWindow
260{
261public:
262 wxPyPopupTransientWindow(wxWindow *parent, int style = wxBORDER_NONE);
263 %name(wxPrePopupTransientWindow)wxPyPopupTransientWindow();
264
265 void _setCallbackInfo(PyObject* self, PyObject* _class);
266 %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxPopupTransientWindow)"
267
268 %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
17c0e08c 269 %pragma(python) addtomethod = "wxPrePopupTransientWindow:val._setOORInfo(val)"
0122b7e3
RD
270
271 // popup the window (this will show it too) and keep focus at winFocus
272 // (or itself if it's NULL), dismiss the popup if we lose focus
273 virtual void Popup(wxWindow *focus = NULL);
274
275 // hide the window
276 virtual void Dismiss();
277};
278
279//---------------------------------------------------------------------------
280
4416b508
RD
281class wxTipWindow : public wxPyPopupTransientWindow
282{
283public:
ce914f73
RD
284 %addmethods {
285 wxTipWindow(wxWindow *parent,
286 const wxString* text,
287 wxCoord maxLength = 100,
288 wxRect* rectBound = NULL) {
289 wxString tmp = *text;
290 return new wxTipWindow(parent, tmp, maxLength, NULL, rectBound);
291 }
292 }
4416b508
RD
293
294 %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
ce914f73
RD
295
296 // If rectBound is not NULL, the window will disappear automatically when
297 // the mouse leave the specified rect: note that rectBound should be in the
298 // screen coordinates!
299 void SetBoundingRect(const wxRect& rectBound);
300
301 // Hide and destroy the window
302 void Close();
4416b508
RD
303};
304
1fded56b
RD
305#endif // ! __WXMAC__
306
307//---------------------------------------------------------------------------
308
309#ifdef __WXMAC__
310
311%import frames.i
312
313class wxTipWindow : public wxFrame
314{
315public:
316 %addmethods {
317 wxTipWindow(wxWindow *parent,
318 const wxString* text,
319 wxCoord maxLength = 100,
320 wxRect* rectBound = NULL) {
321 wxString tmp = *text;
322 return new wxTipWindow(parent, tmp, maxLength, NULL, rectBound);
323 }
324 }
325
326 %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
327
328 // If rectBound is not NULL, the window will disappear automatically when
329 // the mouse leave the specified rect: note that rectBound should be in the
330 // screen coordinates!
331 void SetBoundingRect(const wxRect& rectBound);
332
333 // Hide and destroy the window
334 void Close();
335};
336
337#endif // __WXMAC__
4416b508
RD
338
339//---------------------------------------------------------------------------
3628e088
RD
340// wxVScrolledWindow
341
342%{
343#include <wx/vscroll.h>
344DECLARE_DEF_STRING(PanelNameStr);
345%}
346
347
348// First, the C++ version
349%{
350class wxPyVScrolledWindow : public wxVScrolledWindow
351{
352 DECLARE_ABSTRACT_CLASS(wxPyVScrolledWindow);
353public:
354 wxPyVScrolledWindow() : wxVScrolledWindow() {}
355
356 wxPyVScrolledWindow(wxWindow *parent,
357 wxWindowID id = wxID_ANY,
358 const wxPoint& pos = wxDefaultPosition,
359 const wxSize& size = wxDefaultSize,
360 long style = 0,
361 const wxString& name = wxPyPanelNameStr)
362 : wxVScrolledWindow(parent, id, pos, size, style, name)
363 {}
364
365 // Overridable virtuals
366
367 // this function must be overridden in the derived class and it should
368 // return the height of the given line in pixels
369 DEC_PYCALLBACK_COORD_SIZET_constpure(OnGetLineHeight);
370
371
372 // this function doesn't have to be overridden but it may be useful to do
373 // it if calculating the lines heights is a relatively expensive operation
374 // as it gives the user code a possibility to calculate several of them at
375 // once
376 //
377 // OnGetLinesHint() is normally called just before OnGetLineHeight() but you
378 // shouldn't rely on the latter being called for all lines in the interval
379 // specified here. It is also possible that OnGetLineHeight() will be
380 // called for the lines outside of this interval, so this is really just a
381 // hint, not a promise.
382 //
383 // finally note that lineMin is inclusive, while lineMax is exclusive, as
384 // usual
385 DEC_PYCALLBACK_VOID_SIZETSIZET_const(OnGetLinesHint);
386
387
388 // when the number of lines changes, we try to estimate the total height
389 // of all lines which is a rather expensive operation in terms of lines
390 // access, so if the user code may estimate the average height
391 // better/faster than we do, it should override this function to implement
392 // its own logic
393 //
394 // this function should return the best guess for the total height it may
395 // make
396 DEC_PYCALLBACK_COORD_const(EstimateTotalHeight);
397
398
399 // Also expose some other interesting protected methods
400
401
402 // find the index of the line we need to show at the top of the window such
403 // that the last (fully or partially) visible line is the given one
404 size_t FindFirstFromBottom(size_t lineLast, bool fullyVisible = false)
405 { return wxVScrolledWindow::FindFirstFromBottom(lineLast, fullyVisible); }
406
407 // get the total height of the lines between lineMin (inclusive) and
408 // lineMax (exclusive)
409 wxCoord GetLinesHeight(size_t lineMin, size_t lineMax) const
410 { return wxVScrolledWindow::GetLinesHeight(lineMin, lineMax); }
411
412
413 PYPRIVATE;
414};
415
416IMPLEMENT_ABSTRACT_CLASS(wxPyVScrolledWindow, wxVScrolledWindow);
417
418IMP_PYCALLBACK_COORD_SIZET_constpure(wxPyVScrolledWindow, wxVScrolledWindow, OnGetLineHeight);
419IMP_PYCALLBACK_VOID_SIZETSIZET_const(wxPyVScrolledWindow, wxVScrolledWindow, OnGetLinesHint);
420IMP_PYCALLBACK_COORD_const (wxPyVScrolledWindow, wxVScrolledWindow, EstimateTotalHeight);
421%}
422
423
424
425// Now define this class for SWIG
426
427/*
428 In the name of this class, "V" may stand for "variable" because it can be
429 used for scrolling lines of variable heights; "virtual" because it is not
430 necessary to know the heights of all lines in advance -- only those which
431 are shown on the screen need to be measured; or, even, "vertical" because
432 this class only supports scrolling in one direction currently (this could
433 and probably will change in the future however).
434
435 In any case, this is a generalization of the wxScrolledWindow class which
436 can be only used when all lines have the same height. It lacks some other
437 wxScrolledWindow features however, notably it currently lacks support for
438 horizontal scrolling; it can't scroll another window nor only a rectangle
439 of the window and not its entire client area.
440 */
441
442%name(wxVScrolledWindow) class wxPyVScrolledWindow : public wxPanel
443{
444public:
445
446 wxPyVScrolledWindow(wxWindow *parent,
447 wxWindowID id = wxID_ANY,
448 const wxPoint& pos = wxDefaultPosition,
449 const wxSize& size = wxDefaultSize,
450 long style = 0,
451 const wxString& name = wxPyPanelNameStr);
452
453 %name(wxPreVScrolledWindow)wxPyVScrolledWindow();
454
455 void _setCallbackInfo(PyObject* self, PyObject* _class);
456 %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxVScrolledWindow)"
457 %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
458 %pragma(python) addtomethod = "wxPreVScrolledWindow:val._setOORInfo(val)"
459
460 bool Create(wxWindow *parent,
461 wxWindowID id = wxID_ANY,
462 const wxPoint& pos = wxDefaultPosition,
463 const wxSize& size = wxDefaultSize,
464 long style = 0,
465 const wxString& name = wxPyPanelNameStr);
466
467
468 // set the number of lines the window contains: the derived class must
469 // provide the heights for all lines with indices up to the one given here
470 // in its OnGetLineHeight()
471 void SetLineCount(size_t count);
472
473 // scroll to the specified line: it will become the first visible line in
474 // the window
475 //
476 // return true if we scrolled the window, false if nothing was done
477 bool ScrollToLine(size_t line);
478
479 // scroll by the specified number of lines/pages
480 virtual bool ScrollLines(int lines);
481 virtual bool ScrollPages(int pages);
482
483 // redraw the specified line
484 void RefreshLine(size_t line);
485
486 // redraw all lines in the specified range (inclusive)
487 void RefreshLines(size_t from, size_t to);
488
489 // return the item at the specified (in physical coordinates) position or
490 // wxNOT_FOUND if none, i.e. if it is below the last item
491 %name(HitTestXT) int HitTest(wxCoord x, wxCoord y) const;
492 int HitTest(const wxPoint& pt) const;
493
494 // recalculate all our parameters and redisplay all lines
495 virtual void RefreshAll();
496
497
498 // get the number of lines this window contains (previously set by
499 // SetLineCount())
500 size_t GetLineCount() const;
501
502 // get the first currently visible line
503 size_t GetFirstVisibleLine() const;
504
505 // get the last currently visible line
506 size_t GetLastVisibleLine() const;
507
508 // is this line currently visible?
509 bool IsVisible(size_t line) const;
510
511};
512
513//---------------------------------------------------------------------------
514// wxVListBox
515
516%{
517#include <wx/vlbox.h>
518DECLARE_DEF_STRING(VListBoxNameStr);
519%}
520
521
522// First, the C++ version
523%{
524class wxPyVListBox : public wxVListBox
525{
526 DECLARE_ABSTRACT_CLASS(wxPyVListBox);
527public:
528 wxPyVListBox() : wxVListBox() {}
529
530 wxPyVListBox(wxWindow *parent,
531 wxWindowID id = wxID_ANY,
532 const wxPoint& pos = wxDefaultPosition,
533 const wxSize& size = wxDefaultSize,
534 long style = 0,
535 const wxString& name = wxPyVListBoxNameStr)
536 : wxVListBox(parent, id, pos, size, style, name)
537 {}
538
539 // Overridable virtuals
540
541 // the derived class must implement this function to actually draw the item
542 // with the given index on the provided DC
543 // virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const = 0;
544 DEC_PYCALLBACK__DCRECTSIZET_constpure(OnDrawItem);
545
546
547 // the derived class must implement this method to return the height of the
548 // specified item
549 // virtual wxCoord OnMeasureItem(size_t n) const = 0;
550 DEC_PYCALLBACK_COORD_SIZET_constpure(OnMeasureItem);
551
552
553 // this method may be used to draw separators between the lines; note that
554 // the rectangle may be modified, typically to deflate it a bit before
555 // passing to OnDrawItem()
556 //
557 // the base class version doesn't do anything
558 // virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const;
559 DEC_PYCALLBACK__DCRECTSIZET_constpure(OnDrawSeparator);
560
561
562 // this method is used to draw the items background and, maybe, a border
563 // around it
564 //
565 // the base class version implements a reasonable default behaviour which
566 // consists in drawing the selected item with the standard background
567 // colour and drawing a border around the item if it is either selected or
568 // current
569 // virtual void OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const;
570 DEC_PYCALLBACK__DCRECTSIZET_const(OnDrawBackground);
571
572
573 PYPRIVATE;
574};
575
576IMPLEMENT_ABSTRACT_CLASS(wxPyVListBox, wxVListBox);
577
578IMP_PYCALLBACK__DCRECTSIZET_constpure(wxPyVListBox, wxVListBox, OnDrawItem);
579IMP_PYCALLBACK_COORD_SIZET_constpure (wxPyVListBox, wxVListBox, OnMeasureItem);
580IMP_PYCALLBACK__DCRECTSIZET_constpure(wxPyVListBox, wxVListBox, OnDrawSeparator);
581IMP_PYCALLBACK__DCRECTSIZET_const (wxPyVListBox, wxVListBox, OnDrawBackground);
582
583%}
584
585
586
587// Now define this class for SWIG
588
589/*
590 This class has two main differences from a regular listbox: it can have an
591 arbitrarily huge number of items because it doesn't store them itself but
592 uses OnDrawItem() callback to draw them and its items can have variable
593 height as determined by OnMeasureItem().
594
595 It emits the same events as wxListBox and the same event macros may be used
596 with it.
597 */
598%name(wxVListBox) class wxPyVListBox : public wxPyVScrolledWindow
599{
600public:
601
602 wxPyVListBox(wxWindow *parent,
603 wxWindowID id = wxID_ANY,
604 const wxPoint& pos = wxDefaultPosition,
605 const wxSize& size = wxDefaultSize,
606 long style = 0,
607 const wxString& name = wxPyVListBoxNameStr);
608
609 %name(wxPreVListBox) wxPyVListBox();
610
611 void _setCallbackInfo(PyObject* self, PyObject* _class);
612 %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxVListBox)"
613 %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
614 %pragma(python) addtomethod = "wxPreVListBox:val._setOORInfo(val)"
615
616
617 bool Create(wxWindow *parent,
618 wxWindowID id = wxID_ANY,
619 const wxPoint& pos = wxDefaultPosition,
620 const wxSize& size = wxDefaultSize,
621 long style = 0,
622 const wxString& name = wxPyVListBoxNameStr);
623
624 // get the number of items in the control
625 size_t GetItemCount() const;
626
627 // does this control use multiple selection?
628 bool HasMultipleSelection() const;
629
630 // get the currently selected item or wxNOT_FOUND if there is no selection
631 //
632 // this method is only valid for the single selection listboxes
633 int GetSelection() const;
634
635 // is this item the current one?
636 bool IsCurrent(size_t item) const;
637
638 // is this item selected?
639 bool IsSelected(size_t item) const;
640
641 // get the number of the selected items (maybe 0)
642 //
643 // this method is valid for both single and multi selection listboxes
644 size_t GetSelectedCount() const;
645
646 // get the first selected item, returns wxNOT_FOUND if none
647 //
648 // cookie is an opaque parameter which should be passed to
649 // GetNextSelected() later
650 //
651 // this method is only valid for the multi selection listboxes
652 int GetFirstSelected(unsigned long& cookie) const;
653
654 // get next selection item, return wxNOT_FOUND if no more
655 //
656 // cookie must be the same parameter that was passed to GetFirstSelected()
657 // before
658 //
659 // this method is only valid for the multi selection listboxes
660 int GetNextSelected(unsigned long& cookie) const;
661
662 // get the margins around each item
663 wxPoint GetMargins() const;
664
665 // get the background colour of selected cells
666 const wxColour& GetSelectionBackground() const;
667
668
669 // set the number of items to be shown in the control
670 //
671 // this is just a synonym for wxVScrolledWindow::SetLineCount()
672 void SetItemCount(size_t count);
673
674 // delete all items from the control
675 void Clear();
676
677 // set the selection to the specified item, if it is wxNOT_FOUND the
678 // selection is unset
679 //
680 // this function is only valid for the single selection listboxes
681 void SetSelection(int selection);
682
683 // selects or deselects the specified item which must be valid (i.e. not
684 // equal to wxNOT_FOUND)
685 //
686 // return true if the items selection status has changed or false
687 // otherwise
688 //
689 // this function is only valid for the multiple selection listboxes
690 bool Select(size_t item, bool select = true);
691
692 // selects the items in the specified range whose end points may be given
693 // in any order
694 //
695 // return true if any items selection status has changed, false otherwise
696 //
697 // this function is only valid for the single selection listboxes
698 bool SelectRange(size_t from, size_t to);
699
700 // toggle the selection of the specified item (must be valid)
701 //
702 // this function is only valid for the multiple selection listboxes
703 void Toggle(size_t item);
704
705 // select all items in the listbox
706 //
707 // the return code indicates if any items were affected by this operation
708 // (true) or if nothing has changed (false)
709 bool SelectAll();
710
711 // unselect all items in the listbox
712 //
713 // the return code has the same meaning as for SelectAll()
714 bool DeselectAll();
715
716 // set the margins: horizontal margin is the distance between the window
717 // border and the item contents while vertical margin is half of the
718 // distance between items
719 //
720 // by default both margins are 0
721 void SetMargins(const wxPoint& pt);
722 %name(SetMarginsXY) void SetMargins(wxCoord x, wxCoord y);
723
724 // change the background colour of the selected cells
725 void SetSelectionBackground(const wxColour& col);
726
727};
728
729
730//---------------------------------------------------------------------------
731// wxHtmlListBox
732
733%{
734#include <wx/htmllbox.h>
735%}
736
737// First, the C++ version
738%{
739class wxPyHtmlListBox : public wxHtmlListBox
740{
741 DECLARE_ABSTRACT_CLASS(wxPyHtmlListBox);
742public:
743 wxPyHtmlListBox() : wxHtmlListBox() {}
744
745 wxPyHtmlListBox(wxWindow *parent,
746 wxWindowID id = wxID_ANY,
747 const wxPoint& pos = wxDefaultPosition,
748 const wxSize& size = wxDefaultSize,
749 long style = 0,
750 const wxString& name = wxPyVListBoxNameStr)
751 : wxHtmlListBox(parent, id, pos, size, style, name)
752 {}
753
754 // Overridable virtuals
755
756 // this method must be implemented in the derived class and should return
757 // the body (i.e. without <html>) of the HTML for the given item
758 DEC_PYCALLBACK_STRING_SIZET_pure(OnGetItem);
759
760 // this function may be overridden to decorate HTML returned by OnGetItem()
761 DEC_PYCALLBACK_STRING_SIZET(OnGetItemMarkup);
762
763// TODO:
764// // this method allows to customize the selection appearance: it may be used
765// // to specify the colour of the text which normally has the given colour
766// // colFg when it is inside the selection
767// //
768// // by default, the original colour is not used at all and all text has the
769// // same (default for this system) colour inside selection
770// virtual wxColour GetSelectedTextColour(const wxColour& colFg) const;
771
772// // this is the same as GetSelectedTextColour() but allows to customize the
773// // background colour -- this is even more rarely used as you can change it
774// // globally using SetSelectionBackground()
775// virtual wxColour GetSelectedTextBgColour(const wxColour& colBg) const;
776
777
778 PYPRIVATE;
779};
780
781
782IMPLEMENT_ABSTRACT_CLASS(wxPyHtmlListBox, wxHtmlListBox)
783
784IMP_PYCALLBACK_STRING_SIZET_pure(wxPyHtmlListBox, wxHtmlListBox, OnGetItem);
785IMP_PYCALLBACK_STRING_SIZET (wxPyHtmlListBox, wxHtmlListBox, OnGetItemMarkup);
786
787%}
788
789
790
791// Now define this class for SWIG
792
793
794// wxHtmlListBox is a listbox whose items are wxHtmlCells
795%name(wxHtmlListBox) class wxPyHtmlListBox : public wxPyVListBox
796{
797public:
798
799 // normal constructor which calls Create() internally
800 wxPyHtmlListBox(wxWindow *parent,
801 wxWindowID id = wxID_ANY,
802 const wxPoint& pos = wxDefaultPosition,
803 const wxSize& size = wxDefaultSize,
804 long style = 0,
805 const wxString& name = wxPyVListBoxNameStr);
806
807 %name(wxPreHtmlListBox) wxPyHtmlListBox();
808
809 void _setCallbackInfo(PyObject* self, PyObject* _class);
810 %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxHtmlListBox)"
811 %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
812 %pragma(python) addtomethod = "wxPreHtmlListBox:val._setOORInfo(val)"
813
814 bool Create(wxWindow *parent,
815 wxWindowID id = wxID_ANY,
816 const wxPoint& pos = wxDefaultPosition,
817 const wxSize& size = wxDefaultSize,
818 long style = 0,
819 const wxString& name = wxPyVListBoxNameStr);
820
821
822 void RefreshAll();
823 void SetItemCount(size_t count);
824
825};
826
827
828//---------------------------------------------------------------------------
829//---------------------------------------------------------------------------
4416b508 830
771eb7a2
RD
831%init %{
832 // Map renamed classes back to their common name for OOR
833 wxPyPtrTypeMap_Add("wxHtmlListBox", "wxPyHtmlListBox");
834 wxPyPtrTypeMap_Add("wxVListBox", "wxPyVListBox");
835 wxPyPtrTypeMap_Add("wxVScrolledWindow", "wxPyVScrolledWindow");
836%}
837
838//----------------------------------------------------------------------