From e5db28fd7cda3943b41e86a731c65358284bb0ce Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 22 Apr 2003 20:25:50 +0000 Subject: [PATCH] added wxWizard handler to XRC git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20310 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- contrib/include/wx/xrc/xh_all.h | 1 + contrib/include/wx/xrc/xh_wizrd.h | 38 ++++++++++++ contrib/src/xrc/xh_wizrd.cpp | 99 +++++++++++++++++++++++++++++++ contrib/src/xrc/xmlrsall.cpp | 3 + docs/changes.txt | 2 +- include/wx/xrc/xh_all.h | 1 + include/wx/xrc/xh_wizrd.h | 38 ++++++++++++ src/xrc/xh_wizrd.cpp | 99 +++++++++++++++++++++++++++++++ src/xrc/xmlrsall.cpp | 3 + 9 files changed, 283 insertions(+), 1 deletion(-) create mode 100644 contrib/include/wx/xrc/xh_wizrd.h create mode 100644 contrib/src/xrc/xh_wizrd.cpp create mode 100644 include/wx/xrc/xh_wizrd.h create mode 100644 src/xrc/xh_wizrd.cpp diff --git a/contrib/include/wx/xrc/xh_all.h b/contrib/include/wx/xrc/xh_all.h index 8f62594126..51ccbf3533 100644 --- a/contrib/include/wx/xrc/xh_all.h +++ b/contrib/include/wx/xrc/xh_all.h @@ -48,5 +48,6 @@ #include "wx/xrc/xh_frame.h" #include "wx/xrc/xh_scwin.h" #include "wx/xrc/xh_split.h" +#include "wx/xrc/xh_wizrd.h" #endif // _WX_XMLRES_H_ diff --git a/contrib/include/wx/xrc/xh_wizrd.h b/contrib/include/wx/xrc/xh_wizrd.h new file mode 100644 index 0000000000..aa5dfbf972 --- /dev/null +++ b/contrib/include/wx/xrc/xh_wizrd.h @@ -0,0 +1,38 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: xh_wizrd.h +// Purpose: XML resource handler for wxWizard +// Author: Vaclav Slavik +// Created: 2003/03/02 +// RCS-ID: $Id$ +// Copyright: (c) 2000 Vaclav Slavik +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_XH_WIZRD_H_ +#define _WX_XH_WIZRDL_H_ + +#if defined(__GNUG__) && !defined(__APPLE__) +#pragma interface "xh_wizrd.h" +#endif + +#include "wx/xrc/xmlres.h" + +#if wxUSE_WIZARDDLG + +#include "wx/wizard.h" + +class WXXMLDLLEXPORT wxWizardXmlHandler : public wxXmlResourceHandler +{ +public: + wxWizardXmlHandler(); + virtual wxObject *DoCreateResource(); + virtual bool CanHandle(wxXmlNode *node); + +private: + wxWizard *m_wizard; + wxWizardPageSimple *m_lastSimplePage; +}; + +#endif + +#endif // _WX_XH_PANEL_H_ diff --git a/contrib/src/xrc/xh_wizrd.cpp b/contrib/src/xrc/xh_wizrd.cpp new file mode 100644 index 0000000000..958845ba64 --- /dev/null +++ b/contrib/src/xrc/xh_wizrd.cpp @@ -0,0 +1,99 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: xh_wizrd.cpp +// Purpose: XRC resource for wxWizard +// Author: Vaclav Slavik +// Created: 2003/03/01 +// RCS-ID: $Id$ +// Copyright: (c) 2000 Vaclav Slavik +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "xh_wizrd.h" +#endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_WIZARDDLG + +#include "wx/xrc/xh_wizrd.h" +#include "wx/log.h" +#include "wx/wizard.h" + + +wxWizardXmlHandler::wxWizardXmlHandler() : wxXmlResourceHandler() +{ + m_wizard = NULL; + m_lastSimplePage = NULL; + XRC_ADD_STYLE(wxWIZARD_EX_HELPBUTTON); +} + +wxObject *wxWizardXmlHandler::DoCreateResource() +{ + if (m_class == wxT("wxWizard")) + { + XRC_MAKE_INSTANCE(wiz, wxWizard) + + long style = GetStyle(wxT("exstyle"), 0); + if (style != 0) + wiz->SetExtraStyle(style); + wiz->Create(m_parentAsWindow, + GetID(), + GetText(wxT("title")), + GetBitmap(), + GetPosition()); + + wxWizard *old = m_wizard; + m_wizard = wiz; + m_lastSimplePage = NULL; + CreateChildren(wiz, true /*this handler only*/); + m_wizard = old; + return wiz; + } + else + { + wxWizardPage *page = NULL; + if (m_class == wxT("wxWizardPageSimple")) + { + XRC_MAKE_INSTANCE(p, wxWizardPageSimple) + p->Create(m_wizard, NULL, NULL, GetBitmap()); + if (m_lastSimplePage) + wxWizardPageSimple::Chain(m_lastSimplePage, p); + page = p; + m_lastSimplePage = p; + } + else /*if (m_class == wxT("wxWizardPage"))*/ + { + wxWizardPage *p = NULL; + if (m_instance) + p = wxStaticCast(m_instance, wxWizardPage); + else + wxLogError(wxT("wxWizardPage is abstract class, must be subclassed")); + p->Create(m_wizard, GetBitmap()); + page = p; + } + + page->SetName(GetName()); + page->SetId(GetID()); + + SetupWindow(page); + CreateChildren(page); + return page; + } +} + +bool wxWizardXmlHandler::CanHandle(wxXmlNode *node) +{ + return IsOfClass(node, wxT("wxWizard")) || + (m_wizard != NULL && + (IsOfClass(node, wxT("wxWizardPage")) || + IsOfClass(node, wxT("wxWizardPageSimple"))) + ); +} + +#endif // wxUSE_WIZARDDLG diff --git a/contrib/src/xrc/xmlrsall.cpp b/contrib/src/xrc/xmlrsall.cpp index ea175a776d..7de3f4f9cb 100644 --- a/contrib/src/xrc/xmlrsall.cpp +++ b/contrib/src/xrc/xmlrsall.cpp @@ -96,4 +96,7 @@ void wxXmlResource::InitAllHandlers() AddHandler(new wxFrameXmlHandler); AddHandler(new wxScrolledWindowXmlHandler); AddHandler(new wxSplitterWindowXmlHandler); +#if wxUSE_WIZARDDLG + AddHandler(new wxWizardXmlHandler); +#endif } diff --git a/docs/changes.txt b/docs/changes.txt index 6d85c7d135..88d42fda0e 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -35,7 +35,7 @@ All GUI ports: - added alpha channel support to wxImage - added wxCLOSE_BOX style for dialogs and frames -- added wxSplitterWindow handler to XRC +- added wxSplitterWindow and wxWizard handlers to XRC - added proportion to wxFlexGridSizer::AddGrowableRow/Col (Maxim Babitski) - added wxFlexGridSizer::SetFlexibleDirection() (Szczepan Holyszewski) - implemented GetEditControl for wxGenericTreeCtrl (Peter Stieber) diff --git a/include/wx/xrc/xh_all.h b/include/wx/xrc/xh_all.h index 8f62594126..51ccbf3533 100644 --- a/include/wx/xrc/xh_all.h +++ b/include/wx/xrc/xh_all.h @@ -48,5 +48,6 @@ #include "wx/xrc/xh_frame.h" #include "wx/xrc/xh_scwin.h" #include "wx/xrc/xh_split.h" +#include "wx/xrc/xh_wizrd.h" #endif // _WX_XMLRES_H_ diff --git a/include/wx/xrc/xh_wizrd.h b/include/wx/xrc/xh_wizrd.h new file mode 100644 index 0000000000..aa5dfbf972 --- /dev/null +++ b/include/wx/xrc/xh_wizrd.h @@ -0,0 +1,38 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: xh_wizrd.h +// Purpose: XML resource handler for wxWizard +// Author: Vaclav Slavik +// Created: 2003/03/02 +// RCS-ID: $Id$ +// Copyright: (c) 2000 Vaclav Slavik +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_XH_WIZRD_H_ +#define _WX_XH_WIZRDL_H_ + +#if defined(__GNUG__) && !defined(__APPLE__) +#pragma interface "xh_wizrd.h" +#endif + +#include "wx/xrc/xmlres.h" + +#if wxUSE_WIZARDDLG + +#include "wx/wizard.h" + +class WXXMLDLLEXPORT wxWizardXmlHandler : public wxXmlResourceHandler +{ +public: + wxWizardXmlHandler(); + virtual wxObject *DoCreateResource(); + virtual bool CanHandle(wxXmlNode *node); + +private: + wxWizard *m_wizard; + wxWizardPageSimple *m_lastSimplePage; +}; + +#endif + +#endif // _WX_XH_PANEL_H_ diff --git a/src/xrc/xh_wizrd.cpp b/src/xrc/xh_wizrd.cpp new file mode 100644 index 0000000000..958845ba64 --- /dev/null +++ b/src/xrc/xh_wizrd.cpp @@ -0,0 +1,99 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: xh_wizrd.cpp +// Purpose: XRC resource for wxWizard +// Author: Vaclav Slavik +// Created: 2003/03/01 +// RCS-ID: $Id$ +// Copyright: (c) 2000 Vaclav Slavik +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "xh_wizrd.h" +#endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_WIZARDDLG + +#include "wx/xrc/xh_wizrd.h" +#include "wx/log.h" +#include "wx/wizard.h" + + +wxWizardXmlHandler::wxWizardXmlHandler() : wxXmlResourceHandler() +{ + m_wizard = NULL; + m_lastSimplePage = NULL; + XRC_ADD_STYLE(wxWIZARD_EX_HELPBUTTON); +} + +wxObject *wxWizardXmlHandler::DoCreateResource() +{ + if (m_class == wxT("wxWizard")) + { + XRC_MAKE_INSTANCE(wiz, wxWizard) + + long style = GetStyle(wxT("exstyle"), 0); + if (style != 0) + wiz->SetExtraStyle(style); + wiz->Create(m_parentAsWindow, + GetID(), + GetText(wxT("title")), + GetBitmap(), + GetPosition()); + + wxWizard *old = m_wizard; + m_wizard = wiz; + m_lastSimplePage = NULL; + CreateChildren(wiz, true /*this handler only*/); + m_wizard = old; + return wiz; + } + else + { + wxWizardPage *page = NULL; + if (m_class == wxT("wxWizardPageSimple")) + { + XRC_MAKE_INSTANCE(p, wxWizardPageSimple) + p->Create(m_wizard, NULL, NULL, GetBitmap()); + if (m_lastSimplePage) + wxWizardPageSimple::Chain(m_lastSimplePage, p); + page = p; + m_lastSimplePage = p; + } + else /*if (m_class == wxT("wxWizardPage"))*/ + { + wxWizardPage *p = NULL; + if (m_instance) + p = wxStaticCast(m_instance, wxWizardPage); + else + wxLogError(wxT("wxWizardPage is abstract class, must be subclassed")); + p->Create(m_wizard, GetBitmap()); + page = p; + } + + page->SetName(GetName()); + page->SetId(GetID()); + + SetupWindow(page); + CreateChildren(page); + return page; + } +} + +bool wxWizardXmlHandler::CanHandle(wxXmlNode *node) +{ + return IsOfClass(node, wxT("wxWizard")) || + (m_wizard != NULL && + (IsOfClass(node, wxT("wxWizardPage")) || + IsOfClass(node, wxT("wxWizardPageSimple"))) + ); +} + +#endif // wxUSE_WIZARDDLG diff --git a/src/xrc/xmlrsall.cpp b/src/xrc/xmlrsall.cpp index ea175a776d..7de3f4f9cb 100644 --- a/src/xrc/xmlrsall.cpp +++ b/src/xrc/xmlrsall.cpp @@ -96,4 +96,7 @@ void wxXmlResource::InitAllHandlers() AddHandler(new wxFrameXmlHandler); AddHandler(new wxScrolledWindowXmlHandler); AddHandler(new wxSplitterWindowXmlHandler); +#if wxUSE_WIZARDDLG + AddHandler(new wxWizardXmlHandler); +#endif } -- 2.45.2