X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/93840b31b96ebfb2c767c6a24e981d0e19dd73f0..b231914f6abe2c148193b006a0919d60575f9a20:/samples/minimal/minimal.cpp diff --git a/samples/minimal/minimal.cpp b/samples/minimal/minimal.cpp index 93536a6b4d..59e20e6ca9 100644 --- a/samples/minimal/minimal.cpp +++ b/samples/minimal/minimal.cpp @@ -16,9 +16,10 @@ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- + #ifdef __GNUG__ - #pragma implementation "minimal.cpp" - #pragma interface "minimal.cpp" +// #pragma implementation "minimal.cpp" +// #pragma interface "minimal.cpp" #endif // For compilers that support precompilation, includes "wx/wx.h". @@ -29,16 +30,20 @@ #endif // for all others, include the necessary headers (this file is usually all you -// need because it includes almost all "standard" wxWindows headers +// need because it includes almost all "standard" wxWindows headers) #ifndef WX_PRECOMP #include "wx/wx.h" #endif +#include "wx/dynarray.h" + +WX_DEFINE_ARRAY(wxWindow *, wxArrayLboxes); + // ---------------------------------------------------------------------------- -// ressources +// resources // ---------------------------------------------------------------------------- // the application icon -#if defined(__WXGTK__) || defined(__WXMOTIF__) +#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) #include "mondrian.xpm" #endif @@ -69,10 +74,13 @@ public: // event handlers (these functions should _not_ be virtual) void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); - - void OnPaint(wxPaintEvent& event); + void OnCreateLbox(wxCommandEvent& event); + void OnDeleteLbox(wxCommandEvent& event); private: + wxArrayLboxes m_lboxes; + wxCoord m_pos; + // any class wishing to process wxWindows events must use this macro DECLARE_EVENT_TABLE() }; @@ -87,8 +95,13 @@ enum // menu items Minimal_Quit = 1, Minimal_About, + Minimal_CreateLbox, + Minimal_DeleteLbox, }; +static const size_t NUM_LBOXES = 10; +static const wxCoord POS_STEP = 5; + // ---------------------------------------------------------------------------- // event tables and other macros for wxWindows // ---------------------------------------------------------------------------- @@ -99,6 +112,8 @@ enum BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Minimal_Quit, MyFrame::OnQuit) EVT_MENU(Minimal_About, MyFrame::OnAbout) + EVT_MENU(Minimal_CreateLbox, MyFrame::OnCreateLbox) + EVT_MENU(Minimal_DeleteLbox, MyFrame::OnDeleteLbox) END_EVENT_TABLE() // Create a new application object: this macro will allow wxWindows to create @@ -116,17 +131,16 @@ IMPLEMENT_APP(MyApp) // the application class // ---------------------------------------------------------------------------- -// `Main program' equivalent: the program execution "starts" here +// 'Main program' equivalent: the program execution "starts" here bool MyApp::OnInit() { - // Create the main application window + // create the main application window MyFrame *frame = new MyFrame("Minimal wxWindows App", wxPoint(50, 50), wxSize(450, 340)); - // Show it and tell the application that it's our main window - // @@@ what does it do exactly, in fact? is it necessary here? + // and show it (the frames, unlike simple controls, are not shown when + // created initially) frame->Show(TRUE); - SetTopWindow(frame); // success: wxApp::OnRun() will be called which will enter the main message // loop and the application will run. If we returned FALSE here, the @@ -142,22 +156,37 @@ bool MyApp::OnInit() MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, -1, title, pos, size) { + m_pos = 0; + +#ifdef __WXMAC__ + // we need this in order to allow the about menu relocation, since ABOUT is + // not the default id of the about menu + wxApp::s_macAboutMenuItemId = Minimal_About; +#endif + // set the frame icon SetIcon(wxICON(mondrian)); +#if wxUSE_MENUS // create a menu bar wxMenu *menuFile = new wxMenu("", wxMENU_TEAROFF); - menuFile->Append(Minimal_About, "&About...\tCtrl-A", "Show about dialog"); - menuFile->AppendSeparator(); + // the "About" item should be in the help menu + wxMenu *helpMenu = new wxMenu; + helpMenu->Append(Minimal_About, "&About...\tCtrl-A", "Show about dialog"); + helpMenu->Append(Minimal_CreateLbox, "&Create 10 listboxes\tCtrl-C"); + helpMenu->Append(Minimal_DeleteLbox, "&Delete 10 listboxes\tCtrl-D"); + menuFile->Append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program"); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar(); menuBar->Append(menuFile, "&File"); + menuBar->Append(helpMenu, "&Help"); // ... and attach this menu bar to the frame SetMenuBar(menuBar); +#endif // wxUSE_MENUS #if wxUSE_STATUSBAR // create a status bar just for fun (by default with 1 pane only) @@ -179,16 +208,32 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxString msg; msg.Printf( _T("This is the about dialog of minimal sample.\n") - _T("Welcome to %s") -#ifdef wxBETA_NUMBER - _T(" (beta %d)!") -#endif // wxBETA_NUMBER - , wxVERSION_STRING -#ifdef wxBETA_NUMBER - , wxBETA_NUMBER -#endif // wxBETA_NUMBER - ); + _T("Welcome to %s"), wxVERSION_STRING); wxMessageBox(msg, "About Minimal", wxOK | wxICON_INFORMATION, this); } +void MyFrame::OnCreateLbox(wxCommandEvent& WXUNUSED(event)) +{ + for ( size_t n = 0; n < NUM_LBOXES; n++ ) + { + m_lboxes.Add(new wxListBox(this, -1, wxPoint(m_pos, m_pos))); + m_pos += POS_STEP; + } +} + +void MyFrame::OnDeleteLbox(wxCommandEvent& WXUNUSED(event)) +{ + size_t count = m_lboxes.GetCount(); + if ( count < NUM_LBOXES ) + return; + + for ( size_t n = 0; n < NUM_LBOXES; n++ ) + { + delete m_lboxes[--count]; + m_lboxes.RemoveAt(count); + + m_pos -= POS_STEP; + } +} +