1 /////////////////////////////////////////////////////////////////////////////
 
   3 // Purpose:     SWIG definitions of various window classes
 
   9 // Copyright:   (c) 1998 by Total Control Software
 
  10 // Licence:     wxWindows license
 
  11 /////////////////////////////////////////////////////////////////////////////
 
  18 #include <wx/menuitem.h>
 
  19 #include <wx/tooltip.h>
 
  22 //----------------------------------------------------------------------
 
  25 %include my_typemaps.i
 
  27 // Import some definitions of other classes, etc.
 
  33 %pragma(python) code = "import wx"
 
  37     static wxString wxPyEmptyStr("");
 
  40 //---------------------------------------------------------------------------
 
  42 class wxEvtHandler : public wxObject {
 
  46     bool ProcessEvent(wxEvent& event);
 
  47     void AddPendingEvent(wxEvent& event);
 
  48     //bool SearchEventTable(wxEventTable& table, wxEvent& event);
 
  50     bool GetEvtHandlerEnabled();
 
  51     void SetEvtHandlerEnabled(bool enabled);
 
  53     wxEvtHandler* GetNextHandler();
 
  54     wxEvtHandler* GetPreviousHandler();
 
  55     void SetNextHandler(wxEvtHandler* handler);
 
  56     void SetPreviousHandler(wxEvtHandler* handler);
 
  60         void Connect( int id, int lastId, int eventType, PyObject* func) {
 
  61             if (PyCallable_Check(func)) {
 
  62                 self->Connect(id, lastId, eventType,
 
  63                           (wxObjectEventFunction) &wxPyCallback::EventThunker,
 
  64                           new wxPyCallback(func));
 
  66             else if (func == Py_None) {
 
  67                 self->Disconnect(id, lastId, eventType,
 
  68                                  (wxObjectEventFunction)
 
  69                                  &wxPyCallback::EventThunker);
 
  72                 PyErr_SetString(PyExc_TypeError, "Expected callable object or None.");
 
  76         bool Disconnect(int id, int lastId = -1,
 
  77                         wxEventType eventType = wxEVT_NULL) {
 
  78             return self->Disconnect(id, lastId, eventType,
 
  79                                    (wxObjectEventFunction)
 
  80                                     &wxPyCallback::EventThunker);
 
  85         void _setOORInfo(PyObject* _self) {
 
  86             self->SetClientObject(new wxPyClientData(_self));
 
  92 //----------------------------------------------------------------------
 
  94 class wxValidator : public wxEvtHandler {
 
  99     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
 
 101     wxValidator* Clone();
 
 102     wxWindow* GetWindow();
 
 103     void SetWindow(wxWindow* window);
 
 105     static bool IsSilent();
 
 106     static void SetBellOnError(int doIt = TRUE);
 
 111 //----------------------------------------------------------------------
 
 113 class wxPyValidator : public wxValidator {
 
 114     DECLARE_DYNAMIC_CLASS(wxPyValidator);
 
 122     wxObject* Clone() const {
 
 123         wxPyValidator* ptr = NULL;
 
 124         wxPyValidator* self = (wxPyValidator*)this;
 
 126         wxPyTState* state = wxPyBeginBlockThreads();
 
 127         if (self->m_myInst.findCallback("Clone")) {
 
 129             ro = self->m_myInst.callCallbackObj(Py_BuildValue("()"));
 
 131                 SWIG_GetPtrObj(ro, (void **)&ptr, "_wxPyValidator_p");
 
 135         wxPyEndBlockThreads(state);
 
 137         // This is very dangerous!!! But is the only way I could find
 
 138         // to squash a memory leak.  Currently it is okay, but if the
 
 139         // validator architecture in wxWindows ever changes, problems
 
 146     DEC_PYCALLBACK_BOOL_WXWIN(Validate);
 
 147     DEC_PYCALLBACK_BOOL_(TransferToWindow);
 
 148     DEC_PYCALLBACK_BOOL_(TransferFromWindow);
 
 153 IMP_PYCALLBACK_BOOL_WXWIN(wxPyValidator, wxValidator, Validate);
 
 154 IMP_PYCALLBACK_BOOL_(wxPyValidator, wxValidator, TransferToWindow);
 
 155 IMP_PYCALLBACK_BOOL_(wxPyValidator, wxValidator, TransferFromWindow);
 
 157 IMPLEMENT_DYNAMIC_CLASS(wxPyValidator, wxValidator);
 
 161 class wxPyValidator : public wxValidator {
 
 165     void _setCallbackInfo(PyObject* self, PyObject* _class, int incref=TRUE);
 
 166     %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxPyValidator, 1)"
 
 168     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
 
 171 //----------------------------------------------------------------------
 
 173 %apply int * INOUT { int* x, int* y };
 
 175 class wxWindow : public wxEvtHandler {
 
 177     wxWindow(wxWindow* parent, const wxWindowID id,
 
 178              const wxPoint& pos = wxDefaultPosition,
 
 179              const wxSize& size = wxDefaultSize,
 
 181              char* name = "panel");
 
 182     %name(wxPreWindow)wxWindow();
 
 184     bool Create(wxWindow* parent, const wxWindowID id,
 
 185                 const wxPoint& pos = wxDefaultPosition,
 
 186                 const wxSize& size = wxDefaultSize,
 
 188                 char* name = "panel");
 
 190     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
 
 191     %pragma(python) addtomethod = "wxPreWindow:val._setOORInfo(val)"
 
 195     void Center(int direction = wxBOTH);
 
 196     void Centre(int direction = wxBOTH);
 
 197     void CentreOnParent(int direction = wxBOTH );
 
 198     void CenterOnParent(int direction = wxBOTH );
 
 199     void CentreOnScreen(int direction = wxBOTH );
 
 200     void CenterOnScreen(int direction = wxBOTH );
 
 204     // (uses apply'ed INOUT typemap, see above)
 
 205     %name(ClientToScreenXY)void ClientToScreen(int* x, int* y);
 
 206     wxPoint ClientToScreen(const wxPoint& pt);
 
 208     bool Close(int force = FALSE);
 
 210     void DestroyChildren();
 
 211     bool IsBeingDeleted();
 
 213     void DragAcceptFiles(bool accept);
 
 215     void Enable(bool enable);
 
 216     //bool FakePopupMenu(wxMenu* menu, int x, int y);
 
 217     %name(FindWindowById) wxWindow* FindWindow(long id);
 
 218     %name(FindWindowByName) wxWindow* FindWindow(const wxString& name);
 
 220     wxColour GetBackgroundColour();
 
 222     //wxList& GetChildren();
 
 224         PyObject* GetChildren() {
 
 225             wxWindowList& list = self->GetChildren();
 
 226             return wxPy_ConvertList(&list, "wxWindow");
 
 232     %name(GetClientSizeTuple) void GetClientSize(int *OUTPUT, int *OUTPUT);
 
 233     wxSize GetClientSize();
 
 234     wxLayoutConstraints * GetConstraints();
 
 235     wxEvtHandler* GetEventHandler();
 
 238     wxColour GetForegroundColour();
 
 239     wxWindow * GetGrandParent();
 
 242             return wxPyGetWinHandle(self); //(long)self->GetHandle();
 
 247     void SetLabel(const wxString& label);
 
 249     wxWindow * GetParent();
 
 250     %name(GetPositionTuple) void GetPosition(int *OUTPUT, int *OUTPUT);
 
 251     wxPoint GetPosition();
 
 253     int GetScrollThumb(int orientation);
 
 254     int GetScrollPos(int orientation);
 
 255     int GetScrollRange(int orientation);
 
 256     %name(GetSizeTuple) void GetSize(int *OUTPUT, int *OUTPUT);
 
 258     void GetTextExtent(const wxString& string, int *OUTPUT, int *OUTPUT);
 
 259     %name(GetFullTextExtent)void GetTextExtent(const wxString& string,
 
 260                        int *OUTPUT, int *OUTPUT, int *OUTPUT, int* OUTPUT,
 
 261                        const wxFont* font = NULL); //, bool use16 = FALSE)
 
 263     wxRegion GetUpdateRegion();
 
 264     long GetWindowStyleFlag();
 
 265     void SetWindowStyleFlag(long style);
 
 266     void SetWindowStyle(long style);
 
 270     bool IsExposed( int x, int y, int w=0, int h=0 );
 
 271     %name(IsExposedPoint) bool IsExposed( const wxPoint& pt );
 
 272     %name(IsExposedRect)  bool IsExposed( const wxRect& rect );
 
 277     bool LoadFromResource(wxWindow* parent, const wxString& resourceName, const wxResourceTable* resourceTable = NULL);
 
 279     void MakeModal(bool flag=TRUE);
 
 280     %name(MoveXY)void Move(int x, int y);
 
 281     void Move(const wxPoint& point);
 
 283     wxEvtHandler* PopEventHandler(bool deleteHandler = FALSE);
 
 284     void PushEventHandler(wxEvtHandler* handler);
 
 286     %name(PopupMenuXY)bool PopupMenu(wxMenu *menu, int x, int y);
 
 287     bool PopupMenu(wxMenu *menu, const wxPoint& pos);
 
 290     void Refresh(bool eraseBackground = TRUE, const wxRect* rect = NULL);
 
 291     void RefreshRect(const wxRect& rect);
 
 294     void RemoveChild(wxWindow* child);
 
 295     bool Reparent( wxWindow* newParent );
 
 297     // (uses apply'ed INOUT typemap, see above)
 
 298     %name(ScreenToClientXY)void ScreenToClient(int *x, int *y);
 
 299     wxPoint ScreenToClient(const wxPoint& pt);
 
 301     void ScrollWindow(int dx, int dy, const wxRect* rect = NULL);
 
 302     void SetAutoLayout(bool autoLayout);
 
 303     bool GetAutoLayout();
 
 304     void SetBackgroundColour(const wxColour& colour);
 
 305     void SetConstraints(wxLayoutConstraints *constraints);
 
 306     void UnsetConstraints(wxLayoutConstraints *constraints);
 
 309     void SetFont(const wxFont& font);
 
 310     void SetForegroundColour(const wxColour& colour);
 
 312     void SetName(const wxString& name);
 
 313     void SetScrollbar(int orientation, int position, int thumbSize, int range, int refresh = TRUE);
 
 314     void SetScrollPos(int orientation, int pos, bool refresh = TRUE);
 
 316     %name(SetDimensions) void SetSize(int x, int y, int width, int height, int sizeFlags=wxSIZE_AUTO);
 
 318         void SetSize(const wxSize& size) {
 
 322         void SetPosition(const wxPoint& pos) {
 
 326         void SetRect(const wxRect& rect, int sizeFlags=wxSIZE_AUTO) {
 
 327             self->SetSize(rect, sizeFlags);
 
 331     void SetSizeHints(int minW=-1, int minH=-1, int maxW=-1, int maxH=-1, int incW=-1, int incH=-1);
 
 332     %name(SetClientSizeWH)void SetClientSize(int width, int height);
 
 333     void SetClientSize(const wxSize& size);
 
 334     //void SetPalette(wxPalette* palette);
 
 335     void SetCursor(const wxCursor& cursor);
 
 336     void SetEventHandler(wxEvtHandler* handler);
 
 337     void SetExtraStyle(long exStyle);
 
 338     void SetTitle(const wxString& title);
 
 339     bool Show(bool show=TRUE);
 
 340     bool TransferDataFromWindow();
 
 341     bool TransferDataToWindow();
 
 343     void WarpPointer(int x, int y);
 
 345     %name(ConvertDialogPointToPixels) wxPoint ConvertDialogToPixels(const wxPoint& pt);
 
 346     %name(ConvertDialogSizeToPixels)  wxSize  ConvertDialogToPixels(const wxSize& sz);
 
 348     %name(DLG_PNT) wxPoint ConvertDialogToPixels(const wxPoint& pt);
 
 349     %name(DLG_SZE) wxSize  ConvertDialogToPixels(const wxSize& sz);
 
 351     %name(ConvertPixelPointToDialog) wxPoint ConvertPixelsToDialog(const wxPoint& pt);
 
 352     %name(ConvertPixelSizeToDialog)  wxSize  ConvertPixelsToDialog(const wxSize& sz);
 
 354     %name(SetToolTipString)void SetToolTip(const wxString &tip);
 
 355     void SetToolTip(wxToolTip *tooltip);
 
 356     wxToolTip* GetToolTip();
 
 358     void SetSizer(wxSizer* sizer);
 
 361     wxValidator* GetValidator();
 
 362     void SetValidator(const wxValidator& validator);
 
 365     void SetDropTarget(wxDropTarget* target);
 
 366     wxDropTarget* GetDropTarget();
 
 367     %pragma(python) addtomethod = "SetDropTarget:_args[0].thisown = 0"
 
 370     wxSize GetBestSize();
 
 372     void SetCaret(wxCaret *caret);
 
 374     %pragma(python) addtoclass = "# replaces broken shadow method
 
 375     def GetCaret(self, *_args, **_kwargs):
 
 376         from misc2 import wxCaretPtr
 
 377         val = apply(windowsc.wxWindow_GetCaret,(self,) + _args, _kwargs)
 
 378         if val: val = wxCaretPtr(val)
 
 386     wxString GetHelpText();
 
 387     void SetHelpText(const wxString& helpText);
 
 389     bool ScrollLines(int lines);
 
 390     bool ScrollPages(int pages);
 
 396     static wxWindow* FindFocus();
 
 397     static int NewControlId();
 
 398     static int NextControlId(int id);
 
 399     static int PrevControlId(int id);
 
 401     void SetAcceleratorTable(const wxAcceleratorTable& accel);
 
 402     wxAcceleratorTable *GetAcceleratorTable();
 
 408 %pragma(python) code = "
 
 409 def wxDLG_PNT(win, point_or_x, y=None):
 
 411         return win.ConvertDialogPointToPixels(point_or_x)
 
 413         return win.ConvertDialogPointToPixels(wxPoint(point_or_x, y))
 
 415 def wxDLG_SZE(win, size_width, height=None):
 
 417         return win.ConvertDialogSizeToPixels(size_width)
 
 419         return win.ConvertDialogSizeToPixels(wxSize(size_width, height))
 
 425 wxWindow* wxWindow_FromHWND(unsigned long hWnd) {
 
 426     wxWindow* win = new wxWindow;
 
 428     win->SubclassWin(hWnd);
 
 435 //---------------------------------------------------------------------------
 
 437 class wxPanel : public wxWindow {
 
 439     wxPanel(wxWindow* parent,
 
 441             const wxPoint& pos = wxDefaultPosition,
 
 442             const wxSize& size = wxDefaultSize,
 
 443             long style = wxTAB_TRAVERSAL,
 
 444             const char* name = "panel");
 
 445     %name(wxPrePanel)wxPanel();
 
 447     bool Create(wxWindow* parent,
 
 449                 const wxPoint& pos = wxDefaultPosition,
 
 450                 const wxSize& size = wxDefaultSize,
 
 451                 long style = wxTAB_TRAVERSAL,
 
 452                 const char* name = "panel");
 
 454     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
 
 455     %pragma(python) addtomethod = "wxPrePanel:val._setOORInfo(val)"
 
 458     wxButton* GetDefaultItem();
 
 459     void SetDefaultItem(wxButton *btn);
 
 463 //---------------------------------------------------------------------------
 
 466 // TODO: Add wrappers for the wxScrollHelper class, make wxScrolledWindow
 
 467 //       derive from it and wxPanel.
 
 470 class wxScrolledWindow : public wxPanel {
 
 472     wxScrolledWindow(wxWindow* parent,
 
 473                      const wxWindowID id = -1,
 
 474                      const wxPoint& pos = wxDefaultPosition,
 
 475                      const wxSize& size = wxDefaultSize,
 
 476                      long style = wxHSCROLL | wxVSCROLL,
 
 477                      char* name = "scrolledWindow");
 
 478     %name(wxPreScrolledWindow)wxScrolledWindow();
 
 480     bool Create(wxWindow* parent,
 
 481                 const wxWindowID id = -1,
 
 482                 const wxPoint& pos = wxDefaultPosition,
 
 483                 const wxSize& size = wxDefaultSize,
 
 484                 long style = wxHSCROLL | wxVSCROLL,
 
 485                 char* name = "scrolledWindow");
 
 487     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
 
 488     %pragma(python) addtomethod = "wxPreScrolledWindow:val._setOORInfo(val)"
 
 490     void EnableScrolling(bool xScrolling, bool yScrolling);
 
 491     int GetScrollPageSize(int orient);
 
 492     void GetScrollPixelsPerUnit(int* OUTPUT, int* OUTPUT);
 
 493     wxWindow* GetTargetWindow();
 
 494     void GetVirtualSize(int* OUTPUT, int* OUTPUT);
 
 496     void PrepareDC(wxDC& dc);
 
 497     void Scroll(int x, int y);
 
 498     void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY,
 
 499                        int noUnitsX, int noUnitsY,
 
 500                        int xPos = 0, int yPos = 0, int noRefresh=FALSE);
 
 501     void SetScrollPageSize(int orient, int pageSize);
 
 502     void SetTargetWindow(wxWindow* window);
 
 503     void GetViewStart(int* OUTPUT, int* OUTPUT);
 
 504     %pragma(python) addtoclass = "ViewStart = GetViewStart"
 
 506     void CalcScrolledPosition( int x, int y, int *OUTPUT, int *OUTPUT);
 
 507     void CalcUnscrolledPosition( int x, int y, int *OUTPUT, int *OUTPUT);
 
 509     void SetScale(double xs, double ys);
 
 513     void AdjustScrollbars();
 
 516 //----------------------------------------------------------------------
 
 519 class wxMenu : public wxEvtHandler {
 
 521     wxMenu(const wxString& title = wxPyEmptyStr, long style = 0);
 
 523     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
 
 525     void Append(int id, const wxString& item,
 
 526                 const wxString& helpString = wxPyEmptyStr,
 
 527                 int checkable = FALSE);
 
 528     %name(AppendMenu)void Append(int id, const wxString& item, wxMenu *subMenu,
 
 529                 const wxString& helpString = wxPyEmptyStr);
 
 530     %name(AppendItem)void Append(const wxMenuItem* item);
 
 532     void AppendSeparator();
 
 534     void Check(int id, bool flag);
 
 535     bool IsChecked(int id);
 
 536     void Enable(int id, bool enable);
 
 537     bool IsEnabled(int id);
 
 539     int FindItem(const wxString& itemString);
 
 540     %name(FindItemById)wxMenuItem* FindItem(int id/*, wxMenu **menu = NULL*/);
 
 543     void SetTitle(const wxString& title);
 
 545     wxString GetLabel(int id);
 
 546     void SetLabel(int id, const wxString& label);
 
 548     wxString GetHelpString(int id);
 
 549     void SetHelpString(int id, const wxString& helpString);
 
 550     void UpdateUI(wxEvtHandler* source = NULL);
 
 553     %name(DeleteItem)bool Delete(wxMenuItem *item);
 
 554     bool Insert(size_t pos, wxMenuItem *item);
 
 555     wxMenuItem *Remove(int id);
 
 556     %name(RemoveItem) wxMenuItem *Remove(wxMenuItem *item);
 
 559         void Destroy() { delete self; }
 
 561     %name(DestroyId)bool Destroy(int id);
 
 562     %name(DestroyItem)bool Destroy(wxMenuItem *item);
 
 564     size_t GetMenuItemCount();
 
 565     //wxMenuItemList& GetMenuItems();
 
 567         PyObject* GetMenuItems() {
 
 568             wxMenuItemList& list = self->GetMenuItems();
 
 569             return wxPy_ConvertList(&list, "wxMenuItem");
 
 573     void SetEventHandler(wxEvtHandler *handler);
 
 574     wxEvtHandler *GetEventHandler();
 
 576     void SetInvokingWindow(wxWindow *win);
 
 577     wxWindow *GetInvokingWindow();
 
 583     void SetParent(wxMenu *parent);
 
 588 //----------------------------------------------------------------------
 
 590 class wxMenuBar : public wxWindow {
 
 592     wxMenuBar(long style = 0);
 
 594     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
 
 596     bool Append(wxMenu *menu, const wxString& title);
 
 597     bool Insert(size_t pos, wxMenu *menu, const wxString& title);
 
 598     size_t GetMenuCount();
 
 599     wxMenu *GetMenu(size_t pos);
 
 600     wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title);
 
 601     wxMenu *Remove(size_t pos);
 
 602     void EnableTop(size_t pos, bool enable);
 
 603     void SetLabelTop(size_t pos, const wxString& label);
 
 604     wxString GetLabelTop(size_t pos);
 
 605     int FindMenu(const wxString& title);
 
 606     int FindMenuItem(const wxString& menuString, const wxString& itemString);
 
 607     %name(FindItemById)wxMenuItem* FindItem(int id/*, wxMenu **menu = NULL*/);
 
 608     void Enable(int id, bool enable);
 
 609     void Check(int id, bool check);
 
 610     bool IsChecked(int id);
 
 611     bool IsEnabled(int id);
 
 613     void SetLabel(int id, const wxString &label);
 
 614     wxString GetLabel(int id);
 
 616     void SetHelpString(int id, const wxString& helpString);
 
 617     wxString GetHelpString(int id);
 
 622 //----------------------------------------------------------------------
 
 624 class wxMenuItem : public wxObject {
 
 626     wxMenuItem(wxMenu* parentMenu=NULL, int id=wxID_SEPARATOR,
 
 627                const wxString& text = wxPyEmptyStr,
 
 628                const wxString& help = wxPyEmptyStr,
 
 629                bool isCheckable = FALSE, wxMenu* subMenu = NULL);
 
 636     void SetText(const wxString& str);
 
 638     const wxString& GetText();
 
 639     void SetCheckable(bool checkable);
 
 642     void SetSubMenu(wxMenu *menu);
 
 643     wxMenu *GetSubMenu();
 
 644     void Enable(bool enable = TRUE);
 
 646     void Check(bool check = TRUE);
 
 649     void SetHelp(const wxString& str);
 
 650     const wxString& GetHelp();
 
 651     wxAcceleratorEntry *GetAccel();
 
 652     void SetAccel(wxAcceleratorEntry *accel);
 
 654     static wxString GetLabelFromText(const wxString& text);
 
 656     // wxOwnerDrawn methods
 
 658     void SetFont(const wxFont& font);
 
 660     void SetTextColour(const wxColour& colText);
 
 661     wxColour GetTextColour();
 
 662     void SetBackgroundColour(const wxColour& colBack);
 
 663     wxColour GetBackgroundColour();
 
 664     void SetBitmaps(const wxBitmap& bmpChecked,
 
 665                     const wxBitmap& bmpUnchecked = wxNullBitmap);
 
 666     void SetBitmap(const wxBitmap& bmpChecked);
 
 667     wxBitmap GetBitmap(bool bChecked = TRUE);
 
 668     void SetMarginWidth(int nWidth);
 
 669     int GetMarginWidth();
 
 670     static int GetDefaultMarginWidth();
 
 671     //void SetName(const wxString& strName);
 
 672     //const wxString& GetName();
 
 673     //void SetCheckable(bool checkable);
 
 674     //bool IsCheckable();
 
 676     void ResetOwnerDrawn();
 
 680 //---------------------------------------------------------------------------