X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1b62f00d8e3ec5437ab780cb3d73d299cc61e20c..d84a9306f0c1a8d535053ef03d9d416660d3251a:/wxPython/src/windows2.i diff --git a/wxPython/src/windows2.i b/wxPython/src/windows2.i index 8be7dabf60..83d279eff5 100644 --- a/wxPython/src/windows2.i +++ b/wxPython/src/windows2.i @@ -14,11 +14,9 @@ %{ #include "helpers.h" -#ifdef OLD_GRID -#include -#endif #include #include +#include #ifdef __WXMSW__ #include #endif @@ -26,6 +24,19 @@ //---------------------------------------------------------------------- +%{ + // Put some wx default wxChar* values into wxStrings. + DECLARE_DEF_STRING(NOTEBOOK_NAME); + DECLARE_DEF_STRING(PanelNameStr); + DECLARE_DEF_STRING(ControlNameStr); + + static const wxChar* wxSplitterNameStr = wxT("splitter"); + DECLARE_DEF_STRING(SplitterNameStr); + static const wxString wxPyEmptyString(wxT("")); +%} + +//---------------------------------------------------------------------- + %include typemaps.i %include my_typemaps.i @@ -41,216 +52,33 @@ //--------------------------------------------------------------------------- -#ifdef OLD_GRID - enum { - wxGRID_TEXT_CTRL, - wxGRID_HSCROLL, - wxGRID_VSCROLL -}; - -class wxGridCell { -public: - wxGridCell(); - ~wxGridCell(); - - wxString& GetTextValue(); - void SetTextValue(const wxString& str); - wxFont& GetFont(); - void SetFont(wxFont& f); - wxColour& GetTextColour(); - void SetTextColour(const wxColour& colour); - wxColour& GetBackgroundColour(); - void SetBackgroundColour(const wxColour& colour); - wxBrush& GetBackgroundBrush(); - int GetAlignment(); - void SetAlignment(int align); - wxBitmap* GetCellBitmap(); - void SetCellBitmap(wxBitmap* bitmap); -}; - - - - -class wxGrid : public wxPanel { -public: - wxGrid(wxWindow* parent, wxWindowID id, - const wxPoint& pos=wxDefaultPosition, - const wxSize& size=wxDefaultSize, - long style=0, - char* name="grid"); - - %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)" - %pragma(python) addtomethod = "__init__:#wx._checkForCallback(self, 'OnSelectCell', wxEVT_GRID_SELECT_CELL)" - %pragma(python) addtomethod = "__init__:#wx._checkForCallback(self, 'OnCreateCell', wxEVT_GRID_CREATE_CELL)" - %pragma(python) addtomethod = "__init__:#wx._checkForCallback(self, 'OnChangeLabels', wxEVT_GRID_CHANGE_LABELS)" - %pragma(python) addtomethod = "__init__:#wx._checkForCallback(self, 'OnChangeSelectionLabel', wxEVT_GRID_CHANGE_SEL_LABEL)" - %pragma(python) addtomethod = "__init__:#wx._checkForCallback(self, 'OnCellChange', wxEVT_GRID_CELL_CHANGE)" - %pragma(python) addtomethod = "__init__:#wx._checkForCallback(self, 'OnCellLeftClick', wxEVT_GRID_CELL_LCLICK)" - %pragma(python) addtomethod = "__init__:#wx._checkForCallback(self, 'OnCellRightClick', wxEVT_GRID_CELL_RCLICK)" - %pragma(python) addtomethod = "__init__:#wx._checkForCallback(self, 'OnLabelLeftClick', wxEVT_GRID_LABEL_LCLICK)" - %pragma(python) addtomethod = "__init__:#wx._checkForCallback(self, 'OnLabelRightClick', wxEVT_GRID_LABEL_RCLICK)" - - - void AdjustScrollbars(); - bool AppendCols(int n=1, int updateLabels=TRUE); - bool AppendRows(int n=1, int updateLabels=TRUE); - void BeginBatch(); - bool CellHitTest(int x, int y, int *OUTPUT, int *OUTPUT); - - %addmethods { - // TODO: For now we are just ignoring the initial cellValues - // and widths. Add support for loading them from - // Python sequence objects. - bool CreateGrid(int rows, int cols, - //PyObject* cellValues = NULL, - //PyObject* widths = NULL, - short defaultWidth = wxGRID_DEFAULT_CELL_WIDTH, - short defaultHeight = wxGRID_DEFAULT_CELL_HEIGHT) { - return self->CreateGrid(rows, cols, NULL, NULL, - defaultWidth, defaultHeight); - } - } - - bool CurrentCellVisible(); - bool DeleteCols(int pos=0, int n=1, bool updateLabels=TRUE); - bool DeleteRows(int pos=0, int n=1, bool updateLabels=TRUE); - void EndBatch(); - - int GetBatchCount(); - wxGridCell* GetCell(int row, int col); - int GetCellAlignment(int row, int col); - %name(GetDefCellAlignment)int GetCellAlignment(); - wxColour& GetCellBackgroundColour(int row, int col); - %name(GetDefCellBackgroundColour) wxColour& GetCellBackgroundColour(); - - //wxGridCell *** GetCells(); - %addmethods { - PyObject* GetCells() { - int row, col; - PyObject* rows = PyList_New(0); - for (row=0; row < self->GetRows(); row++) { - PyObject* rowList = PyList_New(0); - for (col=0; col < self->GetCols(); col++) { - wxGridCell* cell = self->GetCell(row, col); - - bool doSave = wxPyRestoreThread(); - PyObject* pyCell = wxPyConstructObject(cell, "wxGridCell"); - wxPySaveThread(doSave); - - if (PyList_Append(rowList, pyCell) == -1) - return NULL; - } - if (PyList_Append(rows, rowList) == -1) - return NULL; - } - return rows; - } - } - wxColour& GetCellTextColour(int row, int col); - %name(GetDefCellTextColour)wxColour& GetCellTextColour(); - wxFont& GetCellTextFont(int row, int col); - %name(GetDefCellTextFont)wxFont& GetCellTextFont(); - wxString& GetCellValue(int row, int col); - int GetCols(); - int GetColumnWidth(int col); - wxRect GetCurrentRect(); - int GetCursorColumn(); - int GetCursorRow(); - bool GetEditable(); - wxScrollBar * GetHorizScrollBar(); - int GetLabelAlignment(int orientation); - wxColour& GetLabelBackgroundColour(); - int GetLabelSize(int orientation); - wxColour& GetLabelTextColour(); - wxFont& GetLabelTextFont(); - wxString& GetLabelValue(int orientation, int pos); - int GetRowHeight(int row); - int GetRows(); - int GetScrollPosX(); - int GetScrollPosY(); - wxTextCtrl* GetTextItem(); - wxScrollBar* GetVertScrollBar(); - - bool InsertCols(int pos=0, int n=1, bool updateLabels=TRUE); - bool InsertRows(int pos=0, int n=1, bool updateLabels=TRUE); - - void OnActivate(bool active); - - void SetCellAlignment(int alignment, int row, int col); - %name(SetDefCellAlignment)void SetCellAlignment(int alignment); - void SetCellBackgroundColour(const wxColour& colour, int row, int col); - %name(SetDefCellBackgroundColour) - void SetCellBackgroundColour(const wxColour& colour); - void SetCellTextColour(const wxColour& colour, int row, int col); - %name(SetDefCellTextColour)void SetCellTextColour(const wxColour& colour); - void SetCellTextFont(wxFont& font, int row, int col); - %name(SetDefCellTextFont)void SetCellTextFont(wxFont& font); - void SetCellValue(const wxString& val, int row, int col); - void SetColumnWidth(int col, int width); - void SetDividerPen(wxPen& pen); - void SetEditable(bool editable); - void SetGridCursor(int row, int col); - void SetLabelAlignment(int orientation, int alignment); - void SetLabelBackgroundColour(const wxColour& value); - void SetLabelSize(int orientation, int size); - void SetLabelTextColour(const wxColour& value); - void SetLabelTextFont(wxFont& font); - void SetLabelValue(int orientation, const wxString& value, int pos); - void SetRowHeight(int row, int height); - - void UpdateDimensions(); - - bool GetEditInPlace(); - void SetEditInPlace(int edit = TRUE); - -}; - + // notebook control event types + wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, + wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, -class wxGridEvent : public wxEvent { -public: - int m_row; - int m_col; - int m_x; - int m_y; - bool m_control; - bool m_shift; - wxGridCell* m_cell; - - int GetRow(); - int GetCol(); - wxPoint GetPosition(); - bool ControlDown(); - bool ShiftDown(); - wxGridCell* GetCell(); -}; + // styles + wxNB_FIXEDWIDTH, + wxNB_TOP, + wxNB_LEFT, + wxNB_RIGHT, + wxNB_BOTTOM, + wxNB_MULTILINE, + // hittest flags + wxNB_HITTEST_NOWHERE = 1, // not on tab + wxNB_HITTEST_ONICON = 2, // on icon + wxNB_HITTEST_ONLABEL = 4, // on label + wxNB_HITTEST_ONITEM = wxNB_HITTEST_ONICON | wxNB_HITTEST_ONLABEL, -enum { - wxEVT_GRID_SELECT_CELL, - wxEVT_GRID_CREATE_CELL, - wxEVT_GRID_CHANGE_LABELS, - wxEVT_GRID_CHANGE_SEL_LABEL, - wxEVT_GRID_CELL_CHANGE, - wxEVT_GRID_CELL_LCLICK, - wxEVT_GRID_CELL_RCLICK, - wxEVT_GRID_LABEL_LCLICK, - wxEVT_GRID_LABEL_RCLICK, -}; - -#endif - -//--------------------------------------------------------------------------- - -enum { - /* notebook control event types */ - wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, - wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, }; class wxNotebookEvent : public wxNotifyEvent { public: + wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0, + int sel = -1, int oldSel = -1); + int GetSelection(); int GetOldSelection(); void SetOldSelection(int page); @@ -266,45 +94,100 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - char* name = "notebook"); + const wxString& name = wxPyNOTEBOOK_NAME); + %name(wxPreNotebook)wxNotebook(); + + bool Create(wxWindow *parent, + wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxPyNOTEBOOK_NAME); - %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)" + %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" + %pragma(python) addtomethod = "wxPreNotebook:val._setOORInfo(val)" - int GetPageCount(); - int SetSelection(int nPage); - void AdvanceSelection(bool bForward = TRUE); - int GetSelection(); - bool SetPageText(int nPage, const wxString& strText); - wxString GetPageText(int nPage) const; - void SetImageList(wxImageList* imageList); - wxImageList* GetImageList(); - int GetPageImage(int nPage); - bool SetPageImage(int nPage, int nImage); - int GetRowCount(); - - void SetPageSize(const wxSize& size); - void SetPadding(const wxSize& padding); - bool DeletePage(int nPage); - bool RemovePage(int nPage); - bool DeleteAllPages(); - bool AddPage(/*wxNotebookPage*/ wxWindow *pPage, - const wxString& strText, - int bSelect = FALSE, - int imageId = -1); - bool InsertPage(int nPage, - /*wxNotebookPage*/ wxWindow *pPage, - const wxString& strText, - bool bSelect = FALSE, - int imageId = -1); - /*wxNotebookPage*/ wxWindow *GetPage(int nPage); - - %addmethods { - void ResizeChildren() { - wxSizeEvent evt(self->GetClientSize()); - self->GetEventHandler()->ProcessEvent(evt); - } - } + // get number of pages in the dialog + int GetPageCount() const; + + // get the panel which represents the given page + wxWindow *GetPage(int page); + + // get the currently selected page + int GetSelection() const; + + // set/get the title of a page + bool SetPageText(int page, const wxString& text); + wxString GetPageText(int page) const; + + // image list stuff: each page may have an image associated with it (all + // images belong to the same image list) + void SetImageList(wxImageList* imageList); + + // as SetImageList() but the notebook will take ownership of the image list + void AssignImageList(wxImageList* imageList); + %pragma(python) addtomethod = "AssignImageList:_args[0].thisown = 0" + + // get pointer (may be NULL) to the associated image list + wxImageList* GetImageList() const; + + // sets/returns item's image index in the current image list + int GetPageImage(int page) const; + bool SetPageImage(int page, int nImage); + + // get the number of rows for a control with wxNB_MULTILINE style (not all + // versions support it - they will always return 1 then) + int GetRowCount() const; + + // set the size (the same for all pages) + void SetPageSize(const wxSize& size); + + // set the padding between tabs (in pixels) + void SetPadding(const wxSize& padding); + + // set the size of the tabs for wxNB_FIXEDWIDTH controls + void SetTabSize(const wxSize& sz); + + // calculate the size of the notebook from the size of its page + wxSize CalcSizeFromPage(const wxSize& sizePage) const; + + + // remove one page from the notebook and delete it + bool DeletePage(int page); + + // remove one page from the notebook, without deleting it + bool RemovePage(int page); + + // remove all pages and delete them + bool DeleteAllPages(); + + // adds a new page to the notebook (it will be deleted by the notebook, + // don't delete it yourself) and make it the current one if select + bool AddPage(wxWindow *page, + const wxString& text, + bool telect = FALSE, + int imageId = -1); + + // the same as AddPage(), but adds the page at the specified position + bool InsertPage(int index, + wxWindow *page, + const wxString& text, + bool select = FALSE, + int imageId = -1); + + // set the currently selected page, return the index of the previously + // selected one (or -1 on error) + // + // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events + int SetSelection(int page); + + // hit test, returns which tab is hit and, optionally, where (icon, label) + // (not implemented on all platforms) + int HitTest(const wxPoint& pt, long* OUTPUT); + + // cycle thru the tabs + void AdvanceSelection(bool forward = TRUE); }; @@ -317,21 +200,33 @@ enum { wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, wxEVT_COMMAND_SPLITTER_UNSPLIT, wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, -}; - -enum -{ wxSPLIT_HORIZONTAL, wxSPLIT_VERTICAL, wxSPLIT_DRAG_NONE, wxSPLIT_DRAG_DRAGGING, - wxSPLIT_DRAG_LEFT_DOWN + wxSPLIT_DRAG_LEFT_DOWN, + + wxSP_VERTICAL, + wxSP_HORIZONTAL, + wxSP_ARROW_KEYS, + wxSP_WRAP, + wxSP_NOBORDER, + wxSP_3D, + wxSP_3DSASH, + wxSP_3DBORDER, + wxSP_FULLSASH, + wxSP_BORDER, + wxSP_LIVE_UPDATE, + wxSP_PERMIT_UNSPLIT }; -class wxSplitterEvent : public wxCommandEvent { +class wxSplitterEvent : public wxNotifyEvent { public: + wxSplitterEvent(wxEventType type = wxEVT_NULL, + wxSplitterWindow *splitter = NULL); + int GetSashPosition(); int GetX(); int GetY(); @@ -348,33 +243,90 @@ public: const wxPoint& point = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style=wxSP_3D|wxCLIP_CHILDREN, - char* name = "splitterWindow"); + const wxString& name = wxPySplitterNameStr); + %name(wxPreSplitterWindow)wxSplitterWindow(); - %pragma(python) addtomethod = "__init__:#wx._StdWindowCallbacks(self)" + bool Create(wxWindow* parent, wxWindowID id, + const wxPoint& point = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style=wxSP_3D|wxCLIP_CHILDREN, + const wxString& name = wxPySplitterNameStr); - int GetBorderSize(); - int GetMinimumPaneSize(); - int GetSashPosition(); - int GetSashSize(); + %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" + %pragma(python) addtomethod = "wxPreSplitterWindow:val._setOORInfo(val)" + + // Gets the only or left/top pane + wxWindow *GetWindow1(); + + // Gets the right/bottom pane + wxWindow *GetWindow2(); + + // Sets the split mode + void SetSplitMode(int mode); + + // Gets the split mode int GetSplitMode(); - wxWindow* GetWindow1(); - wxWindow* GetWindow2(); - void Initialize(wxWindow* window); + + // Initialize with one window + void Initialize(wxWindow *window); + + // Associates the given window with window 2, drawing the appropriate sash + // and changing the split mode. + // Does nothing and returns FALSE if the window is already split. + // A sashPosition of 0 means choose a default sash position, + // negative sashPosition specifies the size of right/lower pane as it's + // absolute value rather than the size of left/upper pane. + virtual bool SplitVertically(wxWindow *window1, + wxWindow *window2, + int sashPosition = 0); + virtual bool SplitHorizontally(wxWindow *window1, + wxWindow *window2, + int sashPosition = 0); + + // Removes the specified (or second) window from the view + // Doesn't actually delete the window. + bool Unsplit(wxWindow *toRemove = NULL); + + // Replaces one of the windows with another one (neither old nor new + // parameter should be NULL) + bool ReplaceWindow(wxWindow *winOld, wxWindow *winNew); + + // Is the window split? bool IsSplit(); - bool ReplaceWindow(wxWindow * winOld, wxWindow * winNew); - void SetBorderSize(int width); - void SetSashPosition(int position, int redraw = TRUE); + // Sets the sash size void SetSashSize(int width); - void SetMinimumPaneSize(int paneSize); - void SetSplitMode(int mode); - bool SplitHorizontally(wxWindow* window1, wxWindow* window2, int sashPosition = 0); - bool SplitVertically(wxWindow* window1, wxWindow* window2, int sashPosition = 0); - bool Unsplit(wxWindow* toRemove = NULL); + + // Sets the border size + void SetBorderSize(int width); + + // Gets the sash size + int GetSashSize(); + + // Gets the border size + int GetBorderSize(); + + // Set the sash position + void SetSashPosition(int position, bool redraw = TRUE); + + // Gets the sash position + int GetSashPosition(); + + // If this is zero, we can remove panes by dragging the sash. + void SetMinimumPaneSize(int min); + int GetMinimumPaneSize(); + + // Resizes subwindows + virtual void SizeWindows(); + + void SetNeedUpdating(bool needUpdating) { m_needUpdating = needUpdating; } + bool GetNeedUpdating() const { return m_needUpdating ; } + }; //--------------------------------------------------------------------------- +// TODO: This should be usable on wxGTK now too... #ifdef __WXMSW__ enum { @@ -388,11 +340,20 @@ enum { }; +class wxTaskBarIconEvent : public wxEvent +{ +public: + wxTaskBarIconEvent(wxEventType evtType, wxTaskBarIcon *tbIcon); +}; + + class wxTaskBarIcon : public wxEvtHandler { public: wxTaskBarIcon(); ~wxTaskBarIcon(); + //%pragma(python) addtomethod = "__init__:self._setOORInfo(self)" + // We still use the magic methods here since that is the way it is documented... %pragma(python) addtomethod = "__init__:wx._checkForCallback(self, 'OnMouseMove', wxEVT_TASKBAR_MOVE)" %pragma(python) addtomethod = "__init__:wx._checkForCallback(self, 'OnLButtonDown', wxEVT_TASKBAR_LEFT_DOWN)" @@ -402,12 +363,411 @@ public: %pragma(python) addtomethod = "__init__:wx._checkForCallback(self, 'OnLButtonDClick',wxEVT_TASKBAR_LEFT_DCLICK)" %pragma(python) addtomethod = "__init__:wx._checkForCallback(self, 'OnRButtonDClick',wxEVT_TASKBAR_RIGHT_DCLICK)" - bool SetIcon(const wxIcon& icon, const char* tooltip = ""); + bool SetIcon(const wxIcon& icon, const wxString& tooltip = wxPyEmptyString); bool RemoveIcon(void); bool PopupMenu(wxMenu *menu); bool IsIconInstalled(); bool IsOK(); }; + + + +%pragma(python) code = " +def EVT_TASKBAR_MOVE(win, func): + win.Connect(-1, -1, wxEVT_TASKBAR_MOVE, func) + +def EVT_TASKBAR_LEFT_DOWN(win, func): + win.Connect(-1, -1, wxEVT_TASKBAR_LEFT_DOWN, func) + +def EVT_TASKBAR_LEFT_UP(win, func): + win.Connect(-1, -1, wxEVT_TASKBAR_LEFT_UP, func) + +def EVT_TASKBAR_RIGHT_DOWN(win, func): + win.Connect(-1, -1, wxEVT_TASKBAR_RIGHT_DOWN, func) + +def EVT_TASKBAR_RIGHT_UP(win, func): + win.Connect(-1, -1, wxEVT_TASKBAR_RIGHT_UP, func) + +def EVT_TASKBAR_LEFT_DCLICK(win, func): + win.Connect(-1, -1, wxEVT_TASKBAR_LEFT_DCLICK, func) + +def EVT_TASKBAR_RIGHT_DCLICK(win, func): + win.Connect(-1, -1, wxEVT_TASKBAR_RIGHT_DCLICK, func) +" + + #endif +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +// wxPyWindow derives from wxWindow and adds support for overriding many of +// the virtual methods in Python derived classes. + +// Which (any?) of these should be done also??? +// Destroy +// DoCaptureMouse +// DoClientToScreen +// DoHitTest +// DoMoveWindow +// DoPopupMenu +// DoReleaseMouse +// DoScreenToClient +// DoSetToolTip +// Enable +// Fit +// GetCharHeight +// GetCharWidth +// GetClientAreaOrigin +// GetDefaultItem +// IsTopLevel +// SetBackgroundColour +// SetDefaultItem +// SetFocus +// SetFocusFromKbd +// SetForegroundColour +// SetSizeHints +// SetVirtualSizeHints +// Show + + +%{ // C++ version of Python aware wxWindow +class wxPyWindow : public wxWindow +{ + DECLARE_DYNAMIC_CLASS(wxPyWindow) +public: + wxPyWindow() : wxWindow() {} + wxPyWindow(wxWindow* parent, const wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxPyPanelNameStr) + : wxWindow(parent, id, pos, size, style, name) {} + + + DEC_PYCALLBACK_VOID_INT4(DoMoveWindow); + DEC_PYCALLBACK_VOID_INT5(DoSetSize); + DEC_PYCALLBACK_VOID_INTINT(DoSetClientSize); + DEC_PYCALLBACK_VOID_INTINT(DoSetVirtualSize); + + DEC_PYCALLBACK_VOID_INTPINTP_const(DoGetSize); + DEC_PYCALLBACK_VOID_INTPINTP_const(DoGetClientSize); + DEC_PYCALLBACK_VOID_INTPINTP_const(DoGetPosition); + + DEC_PYCALLBACK_SIZE_const(DoGetVirtualSize); + DEC_PYCALLBACK_SIZE_const(DoGetBestSize); + + DEC_PYCALLBACK__(InitDialog); + DEC_PYCALLBACK_BOOL_(TransferDataFromWindow); + DEC_PYCALLBACK_BOOL_(TransferDataToWindow); + DEC_PYCALLBACK_BOOL_(Validate); + + DEC_PYCALLBACK_BOOL_const(AcceptsFocus); + DEC_PYCALLBACK_BOOL_const(AcceptsFocusFromKeyboard); + DEC_PYCALLBACK_SIZE_const(GetMaxSize); + + DEC_PYCALLBACK_VOID_WXWINBASE(AddChild); + DEC_PYCALLBACK_VOID_WXWINBASE(RemoveChild); + + PYPRIVATE; +}; + +IMPLEMENT_DYNAMIC_CLASS(wxPyWindow, wxWindow); + +IMP_PYCALLBACK_VOID_INT4(wxPyWindow, wxWindow, DoMoveWindow); +IMP_PYCALLBACK_VOID_INT5(wxPyWindow, wxWindow, DoSetSize); +IMP_PYCALLBACK_VOID_INTINT(wxPyWindow, wxWindow, DoSetClientSize); +IMP_PYCALLBACK_VOID_INTINT(wxPyWindow, wxWindow, DoSetVirtualSize); + +IMP_PYCALLBACK_VOID_INTPINTP_const(wxPyWindow, wxWindow, DoGetSize); +IMP_PYCALLBACK_VOID_INTPINTP_const(wxPyWindow, wxWindow, DoGetClientSize); +IMP_PYCALLBACK_VOID_INTPINTP_const(wxPyWindow, wxWindow, DoGetPosition); + +IMP_PYCALLBACK_SIZE_const(wxPyWindow, wxWindow, DoGetVirtualSize); +IMP_PYCALLBACK_SIZE_const(wxPyWindow, wxWindow, DoGetBestSize); + +IMP_PYCALLBACK__(wxPyWindow, wxWindow, InitDialog); +IMP_PYCALLBACK_BOOL_(wxPyWindow, wxWindow, TransferDataFromWindow); +IMP_PYCALLBACK_BOOL_(wxPyWindow, wxWindow, TransferDataToWindow); +IMP_PYCALLBACK_BOOL_(wxPyWindow, wxWindow, Validate); + +IMP_PYCALLBACK_BOOL_const(wxPyWindow, wxWindow, AcceptsFocus); +IMP_PYCALLBACK_BOOL_const(wxPyWindow, wxWindow, AcceptsFocusFromKeyboard); +IMP_PYCALLBACK_SIZE_const(wxPyWindow, wxWindow, GetMaxSize); + +IMP_PYCALLBACK_VOID_WXWINBASE(wxPyWindow, wxWindow, AddChild); +IMP_PYCALLBACK_VOID_WXWINBASE(wxPyWindow, wxWindow, RemoveChild); + +%} + +// And now the one for SWIG to see +class wxPyWindow : public wxWindow +{ +public: + wxPyWindow(wxWindow* parent, const wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxPyPanelNameStr); + + void _setCallbackInfo(PyObject* self, PyObject* _class); + %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxPyWindow)" + %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" + + + void base_DoMoveWindow(int x, int y, int width, int height); + void base_DoSetSize(int x, int y, int width, int height, + int sizeFlags = wxSIZE_AUTO); + void base_DoSetClientSize(int width, int height); + void base_DoSetVirtualSize( int x, int y ); + + void base_DoGetSize( int *OUTPUT, int *OUTPUT ) const; + void base_DoGetClientSize( int *OUTPUT, int *OUTPUT ) const; + void base_DoGetPosition( int *OUTPUT, int *OUTPUT ) const; + + wxSize base_DoGetVirtualSize() const; + wxSize base_DoGetBestSize() const; + + void base_InitDialog(); + bool base_TransferDataToWindow(); + bool base_TransferDataFromWindow(); + bool base_Validate(); + + bool base_AcceptsFocus() const; + bool base_AcceptsFocusFromKeyboard() const; + wxSize base_GetMaxSize() const; + + void base_AddChild(wxWindow* child); + void base_RemoveChild(wxWindow* child); +} + +//--------------------------------------------------------------------------- +// Do the same thing for wxControl + + +%{ // C++ version of Python aware wxControl +class wxPyControl : public wxControl +{ + DECLARE_DYNAMIC_CLASS(wxPyControl) +public: + wxPyControl() : wxControl() {} + wxPyControl(wxWindow* parent, const wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator=wxDefaultValidator, + const wxString& name = wxPyControlNameStr) + : wxControl(parent, id, pos, size, style, validator, name) {} + + + DEC_PYCALLBACK_VOID_INT4(DoMoveWindow); + DEC_PYCALLBACK_VOID_INT5(DoSetSize); + DEC_PYCALLBACK_VOID_INTINT(DoSetClientSize); + DEC_PYCALLBACK_VOID_INTINT(DoSetVirtualSize); + + DEC_PYCALLBACK_VOID_INTPINTP_const(DoGetSize); + DEC_PYCALLBACK_VOID_INTPINTP_const(DoGetClientSize); + DEC_PYCALLBACK_VOID_INTPINTP_const(DoGetPosition); + + DEC_PYCALLBACK_SIZE_const(DoGetVirtualSize); + DEC_PYCALLBACK_SIZE_const(DoGetBestSize); + + DEC_PYCALLBACK__(InitDialog); + DEC_PYCALLBACK_BOOL_(TransferDataFromWindow); + DEC_PYCALLBACK_BOOL_(TransferDataToWindow); + DEC_PYCALLBACK_BOOL_(Validate); + + DEC_PYCALLBACK_BOOL_const(AcceptsFocus); + DEC_PYCALLBACK_BOOL_const(AcceptsFocusFromKeyboard); + DEC_PYCALLBACK_SIZE_const(GetMaxSize); + + DEC_PYCALLBACK_VOID_WXWINBASE(AddChild); + DEC_PYCALLBACK_VOID_WXWINBASE(RemoveChild); + + PYPRIVATE; +}; + +IMPLEMENT_DYNAMIC_CLASS(wxPyControl, wxControl); + +IMP_PYCALLBACK_VOID_INT4(wxPyControl, wxControl, DoMoveWindow); +IMP_PYCALLBACK_VOID_INT5(wxPyControl, wxControl, DoSetSize); +IMP_PYCALLBACK_VOID_INTINT(wxPyControl, wxControl, DoSetClientSize); +IMP_PYCALLBACK_VOID_INTINT(wxPyControl, wxControl, DoSetVirtualSize); + +IMP_PYCALLBACK_VOID_INTPINTP_const(wxPyControl, wxControl, DoGetSize); +IMP_PYCALLBACK_VOID_INTPINTP_const(wxPyControl, wxControl, DoGetClientSize); +IMP_PYCALLBACK_VOID_INTPINTP_const(wxPyControl, wxControl, DoGetPosition); + +IMP_PYCALLBACK_SIZE_const(wxPyControl, wxControl, DoGetVirtualSize); +IMP_PYCALLBACK_SIZE_const(wxPyControl, wxControl, DoGetBestSize); + +IMP_PYCALLBACK__(wxPyControl, wxControl, InitDialog); +IMP_PYCALLBACK_BOOL_(wxPyControl, wxControl, TransferDataFromWindow); +IMP_PYCALLBACK_BOOL_(wxPyControl, wxControl, TransferDataToWindow); +IMP_PYCALLBACK_BOOL_(wxPyControl, wxControl, Validate); + +IMP_PYCALLBACK_BOOL_const(wxPyControl, wxControl, AcceptsFocus); +IMP_PYCALLBACK_BOOL_const(wxPyControl, wxControl, AcceptsFocusFromKeyboard); +IMP_PYCALLBACK_SIZE_const(wxPyControl, wxControl, GetMaxSize); + +IMP_PYCALLBACK_VOID_WXWINBASE(wxPyControl, wxControl, AddChild); +IMP_PYCALLBACK_VOID_WXWINBASE(wxPyControl, wxControl, RemoveChild); + +%} + +// And now the one for SWIG to see +class wxPyControl : public wxControl +{ +public: + wxPyControl(wxWindow* parent, const wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator=wxDefaultValidator, + const wxString& name = wxPyControlNameStr); + + void _setCallbackInfo(PyObject* self, PyObject* _class); + %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxPyControl)" + %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" + + + void base_DoMoveWindow(int x, int y, int width, int height); + void base_DoSetSize(int x, int y, int width, int height, + int sizeFlags = wxSIZE_AUTO); + void base_DoSetClientSize(int width, int height); + void base_DoSetVirtualSize( int x, int y ); + + void base_DoGetSize( int *OUTPUT, int *OUTPUT ) const; + void base_DoGetClientSize( int *OUTPUT, int *OUTPUT ) const; + void base_DoGetPosition( int *OUTPUT, int *OUTPUT ) const; + + wxSize base_DoGetVirtualSize() const; + wxSize base_DoGetBestSize() const; + + void base_InitDialog(); + bool base_TransferDataToWindow(); + bool base_TransferDataFromWindow(); + bool base_Validate(); + + bool base_AcceptsFocus() const; + bool base_AcceptsFocusFromKeyboard() const; + wxSize base_GetMaxSize() const; + + void base_AddChild(wxWindow* child); + void base_RemoveChild(wxWindow* child); +} + +//--------------------------------------------------------------------------- +// and for wxPanel + +%{ // C++ version of Python aware wxPanel +class wxPyPanel : public wxPanel +{ + DECLARE_DYNAMIC_CLASS(wxPyPanel) +public: + wxPyPanel() : wxPanel() {} + wxPyPanel(wxWindow* parent, const wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxPyPanelNameStr) + : wxPanel(parent, id, pos, size, style, name) {} + + + DEC_PYCALLBACK_VOID_INT4(DoMoveWindow); + DEC_PYCALLBACK_VOID_INT5(DoSetSize); + DEC_PYCALLBACK_VOID_INTINT(DoSetClientSize); + DEC_PYCALLBACK_VOID_INTINT(DoSetVirtualSize); + + DEC_PYCALLBACK_VOID_INTPINTP_const(DoGetSize); + DEC_PYCALLBACK_VOID_INTPINTP_const(DoGetClientSize); + DEC_PYCALLBACK_VOID_INTPINTP_const(DoGetPosition); + + DEC_PYCALLBACK_SIZE_const(DoGetVirtualSize); + DEC_PYCALLBACK_SIZE_const(DoGetBestSize); + + DEC_PYCALLBACK__(InitDialog); + DEC_PYCALLBACK_BOOL_(TransferDataFromWindow); + DEC_PYCALLBACK_BOOL_(TransferDataToWindow); + DEC_PYCALLBACK_BOOL_(Validate); + + DEC_PYCALLBACK_BOOL_const(AcceptsFocus); + DEC_PYCALLBACK_BOOL_const(AcceptsFocusFromKeyboard); + DEC_PYCALLBACK_SIZE_const(GetMaxSize); + + DEC_PYCALLBACK_VOID_WXWINBASE(AddChild); + DEC_PYCALLBACK_VOID_WXWINBASE(RemoveChild); + + PYPRIVATE; +}; + +IMPLEMENT_DYNAMIC_CLASS(wxPyPanel, wxPanel); + +IMP_PYCALLBACK_VOID_INT4(wxPyPanel, wxPanel, DoMoveWindow); +IMP_PYCALLBACK_VOID_INT5(wxPyPanel, wxPanel, DoSetSize); +IMP_PYCALLBACK_VOID_INTINT(wxPyPanel, wxPanel, DoSetClientSize); +IMP_PYCALLBACK_VOID_INTINT(wxPyPanel, wxPanel, DoSetVirtualSize); + +IMP_PYCALLBACK_VOID_INTPINTP_const(wxPyPanel, wxPanel, DoGetSize); +IMP_PYCALLBACK_VOID_INTPINTP_const(wxPyPanel, wxPanel, DoGetClientSize); +IMP_PYCALLBACK_VOID_INTPINTP_const(wxPyPanel, wxPanel, DoGetPosition); + +IMP_PYCALLBACK_SIZE_const(wxPyPanel, wxPanel, DoGetVirtualSize); +IMP_PYCALLBACK_SIZE_const(wxPyPanel, wxPanel, DoGetBestSize); + +IMP_PYCALLBACK__(wxPyPanel, wxPanel, InitDialog); +IMP_PYCALLBACK_BOOL_(wxPyPanel, wxPanel, TransferDataFromWindow); +IMP_PYCALLBACK_BOOL_(wxPyPanel, wxPanel, TransferDataToWindow); +IMP_PYCALLBACK_BOOL_(wxPyPanel, wxPanel, Validate); + +IMP_PYCALLBACK_BOOL_const(wxPyPanel, wxPanel, AcceptsFocus); +IMP_PYCALLBACK_BOOL_const(wxPyPanel, wxPanel, AcceptsFocusFromKeyboard); +IMP_PYCALLBACK_SIZE_const(wxPyPanel, wxPanel, GetMaxSize); + +IMP_PYCALLBACK_VOID_WXWINBASE(wxPyPanel, wxPanel, AddChild); +IMP_PYCALLBACK_VOID_WXWINBASE(wxPyPanel, wxPanel, RemoveChild); + +%} + +// And now the one for SWIG to see +class wxPyPanel : public wxPanel +{ +public: + wxPyPanel(wxWindow* parent, const wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxPyPanelNameStr); + + void _setCallbackInfo(PyObject* self, PyObject* _class); + %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxPyPanel)" + %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" + + + void base_DoMoveWindow(int x, int y, int width, int height); + void base_DoSetSize(int x, int y, int width, int height, + int sizeFlags = wxSIZE_AUTO); + void base_DoSetClientSize(int width, int height); + void base_DoSetVirtualSize( int x, int y ); + + void base_DoGetSize( int *OUTPUT, int *OUTPUT ) const; + void base_DoGetClientSize( int *OUTPUT, int *OUTPUT ) const; + void base_DoGetPosition( int *OUTPUT, int *OUTPUT ) const; + + wxSize base_DoGetVirtualSize() const; + wxSize base_DoGetBestSize() const; + + void base_InitDialog(); + bool base_TransferDataToWindow(); + bool base_TransferDataFromWindow(); + bool base_Validate(); + + bool base_AcceptsFocus() const; + bool base_AcceptsFocusFromKeyboard() const; + wxSize base_GetMaxSize() const; + + void base_AddChild(wxWindow* child); + void base_RemoveChild(wxWindow* child); +}; + + //---------------------------------------------------------------------------