X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ebf4302cbe16578f60e51dca83e3defaebb6db28..8bbd1bbf18bfc3ee0363870df5c26f585001c2d8:/wxPython/contrib/gizmos/gizmos.i diff --git a/wxPython/contrib/gizmos/gizmos.i b/wxPython/contrib/gizmos/gizmos.i index 36a475aab7..faf2636617 100644 --- a/wxPython/contrib/gizmos/gizmos.i +++ b/wxPython/contrib/gizmos/gizmos.i @@ -10,36 +10,54 @@ // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// -%module gizmos +%define DOCSTRING +"Various *gizmo* classes: `DynamicSashWindow`, `EditableListBox`, +`LEDNumberCtrl`, `TreeListCtrl`, etc." +%enddef + +%module(package="wx", docstring=DOCSTRING) gizmos %{ -#include "export.h" -#include "wx/gizmos/dynamicsash.h" +#include "wx/wxPython/wxPython.h" +#include "wx/wxPython/pyclasses.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + %} //--------------------------------------------------------------------------- -%include typemaps.i -%include my_typemaps.i +%import windows.i +%import controls.i +%pythoncode { import wx } +%pythoncode { __docfilter__ = wx._core.__DocFilter(globals()) } -%extern wx.i -%extern windows.i -%extern _defs.i -%extern events.i -%extern controls.i +MAKE_CONST_WXSTRING2(DynamicSashNameStr, wxT("dynamicSashWindow")); +MAKE_CONST_WXSTRING2(EditableListBoxNameStr, wxT("editableListBox")); +MAKE_CONST_WXSTRING(StaticPictureNameStr); + +MAKE_CONST_WXSTRING_NOSWIG(EmptyString); -//---------------------------------------------------------------------- +//--------------------------------------------------------------------------- enum { - wxEVT_DYNAMIC_SASH_SPLIT, - wxEVT_DYNAMIC_SASH_UNIFY, - wxDS_MANAGE_SCROLLBARS, wxDS_DRAG_CORNER, }; +%constant wxEventType wxEVT_DYNAMIC_SASH_SPLIT; +%constant wxEventType wxEVT_DYNAMIC_SASH_UNIFY; + /* wxDynamicSashSplitEvents are sent to your view by wxDynamicSashWindow @@ -89,7 +107,7 @@ public: As an application developer, you will simply create a wxDynamicSashWindow using either the Create() function or the more complex constructor - provided below, and then create a viewfrom wxPython.wx import * window whose parent is the + provided below, and then create a view window whose parent is the wxDynamicSashWindow. The child should respond to wxDynamicSashSplitEvents -- perhaps with an OnSplit() event handler -- by constructing a new view window whose parent is also the @@ -101,7 +119,7 @@ public: complex. (You might want to handle scrollbar events yourself, if, for instance, you wish to scroll a subwindow of the view you add to your wxDynamicSashWindow object, rather than scrolling the whole view.) - In this case, you will need to construfrom wxPython.wx import *ct your wxDynamicSashWindow without + In this case, you will need to construct your wxDynamicSashWindow without the wxDS_MANAGE_SCROLLBARS style and you will need to use the GetHScrollBar() and GetVScrollBar() methods to retrieve the scrollbar controls and call SetEventHanler() on them to redirect the scrolling @@ -116,21 +134,23 @@ public: */ +MustHaveApp(wxDynamicSashWindow); + class wxDynamicSashWindow : public wxWindow { public: - wxDynamicSashWindow(wxWindow *parent, wxWindowID id, + %pythonAppend wxDynamicSashWindow "self._setOORInfo(self)" + %pythonAppend wxDynamicSashWindow() "" + + wxDynamicSashWindow(wxWindow *parent, wxWindowID id=-1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER, - const char* name = "dynamicSashWindow"); - %name(wxPreDynamicSashWindow)wxDynamicSashWindow(); + const wxString& name = wxPyDynamicSashNameStr); + %RenameCtor(PreDynamicSashWindow, wxDynamicSashWindow()); - bool Create(wxWindow *parent, wxWindowID id, + bool Create(wxWindow *parent, wxWindowID id=-1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER, - const char* name = "dynamicSashWindow"); - - %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" - %pragma(python) addtomethod = "wxPreDynamicSashWindow:val._setOORInfo(val)" + const wxString& name = wxPyDynamicSashNameStr); wxScrollBar *GetHScrollBar(const wxWindow *child) const; wxScrollBar *GetVScrollBar(const wxWindow *child) const; @@ -138,32 +158,323 @@ public: -//---------------------------------------------------------------------- -// Python functions to act like the event macros +%pythoncode { +EVT_DYNAMIC_SASH_SPLIT = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_SPLIT, 1 ) +EVT_DYNAMIC_SASH_UNIFY = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_UNIFY, 1 ) +} + +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- -%pragma(python) code = " -def EVT_DYNAMIC_SASH_SPLIT(win, id, func): - win.Connect(id, -1, wxEVT_DYNAMIC_SASH_SPLIT, func) +enum { + wxEL_ALLOW_NEW, + wxEL_ALLOW_EDIT, + wxEL_ALLOW_DELETE, +}; -def EVT_DYNAMIC_SASH_UNIFY(win, id, func): - win.Connect(id, -1, wxEVT_DYNAMIC_SASH_UNIFY, func) -" +// This class provides a composite control that lets the +// user easily enter list of strings +MustHaveApp(wxEditableListBox); +class wxEditableListBox : public wxPanel +{ +public: + %pythonAppend wxEditableListBox "self._setOORInfo(self)" + %pythonAppend wxEditableListBox() "" + + wxEditableListBox(wxWindow *parent, wxWindowID id=-1, + const wxString& label = wxPyEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxEL_ALLOW_NEW | wxEL_ALLOW_EDIT | wxEL_ALLOW_DELETE, + const wxString& name = wxPyEditableListBoxNameStr); + + + void SetStrings(const wxArrayString& strings); + + //void GetStrings(wxArrayString& strings); + %extend { + PyObject* GetStrings() { + wxArrayString strings; + self->GetStrings(strings); + return wxArrayString2PyList_helper(strings); + } + } + + wxPyListCtrl* GetListCtrl(); + wxBitmapButton* GetDelButton(); + wxBitmapButton* GetNewButton(); + wxBitmapButton* GetUpButton(); + wxBitmapButton* GetDownButton(); + wxBitmapButton* GetEditButton(); +}; + + + +//--------------------------------------------------------------------------- + + +/* + * wxRemotelyScrolledTreeCtrl + * + * This tree control disables its vertical scrollbar and catches scroll + * events passed by a scrolled window higher in the hierarchy. + * It also updates the scrolled window vertical scrollbar as appropriate. + */ + +%{ + typedef wxTreeCtrl wxPyTreeCtrl; +%} + +MustHaveApp(wxRemotelyScrolledTreeCtrl); + +class wxRemotelyScrolledTreeCtrl: public wxPyTreeCtrl +{ +public: + %pythonAppend wxRemotelyScrolledTreeCtrl "self._setOORInfo(self)" + %pythonAppend wxRemotelyScrolledTreeCtrl() "" + + wxRemotelyScrolledTreeCtrl(wxWindow* parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTR_HAS_BUTTONS); + + + void HideVScrollbar(); + + // Adjust the containing wxScrolledWindow's scrollbars appropriately + void AdjustRemoteScrollbars(); + + // Find the scrolled window that contains this control + wxScrolledWindow* GetScrolledWindow() const; + + // Scroll to the given line (in scroll units where each unit is + // the height of an item) + void ScrollToLine(int posHoriz, int posVert); + + // The companion window is one which will get notified when certain + // events happen such as node expansion + void SetCompanionWindow(wxWindow* companion); + wxWindow* GetCompanionWindow() const; +}; -//---------------------------------------------------------------------- -%init %{ - wxClassInfo::CleanUpClasses(); - wxClassInfo::InitializeClasses(); +/* + * wxTreeCompanionWindow + * + * A window displaying values associated with tree control items. + */ +%{ +class wxPyTreeCompanionWindow: public wxTreeCompanionWindow +{ +public: + wxPyTreeCompanionWindow(wxWindow* parent, wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0) + : wxTreeCompanionWindow(parent, id, pos, size, style) {} + + + virtual void DrawItem(wxDC& dc, wxTreeItemId id, const wxRect& rect) { + bool found; + wxPyBlock_t blocked = wxPyBeginBlockThreads(); + if ((found = wxPyCBH_findCallback(m_myInst, "DrawItem"))) { + PyObject* dcobj = wxPyMake_wxObject(&dc,false); + PyObject* idobj = wxPyConstructObject((void*)&id, wxT("wxTreeItemId"), false); + PyObject* recobj= wxPyConstructObject((void*)&rect, wxT("wxRect"), false); + wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOO)", dcobj, idobj, recobj)); + Py_DECREF(dcobj); + Py_DECREF(idobj); + Py_DECREF(recobj); + } + wxPyEndBlockThreads(blocked); + if (! found) + wxTreeCompanionWindow::DrawItem(dc, id, rect); + } + + PYPRIVATE; +}; %} +MustHaveApp(wxPyTreeCompanionWindow); + +%rename(TreeCompanionWindow) wxPyTreeCompanionWindow; +class wxPyTreeCompanionWindow: public wxWindow +{ +public: + %pythonAppend wxPyTreeCompanionWindow "self._setOORInfo(self);self._setCallbackInfo(self, TreeCompanionWindow)" + %pythonAppend wxPyTreeCompanionWindow() "" + + wxPyTreeCompanionWindow(wxWindow* parent, wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0); + void _setCallbackInfo(PyObject* self, PyObject* _class); + + wxRemotelyScrolledTreeCtrl* GetTreeCtrl() const; + void SetTreeCtrl(wxRemotelyScrolledTreeCtrl* treeCtrl); +}; + + + +/* + * wxThinSplitterWindow + * + * Implements a splitter with a less obvious sash + * than the usual one. + */ + +MustHaveApp(wxThinSplitterWindow); + +class wxThinSplitterWindow: public wxSplitterWindow +{ +public: + %pythonAppend wxThinSplitterWindow "self._setOORInfo(self)" + %pythonAppend wxThinSplitterWindow() "" + + wxThinSplitterWindow(wxWindow* parent, wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSP_3D | wxCLIP_CHILDREN); +}; + + + +/* + * wxSplitterScrolledWindow + * + * This scrolled window is aware of the fact that one of its + * children is a splitter window. It passes on its scroll events + * (after some processing) to both splitter children for them + * scroll appropriately. + */ + +MustHaveApp(wxSplitterScrolledWindow); + +class wxSplitterScrolledWindow: public wxScrolledWindow +{ +public: + %pythonAppend wxSplitterScrolledWindow "self._setOORInfo(self)" + %pythonAppend wxSplitterScrolledWindow() "" + + wxSplitterScrolledWindow(wxWindow* parent, wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0); +}; + + +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- + + +enum wxLEDValueAlign +{ + wxLED_ALIGN_LEFT, + wxLED_ALIGN_RIGHT, + wxLED_ALIGN_CENTER, + + wxLED_ALIGN_MASK, + + wxLED_DRAW_FADED, +}; + + +MustHaveApp(wxLEDNumberCtrl); + +class wxLEDNumberCtrl : public wxControl +{ +public: + %pythonAppend wxLEDNumberCtrl "self._setOORInfo(self)" + %pythonAppend wxLEDNumberCtrl() "" + + wxLEDNumberCtrl(wxWindow *parent, wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxLED_ALIGN_LEFT | wxLED_DRAW_FADED); + %RenameCtor(PreLEDNumberCtrl, wxLEDNumberCtrl()); + + bool Create(wxWindow *parent, wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxLED_ALIGN_LEFT | wxLED_DRAW_FADED); + + wxLEDValueAlign GetAlignment() const; + bool GetDrawFaded() const; + const wxString &GetValue() const; + + void SetAlignment(wxLEDValueAlign Alignment, bool Redraw = true); + void SetDrawFaded(bool DrawFaded, bool Redraw = true); + void SetValue(const wxString &Value, bool Redraw = true); + +}; + + + //---------------------------------------------------------------------- -%pragma(python) include="_gizmoextras.py"; +%include _treelist.i //---------------------------------------------------------------------- + +enum +{ + wxSCALE_HORIZONTAL, + wxSCALE_VERTICAL, + wxSCALE_UNIFORM, + wxSCALE_CUSTOM +}; + +MustHaveApp(wxStaticPicture); + +class wxStaticPicture : public wxControl +{ +public: + %pythonAppend wxStaticPicture "self._setOORInfo(self)" + %pythonAppend wxStaticPicture() "" + + wxStaticPicture( wxWindow* parent, wxWindowID id=-1, + const wxBitmap& label=wxNullBitmap, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxPyStaticPictureNameStr ); + + %RenameCtor(PreStaticPicture, wxStaticPicture()); + + bool Create( wxWindow* parent, wxWindowID id=-1, + const wxBitmap& label=wxNullBitmap, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxPyStaticPictureNameStr ); + + void SetBitmap( const wxBitmap& bmp ); + wxBitmap GetBitmap() const; + void SetIcon( const wxIcon& icon ); + wxIcon GetIcon() const; + + void SetAlignment( int align ); + int GetAlignment() const; + + void SetScale( int scale ); + int GetScale() const; + + void SetCustomScale( float sx, float sy ); + void GetCustomScale( float* OUTPUT, float* OUTPUT ) const; + +}; + + //---------------------------------------------------------------------- +//---------------------------------------------------------------------- + +%init %{ + wxPyPtrTypeMap_Add("wxTreeCompanionWindow", "wxPyTreeCompanionWindow"); +%} +//---------------------------------------------------------------------- +//----------------------------------------------------------------------