X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/92657b4276ce547f514a54400edc5215746f047d..f92099657f465d782a8e32444d59f8ebdbdce182:/samples/xrc/xrcdemo.cpp diff --git a/samples/xrc/xrcdemo.cpp b/samples/xrc/xrcdemo.cpp index 4ae4114494..bc3fcd1793 100644 --- a/samples/xrc/xrcdemo.cpp +++ b/samples/xrc/xrcdemo.cpp @@ -1,23 +1,15 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: xmldemo.cpp -// Purpose: XML resources sample -// Author: Vaclav Slavik +//----------------------------------------------------------------------------- +// Name: xrcdemo.cpp +// Purpose: XML resources sample: Main application file +// Author: Robert O'Connor (rob@medicalmnemonics.com), Vaclav Slavik // RCS-ID: $Id$ -// Copyright: (c) Vaclav Slavik +// Copyright: (c) Robert O'Connor and Vaclav Slavik // Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// ============================================================================ -// declarations -// ============================================================================ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "xrcdemo.cpp" - #pragma interface "xrcdemo.cpp" -#endif +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// Standard wxWidgets headers +//----------------------------------------------------------------------------- // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" @@ -26,143 +18,94 @@ #pragma hdrstop #endif -// for all others, include the necessary headers (this file is usually all you -// need because it includes almost all "standard" wxWindows headers) +// For all others, include the necessary headers (this file is usually all you +// need because it includes almost all "standard" wxWidgets headers) #ifndef WX_PRECOMP #include "wx/wx.h" #endif -#include "wx/image.h" -#include "wx/xrc/xmlres.h" +//----------------------------------------------------------------------------- +// Header of this .cpp file +//----------------------------------------------------------------------------- -// ---------------------------------------------------------------------------- -// resources -// ---------------------------------------------------------------------------- -// the application icon -#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) - #include "rc/appicon.xpm" -#endif +#include "xrcdemo.h" -// ---------------------------------------------------------------------------- -// private classes -// ---------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Remaining headers: Needed wx headers, then wx/contrib headers, then app one +//----------------------------------------------------------------------------- -// Define a new application type, each program should derive a class from wxApp -class MyApp : public wxApp -{ -public: - // override base class virtuals - // ---------------------------- - - // this one is called on application startup and is a good place for the app - // initialization (doing it here and not in the ctor allows to have an error - // return: if OnInit() returns false, the application terminates) - virtual bool OnInit(); -}; - -// Define a new frame type: this is going to be our main frame -class MyFrame : public wxFrame -{ -public: - // ctor(s) - MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); - - // event handlers (these functions should _not_ be virtual) - void OnQuit(wxCommandEvent& event); - void OnAbout(wxCommandEvent& event); - void OnDlg1(wxCommandEvent& event); - void OnDlg2(wxCommandEvent& event); - -private: - // any class wishing to process wxWindows events must use this macro - DECLARE_EVENT_TABLE() -}; - -// ---------------------------------------------------------------------------- -// event tables and other macros for wxWindows -// ---------------------------------------------------------------------------- - -// the event tables connect the wxWindows events with the functions (event -// handlers) which process them. It can be also done at run-time, but for the -// simple menu events like this the static method is much simpler. -BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MENU(XRCID("menu_quit"), MyFrame::OnQuit) - EVT_MENU(XRCID("menu_about"), MyFrame::OnAbout) - EVT_MENU(XRCID("menu_dlg1"), MyFrame::OnDlg1) - EVT_MENU(XRCID("menu_dlg2"), MyFrame::OnDlg2) -END_EVENT_TABLE() - -// Create a new application object: this macro will allow wxWindows to create +#include "wx/image.h" // wxImage + +#include "wx/xrc/xmlres.h" // XRC XML resources + +#if wxUSE_RIBBON + #include "wx/xrc/xh_ribbon.h" +#endif // wxUSE_RIBBON + +#include "wx/cshelp.h" // wxSimpleHelpProvider for helptext + +#include "myframe.h" + +//----------------------------------------------------------------------------- +// wxWidgets macro: Declare the application. +//----------------------------------------------------------------------------- + +// Create a new application object: this macro will allow wxWidgets to create // the application object during program execution (it's better than using a // static object for many reasons) and also declares the accessor function -// wxGetApp() which will return the reference of the right type (i.e. MyApp and -// not wxApp) +// wxGetApp() which will return the reference of the right type (i.e. the_app and +// not wxApp). IMPLEMENT_APP(MyApp) -// ============================================================================ -// implementation -// ============================================================================ - -// ---------------------------------------------------------------------------- -// the application class -// ---------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Public methods +//----------------------------------------------------------------------------- // 'Main program' equivalent: the program execution "starts" here bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + + // If there is any of a certain format of image in the xrcs, then first + // load a handler for that image type. This example uses XPMs & a gif, but + // if you want PNGs, then add a PNG handler, etc. See wxImage::AddHandler() + // documentation for the types of image handlers available. + wxImage::AddHandler(new wxXPMHandler); wxImage::AddHandler(new wxGIFHandler); - wxXmlResource::Get()->InitAllHandlers(); - wxXmlResource::Get()->Load("rc/resource.xrc"); - - MyFrame *frame = new MyFrame("XML resources demo", - wxPoint(50, 50), wxSize(450, 340)); - frame->Show(TRUE); - return TRUE; -} -// ---------------------------------------------------------------------------- -// main frame -// ---------------------------------------------------------------------------- - -// frame constructor -MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) - : wxFrame((wxFrame *)NULL, -1, title, pos, size) -{ - SetIcon(wxICON(appicon)); - - SetMenuBar(wxXmlResource::Get()->LoadMenuBar("mainmenu")); - SetToolBar(wxXmlResource::Get()->LoadToolBar(this, "toolbar")); -} + // Initialize all the XRC handlers. Always required (unless you feel like + // going through and initializing a handler of each control type you will + // be using (ie initialize the spinctrl handler, initialize the textctrl + // handler). However, if you are only using a few control types, it will + // save some space to only initialize the ones you will be using. See + // wxXRC docs for details. + wxXmlResource::Get()->InitAllHandlers(); +#if wxUSE_RIBBON + wxXmlResource::Get()->AddHandler(new wxRibbonXmlHandler); +#endif -// event handlers + // Load all of the XRC files that will be used. You can put everything + // into one giant XRC file if you wanted, but then they become more + // diffcult to manage, and harder to reuse in later projects. + if ( !wxXmlResource::Get()->LoadAllFiles("rc") ) + return false; -void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) -{ - // TRUE is to force the frame to close - Close(TRUE); -} +#if wxUSE_HELP + // Use the simple help provider to show the context-sensitive help + wxHelpProvider::Set( new wxSimpleHelpProvider ); +#endif // wxUSE_HELP -void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) -{ - wxString msg; - msg.Printf( _T("This is the about dialog of XML resources demo.\n") - _T("Welcome to %s"), wxVERSION_STRING); + // Make an instance of your derived frame. Passing NULL (the default value + // of MyFrame's constructor is NULL) as the frame doesn't have a parent + // since it is the main application window. + MyFrame *frame = new MyFrame(); - wxMessageBox(msg, "About XML resources demo", wxOK | wxICON_INFORMATION, this); -} + // Show the frame as it's created initially hidden. + frame->Show(true); -void MyFrame::OnDlg1(wxCommandEvent& WXUNUSED(event)) -{ - wxDialog dlg; - wxXmlResource::Get()->LoadDialog(&dlg, this, "dlg1"); - dlg.ShowModal(); + // Return true to tell program to continue (false would terminate). + return true; } - -void MyFrame::OnDlg2(wxCommandEvent& WXUNUSED(event)) -{ - wxDialog dlg; - wxXmlResource::Get()->LoadDialog(&dlg, this, "dlg2"); - dlg.ShowModal(); -}