Added wxDllWidget from Vaclav Slavik which allows wx widgets derived
from wxWindow to be loaded from a C++ .dll (or .so) and be used in a wxPython program, without the widget having to be SWIGged first. Various updates for distribs git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12890 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		| @@ -105,6 +105,14 @@ wxRemotelyScrolledTreeCtrl, wxTreeCompanionWindow, | |||||||
| wxThinSplitterWindow, and wxSplitterScrolledWindow, some of which may | wxThinSplitterWindow, and wxSplitterScrolledWindow, some of which may | ||||||
| also be useful by themselves. | also be useful by themselves. | ||||||
|  |  | ||||||
|  | Added wxDllWidget from Vaclav Slavik which allows wx widgets derived | ||||||
|  | from wxWindow to be loaded from a C++ .dll (or .so) and be used in a | ||||||
|  | wxPython program, without the widget having to be SWIGged first.  The | ||||||
|  | visible API of the widget is limited to wxWindow methods plus a | ||||||
|  | SendCommand method, but it is still quite powerful.  See | ||||||
|  | wxPython/contrib/dllwidget and wxPython/demo/dllwidget for more | ||||||
|  | details. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -166,3 +166,17 @@ include contrib/gizmos/*.c | |||||||
| include contrib/gizmos/*.h | include contrib/gizmos/*.h | ||||||
| include contrib/gizmos/contrib/include/wx/gizmos/*.h | include contrib/gizmos/contrib/include/wx/gizmos/*.h | ||||||
| include contrib/gizmos/contrib/src/gizmos/*.cpp | include contrib/gizmos/contrib/src/gizmos/*.cpp | ||||||
|  |  | ||||||
|  | include contrib/dllwidget/*.txt | ||||||
|  | include contrib/dllwidget/*.i | ||||||
|  | include contrib/dllwidget/*.py | ||||||
|  | include contrib/dllwidget/*.cpp | ||||||
|  | include contrib/dllwidget/*.c | ||||||
|  | include contrib/dllwidget/*.h | ||||||
|  |  | ||||||
|  | include demo/dllwidget/*.h | ||||||
|  | include demo/dllwidget/*.cpp | ||||||
|  | include demo/dllwidget/*.py | ||||||
|  | include demo/dllwidget/Makefile | ||||||
|  | include demo/dllwidget/makefile.* | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										128
									
								
								wxPython/contrib/dllwidget/dllwidget.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								wxPython/contrib/dllwidget/dllwidget.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,128 @@ | |||||||
|  | ///////////////////////////////////////////////////////////////////////////// | ||||||
|  | // Name:        dllwidget.cpp | ||||||
|  | // Purpose:     Dynamically loadable C++ widget for wxPython | ||||||
|  | // Author:      Vaclav Slavik | ||||||
|  | // Created:     2001/12/03 | ||||||
|  | // RCS-ID:      $Id$ | ||||||
|  | // Copyright:   (c) 2001 Vaclav Slavik | ||||||
|  | // Licence:     wxWindows licence | ||||||
|  | ///////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  | #ifdef __GNUG__ | ||||||
|  | #pragma implementation "dllwidget.h" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | // For compilers that support precompilation, includes "wx.h". | ||||||
|  | #include "wx/wxprec.h" | ||||||
|  |  | ||||||
|  | #ifdef __BORLANDC__ | ||||||
|  |     #pragma hdrstop | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #include "wx/defs.h" | ||||||
|  | #include "wx/dynlib.h" | ||||||
|  | #include "wx/sizer.h" | ||||||
|  |  | ||||||
|  | #include "dllwidget.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | IMPLEMENT_ABSTRACT_CLASS(wxDllWidget, wxPanel) | ||||||
|  |  | ||||||
|  | wxDllWidget::wxDllWidget(wxWindow *parent, | ||||||
|  |                          wxWindowID id, | ||||||
|  |                          const wxString& dllName, const wxString& className, | ||||||
|  |                          const wxPoint& pos, const wxSize& size, | ||||||
|  |                          long style) | ||||||
|  |     : wxPanel(parent, id, pos, size, wxTAB_TRAVERSAL | wxNO_BORDER, | ||||||
|  |               className + wxT("_container")), | ||||||
|  |     m_widget(NULL), m_lib(NULL), m_controlAdded(FALSE) | ||||||
|  | { | ||||||
|  |     SetBackgroundColour(wxColour(255, 0, 255)); | ||||||
|  |     if ( !!className ) | ||||||
|  |         LoadWidget(dllName, className, style); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | wxDllWidget::~wxDllWidget() | ||||||
|  | { | ||||||
|  |     UnloadWidget(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void wxDllWidget::AddChild(wxWindowBase *child) | ||||||
|  | { | ||||||
|  |     wxASSERT_MSG( !m_controlAdded, wxT("Couldn't load two widgets into one container!") ) | ||||||
|  |  | ||||||
|  |     wxPanel::AddChild(child); | ||||||
|  |  | ||||||
|  |     m_controlAdded = TRUE; | ||||||
|  |     wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); | ||||||
|  |     sizer->Add((wxWindow*)child, 1, wxEXPAND); | ||||||
|  |     SetSizer(sizer); | ||||||
|  |     SetAutoLayout(TRUE); | ||||||
|  |     Layout(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | wxString wxDllWidget::GetDllExt() | ||||||
|  | { | ||||||
|  |     return wxDllLoader::GetDllExt(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | typedef WXDLLEXPORT bool (*DLL_WidgetFactory_t)(const wxString& className, | ||||||
|  |                                                 wxWindow *parent, | ||||||
|  |                                                 long style, | ||||||
|  |                                                 wxWindow **classInst, | ||||||
|  |                                                 wxSendCommandFunc *cmdFunc); | ||||||
|  |  | ||||||
|  | bool wxDllWidget::LoadWidget(const wxString& dll, const wxString& className, | ||||||
|  |                              long style) | ||||||
|  | { | ||||||
|  |     UnloadWidget(); | ||||||
|  |  | ||||||
|  |     // Load the dynamic library | ||||||
|  |     m_lib = new wxDynamicLibrary(dll); | ||||||
|  |     if ( !m_lib->IsLoaded() ) | ||||||
|  |     { | ||||||
|  |         delete m_lib; | ||||||
|  |         m_lib = NULL; | ||||||
|  |         return FALSE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     DLL_WidgetFactory_t factory; | ||||||
|  |     factory = (DLL_WidgetFactory_t) m_lib->GetSymbol(wxT("DLL_WidgetFactory")); | ||||||
|  |     if ( factory == NULL) | ||||||
|  |     { | ||||||
|  |         delete m_lib; | ||||||
|  |         m_lib = NULL; | ||||||
|  |         return FALSE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if ( !factory(className, this, style, &m_widget, &m_cmdFunc) ) | ||||||
|  |     { | ||||||
|  |         delete m_widget; | ||||||
|  |         delete m_lib; | ||||||
|  |         m_lib = NULL; | ||||||
|  |         m_widget = NULL; | ||||||
|  |         return FALSE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void wxDllWidget::UnloadWidget() | ||||||
|  | { | ||||||
|  |     if ( m_widget ) | ||||||
|  |     { | ||||||
|  |         DestroyChildren(); | ||||||
|  |         m_widget = NULL; | ||||||
|  |         delete m_lib; | ||||||
|  |         m_lib = NULL; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int wxDllWidget::SendCommand(int cmd, const wxString& param) | ||||||
|  | { | ||||||
|  |     wxASSERT_MSG( m_widget && m_cmdFunc, wxT("Sending command to not loaded widget!")); | ||||||
|  |  | ||||||
|  |     return m_cmdFunc(m_widget, cmd, param); | ||||||
|  | } | ||||||
							
								
								
									
										143
									
								
								wxPython/contrib/dllwidget/dllwidget.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								wxPython/contrib/dllwidget/dllwidget.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,143 @@ | |||||||
|  | ///////////////////////////////////////////////////////////////////////////// | ||||||
|  | // Name:        dllwidget.h | ||||||
|  | // Purpose:     Dynamically loadable C++ widget for wxPython | ||||||
|  | // Author:      Vaclav Slavik | ||||||
|  | // Created:     2001/12/03 | ||||||
|  | // RCS-ID:      $Id$ | ||||||
|  | // Copyright:   (c) 2001 Vaclav Slavik | ||||||
|  | // Licence:     wxWindows licence | ||||||
|  | ///////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  | #ifdef __GNUG__ | ||||||
|  | #pragma interface "dllwidget.h" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifndef __DLLWIDGET_H__ | ||||||
|  | #define __DLLWIDGET_H__ | ||||||
|  |  | ||||||
|  | #include "wx/panel.h" | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  | ||||||
|  | wxDllWidget can be used to embed a wxWindow implemented in C++ in your | ||||||
|  | wxPython application without the need to write a SWIG interface. Widget's code | ||||||
|  | is stored in shared library or DLL that exports DLL_WidgetFactory symbol | ||||||
|  | and loaded at runtime. All you have to do is to pass the name of DLL and the class | ||||||
|  | to create to wxDllWidget's ctor. | ||||||
|  |  | ||||||
|  | Runtime-loadable widget must have HandleCommand method (see the example) that is | ||||||
|  | used to communicate with Python app. You call wxDllWidget.SendCommand(cmd,param) from | ||||||
|  | Python and it in turn calls HandleCommand of the loaded widget. | ||||||
|  |  | ||||||
|  | You must use DECLARE_DLL_WIDGET, BEGIN_WIDGET_LIBRARY, END_WIDGET_LIBRARY and | ||||||
|  | REGISTER_WIDGET macros in your C++ module in order to provide all the meat | ||||||
|  | wxDllWidget needs. | ||||||
|  |  | ||||||
|  | Example of use: | ||||||
|  |  | ||||||
|  |     #define CMD_MAKEWHITE     1 | ||||||
|  |  | ||||||
|  |     class MyWindow : public wxWindow | ||||||
|  |     { | ||||||
|  |     public: | ||||||
|  |         MyWindow(wxWindow *parent, long style) | ||||||
|  |             : wxWindow(parent, -1) {} | ||||||
|  |  | ||||||
|  |         int HandleCommand(int cmd, const wxString& param) | ||||||
|  |         { | ||||||
|  |             if (cmd == CMD_MAKEWHITE) | ||||||
|  |                 SetBackgroundColour(*wxWHITE); | ||||||
|  |             return 0; | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |     DECLARE_DLL_WIDGET(MyWindow) | ||||||
|  |  | ||||||
|  |     class MyCanvasWindow : public wxScrolledWindow | ||||||
|  |     { | ||||||
|  |         ... | ||||||
|  |     }; | ||||||
|  |     DECLARE_DLL_WIDGET(MyCanvasWindow) | ||||||
|  |  | ||||||
|  |     BEGIN_WIDGET_LIBRARY() | ||||||
|  |         REGISTER_WIDGET(MyWindow) | ||||||
|  |         REGISTER_WIDGET(MyCanvasWindow) | ||||||
|  |     END_WIDGET_LIBRARY() | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class WXDLLEXPORT wxDynamicLibrary; | ||||||
|  |  | ||||||
|  | typedef int (*wxSendCommandFunc)(wxWindow *wnd, int cmd, const wxString& param); | ||||||
|  |  | ||||||
|  | class wxDllWidget : public wxPanel | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     wxDllWidget(wxWindow *parent, | ||||||
|  |                 wxWindowID id = -1, | ||||||
|  |                 const wxString& dllName = wxEmptyString, | ||||||
|  |                 const wxString& className = wxEmptyString, | ||||||
|  |                 const wxPoint& pos = wxDefaultPosition, | ||||||
|  |                 const wxSize& size = wxDefaultSize, | ||||||
|  |                 long style = 0); | ||||||
|  |     virtual ~wxDllWidget(); | ||||||
|  |  | ||||||
|  |     bool Ok() { return m_widget != NULL; } | ||||||
|  |  | ||||||
|  |     virtual int SendCommand(int cmd, const wxString& param = wxEmptyString); | ||||||
|  |     virtual wxWindow* GetEmbeddedWindow() { return m_widget; } | ||||||
|  |  | ||||||
|  |     virtual void AddChild(wxWindowBase *child); | ||||||
|  |  | ||||||
|  |     static wxString GetDllExt(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | protected: | ||||||
|  |     bool LoadWidget(const wxString& dll, const wxString& className, long style); | ||||||
|  |     void UnloadWidget(); | ||||||
|  |  | ||||||
|  | protected: | ||||||
|  |     wxWindow*           m_widget; | ||||||
|  |     wxSendCommandFunc   m_cmdFunc; | ||||||
|  |     wxDynamicLibrary*   m_lib; | ||||||
|  |     bool                m_controlAdded; | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     DECLARE_ABSTRACT_CLASS(wxDllWidget) | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define DECLARE_DLL_WIDGET(widget) \ | ||||||
|  |     static int SendCommandTo##widget(wxWindow *wnd, int cmd, const wxString& param) \ | ||||||
|  |     { \ | ||||||
|  |         return wxStaticCast(wnd, widget)->HandleCommand(cmd, param); \ | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define BEGIN_WIDGET_LIBRARY() \ | ||||||
|  |     extern "C" WXEXPORT bool DLL_WidgetFactory( \ | ||||||
|  |                 const wxString& className, \ | ||||||
|  |                 wxWindow *parent, \ | ||||||
|  |                 long style, \ | ||||||
|  |                 wxWindow **classInst, \ | ||||||
|  |                 wxSendCommandFunc *cmdFunc) \ | ||||||
|  |     { \ | ||||||
|  |         wxClassInfo::CleanUpClasses(); \ | ||||||
|  |         wxClassInfo::InitializeClasses(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define REGISTER_WIDGET(widget) \ | ||||||
|  |         if ( className == wxT(#widget) ) \ | ||||||
|  |         { \ | ||||||
|  |             *classInst = new widget(parent, style); \ | ||||||
|  |             *cmdFunc = SendCommandTo##widget; \ | ||||||
|  |             return TRUE; \ | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define END_WIDGET_LIBRARY() \ | ||||||
|  |        return FALSE; \ | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | #endif // __DLLWIDGET_H__ | ||||||
							
								
								
									
										6
									
								
								wxPython/contrib/dllwidget/dllwidget.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								wxPython/contrib/dllwidget/dllwidget.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | # The SWIG module is named dllwidget_ to avoid name clashes, so | ||||||
|  | # this stub just imports everything in it so the firendly module | ||||||
|  | # name can be used elsewhere. | ||||||
|  |  | ||||||
|  | from dllwidget_ import * | ||||||
|  |  | ||||||
							
								
								
									
										501
									
								
								wxPython/contrib/dllwidget/dllwidget_.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										501
									
								
								wxPython/contrib/dllwidget/dllwidget_.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,501 @@ | |||||||
|  | /* | ||||||
|  |  * FILE : contrib/dllwidget/dllwidget_.cpp | ||||||
|  |  *  | ||||||
|  |  * This file was automatically generated by : | ||||||
|  |  * Simplified Wrapper and Interface Generator (SWIG) | ||||||
|  |  * Version 1.1 (Build 883) | ||||||
|  |  *  | ||||||
|  |  * Portions Copyright (c) 1995-1998 | ||||||
|  |  * The University of Utah and The Regents of the University of California. | ||||||
|  |  * Permission is granted to distribute this file in any manner provided | ||||||
|  |  * this notice remains intact. | ||||||
|  |  *  | ||||||
|  |  * Do not make changes to this file--changes will be lost! | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define SWIGCODE | ||||||
|  | /* Implementation : PYTHON */ | ||||||
|  |  | ||||||
|  | #define SWIGPYTHON | ||||||
|  | #include <string.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | /* Definitions for Windows/Unix exporting */ | ||||||
|  | #if defined(__WIN32__) | ||||||
|  | #   if defined(_MSC_VER) | ||||||
|  | #	define SWIGEXPORT(a) __declspec(dllexport) a | ||||||
|  | #   else | ||||||
|  | #	if defined(__BORLANDC__) | ||||||
|  | #	    define SWIGEXPORT(a) a _export | ||||||
|  | #	else | ||||||
|  | #	    define SWIGEXPORT(a) a | ||||||
|  | #	endif | ||||||
|  | #   endif | ||||||
|  | #else | ||||||
|  | #   define SWIGEXPORT(a) a | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #include "Python.h" | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | extern void SWIG_MakePtr(char *, void *, char *); | ||||||
|  | extern void SWIG_RegisterMapping(char *, char *, void *(*)(void *)); | ||||||
|  | extern char *SWIG_GetPtr(char *, void **, char *); | ||||||
|  | extern char *SWIG_GetPtrObj(PyObject *, void **, char *); | ||||||
|  | extern void SWIG_addvarlink(PyObject *, char *, PyObject *(*)(void), int (*)(PyObject *)); | ||||||
|  | extern PyObject *SWIG_newvarlink(void); | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | #define SWIG_init    initdllwidget_c | ||||||
|  |  | ||||||
|  | #define SWIG_name    "dllwidget_c" | ||||||
|  |  | ||||||
|  | #include "export.h" | ||||||
|  | #include "dllwidget.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static PyObject* t_output_helper(PyObject* target, PyObject* o) { | ||||||
|  |     PyObject*   o2; | ||||||
|  |     PyObject*   o3; | ||||||
|  |  | ||||||
|  |     if (!target) { | ||||||
|  |         target = o; | ||||||
|  |     } else if (target == Py_None) { | ||||||
|  |         Py_DECREF(Py_None); | ||||||
|  |         target = o; | ||||||
|  |     } else { | ||||||
|  |         if (!PyTuple_Check(target)) { | ||||||
|  |             o2 = target; | ||||||
|  |             target = PyTuple_New(1); | ||||||
|  |             PyTuple_SetItem(target, 0, o2); | ||||||
|  |         } | ||||||
|  |         o3 = PyTuple_New(1); | ||||||
|  |         PyTuple_SetItem(o3, 0, o); | ||||||
|  |  | ||||||
|  |         o2 = target; | ||||||
|  |         target = PySequence_Concat(o2, o3); | ||||||
|  |         Py_DECREF(o2); | ||||||
|  |         Py_DECREF(o3); | ||||||
|  |     } | ||||||
|  |     return target; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #if PYTHON_API_VERSION >= 1009 | ||||||
|  |     static char* wxStringErrorMsg = "String or Unicode type required"; | ||||||
|  | #else | ||||||
|  |     static char* wxStringErrorMsg = "String type required"; | ||||||
|  | #endif | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | static void *SwigwxDllWidgetTowxPanel(void *ptr) { | ||||||
|  |     wxDllWidget *src; | ||||||
|  |     wxPanel *dest; | ||||||
|  |     src = (wxDllWidget *) ptr; | ||||||
|  |     dest = (wxPanel *) src; | ||||||
|  |     return (void *) dest; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void *SwigwxDllWidgetTowxWindow(void *ptr) { | ||||||
|  |     wxDllWidget *src; | ||||||
|  |     wxWindow *dest; | ||||||
|  |     src = (wxDllWidget *) ptr; | ||||||
|  |     dest = (wxWindow *) src; | ||||||
|  |     return (void *) dest; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void *SwigwxDllWidgetTowxEvtHandler(void *ptr) { | ||||||
|  |     wxDllWidget *src; | ||||||
|  |     wxEvtHandler *dest; | ||||||
|  |     src = (wxDllWidget *) ptr; | ||||||
|  |     dest = (wxEvtHandler *) src; | ||||||
|  |     return (void *) dest; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void *SwigwxDllWidgetTowxObject(void *ptr) { | ||||||
|  |     wxDllWidget *src; | ||||||
|  |     wxObject *dest; | ||||||
|  |     src = (wxDllWidget *) ptr; | ||||||
|  |     dest = (wxObject *) src; | ||||||
|  |     return (void *) dest; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #define new_wxDllWidget(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6) (new wxDllWidget(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6)) | ||||||
|  | static PyObject *_wrap_new_wxDllWidget(PyObject *self, PyObject *args, PyObject *kwargs) { | ||||||
|  |     PyObject * _resultobj; | ||||||
|  |     wxDllWidget * _result; | ||||||
|  |     wxWindow * _arg0; | ||||||
|  |     wxWindowID  _arg1 = (wxWindowID ) -1; | ||||||
|  |     wxString * _arg2 = (wxString *) &wxEmptyString; | ||||||
|  |     wxString * _arg3 = (wxString *) &wxEmptyString; | ||||||
|  |     wxPoint * _arg4 = (wxPoint *) &wxDefaultPosition; | ||||||
|  |     wxSize * _arg5 = (wxSize *) &wxDefaultSize; | ||||||
|  |     long  _arg6 = (long ) 0; | ||||||
|  |     PyObject * _argo0 = 0; | ||||||
|  |     PyObject * _obj2 = 0; | ||||||
|  |     PyObject * _obj3 = 0; | ||||||
|  |     wxPoint  temp; | ||||||
|  |     PyObject * _obj4 = 0; | ||||||
|  |     wxSize  temp0; | ||||||
|  |     PyObject * _obj5 = 0; | ||||||
|  |     char *_kwnames[] = { "parent","id","dllName","className","pos","size","style", NULL }; | ||||||
|  |     char _ptemp[128]; | ||||||
|  |  | ||||||
|  |     self = self; | ||||||
|  |     if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|iOOOOl:new_wxDllWidget",_kwnames,&_argo0,&_arg1,&_obj2,&_obj3,&_obj4,&_obj5,&_arg6))  | ||||||
|  |         return NULL; | ||||||
|  |     if (_argo0) { | ||||||
|  |         if (_argo0 == Py_None) { _arg0 = NULL; } | ||||||
|  |         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxWindow_p")) { | ||||||
|  |             PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxDllWidget. Expected _wxWindow_p."); | ||||||
|  |         return NULL; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     if (_obj2) | ||||||
|  | { | ||||||
|  | #if PYTHON_API_VERSION >= 1009 | ||||||
|  |     char* tmpPtr; int tmpSize; | ||||||
|  |     if (!PyString_Check(_obj2) && !PyUnicode_Check(_obj2)) { | ||||||
|  |         PyErr_SetString(PyExc_TypeError, wxStringErrorMsg); | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |     if (PyString_AsStringAndSize(_obj2, &tmpPtr, &tmpSize) == -1) | ||||||
|  |         return NULL; | ||||||
|  |     _arg2 = new wxString(tmpPtr, tmpSize); | ||||||
|  | #else | ||||||
|  |     if (!PyString_Check(_obj2)) { | ||||||
|  |         PyErr_SetString(PyExc_TypeError, wxStringErrorMsg); | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |     _arg2 = new wxString(PyString_AS_STRING(_obj2), PyString_GET_SIZE(_obj2)); | ||||||
|  | #endif | ||||||
|  | } | ||||||
|  |     if (_obj3) | ||||||
|  | { | ||||||
|  | #if PYTHON_API_VERSION >= 1009 | ||||||
|  |     char* tmpPtr; int tmpSize; | ||||||
|  |     if (!PyString_Check(_obj3) && !PyUnicode_Check(_obj3)) { | ||||||
|  |         PyErr_SetString(PyExc_TypeError, wxStringErrorMsg); | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |     if (PyString_AsStringAndSize(_obj3, &tmpPtr, &tmpSize) == -1) | ||||||
|  |         return NULL; | ||||||
|  |     _arg3 = new wxString(tmpPtr, tmpSize); | ||||||
|  | #else | ||||||
|  |     if (!PyString_Check(_obj3)) { | ||||||
|  |         PyErr_SetString(PyExc_TypeError, wxStringErrorMsg); | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |     _arg3 = new wxString(PyString_AS_STRING(_obj3), PyString_GET_SIZE(_obj3)); | ||||||
|  | #endif | ||||||
|  | } | ||||||
|  |     if (_obj4) | ||||||
|  | { | ||||||
|  |     _arg4 = &temp; | ||||||
|  |     if (! wxPoint_helper(_obj4, &_arg4)) | ||||||
|  |         return NULL; | ||||||
|  | } | ||||||
|  |     if (_obj5) | ||||||
|  | { | ||||||
|  |     _arg5 = &temp0; | ||||||
|  |     if (! wxSize_helper(_obj5, &_arg5)) | ||||||
|  |         return NULL; | ||||||
|  | } | ||||||
|  | { | ||||||
|  |     wxPy_BEGIN_ALLOW_THREADS; | ||||||
|  |         _result = (wxDllWidget *)new_wxDllWidget(_arg0,_arg1,*_arg2,*_arg3,*_arg4,*_arg5,_arg6); | ||||||
|  |  | ||||||
|  |     wxPy_END_ALLOW_THREADS; | ||||||
|  | }    if (_result) { | ||||||
|  |         SWIG_MakePtr(_ptemp, (char *) _result,"_wxDllWidget_p"); | ||||||
|  |         _resultobj = Py_BuildValue("s",_ptemp); | ||||||
|  |     } else { | ||||||
|  |         Py_INCREF(Py_None); | ||||||
|  |         _resultobj = Py_None; | ||||||
|  |     } | ||||||
|  | { | ||||||
|  |     if (_obj2) | ||||||
|  |         delete _arg2; | ||||||
|  | } | ||||||
|  | { | ||||||
|  |     if (_obj3) | ||||||
|  |         delete _arg3; | ||||||
|  | } | ||||||
|  |     return _resultobj; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #define wxDllWidget_Ok(_swigobj)  (_swigobj->Ok()) | ||||||
|  | static PyObject *_wrap_wxDllWidget_Ok(PyObject *self, PyObject *args, PyObject *kwargs) { | ||||||
|  |     PyObject * _resultobj; | ||||||
|  |     bool  _result; | ||||||
|  |     wxDllWidget * _arg0; | ||||||
|  |     PyObject * _argo0 = 0; | ||||||
|  |     char *_kwnames[] = { "self", NULL }; | ||||||
|  |  | ||||||
|  |     self = self; | ||||||
|  |     if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxDllWidget_Ok",_kwnames,&_argo0))  | ||||||
|  |         return NULL; | ||||||
|  |     if (_argo0) { | ||||||
|  |         if (_argo0 == Py_None) { _arg0 = NULL; } | ||||||
|  |         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxDllWidget_p")) { | ||||||
|  |             PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxDllWidget_Ok. Expected _wxDllWidget_p."); | ||||||
|  |         return NULL; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | { | ||||||
|  |     wxPy_BEGIN_ALLOW_THREADS; | ||||||
|  |         _result = (bool )wxDllWidget_Ok(_arg0); | ||||||
|  |  | ||||||
|  |     wxPy_END_ALLOW_THREADS; | ||||||
|  | }    _resultobj = Py_BuildValue("i",_result); | ||||||
|  |     return _resultobj; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #define wxDllWidget_SendCommand(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SendCommand(_swigarg0,_swigarg1)) | ||||||
|  | static PyObject *_wrap_wxDllWidget_SendCommand(PyObject *self, PyObject *args, PyObject *kwargs) { | ||||||
|  |     PyObject * _resultobj; | ||||||
|  |     int  _result; | ||||||
|  |     wxDllWidget * _arg0; | ||||||
|  |     int  _arg1; | ||||||
|  |     wxString * _arg2 = (wxString *) &wxEmptyString; | ||||||
|  |     PyObject * _argo0 = 0; | ||||||
|  |     PyObject * _obj2 = 0; | ||||||
|  |     char *_kwnames[] = { "self","cmd","param", NULL }; | ||||||
|  |  | ||||||
|  |     self = self; | ||||||
|  |     if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi|O:wxDllWidget_SendCommand",_kwnames,&_argo0,&_arg1,&_obj2))  | ||||||
|  |         return NULL; | ||||||
|  |     if (_argo0) { | ||||||
|  |         if (_argo0 == Py_None) { _arg0 = NULL; } | ||||||
|  |         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxDllWidget_p")) { | ||||||
|  |             PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxDllWidget_SendCommand. Expected _wxDllWidget_p."); | ||||||
|  |         return NULL; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     if (_obj2) | ||||||
|  | { | ||||||
|  | #if PYTHON_API_VERSION >= 1009 | ||||||
|  |     char* tmpPtr; int tmpSize; | ||||||
|  |     if (!PyString_Check(_obj2) && !PyUnicode_Check(_obj2)) { | ||||||
|  |         PyErr_SetString(PyExc_TypeError, wxStringErrorMsg); | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |     if (PyString_AsStringAndSize(_obj2, &tmpPtr, &tmpSize) == -1) | ||||||
|  |         return NULL; | ||||||
|  |     _arg2 = new wxString(tmpPtr, tmpSize); | ||||||
|  | #else | ||||||
|  |     if (!PyString_Check(_obj2)) { | ||||||
|  |         PyErr_SetString(PyExc_TypeError, wxStringErrorMsg); | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |     _arg2 = new wxString(PyString_AS_STRING(_obj2), PyString_GET_SIZE(_obj2)); | ||||||
|  | #endif | ||||||
|  | } | ||||||
|  | { | ||||||
|  |     wxPy_BEGIN_ALLOW_THREADS; | ||||||
|  |         _result = (int )wxDllWidget_SendCommand(_arg0,_arg1,*_arg2); | ||||||
|  |  | ||||||
|  |     wxPy_END_ALLOW_THREADS; | ||||||
|  | }    _resultobj = Py_BuildValue("i",_result); | ||||||
|  | { | ||||||
|  |     if (_obj2) | ||||||
|  |         delete _arg2; | ||||||
|  | } | ||||||
|  |     return _resultobj; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #define wxDllWidget_GetEmbeddedWindow(_swigobj)  (_swigobj->GetEmbeddedWindow()) | ||||||
|  | static PyObject *_wrap_wxDllWidget_GetEmbeddedWindow(PyObject *self, PyObject *args, PyObject *kwargs) { | ||||||
|  |     PyObject * _resultobj; | ||||||
|  |     wxWindow * _result; | ||||||
|  |     wxDllWidget * _arg0; | ||||||
|  |     PyObject * _argo0 = 0; | ||||||
|  |     char *_kwnames[] = { "self", NULL }; | ||||||
|  |  | ||||||
|  |     self = self; | ||||||
|  |     if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxDllWidget_GetEmbeddedWindow",_kwnames,&_argo0))  | ||||||
|  |         return NULL; | ||||||
|  |     if (_argo0) { | ||||||
|  |         if (_argo0 == Py_None) { _arg0 = NULL; } | ||||||
|  |         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxDllWidget_p")) { | ||||||
|  |             PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxDllWidget_GetEmbeddedWindow. Expected _wxDllWidget_p."); | ||||||
|  |         return NULL; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | { | ||||||
|  |     wxPy_BEGIN_ALLOW_THREADS; | ||||||
|  |         _result = (wxWindow *)wxDllWidget_GetEmbeddedWindow(_arg0); | ||||||
|  |  | ||||||
|  |     wxPy_END_ALLOW_THREADS; | ||||||
|  | }{ _resultobj = wxPyMake_wxObject(_result); } | ||||||
|  |     return _resultobj; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static PyObject *_wrap_wxDllWidget_GetDllExt(PyObject *self, PyObject *args, PyObject *kwargs) { | ||||||
|  |     PyObject * _resultobj; | ||||||
|  |     wxString * _result; | ||||||
|  |     char *_kwnames[] = {  NULL }; | ||||||
|  |  | ||||||
|  |     self = self; | ||||||
|  |     if(!PyArg_ParseTupleAndKeywords(args,kwargs,":wxDllWidget_GetDllExt",_kwnames))  | ||||||
|  |         return NULL; | ||||||
|  | { | ||||||
|  |     wxPy_BEGIN_ALLOW_THREADS; | ||||||
|  |         _result = new wxString (wxDllWidget::GetDllExt()); | ||||||
|  |  | ||||||
|  |     wxPy_END_ALLOW_THREADS; | ||||||
|  | }{ | ||||||
|  |     _resultobj = PyString_FromStringAndSize(_result->c_str(), _result->Len()); | ||||||
|  | } | ||||||
|  | { | ||||||
|  |     delete _result; | ||||||
|  | } | ||||||
|  |     return _resultobj; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static PyMethodDef dllwidget_cMethods[] = { | ||||||
|  | 	 { "wxDllWidget_GetDllExt", (PyCFunction) _wrap_wxDllWidget_GetDllExt, METH_VARARGS | METH_KEYWORDS }, | ||||||
|  | 	 { "wxDllWidget_GetEmbeddedWindow", (PyCFunction) _wrap_wxDllWidget_GetEmbeddedWindow, METH_VARARGS | METH_KEYWORDS }, | ||||||
|  | 	 { "wxDllWidget_SendCommand", (PyCFunction) _wrap_wxDllWidget_SendCommand, METH_VARARGS | METH_KEYWORDS }, | ||||||
|  | 	 { "wxDllWidget_Ok", (PyCFunction) _wrap_wxDllWidget_Ok, METH_VARARGS | METH_KEYWORDS }, | ||||||
|  | 	 { "new_wxDllWidget", (PyCFunction) _wrap_new_wxDllWidget, METH_VARARGS | METH_KEYWORDS }, | ||||||
|  | 	 { NULL, NULL } | ||||||
|  | }; | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | /* | ||||||
|  |  * This table is used by the pointer type-checker | ||||||
|  |  */ | ||||||
|  | static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = { | ||||||
|  |     { "_signed_long","_long",0}, | ||||||
|  |     { "_wxPrintQuality","_wxCoord",0}, | ||||||
|  |     { "_wxPrintQuality","_int",0}, | ||||||
|  |     { "_wxPrintQuality","_signed_int",0}, | ||||||
|  |     { "_wxPrintQuality","_unsigned_int",0}, | ||||||
|  |     { "_wxPrintQuality","_wxWindowID",0}, | ||||||
|  |     { "_wxPrintQuality","_uint",0}, | ||||||
|  |     { "_wxPrintQuality","_EBool",0}, | ||||||
|  |     { "_wxPrintQuality","_size_t",0}, | ||||||
|  |     { "_wxPrintQuality","_time_t",0}, | ||||||
|  |     { "_byte","_unsigned_char",0}, | ||||||
|  |     { "_long","_unsigned_long",0}, | ||||||
|  |     { "_long","_signed_long",0}, | ||||||
|  |     { "_size_t","_wxCoord",0}, | ||||||
|  |     { "_size_t","_wxPrintQuality",0}, | ||||||
|  |     { "_size_t","_time_t",0}, | ||||||
|  |     { "_size_t","_unsigned_int",0}, | ||||||
|  |     { "_size_t","_int",0}, | ||||||
|  |     { "_size_t","_wxWindowID",0}, | ||||||
|  |     { "_size_t","_uint",0}, | ||||||
|  |     { "_wxPanel","_wxDllWidget",SwigwxDllWidgetTowxPanel}, | ||||||
|  |     { "_uint","_wxCoord",0}, | ||||||
|  |     { "_uint","_wxPrintQuality",0}, | ||||||
|  |     { "_uint","_time_t",0}, | ||||||
|  |     { "_uint","_size_t",0}, | ||||||
|  |     { "_uint","_unsigned_int",0}, | ||||||
|  |     { "_uint","_int",0}, | ||||||
|  |     { "_uint","_wxWindowID",0}, | ||||||
|  |     { "_wxChar","_char",0}, | ||||||
|  |     { "_char","_wxChar",0}, | ||||||
|  |     { "_struct_wxNativeFontInfo","_wxNativeFontInfo",0}, | ||||||
|  |     { "_EBool","_wxCoord",0}, | ||||||
|  |     { "_EBool","_wxPrintQuality",0}, | ||||||
|  |     { "_EBool","_signed_int",0}, | ||||||
|  |     { "_EBool","_int",0}, | ||||||
|  |     { "_EBool","_wxWindowID",0}, | ||||||
|  |     { "_unsigned_long","_long",0}, | ||||||
|  |     { "_wxNativeFontInfo","_struct_wxNativeFontInfo",0}, | ||||||
|  |     { "_signed_int","_wxCoord",0}, | ||||||
|  |     { "_signed_int","_wxPrintQuality",0}, | ||||||
|  |     { "_signed_int","_EBool",0}, | ||||||
|  |     { "_signed_int","_wxWindowID",0}, | ||||||
|  |     { "_signed_int","_int",0}, | ||||||
|  |     { "_WXTYPE","_wxDateTime_t",0}, | ||||||
|  |     { "_WXTYPE","_short",0}, | ||||||
|  |     { "_WXTYPE","_signed_short",0}, | ||||||
|  |     { "_WXTYPE","_unsigned_short",0}, | ||||||
|  |     { "_unsigned_short","_wxDateTime_t",0}, | ||||||
|  |     { "_unsigned_short","_WXTYPE",0}, | ||||||
|  |     { "_unsigned_short","_short",0}, | ||||||
|  |     { "_wxObject","_wxDllWidget",SwigwxDllWidgetTowxObject}, | ||||||
|  |     { "_signed_short","_WXTYPE",0}, | ||||||
|  |     { "_signed_short","_short",0}, | ||||||
|  |     { "_unsigned_char","_byte",0}, | ||||||
|  |     { "_unsigned_int","_wxCoord",0}, | ||||||
|  |     { "_unsigned_int","_wxPrintQuality",0}, | ||||||
|  |     { "_unsigned_int","_time_t",0}, | ||||||
|  |     { "_unsigned_int","_size_t",0}, | ||||||
|  |     { "_unsigned_int","_uint",0}, | ||||||
|  |     { "_unsigned_int","_wxWindowID",0}, | ||||||
|  |     { "_unsigned_int","_int",0}, | ||||||
|  |     { "_short","_wxDateTime_t",0}, | ||||||
|  |     { "_short","_WXTYPE",0}, | ||||||
|  |     { "_short","_unsigned_short",0}, | ||||||
|  |     { "_short","_signed_short",0}, | ||||||
|  |     { "_wxWindowID","_wxCoord",0}, | ||||||
|  |     { "_wxWindowID","_wxPrintQuality",0}, | ||||||
|  |     { "_wxWindowID","_time_t",0}, | ||||||
|  |     { "_wxWindowID","_size_t",0}, | ||||||
|  |     { "_wxWindowID","_EBool",0}, | ||||||
|  |     { "_wxWindowID","_uint",0}, | ||||||
|  |     { "_wxWindowID","_int",0}, | ||||||
|  |     { "_wxWindowID","_signed_int",0}, | ||||||
|  |     { "_wxWindowID","_unsigned_int",0}, | ||||||
|  |     { "_int","_wxCoord",0}, | ||||||
|  |     { "_int","_wxPrintQuality",0}, | ||||||
|  |     { "_int","_time_t",0}, | ||||||
|  |     { "_int","_size_t",0}, | ||||||
|  |     { "_int","_EBool",0}, | ||||||
|  |     { "_int","_uint",0}, | ||||||
|  |     { "_int","_wxWindowID",0}, | ||||||
|  |     { "_int","_unsigned_int",0}, | ||||||
|  |     { "_int","_signed_int",0}, | ||||||
|  |     { "_wxDateTime_t","_unsigned_short",0}, | ||||||
|  |     { "_wxDateTime_t","_short",0}, | ||||||
|  |     { "_wxDateTime_t","_WXTYPE",0}, | ||||||
|  |     { "_time_t","_wxCoord",0}, | ||||||
|  |     { "_time_t","_wxPrintQuality",0}, | ||||||
|  |     { "_time_t","_unsigned_int",0}, | ||||||
|  |     { "_time_t","_int",0}, | ||||||
|  |     { "_time_t","_wxWindowID",0}, | ||||||
|  |     { "_time_t","_uint",0}, | ||||||
|  |     { "_time_t","_size_t",0}, | ||||||
|  |     { "_wxCoord","_int",0}, | ||||||
|  |     { "_wxCoord","_signed_int",0}, | ||||||
|  |     { "_wxCoord","_unsigned_int",0}, | ||||||
|  |     { "_wxCoord","_wxWindowID",0}, | ||||||
|  |     { "_wxCoord","_uint",0}, | ||||||
|  |     { "_wxCoord","_EBool",0}, | ||||||
|  |     { "_wxCoord","_size_t",0}, | ||||||
|  |     { "_wxCoord","_time_t",0}, | ||||||
|  |     { "_wxCoord","_wxPrintQuality",0}, | ||||||
|  |     { "_wxEvtHandler","_wxDllWidget",SwigwxDllWidgetTowxEvtHandler}, | ||||||
|  |     { "_wxWindow","_wxDllWidget",SwigwxDllWidgetTowxWindow}, | ||||||
|  | {0,0,0}}; | ||||||
|  |  | ||||||
|  | static PyObject *SWIG_globals; | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C"  | ||||||
|  | #endif | ||||||
|  | SWIGEXPORT(void) initdllwidget_c() { | ||||||
|  | 	 PyObject *m, *d; | ||||||
|  | 	 SWIG_globals = SWIG_newvarlink(); | ||||||
|  | 	 m = Py_InitModule("dllwidget_c", dllwidget_cMethods); | ||||||
|  | 	 d = PyModule_GetDict(m); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     wxClassInfo::CleanUpClasses(); | ||||||
|  |     wxClassInfo::InitializeClasses(); | ||||||
|  |  | ||||||
|  | { | ||||||
|  |    int i; | ||||||
|  |    for (i = 0; _swig_mapping[i].n1; i++) | ||||||
|  |         SWIG_RegisterMapping(_swig_mapping[i].n1,_swig_mapping[i].n2,_swig_mapping[i].pcnv); | ||||||
|  | } | ||||||
|  | } | ||||||
							
								
								
									
										111
									
								
								wxPython/contrib/dllwidget/dllwidget_.i
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								wxPython/contrib/dllwidget/dllwidget_.i
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | |||||||
|  | ///////////////////////////////////////////////////////////////////////////// | ||||||
|  | // Name:        dllwidget_.i | ||||||
|  | // Purpose:     Load wx widgets from external DLLs | ||||||
|  | // | ||||||
|  | // Author:      Robin Dunn | ||||||
|  | // | ||||||
|  | // Created:     04-Dec-2001 | ||||||
|  | // RCS-ID:      $Id$ | ||||||
|  | // Copyright:   (c) 2001 by Total Control Software | ||||||
|  | // Licence:     wxWindows license | ||||||
|  | ///////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  | %module dllwidget_ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | %{ | ||||||
|  | #include "export.h" | ||||||
|  | #include "dllwidget.h" | ||||||
|  | %} | ||||||
|  |  | ||||||
|  | //--------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | %include typemaps.i | ||||||
|  | %include my_typemaps.i | ||||||
|  |  | ||||||
|  | %extern wx.i | ||||||
|  | %extern windows.i | ||||||
|  | %extern _defs.i | ||||||
|  |  | ||||||
|  | //--------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  | ||||||
|  | wxDllWidget can be used to embed a wxWindow implemented in C++ in your | ||||||
|  | wxPython application without the need to write a SWIG interface. Widget's code | ||||||
|  | is stored in shared library or DLL that exports DLL_WidgetFactory symbol | ||||||
|  | and loaded at runtime. All you have to do is to pass the name of DLL and the class | ||||||
|  | to create to wxDllWidget's ctor. | ||||||
|  |  | ||||||
|  | Runtime-loadable widget must have HandleCommand method (see the example) that is | ||||||
|  | used to communicate with Python app. You call wxDllWidget.SendCommand(cmd,param) from | ||||||
|  | Python and it in turn calls HandleCommand of the loaded widget. | ||||||
|  |  | ||||||
|  | You must use DECLARE_DLL_WIDGET, BEGIN_WIDGET_LIBRARY, END_WIDGET_LIBRARY and | ||||||
|  | REGISTER_WIDGET macros in your C++ module in order to provide all the meat | ||||||
|  | wxDllWidget needs. | ||||||
|  |  | ||||||
|  | Example of use: | ||||||
|  |  | ||||||
|  |     #define CMD_MAKEWHITE     1 | ||||||
|  |  | ||||||
|  |     class MyWindow : public wxWindow | ||||||
|  |     { | ||||||
|  |     public: | ||||||
|  |         MyWindow(wxWindow *parent, long style) | ||||||
|  |             : wxWindow(parent, -1) {} | ||||||
|  |  | ||||||
|  |         int HandleCommand(int cmd, const wxString& param) | ||||||
|  |         { | ||||||
|  |             if (cmd == CMD_MAKEWHITE) | ||||||
|  |                 SetBackgroundColour(*wxWHITE); | ||||||
|  |             return 0; | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |     DECLARE_DLL_WIDGET(MyWindow) | ||||||
|  |  | ||||||
|  |     class MyCanvasWindow : public wxScrolledWindow | ||||||
|  |     { | ||||||
|  |         ... | ||||||
|  |     }; | ||||||
|  |     DECLARE_DLL_WIDGET(MyCanvasWindow) | ||||||
|  |  | ||||||
|  |     BEGIN_WIDGET_LIBRARY() | ||||||
|  |         REGISTER_WIDGET(MyWindow) | ||||||
|  |         REGISTER_WIDGET(MyCanvasWindow) | ||||||
|  |     END_WIDGET_LIBRARY() | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | class wxDllWidget : public wxPanel | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     wxDllWidget(wxWindow *parent, | ||||||
|  |                 wxWindowID id = -1, | ||||||
|  |                 const wxString& dllName = wxEmptyString, | ||||||
|  |                 const wxString& className = wxEmptyString, | ||||||
|  |                 const wxPoint& pos = wxDefaultPosition, | ||||||
|  |                 const wxSize& size = wxDefaultSize, | ||||||
|  |                 long style = 0); | ||||||
|  |  | ||||||
|  |     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" | ||||||
|  |  | ||||||
|  |     bool Ok(); | ||||||
|  |  | ||||||
|  |     int SendCommand(int cmd, const wxString& param = wxEmptyString); | ||||||
|  |     wxWindow* GetEmbeddedWindow(); | ||||||
|  |  | ||||||
|  |     static wxString GetDllExt(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | //--------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | %init %{ | ||||||
|  |  | ||||||
|  |     wxClassInfo::CleanUpClasses(); | ||||||
|  |     wxClassInfo::InitializeClasses(); | ||||||
|  |  | ||||||
|  | %} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | //--------------------------------------------------------------------------- | ||||||
							
								
								
									
										76
									
								
								wxPython/contrib/dllwidget/dllwidget_.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								wxPython/contrib/dllwidget/dllwidget_.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | |||||||
|  | # This file was created automatically by SWIG. | ||||||
|  | import dllwidget_c | ||||||
|  |  | ||||||
|  | from misc import * | ||||||
|  |  | ||||||
|  | from misc2 import * | ||||||
|  |  | ||||||
|  | from windows import * | ||||||
|  |  | ||||||
|  | from gdi import * | ||||||
|  |  | ||||||
|  | from clip_dnd import * | ||||||
|  |  | ||||||
|  | from events import * | ||||||
|  |  | ||||||
|  | from streams import * | ||||||
|  |  | ||||||
|  | from utils import * | ||||||
|  |  | ||||||
|  | from mdi import * | ||||||
|  |  | ||||||
|  | from frames import * | ||||||
|  |  | ||||||
|  | from stattool import * | ||||||
|  |  | ||||||
|  | from controls import * | ||||||
|  |  | ||||||
|  | from controls2 import * | ||||||
|  |  | ||||||
|  | from windows2 import * | ||||||
|  |  | ||||||
|  | from cmndlgs import * | ||||||
|  |  | ||||||
|  | from windows3 import * | ||||||
|  |  | ||||||
|  | from image import * | ||||||
|  |  | ||||||
|  | from printfw import * | ||||||
|  |  | ||||||
|  | from sizers import * | ||||||
|  |  | ||||||
|  | from filesys import * | ||||||
|  | class wxDllWidgetPtr(wxPanelPtr): | ||||||
|  |     def __init__(self,this): | ||||||
|  |         self.this = this | ||||||
|  |         self.thisown = 0 | ||||||
|  |     def Ok(self, *_args, **_kwargs): | ||||||
|  |         val = apply(dllwidget_c.wxDllWidget_Ok,(self,) + _args, _kwargs) | ||||||
|  |         return val | ||||||
|  |     def SendCommand(self, *_args, **_kwargs): | ||||||
|  |         val = apply(dllwidget_c.wxDllWidget_SendCommand,(self,) + _args, _kwargs) | ||||||
|  |         return val | ||||||
|  |     def GetEmbeddedWindow(self, *_args, **_kwargs): | ||||||
|  |         val = apply(dllwidget_c.wxDllWidget_GetEmbeddedWindow,(self,) + _args, _kwargs) | ||||||
|  |         return val | ||||||
|  |     def __repr__(self): | ||||||
|  |         return "<C wxDllWidget instance at %s>" % (self.this,) | ||||||
|  | class wxDllWidget(wxDllWidgetPtr): | ||||||
|  |     def __init__(self,*_args,**_kwargs): | ||||||
|  |         self.this = apply(dllwidget_c.new_wxDllWidget,_args,_kwargs) | ||||||
|  |         self.thisown = 1 | ||||||
|  |         self._setOORInfo(self) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #-------------- FUNCTION WRAPPERS ------------------ | ||||||
|  |  | ||||||
|  | wxDllWidget_GetDllExt = dllwidget_c.wxDllWidget_GetDllExt | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #-------------- VARIABLE WRAPPERS ------------------ | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								wxPython/demo/dllwidget/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								wxPython/demo/dllwidget/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  |  | ||||||
|  | CXX = c++ | ||||||
|  | CXXFLAGS = `wx-config --cxxflags` -fPIC -I. | ||||||
|  | LDFLAGS = `wx-config --libs` | ||||||
|  |  | ||||||
|  |  | ||||||
|  | all: test_prg test_dll.so | ||||||
|  |  | ||||||
|  | test_prg: dllwidget.o test_prg.o | ||||||
|  | 	$(CXX) $(LDFLAGS) -o $@ dllwidget.o test_prg.o | ||||||
|  |  | ||||||
|  | test_dll.so: test_dll.o | ||||||
|  | 	$(CXX) $(LDFLAGS) -shared -o $@ $< | ||||||
|  |  | ||||||
|  | %.o : %.cpp | ||||||
|  | 	$(CXX) -c $(CXXFLAGS) -o $@ $< | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	rm -f *.o *.so test_prg | ||||||
							
								
								
									
										32
									
								
								wxPython/demo/dllwidget/makefile.vc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								wxPython/demo/dllwidget/makefile.vc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  |  | ||||||
|  | WXDIR = $(WXWIN) | ||||||
|  | WXUSINGDLL = 1 | ||||||
|  |  | ||||||
|  | PROGRAM = test_dll | ||||||
|  | OBJECTS = test_dll.obj | ||||||
|  |  | ||||||
|  | !include $(WXDIR)\src\makevc.env | ||||||
|  |  | ||||||
|  |  | ||||||
|  | $(PROGRAM).dll : $(OBJECTS) | ||||||
|  | 	$(link) @<< | ||||||
|  | -out:$(PROGRAM).dll | ||||||
|  | -dll $(LINK_DEBUG_FLAGS) $(WINLINKFLAGS) | ||||||
|  | $(OBJECTS) | ||||||
|  | $(WXLIB) | ||||||
|  | << | ||||||
|  |  | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	del $(OBJECTS) | ||||||
|  | 	del $(PROGRAM).dll | ||||||
|  | 	del $(PROGRAM).exp | ||||||
|  | 	del $(PROGRAM).lib | ||||||
|  | 	del $(PROGRAM).pdb | ||||||
|  |  | ||||||
|  | test: | ||||||
|  | 	@echo -out:$(PROGRAM).dll | ||||||
|  | 	@echo -dll $(LINK_DEBUG_FLAGS) $(WINLINKFLAGS) | ||||||
|  | 	@echo $(OBJECTS) | ||||||
|  | 	@echo $(WXLIB) | ||||||
|  |  | ||||||
							
								
								
									
										54
									
								
								wxPython/demo/dllwidget/test_dll.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								wxPython/demo/dllwidget/test_dll.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  |  | ||||||
|  | #include <wx/defs.h> | ||||||
|  | #include <wx/window.h> | ||||||
|  | #include <wx/msgdlg.h> | ||||||
|  |  | ||||||
|  | #include "../dllwidget.h" | ||||||
|  |  | ||||||
|  | class TestWindow : public wxWindow | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     TestWindow(wxWindow *parent, long style) | ||||||
|  |         : wxWindow(parent, -1) | ||||||
|  |     { | ||||||
|  |         SetBackgroundColour(wxColour("white")); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     int HandleCommand(int cmd, const wxString& param) | ||||||
|  |     { | ||||||
|  |         if (cmd == 1) | ||||||
|  |         { | ||||||
|  |             SetBackgroundColour(wxColour("red")); | ||||||
|  |             Refresh(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (cmd == 2) | ||||||
|  |         { | ||||||
|  |             SetBackgroundColour(wxColour(param)); | ||||||
|  |             Refresh(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         else if (cmd == 3) | ||||||
|  |         { | ||||||
|  |             wxMessageBox("Message from embedded widget:\n\n" + param); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  | private: | ||||||
|  |     DECLARE_ABSTRACT_CLASS(TestWindow) | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | IMPLEMENT_ABSTRACT_CLASS(TestWindow, wxWindow) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | //DECLARE_DLL_WIDGET(TestWindow) | ||||||
|  | static int SendCommandToTestWindow(wxWindow *wnd, int cmd, const wxString& param) | ||||||
|  | { | ||||||
|  |     return wxStaticCast(wnd, TestWindow)->HandleCommand(cmd, param); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | BEGIN_WIDGET_LIBRARY() | ||||||
|  |     REGISTER_WIDGET(TestWindow) | ||||||
|  | END_WIDGET_LIBRARY() | ||||||
							
								
								
									
										82
									
								
								wxPython/demo/dllwidget/test_prog.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								wxPython/demo/dllwidget/test_prog.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | |||||||
|  | #!/usr/bin/env python | ||||||
|  |  | ||||||
|  | from wxPython.wx import * | ||||||
|  | from wxPython.dllwidget import wxDllWidget, wxDllWidget_GetDllExt | ||||||
|  |  | ||||||
|  | #---------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | class TestFrame(wxFrame): | ||||||
|  |     def __init__(self): | ||||||
|  |         wxFrame.__init__(self, None, -1, "Test wxDllWidget") | ||||||
|  |  | ||||||
|  |         menu = wxMenu() | ||||||
|  |         menu.Append(101, "Send command &1") | ||||||
|  |         menu.Append(102, "Send command &2") | ||||||
|  |         menu.Append(103, "Send command &3") | ||||||
|  |         menu.AppendSeparator() | ||||||
|  |         menu.Append(110, "E&xit") | ||||||
|  |  | ||||||
|  |         mb = wxMenuBar() | ||||||
|  |         mb.Append(menu, "&Test") | ||||||
|  |         self.SetMenuBar(mb) | ||||||
|  |  | ||||||
|  |         EVT_MENU_RANGE(self, 101, 109, self.OnSendCommand) | ||||||
|  |         EVT_MENU(self, 110, self.OnExit) | ||||||
|  |  | ||||||
|  |         panel = wxPanel(self, -1) | ||||||
|  |         panel.SetFont(wxFont(12, wxSWISS, wxNORMAL, wxBOLD)) | ||||||
|  |  | ||||||
|  |         st = wxStaticText(panel, -1, | ||||||
|  |                           "The widget below was dynamically imported from\n" | ||||||
|  |                           "test_dll.dll or test_dll.so with no prior knowledge\n" | ||||||
|  |                           "of it's contents or structure by wxPython.") | ||||||
|  |  | ||||||
|  |         self.dw = dw = wxDllWidget(panel, -1, | ||||||
|  |                                    "test_dll" + wxDllWidget_GetDllExt(), | ||||||
|  |                                    "TestWindow", | ||||||
|  |                                    size=(250, 150)) | ||||||
|  |  | ||||||
|  |         # The embedded window is the one exported from the DLL | ||||||
|  |         print dw.GetEmbeddedWindow().GetClassName() | ||||||
|  |  | ||||||
|  |         # This shows that we can give it a child from this side of things. | ||||||
|  |         # You can also call any wxWindow methods on it too. | ||||||
|  |         wxStaticText(dw.GetEmbeddedWindow(), -1, | ||||||
|  |                      "Loaded from test_dll...", pos=(10,10)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         sizer = wxBoxSizer(wxVERTICAL) | ||||||
|  |         sizer.Add(wxStaticLine(panel, -1), 0, wxGROW) | ||||||
|  |         sizer.Add(st, 0, wxGROW|wxALL, 5) | ||||||
|  |         sizer.Add(dw, 1, wxGROW|wxALL, 5) | ||||||
|  |  | ||||||
|  |         panel.SetSizer(sizer) | ||||||
|  |         panel.SetAutoLayout(true) | ||||||
|  |         sizer.Fit(self) | ||||||
|  |         sizer.SetSizeHints(self) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def OnExit(self, evt): | ||||||
|  |         self.Close() | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def OnSendCommand(self, evt): | ||||||
|  |         ID = evt.GetId() - 100  # use the menu ID as the command | ||||||
|  |         param = "" | ||||||
|  |         if ID == 2: | ||||||
|  |             dlg = wxTextEntryDialog(self, "Enter a colour name to pass to the embedded widget:") | ||||||
|  |             if dlg.ShowModal() == wxID_OK: | ||||||
|  |                 param = dlg.GetValue() | ||||||
|  |             dlg.Destroy() | ||||||
|  |         self.dw.SendCommand(ID, param) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #---------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     app = wxPySimpleApp() | ||||||
|  |     frame = TestFrame() | ||||||
|  |     frame.Show(true) | ||||||
|  |     app.MainLoop() | ||||||
| @@ -79,6 +79,7 @@ Source: "wxPython\oglc.pyd";                DestDir: "{app}\wxPython"; Component | |||||||
| Source: "wxPython\stc_c.pyd";               DestDir: "{app}\wxPython"; Components: core | Source: "wxPython\stc_c.pyd";               DestDir: "{app}\wxPython"; Components: core | ||||||
| Source: "wxPython\xrcc.pyd";                DestDir: "{app}\wxPython"; Components: core | Source: "wxPython\xrcc.pyd";                DestDir: "{app}\wxPython"; Components: core | ||||||
| Source: "wxPython\gizmosc.pyd";             DestDir: "{app}\wxPython"; Components: core | Source: "wxPython\gizmosc.pyd";             DestDir: "{app}\wxPython"; Components: core | ||||||
|  | Source: "wxPython\dllwidget.pyd";           DestDir: "{app}\wxPython"; Components: core | ||||||
|  |  | ||||||
| Source: "wxPython\*.py";                    DestDir: "{app}\wxPython"; Components: core | Source: "wxPython\*.py";                    DestDir: "{app}\wxPython"; Components: core | ||||||
| Source: "wxPython\lib\*.py";                DestDir: "{app}\wxPython\lib"; Components: core | Source: "wxPython\lib\*.py";                DestDir: "{app}\wxPython\lib"; Components: core | ||||||
| @@ -117,6 +118,11 @@ Source: "demo\data\*.wav";                  DestDir: "{app}\wxPython\demo\data"; | |||||||
| Source: "demo\data\*.wdr";                  DestDir: "{app}\wxPython\demo\data"; Components: demo | Source: "demo\data\*.wdr";                  DestDir: "{app}\wxPython\demo\data"; Components: demo | ||||||
| Source: "demo\data\*.xrc";                  DestDir: "{app}\wxPython\demo\data"; Components: demo | Source: "demo\data\*.xrc";                  DestDir: "{app}\wxPython\demo\data"; Components: demo | ||||||
|  |  | ||||||
|  | Source: "demo\dllwidget\*.cpp";             DestDir: "{app}\wxPython\demo\dllwidget"; Components: demo | ||||||
|  | Source: "demo\dllwidget\*.py";              DestDir: "{app}\wxPython\demo\dllwidget"; Components: demo | ||||||
|  | Source: "demo\dllwidget\Makefile";          DestDir: "{app}\wxPython\demo\dllwidget"; Components: demo | ||||||
|  | Source: "demo\dllwidget\makefile.*";        DestDir: "{app}\wxPython\demo\dllwidget"; Components: demo | ||||||
|  |  | ||||||
| Source: "README.txt";                       DestDir: "{app}\wxPython\docs";  Flags: isreadme; Components: core | Source: "README.txt";                       DestDir: "{app}\wxPython\docs";  Flags: isreadme; Components: core | ||||||
| Source: "CHANGES.txt";                      DestDir: "{app}\wxPython\docs"; Components: core | Source: "CHANGES.txt";                      DestDir: "{app}\wxPython\docs"; Components: core | ||||||
| Source: "licence\*.txt";                    DestDir: "{app}\wxPython\docs\licence"; Components: core | Source: "licence\*.txt";                    DestDir: "{app}\wxPython\docs\licence"; Components: core | ||||||
| @@ -201,9 +207,6 @@ Type: files; Name: "{app}\wxPython\samples\frogedit\*.pyo"; | |||||||
|  |  | ||||||
| #---------------------------------------------------------------------- | #---------------------------------------------------------------------- | ||||||
|  |  | ||||||
| ## TODO:  For Python 2.2 wxPython should go into |  | ||||||
| #         os.path.join(sys.prefix, 'Lib', 'site-packages') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| IFS_Template = r""" | IFS_Template = r""" | ||||||
| program Setup; | program Setup; | ||||||
|   | |||||||
| @@ -33,11 +33,13 @@ BUILD_OGL = 1      # If true, build the contrib/ogl extension module | |||||||
| BUILD_STC = 1      # If true, build the contrib/stc extension module | BUILD_STC = 1      # If true, build the contrib/stc extension module | ||||||
| BUILD_XRC = 1      # XML based resource system | BUILD_XRC = 1      # XML based resource system | ||||||
| BUILD_GIZMOS = 1   # Build a module for the gizmos contrib library | BUILD_GIZMOS = 1   # Build a module for the gizmos contrib library | ||||||
|  | BUILD_DLLWIDGET = 1# Build a module for the gizmos contrib library | ||||||
|  |  | ||||||
| BUILD_IEWIN = 0    # Internet Explorer wrapper (experimental) | BUILD_IEWIN = 0    # Internet Explorer wrapper (experimental) | ||||||
|  |  | ||||||
|  |  | ||||||
| CORE_ONLY = 0      # if true, don't build any of the above | CORE_ONLY = 0      # if true, don't build any of the above | ||||||
|  |  | ||||||
|  |  | ||||||
| GL_ONLY = 0        # Only used when making the -gl RPM.  See the "b" script | GL_ONLY = 0        # Only used when making the -gl RPM.  See the "b" script | ||||||
|                    # for the ugly details |                    # for the ugly details | ||||||
|  |  | ||||||
| @@ -113,6 +115,7 @@ if bcpp_compiling: | |||||||
| #---------------------------------------------------------------------- | #---------------------------------------------------------------------- | ||||||
|  |  | ||||||
| for flag in ['BUILD_GLCANVAS', 'BUILD_OGL', 'BUILD_STC', 'BUILD_XRC', | for flag in ['BUILD_GLCANVAS', 'BUILD_OGL', 'BUILD_STC', 'BUILD_XRC', | ||||||
|  |              'BUILD_GIZMOS', 'BUILD_DLLWIDGET', | ||||||
|              'CORE_ONLY', 'USE_SWIG', 'IN_CVS_TREE', |              'CORE_ONLY', 'USE_SWIG', 'IN_CVS_TREE', | ||||||
|              'FINAL', 'HYBRID', ]: |              'FINAL', 'HYBRID', ]: | ||||||
|     for x in range(len(sys.argv)): |     for x in range(len(sys.argv)): | ||||||
| @@ -554,7 +557,7 @@ if not GL_ONLY and BUILD_STC: | |||||||
|                             swig_args + ['-I'+STC_H, '-I'+location], |                             swig_args + ['-I'+STC_H, '-I'+location], | ||||||
|                             [opj(STC_H, 'stc.h')]) |                             [opj(STC_H, 'stc.h')]) | ||||||
|  |  | ||||||
|     # copy a project specific py module to the main package dir |     # copy a contrib project specific py module to the main package dir | ||||||
|     copy_file(opj(location, 'stc.py'), PKGDIR, update=1, verbose=0) |     copy_file(opj(location, 'stc.py'), PKGDIR, update=1, verbose=0) | ||||||
|  |  | ||||||
|     # add some include dirs to the standard set |     # add some include dirs to the standard set | ||||||
| @@ -793,6 +796,39 @@ if not GL_ONLY and BUILD_GIZMOS: | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #---------------------------------------------------------------------- | ||||||
|  | # Define the DLLWIDGET  extension module | ||||||
|  | #---------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | if not GL_ONLY and BUILD_DLLWIDGET: | ||||||
|  |     msg('Preparing DLLWIDGET...') | ||||||
|  |     location = 'contrib/dllwidget' | ||||||
|  |     swig_files = ['dllwidget_.i'] | ||||||
|  |  | ||||||
|  |     swig_sources = run_swig(swig_files, location, '', PKGDIR, | ||||||
|  |                             USE_SWIG, swig_force, swig_args) | ||||||
|  |  | ||||||
|  |     # copy a contrib project specific py module to the main package dir | ||||||
|  |     copy_file(opj(location, 'dllwidget.py'), PKGDIR, update=1, verbose=0) | ||||||
|  |  | ||||||
|  |     ext = Extension('dllwidget_c', [ | ||||||
|  |                                 '%s/dllwidget.cpp' % location, | ||||||
|  |                              ] + swig_sources, | ||||||
|  |  | ||||||
|  |                     include_dirs =  includes, | ||||||
|  |                     define_macros = defines, | ||||||
|  |  | ||||||
|  |                     library_dirs = libdirs, | ||||||
|  |                     libraries = libs, | ||||||
|  |  | ||||||
|  |                     extra_compile_args = cflags, | ||||||
|  |                     extra_link_args = lflags, | ||||||
|  |                     ) | ||||||
|  |  | ||||||
|  |     wxpExtensions.append(ext) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #---------------------------------------------------------------------- | #---------------------------------------------------------------------- | ||||||
| # Do the Setup/Build/Install/Whatever | # Do the Setup/Build/Install/Whatever | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user