A more dynamic wxWizard sample, and a fix for wxGrid wrappers

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16668 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2002-08-22 00:00:04 +00:00
parent a4353f07c6
commit 85260f24de
7 changed files with 226 additions and 13 deletions

View File

@@ -6,21 +6,88 @@ import images
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def makePageTitle(wizPg, title):
sizer = wxBoxSizer(wxVERTICAL)
wizPg.SetSizer(sizer)
title = wxStaticText(wizPg, -1, title)
title.SetFont(wxFont(18, wxSWISS, wxNORMAL, wxBOLD))
sizer.AddWindow(title, 0, wxALIGN_CENTRE|wxALL, 5)
sizer.AddWindow(wxStaticLine(wizPg, -1), 0, wxEXPAND|wxALL, 5)
return sizer
#----------------------------------------------------------------------
class TitledPage(wxWizardPageSimple): class TitledPage(wxWizardPageSimple):
def __init__(self, parent, title): def __init__(self, parent, title):
wxWizardPageSimple.__init__(self, parent) wxWizardPageSimple.__init__(self, parent)
self.sizer = sizer = wxBoxSizer(wxVERTICAL) self.sizer = makePageTitle(self, title)
self.SetSizer(sizer)
title = wxStaticText(self, -1, title)
title.SetFont(wxFont(18, wxSWISS, wxNORMAL, wxBOLD))
sizer.AddWindow(title, 0, wxALIGN_CENTRE|wxALL, 5)
sizer.AddWindow(wxStaticLine(self, -1), 0, wxEXPAND|wxALL, 5)
#---------------------------------------------------------------------- #----------------------------------------------------------------------
class SkipNextPage(wxPyWizardPage):
def __init__(self, parent, title):
wxPyWizardPage.__init__(self, parent)
self.next = self.prev = None
self.sizer = makePageTitle(self, title)
self.cb = wxCheckBox(self, -1, "Skip next page")
self.sizer.Add(self.cb, 0, wxALL, 5)
def SetNext(self, next):
self.next = next
def SetPrev(self, prev):
self.prev = prev
# Classes derived from wxPyWizardPanel must override
# GetNext and GetPrev, and may also override GetBitmap
# as well as all those methods overridable by
# wxPyWindow.
def GetNext(self):
"""If the checkbox is set then return the next page's next page"""
next = self.next
if self.cb.GetValue():
next = next.GetNext()
return next
def GetPrev(self):
return self.prev
#----------------------------------------------------------------------
class UseAltBitmapPage(wxPyWizardPage):
def __init__(self, parent, title):
wxPyWizardPage.__init__(self, parent)
self.next = self.prev = None
self.sizer = makePageTitle(self, title)
self.sizer.Add(wxStaticText(self, -1, "This page uses a different bitmap"),
0, wxALL, 5)
def SetNext(self, next):
self.next = next
def SetPrev(self, prev):
self.prev = prev
def GetNext(self):
return self.next
def GetPrev(self):
return self.prev
def GetBitmap(self):
# You usually wouldn't need to override this method
# since you can set a non-default bitmap in the
# wxWizardPageSimple constructor, but if you need to
# dynamically change the bitmap based on the
# contents of the wizard, or need to also change the
# next/prev order then it can be done by overriding
# GetBitmap.
return images.getWizTest2Bitmap()
#---------------------------------------------------------------------- #----------------------------------------------------------------------
@@ -61,7 +128,14 @@ class TestPanel(wxPanel):
def OnWizCancel(self, evt): def OnWizCancel(self, evt):
pass page = evt.GetPage()
self.log.write("OnWizCancel: %s\n" % page.__class__)
# Show how to prevent cancelling of the wizard. The
# other events can be Veto'd too.
if page is self.page1:
wxMessageBox("Cancelling on the first page has been prevented.", "Sorry")
evt.Veto()
def OnRunSimpleWizard(self, evt): def OnRunSimpleWizard(self, evt):
@@ -72,13 +146,15 @@ class TestPanel(wxPanel):
page2 = TitledPage(wizard, "Page 2") page2 = TitledPage(wizard, "Page 2")
page3 = TitledPage(wizard, "Page 3") page3 = TitledPage(wizard, "Page 3")
page4 = TitledPage(wizard, "Page 4") page4 = TitledPage(wizard, "Page 4")
self.page1 = page1
page1.sizer.Add(wxStaticText(page1, -1, """\ page1.sizer.Add(wxStaticText(page1, -1, """
This wizard is totally useless, but is meant to show how to This wizard is totally useless, but is meant to show how to
chain simple wizard pages together in a non-dynamic manner. chain simple wizard pages together in a non-dynamic manner.
IOW, the order of the pages never changes, and so the IOW, the order of the pages never changes, and so the
wxWizardPageSimple class can easily be used for the pages.""")) wxWizardPageSimple class can easily be used for the pages."""))
wizard.FitToPage(page1) wizard.FitToPage(page1)
page4.sizer.Add(wxStaticText(page4, -1, "\nThis is the last page."))
# Use the convenience Chain function to connect the pages # Use the convenience Chain function to connect the pages
wxWizardPageSimple_Chain(page1, page2) wxWizardPageSimple_Chain(page1, page2)
@@ -93,7 +169,39 @@ wxWizardPageSimple class can easily be used for the pages."""))
def OnRunDynamicWizard(self, evt): def OnRunDynamicWizard(self, evt):
pass # Create the wizard and the pages
wizard = wxWizard(self, self.ID_wiz, "Simple Wizard",
images.getWizTest1Bitmap())
page1 = TitledPage(wizard, "Page 1")
page2 = SkipNextPage(wizard, "Page 2")
page3 = TitledPage(wizard, "Page 3")
page4 = UseAltBitmapPage(wizard, "Page 4")
page5 = TitledPage(wizard, "Page 5")
self.page1 = page1
page1.sizer.Add(wxStaticText(page1, -1, """
This wizard shows the ability to choose at runtime the order
of the pages and also which bitmap is shown.
"""))
wizard.FitToPage(page1)
page5.sizer.Add(wxStaticText(page5, -1, "\nThis is the last page."))
# Set the initial order of the pages
page1.SetNext(page2)
page2.SetPrev(page1)
page2.SetNext(page3)
page3.SetPrev(page2)
page3.SetNext(page4)
page4.SetPrev(page3)
page4.SetNext(page5)
page5.SetPrev(page4)
if wizard.RunWizard(page1):
wxMessageBox("Wizard completed successfully", "That's all folks!")
else:
wxMessageBox("Wizard was cancelled", "That's all folks!")
#---------------------------------------------------------------------- #----------------------------------------------------------------------

View File

@@ -398,7 +398,7 @@ wxPyMake_TEMPLATE(wxGridTableBase)
void CBNAME(int a, const wxString& c) { \ void CBNAME(int a, const wxString& c) { \
bool found; \ bool found; \
wxPyBeginBlockThreads(); \ wxPyBeginBlockThreads(); \
if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \
PyObject* s = wx2PyString(c); \ PyObject* s = wx2PyString(c); \
wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iO)",a,s)); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iO)",a,s)); \
Py_DECREF(s); \ Py_DECREF(s); \

View File

@@ -425,7 +425,7 @@ wxPyMake_TEMPLATE(wxGridTableBase)
void CBNAME(int a, const wxString& c) { \ void CBNAME(int a, const wxString& c) { \
bool found; \ bool found; \
wxPyBeginBlockThreads(); \ wxPyBeginBlockThreads(); \
if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \
PyObject* s = wx2PyString(c); \ PyObject* s = wx2PyString(c); \
wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iO)",a,s)); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iO)",a,s)); \
Py_DECREF(s); \ Py_DECREF(s); \

View File

@@ -6567,6 +6567,90 @@ static PyObject *_wrap_wxProcess_CloseOutput(PyObject *self, PyObject *args, PyO
return _resultobj; return _resultobj;
} }
#define wxProcess_IsInputOpened(_swigobj) (_swigobj->IsInputOpened())
static PyObject *_wrap_wxProcess_IsInputOpened(PyObject *self, PyObject *args, PyObject *kwargs) {
PyObject * _resultobj;
bool _result;
wxPyProcess * _arg0;
PyObject * _argo0 = 0;
char *_kwnames[] = { "self", NULL };
self = self;
if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxProcess_IsInputOpened",_kwnames,&_argo0))
return NULL;
if (_argo0) {
if (_argo0 == Py_None) { _arg0 = NULL; }
else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyProcess_p")) {
PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxProcess_IsInputOpened. Expected _wxPyProcess_p.");
return NULL;
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
_result = (bool )wxProcess_IsInputOpened(_arg0);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} _resultobj = Py_BuildValue("i",_result);
return _resultobj;
}
#define wxProcess_IsInputAvailable(_swigobj) (_swigobj->IsInputAvailable())
static PyObject *_wrap_wxProcess_IsInputAvailable(PyObject *self, PyObject *args, PyObject *kwargs) {
PyObject * _resultobj;
bool _result;
wxPyProcess * _arg0;
PyObject * _argo0 = 0;
char *_kwnames[] = { "self", NULL };
self = self;
if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxProcess_IsInputAvailable",_kwnames,&_argo0))
return NULL;
if (_argo0) {
if (_argo0 == Py_None) { _arg0 = NULL; }
else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyProcess_p")) {
PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxProcess_IsInputAvailable. Expected _wxPyProcess_p.");
return NULL;
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
_result = (bool )wxProcess_IsInputAvailable(_arg0);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} _resultobj = Py_BuildValue("i",_result);
return _resultobj;
}
#define wxProcess_IsErrorAvailable(_swigobj) (_swigobj->IsErrorAvailable())
static PyObject *_wrap_wxProcess_IsErrorAvailable(PyObject *self, PyObject *args, PyObject *kwargs) {
PyObject * _resultobj;
bool _result;
wxPyProcess * _arg0;
PyObject * _argo0 = 0;
char *_kwnames[] = { "self", NULL };
self = self;
if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxProcess_IsErrorAvailable",_kwnames,&_argo0))
return NULL;
if (_argo0) {
if (_argo0 == Py_None) { _arg0 = NULL; }
else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyProcess_p")) {
PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxProcess_IsErrorAvailable. Expected _wxPyProcess_p.");
return NULL;
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
_result = (bool )wxProcess_IsErrorAvailable(_arg0);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} _resultobj = Py_BuildValue("i",_result);
return _resultobj;
}
static void *SwigwxJoystickTowxObject(void *ptr) { static void *SwigwxJoystickTowxObject(void *ptr) {
wxJoystick *src; wxJoystick *src;
wxObject *dest; wxObject *dest;
@@ -10483,6 +10567,9 @@ static PyMethodDef misc2cMethods[] = {
{ "wxJoystick_GetPosition", (PyCFunction) _wrap_wxJoystick_GetPosition, METH_VARARGS | METH_KEYWORDS }, { "wxJoystick_GetPosition", (PyCFunction) _wrap_wxJoystick_GetPosition, METH_VARARGS | METH_KEYWORDS },
{ "delete_wxJoystick", (PyCFunction) _wrap_delete_wxJoystick, METH_VARARGS | METH_KEYWORDS }, { "delete_wxJoystick", (PyCFunction) _wrap_delete_wxJoystick, METH_VARARGS | METH_KEYWORDS },
{ "new_wxJoystick", (PyCFunction) _wrap_new_wxJoystick, METH_VARARGS | METH_KEYWORDS }, { "new_wxJoystick", (PyCFunction) _wrap_new_wxJoystick, METH_VARARGS | METH_KEYWORDS },
{ "wxProcess_IsErrorAvailable", (PyCFunction) _wrap_wxProcess_IsErrorAvailable, METH_VARARGS | METH_KEYWORDS },
{ "wxProcess_IsInputAvailable", (PyCFunction) _wrap_wxProcess_IsInputAvailable, METH_VARARGS | METH_KEYWORDS },
{ "wxProcess_IsInputOpened", (PyCFunction) _wrap_wxProcess_IsInputOpened, METH_VARARGS | METH_KEYWORDS },
{ "wxProcess_CloseOutput", (PyCFunction) _wrap_wxProcess_CloseOutput, METH_VARARGS | METH_KEYWORDS }, { "wxProcess_CloseOutput", (PyCFunction) _wrap_wxProcess_CloseOutput, METH_VARARGS | METH_KEYWORDS },
{ "wxProcess_GetOutputStream", (PyCFunction) _wrap_wxProcess_GetOutputStream, METH_VARARGS | METH_KEYWORDS }, { "wxProcess_GetOutputStream", (PyCFunction) _wrap_wxProcess_GetOutputStream, METH_VARARGS | METH_KEYWORDS },
{ "wxProcess_GetErrorStream", (PyCFunction) _wrap_wxProcess_GetErrorStream, METH_VARARGS | METH_KEYWORDS }, { "wxProcess_GetErrorStream", (PyCFunction) _wrap_wxProcess_GetErrorStream, METH_VARARGS | METH_KEYWORDS },

View File

@@ -604,6 +604,15 @@ class wxProcessPtr(wxEvtHandlerPtr):
def CloseOutput(self, *_args, **_kwargs): def CloseOutput(self, *_args, **_kwargs):
val = apply(misc2c.wxProcess_CloseOutput,(self,) + _args, _kwargs) val = apply(misc2c.wxProcess_CloseOutput,(self,) + _args, _kwargs)
return val return val
def IsInputOpened(self, *_args, **_kwargs):
val = apply(misc2c.wxProcess_IsInputOpened,(self,) + _args, _kwargs)
return val
def IsInputAvailable(self, *_args, **_kwargs):
val = apply(misc2c.wxProcess_IsInputAvailable,(self,) + _args, _kwargs)
return val
def IsErrorAvailable(self, *_args, **_kwargs):
val = apply(misc2c.wxProcess_IsErrorAvailable,(self,) + _args, _kwargs)
return val
def __repr__(self): def __repr__(self):
return "<C wxProcess instance at %s>" % (self.this,) return "<C wxProcess instance at %s>" % (self.this,)
class wxProcess(wxProcessPtr): class wxProcess(wxProcessPtr):

View File

@@ -2264,6 +2264,9 @@ SWIGEXPORT(void) initwizardc() {
PyDict_SetItemString(d,"wxEVT_WIZARD_PAGE_CHANGING", PyInt_FromLong((long) wxEVT_WIZARD_PAGE_CHANGING)); PyDict_SetItemString(d,"wxEVT_WIZARD_PAGE_CHANGING", PyInt_FromLong((long) wxEVT_WIZARD_PAGE_CHANGING));
PyDict_SetItemString(d,"wxEVT_WIZARD_CANCEL", PyInt_FromLong((long) wxEVT_WIZARD_CANCEL)); PyDict_SetItemString(d,"wxEVT_WIZARD_CANCEL", PyInt_FromLong((long) wxEVT_WIZARD_CANCEL));
PyDict_SetItemString(d,"wxEVT_WIZARD_HELP", PyInt_FromLong((long) wxEVT_WIZARD_HELP)); PyDict_SetItemString(d,"wxEVT_WIZARD_HELP", PyInt_FromLong((long) wxEVT_WIZARD_HELP));
wxClassInfo::CleanUpClasses();
wxClassInfo::InitializeClasses();
{ {
int i; int i;
for (i = 0; _swig_mapping[i].n1; i++) for (i = 0; _swig_mapping[i].n1; i++)

View File

@@ -343,6 +343,12 @@ public:
//---------------------------------------------------------------------- //----------------------------------------------------------------------
%init %{
wxClassInfo::CleanUpClasses();
wxClassInfo::InitializeClasses();
%}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// This file gets appended to the shadow class file. // This file gets appended to the shadow class file.
//---------------------------------------------------------------------- //----------------------------------------------------------------------