X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/652e7bb422fdc15a10d075656653a8bc11dc3106..8775b357008a14fd2acdd2e2c70600f1c6346504:/utils/wxPython/src/windows.i?ds=sidebyside diff --git a/utils/wxPython/src/windows.i b/utils/wxPython/src/windows.i index 4bebc0bdc9..3c21bff6bf 100644 --- a/utils/wxPython/src/windows.i +++ b/utils/wxPython/src/windows.i @@ -15,15 +15,7 @@ %{ #include "helpers.h" - -#ifdef __WXMSW__ - // wxGTK defines wxMenuItem inside menu.h #include -#endif - -#ifdef __WXMSW__ -#include -#endif %} //---------------------------------------------------------------------- @@ -35,12 +27,26 @@ %import _defs.i %import misc.i %import gdi.i +%import clip_dnd.i +%pragma(python) code = "import wx" //--------------------------------------------------------------------------- class wxEvtHandler { public: + bool ProcessEvent(wxEvent& event); + //bool SearchEventTable(wxEventTable& table, wxEvent& event); + + bool GetEvtHandlerEnabled(); + void SetEvtHandlerEnabled(bool enabled); + + wxEvtHandler* GetNextHandler(); + wxEvtHandler* GetPreviousHandler(); + void SetNextHandler(wxEvtHandler* handler); + void SetPreviousHandler(wxEvtHandler* handler); + + %addmethods { void Connect( int id, int lastId, int eventType, PyObject* func) { if (PyCallable_Check(func)) { @@ -49,12 +55,103 @@ public: new wxPyCallback(func)); } } + + bool Disconnect(int id, int lastId = -1, + wxEventType eventType = wxEVT_NULL) { + return self->Disconnect(id, lastId, eventType, + (wxObjectEventFunction) + &wxPyCallback::EventThunker); + } + } }; //---------------------------------------------------------------------- +class wxValidator : public wxEvtHandler { +public: + wxValidator(); + //~wxValidator(); + + wxValidator* Clone(); + wxWindow* GetWindow(); + void SetWindow(wxWindow* window); +}; + +%inline %{ + bool wxValidator_IsSilent() { + return wxValidator::IsSilent(); + } + + void wxValidator_SetBellOnError(int doIt = TRUE) { + wxValidator::SetBellOnError(doIt); + } +%} + +//---------------------------------------------------------------------- +%{ +class wxPyValidator : public wxValidator { + DECLARE_DYNAMIC_CLASS(wxPyValidator); +public: + wxPyValidator() { + } +// wxPyValidator(const wxPyValidator& other); + + ~wxPyValidator() { + } + + wxObject* wxPyValidator::Clone() const { + wxPyValidator* ptr = NULL; + wxPyValidator* self = (wxPyValidator*)this; + + bool doSave = wxPyRestoreThread(); + if (self->m_myInst.findCallback("Clone")) { + PyObject* ro; + ro = self->m_myInst.callCallbackObj(Py_BuildValue("()")); + SWIG_GetPtrObj(ro, (void **)&ptr, "_wxPyValidator_p"); + } + // This is very dangerous!!! But is the only way I could find + // to squash a memory leak. Currently it is okay, but if the + // validator architecture in wxWindows ever changes, problems + // could arise. + delete self; + + wxPySaveThread(doSave); + return ptr; + } + + DEC_PYCALLBACK_BOOL_WXWIN(Validate); + DEC_PYCALLBACK_BOOL_(TransferToWindow); + DEC_PYCALLBACK_BOOL_(TransferFromWindow); + + PYPRIVATE; +// PyObject* m_data; +}; + +IMP_PYCALLBACK_BOOL_WXWIN(wxPyValidator, wxValidator, Validate); +IMP_PYCALLBACK_BOOL_(wxPyValidator, wxValidator, TransferToWindow); +IMP_PYCALLBACK_BOOL_(wxPyValidator, wxValidator, TransferFromWindow); + +IMPLEMENT_DYNAMIC_CLASS(wxPyValidator, wxValidator); + +%} + +class wxPyValidator : public wxValidator { +public: + wxPyValidator(); +// ~wxPyValidator(); + + %addmethods { void Destroy() { delete self; } } + + void _setSelf(PyObject* self, int incref=TRUE); + %pragma(python) addtomethod = "__init__:self._setSelf(self, 0)" + +}; + +//---------------------------------------------------------------------- + +%apply int * INOUT { int* x, int* y }; class wxWindow : public wxEvtHandler { public: @@ -65,11 +162,18 @@ public: long style = 0, char* name = "panel"); + %pragma(python) addtomethod = "__init__:wx._StdWindowCallbacks(self)" void CaptureMouse(); - void Center(int direction = wxHORIZONTAL); - void Centre(int direction = wxHORIZONTAL); - void ClientToScreen(int *BOTH, int *BOTH); + void Center(int direction = wxBOTH); + void Centre(int direction = wxBOTH); + void CentreOnParent(int direction = wxBOTH ); + void CenterOnParent(int direction = wxBOTH ); + + // (uses apply'ed INOUT typemap, see above) + %name(ClientToScreenXY)void ClientToScreen(int* x, int* y); + wxPoint ClientToScreen(const wxPoint& pt); + bool Close(int force = FALSE); bool Destroy(); void DestroyChildren(); @@ -78,151 +182,208 @@ public: #endif void Enable(bool enable); //bool FakePopupMenu(wxMenu* menu, int x, int y); - %name(FindWindowByID) wxWindow* FindWindow(long id); + %name(FindWindowById) wxWindow* FindWindow(long id); %name(FindWindowByName) wxWindow* FindWindow(const wxString& name); void Fit(); wxColour GetBackgroundColour(); + + //wxList& GetChildren(); + %addmethods { + PyObject* GetChildren() { + wxWindowList& list = self->GetChildren(); + return wxPy_ConvertList(&list, "wxWindow"); + } + } + int GetCharHeight(); int GetCharWidth(); - void GetClientSize(int *OUTPUT, int *OUTPUT); + %name(GetClientSizeTuple) void GetClientSize(int *OUTPUT, int *OUTPUT); + wxSize GetClientSize(); wxLayoutConstraints * GetConstraints(); -#ifdef __WXMSW__ - wxButton* GetDefaultItem(); -#endif - //wxEvtHandler* GetEventHandler(); - wxFont* GetFont(); + wxEvtHandler* GetEventHandler(); + + wxFont& GetFont(); wxColour GetForegroundColour(); wxWindow * GetGrandParent(); + %addmethods { + long GetHandle() { + return wxPyGetWinHandle(self); //(long)self->GetHandle(); + } + } int GetId(); - void GetPosition(int *OUTPUT, int *OUTPUT); wxString GetLabel(); + void SetLabel(const wxString& label); wxString GetName(); wxWindow * GetParent(); - int GetReturnCode(); + %name(GetPositionTuple) void GetPosition(int *OUTPUT, int *OUTPUT); + wxPoint GetPosition(); + wxRect GetRect(); int GetScrollThumb(int orientation); int GetScrollPos(int orientation); int GetScrollRange(int orientation); - void GetSize(int *OUTPUT, int *OUTPUT); - void GetTextExtent(const wxString& string, int *OUTPUT, int *OUTPUT); // int* descent = NULL, int* externalLeading = NULL, const wxFont* font = NULL, bool use16 = FALSE) + %name(GetSizeTuple) void GetSize(int *OUTPUT, int *OUTPUT); + wxSize GetSize(); + void GetTextExtent(const wxString& string, int *OUTPUT, int *OUTPUT); + %name(GetFullTextExtent)void GetTextExtent(const wxString& string, + int *OUTPUT, int *OUTPUT, int *OUTPUT, int* OUTPUT, + const wxFont* font = NULL); //, bool use16 = FALSE) wxString GetTitle(); + wxRegion GetUpdateRegion(); long GetWindowStyleFlag(); + bool Hide(); void InitDialog(); bool IsEnabled(); + bool IsExposed( int x, int y, int w=0, int h=0 ); + %name(IsExposedPoint) bool IsExposed( const wxPoint& pt ); + %name(IsExposedRect) bool IsExposed( const wxRect& rect ); bool IsRetained(); bool IsShown(); + bool IsTopLevel(); void Layout(); bool LoadFromResource(wxWindow* parent, const wxString& resourceName, const wxResourceTable* resourceTable = NULL); void Lower(); void MakeModal(bool flag); - void Move(int x, int y); + %name(MoveXY)void Move(int x, int y); + void Move(const wxPoint& point); - //wxEvtHandler* PopEventHandler(bool deleteHandler = FALSE); - bool PopupMenu(wxMenu *menu, int x, int y); - //void PushEventHandler(wxEvtHandler* handler); + wxEvtHandler* PopEventHandler(bool deleteHandler = FALSE); + void PushEventHandler(wxEvtHandler* handler); + + %name(PopupMenuXY)bool PopupMenu(wxMenu *menu, int x, int y); + bool PopupMenu(wxMenu *menu, const wxPoint& pos); void Raise(); void Refresh(bool eraseBackground = TRUE, const wxRect* rect = NULL); void ReleaseMouse(); - void ScreenToClient(int *BOTH, int *BOTH); + void RemoveChild(wxWindow* child); + bool Reparent( wxWindow* newParent ); + + // (uses apply'ed INOUT typemap, see above) + %name(ScreenToClientXY)void ScreenToClient(int *x, int *y); + wxPoint ScreenToClient(const wxPoint& pt); + void ScrollWindow(int dx, int dy, const wxRect* rect = NULL); + void SetAcceleratorTable(const wxAcceleratorTable& accel); void SetAutoLayout(bool autoLayout); + bool GetAutoLayout(); void SetBackgroundColour(const wxColour& colour); void SetConstraints(wxLayoutConstraints *constraints); - void SetDoubleClick(bool allowDoubleClick); + void UnsetConstraints(wxLayoutConstraints *constraints); void SetFocus(); + bool AcceptsFocus(); void SetFont(const wxFont& font); void SetForegroundColour(const wxColour& colour); void SetId(int id); void SetName(const wxString& name); - void SetReturnCode(int retCode); - void SetScrollbar(int orientation, int position, int thumbSize, int range, bool refresh = TRUE); + void SetScrollbar(int orientation, int position, int thumbSize, int range, int refresh = TRUE); void SetScrollPos(int orientation, int pos, bool refresh = TRUE); - //void SetSize(int x, int y, int width, int height, int sizeFlags=wxSIZE_AUTO); - //%name(SetSizeOnly) void SetSize(int width, int height); - %name(SetDimensions) void SetSize(int x, int y, int width, int height, int sizeFlags=wxSIZE_AUTO); %addmethods { void SetSize(const wxSize& size) { - self->SetSize(size.x, size.y); + self->SetSize(size); } void SetPosition(const wxPoint& pos) { - self->SetSize(pos.x, pos.y, -1, -1); + self->Move(pos); } } void SetSizeHints(int minW=-1, int minH=-1, int maxW=-1, int maxH=-1, int incW=-1, int incH=-1); - void SetClientSize(int width, int height); + %name(SetClientSizeWH)void SetClientSize(int width, int height); + void SetClientSize(const wxSize& size); //void SetPalette(wxPalette* palette); - //void SetColourMap(wxColourMap *colourMap); void SetCursor(const wxCursor&cursor); - //void SetEventHandler(wxEvtHandler* handler); + void SetEventHandler(wxEvtHandler* handler); void SetTitle(const wxString& title); bool Show(bool show); bool TransferDataFromWindow(); bool TransferDataToWindow(); bool Validate(); -#ifdef __WXMSW__ void WarpPointer(int x, int y); -#endif + %name(ConvertDialogPointToPixels) wxPoint ConvertDialogToPixels(const wxPoint& pt); + %name(ConvertDialogSizeToPixels) wxSize ConvertDialogToPixels(const wxSize& sz); + + %name(DLG_PNT) wxPoint ConvertDialogToPixels(const wxPoint& pt); + %name(DLG_SZE) wxSize ConvertDialogToPixels(const wxSize& sz); + + %name(ConvertPixelPointToDialog) wxPoint ConvertPixelsToDialog(const wxPoint& pt); + %name(ConvertPixelSizeToDialog) wxSize ConvertPixelsToDialog(const wxSize& sz); + + %name(SetToolTipString)void SetToolTip(const wxString &tip); + void SetToolTip(wxToolTip *tooltip); + wxToolTip* GetToolTip(); + + void SetSizer(wxSizer* sizer); + wxValidator* GetValidator(); + void SetValidator(const wxValidator& validator); + + void SetDropTarget(wxDropTarget* target); + wxDropTarget* GetDropTarget(); + %pragma(python) addtomethod = "SetDropTarget:_args[0].thisown = 0" + + wxSize GetBestSize(); + + void SetCaret(wxCaret *caret); + wxCaret *GetCaret(); + %pragma(python) addtoclass = "# replaces broken shadow method + def GetCaret(self, *_args, **_kwargs): + from misc2 import wxCaretPtr + val = apply(windowsc.wxWindow_GetCaret,(self,) + _args, _kwargs) + if val: val = wxCaretPtr(val) + return val +" }; +//%clear int* x, int* y; + + + +%pragma(python) code = " +def wxDLG_PNT(win, point_or_x, y=None): + if y is None: + return win.ConvertDialogPointToPixels(point_or_x) + else: + return win.ConvertDialogPointToPixels(wxPoint(point_or_x, y)) + +def wxDLG_SZE(win, size_width, height=None): + if height is None: + return win.ConvertDialogSizeToPixels(size_width) + else: + return win.ConvertDialogSizeToPixels(wxSize(size_width, height)) +" -// Static method(s) #ifdef __WXMSW__ %inline %{ wxWindow* wxWindow_FindFocus() { return wxWindow::FindFocus(); } %} -#endif -//---------------------------------------------------------------------- -class wxFrame : public wxWindow { -public: - wxFrame(wxWindow* parent, const wxWindowID id, const wxString& title, - const wxPoint& pos = wxPyDefaultPosition, - const wxSize& size = wxPyDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - char* name = "frame"); - - void Centre(int direction = wxBOTH); -#ifdef __WXMSW__ - void Command(int id); -#endif - bool CreateStatusBar(int number = 1); - wxMenuBar* GetMenuBar(); - wxStatusBar* GetStatusBar(); - wxString GetTitle(); - void Iconize(bool iconize); - bool IsIconized(); - void Maximize(bool maximize); -#ifdef __WXMSW__ - void SetAcceleratorTable(const wxAcceleratorTable& accel); +%inline %{ +wxWindow* wxWindow_FromHWND(unsigned long hWnd) { + wxWindow* win = new wxWindow; + win->SetHWND(hWnd); + win->SubclassWin(hWnd); + return win; +} +%} #endif - void SetIcon(const wxIcon& icon); - void SetMenuBar(wxMenuBar* menuBar); - void SetStatusText(const wxString& text, int number = 0); - void SetStatusWidths(int LCOUNT, int* LIST); // use typemap - void SetTitle(const wxString& title); - -}; -//--------------------------------------------------------------------------- +%inline %{ + int wxWindow_NewControlId() { + return wxWindow::NewControlId(); + } + int wxWindow_NextControlId(int id) { + return wxWindow::NextControlId(id); + } + int wxWindow_PrevControlId(int id) { + return wxWindow::PrevControlId(id); + } +%} -#ifdef __WXMSW__ -class wxMiniFrame : public wxFrame { -public: - wxMiniFrame(wxWindow* parent, const wxWindowID id, const wxString& title, - const wxPoint& pos = wxPyDefaultPosition, - const wxSize& size = wxPyDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - char* name = "frame"); -}; -#endif //--------------------------------------------------------------------------- @@ -235,7 +396,20 @@ public: long style = wxTAB_TRAVERSAL, const char* name = "panel"); + %pragma(python) addtomethod = "__init__:wx._StdWindowCallbacks(self)" + void InitDialog(); + wxButton* GetDefaultItem(); + void SetDefaultItem(wxButton *btn); + + // fix some SWIG trouble... + %pragma(python) addtoclass = " + def GetDefaultItem(self): + import controls + val = windowsc.wxPanel_GetDefaultItem(self.this) + val = controls.wxButtonPtr(val) + return val +" }; //--------------------------------------------------------------------------- @@ -250,6 +424,8 @@ public: long style = wxDEFAULT_DIALOG_STYLE, const char* name = "dialogBox"); + %pragma(python) addtomethod = "__init__:wx._StdDialogCallbacks(self)" + void Centre(int direction = wxBOTH); void EndModal(int retCode); wxString GetTitle(); @@ -260,11 +436,14 @@ public: void SetTitle(const wxString& title); bool Show(bool show); int ShowModal(); + + int GetReturnCode(); + void SetReturnCode(int retCode); }; //--------------------------------------------------------------------------- -class wxScrolledWindow : public wxWindow { +class wxScrolledWindow : public wxPanel { public: wxScrolledWindow(wxWindow* parent, const wxWindowID id = -1, @@ -273,8 +452,13 @@ public: long style = wxHSCROLL | wxVSCROLL, char* name = "scrolledWindow"); + %pragma(python) addtomethod = "__init__:wx._StdWindowCallbacks(self)" + %pragma(python) addtomethod = "__init__:wx._StdOnScrollCallbacks(self)" + void EnableScrolling(bool xScrolling, bool yScrolling); + int GetScrollPageSize(int orient); void GetScrollPixelsPerUnit(int* OUTPUT, int* OUTPUT); + wxWindow* GetTargetWindow(); void GetVirtualSize(int* OUTPUT, int* OUTPUT); bool IsRetained(); void PrepareDC(wxDC& dc); @@ -282,7 +466,13 @@ public: void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, int noUnitsX, int noUnitsY, int xPos = 0, int yPos = 0); + void SetScrollPageSize(int orient, int pageSize); + void SetTargetWindow(wxWindow* window); void ViewStart(int* OUTPUT, int* OUTPUT); + + void CalcScrolledPosition( int x, int y, int *OUTPUT, int *OUTPUT); + void CalcUnscrolledPosition( int x, int y, int *OUTPUT, int *OUTPUT); + }; //---------------------------------------------------------------------- @@ -290,70 +480,99 @@ public: class wxMenu : public wxEvtHandler { public: - wxMenu(const wxString& title = wxPyEmptyStr); + wxMenu(const wxString& title = wxPyEmptyStr, long style = 0); void Append(int id, const wxString& item, const wxString& helpString = wxPyEmptyStr, int checkable = FALSE); %name(AppendMenu)void Append(int id, const wxString& item, wxMenu *subMenu, const wxString& helpString = wxPyEmptyStr); + %name(AppendItem)void Append(const wxMenuItem* item); + void AppendSeparator(); void Break(); void Check(int id, bool flag); + bool IsChecked(int id); void Enable(int id, bool enable); + bool IsEnabled(int id); + int FindItem(const wxString& itemString); -#ifdef __WXMSW__ + %name(FindItemById)wxMenuItem* FindItem(int id/*, wxMenu **menu = NULL*/); + wxString GetTitle(); void SetTitle(const wxString& title); -#endif - wxMenuItem* FindItemForId(int id); - wxString GetHelpString(int id); + wxString GetLabel(int id); - void SetHelpString(int id, const wxString& helpString); - bool IsChecked(int id); - bool IsEnabled(int id); void SetLabel(int id, const wxString& label); -}; + wxString GetHelpString(int id); + void SetHelpString(int id, const wxString& helpString); + void UpdateUI(wxEvtHandler* source = NULL); -// -// This one knows how to set a callback and handle INC- and DECREFing it. To -// be used for PopupMenus, but you must retain a referece to it while using -// it. -// -class wxPyMenu : public wxMenu { -public: - wxPyMenu(const wxString& title = wxPyEmptyStr, PyObject* func = NULL); - ~wxPyMenu(); + bool Delete(int id); + %name(DeleteItem)bool Delete(wxMenuItem *item); + bool Insert(size_t pos, wxMenuItem *item); + wxMenuItem *Remove(int id); + %name(RemoveItem) wxMenuItem *Remove(wxMenuItem *item); + + %addmethods { + void Destroy() { delete self; } + } + %name(DestroyId)bool Destroy(int id); + %name(DestroyItem)bool Destroy(wxMenuItem *item); + + size_t GetMenuItemCount(); + //wxMenuItemList& GetMenuItems(); + %addmethods { + PyObject* GetMenuItems() { + wxMenuItemList& list = self->GetMenuItems(); + return wxPy_ConvertList(&list, "wxMenuItem"); + } + } + + void SetEventHandler(wxEvtHandler *handler); + wxEvtHandler *GetEventHandler(); + + void SetInvokingWindow(wxWindow *win); + wxWindow *GetInvokingWindow(); + + long GetStyle(); + + bool IsAttached(); + + void SetParent(wxMenu *parent); + wxMenu *GetParent(); }; + //---------------------------------------------------------------------- -class wxMenuBar : public wxEvtHandler { +class wxMenuBar : public wxWindow { public: wxMenuBar(); - void Append(wxMenu *menu, const wxString& title); - void Check(int id, bool flag); - bool Checked(int id); - void Enable(int id, bool enable); - bool Enabled(int id); + bool Append(wxMenu *menu, const wxString& title); + bool Insert(size_t pos, wxMenu *menu, const wxString& title); + size_t GetMenuCount(); + wxMenu *GetMenu(size_t pos); + wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title); + wxMenu *Remove(size_t pos); + void EnableTop(size_t pos, bool enable); + void SetLabelTop(size_t pos, const wxString& label); + wxString GetLabelTop(size_t pos); int FindMenuItem(const wxString& menuString, const wxString& itemString); -#ifdef __WXGTK__ - %name(FindItemForId) wxMenuItem* FindMenuItemById( int id ); -#endif -#ifdef __WXMSW__ - wxMenuItem * FindItemForId(int id); - void EnableTop(int pos, bool enable); - wxString GetHelpString(int id); + %name(FindItemById)wxMenuItem* FindItem(int id/*, wxMenu **menu = NULL*/); + void Enable(int id, bool enable); + void Check(int id, bool check); + bool IsChecked(int id); + bool IsEnabled(int id); + + void SetLabel(int id, const wxString &label); wxString GetLabel(int id); + void SetHelpString(int id, const wxString& helpString); - void SetLabel(int id, const wxString& label); - wxString GetLabelTop(int pos); - void SetLabelTop(int pos, const wxString& label); -#endif - int GetMenuCount(); - wxMenu* GetMenu(int i); + wxString GetHelpString(int id); + }; @@ -361,46 +580,37 @@ public: class wxMenuItem { public: + wxMenuItem(wxMenu* parentMenu=NULL, int id=ID_SEPARATOR, + const wxString& text = wxPyEmptyStr, + const wxString& help = wxPyEmptyStr, + bool isCheckable = FALSE, wxMenu* subMenu = NULL); + + + wxMenu *GetMenu(); + void SetId(int id); + int GetId(); bool IsSeparator(); + void SetText(const wxString& str); + wxString GetLabel(); + const wxString& GetText(); + void SetCheckable(bool checkable); + bool IsCheckable(); + bool IsSubMenu(); + void SetSubMenu(wxMenu *menu); + wxMenu *GetSubMenu(); + void Enable(bool enable = TRUE); bool IsEnabled(); + void Check(bool check = TRUE); bool IsChecked(); - bool IsCheckable(); - int GetId(); - wxMenu* GetSubMenu(); -#ifdef __WXMSW__ - void SetName(const wxString& strName); - void DeleteSubMenu(); - const wxString& GetName(); -#endif + void Toggle(); + void SetHelp(const wxString& str); const wxString& GetHelp(); - void SetHelp(const wxString& strHelp); - void Enable(bool bDoEnable = TRUE); - void Check(bool bDoCheck = TRUE); + wxAcceleratorEntry *GetAccel(); + void SetAccel(wxAcceleratorEntry *accel); + }; //--------------------------------------------------------------------------- -///////////////////////////////////////////////////////////////////////////// -// -// $Log$ -// Revision 1.5 1998/08/17 18:29:40 RD -// Removed an extra method definition -// -// Revision 1.4 1998/08/16 04:31:11 RD -// More wxGTK work. -// -// Revision 1.3 1998/08/15 07:36:47 RD -// - Moved the header in the .i files out of the code that gets put into -// the .cpp files. It caused CVS conflicts because of the RCS ID being -// different each time. -// -// - A few minor fixes. -// -// Revision 1.2 1998/08/14 23:36:46 RD -// Beginings of wxGTK compatibility -// -// Revision 1.1 1998/08/09 08:25:52 RD -// Initial version -// -// +