home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / samples / propsize / propsize.cpp < prev    next >
C/C++ Source or Header  |  2002-12-16  |  9KB  |  251 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        propsize.cpp
  3. // Purpose:     wxWindows propsize sample
  4. // Author:      Julian Smart
  5. // Modified by:
  6. // Created:     04/01/98
  7. // RCS-ID:      $Id: propsize.cpp,v 1.6.2.1 2002/12/15 17:25:27 MBN Exp $
  8. // Copyright:   (c) Julian Smart
  9. // License:     wxWindows license
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. // ============================================================================
  13. // declarations
  14. // ============================================================================
  15.  
  16. // ----------------------------------------------------------------------------
  17. // headers
  18. // ----------------------------------------------------------------------------
  19. #if defined(__GNUG__) && !defined(__APPLE__)
  20.     #pragma implementation "propsize.cpp"
  21.     #pragma interface "propsize.cpp"
  22. #endif
  23.  
  24. // For compilers that support precompilation, includes "wx/wx.h".
  25. #include "wx/wxprec.h"
  26.  
  27. #ifdef __BORLANDC__
  28.     #pragma hdrstop
  29. #endif
  30.  
  31. // for all others, include the necessary headers (this file is usually all you
  32. // need because it includes almost all "standard" wxWindows headers
  33. #ifndef WX_PRECOMP
  34.     #include "wx/wx.h"
  35. #endif
  36.  
  37. #include "wx/statline.h"
  38.  
  39. // ----------------------------------------------------------------------------
  40. // ressources
  41. // ----------------------------------------------------------------------------
  42. // the application icon
  43. #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__)
  44.     #include "mondrian.xpm"
  45. #endif
  46.  
  47. // ----------------------------------------------------------------------------
  48. // private classes
  49. // ----------------------------------------------------------------------------
  50.  
  51. // Define a new application type, each program should derive a class from wxApp
  52. class MyApp : public wxApp
  53. {
  54. public:
  55.     // override base class virtuals
  56.     // ----------------------------
  57.  
  58.     // this one is called on application startup and is a good place for the app
  59.     // initialization (doing it here and not in the ctor allows to have an error
  60.     // return: if OnInit() returns false, the application terminates)
  61.     virtual bool OnInit();
  62. };
  63.  
  64. // Define a new frame type: this is going to be our main frame
  65. class MyFrame : public wxFrame
  66. {
  67. public:
  68.     // ctor(s)
  69.     MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
  70.  
  71.     // event handlers (these functions should _not_ be virtual)
  72.     void OnQuit(wxCommandEvent& event);
  73.     void OnAbout(wxCommandEvent& event);
  74.  
  75. private:
  76.     // any class wishing to process wxWindows events must use this macro
  77.     DECLARE_EVENT_TABLE()
  78. };
  79.  
  80. // ----------------------------------------------------------------------------
  81. // constants
  82. // ----------------------------------------------------------------------------
  83.  
  84. // IDs for the controls and the menu commands
  85. enum
  86. {
  87.     // menu items
  88.     Minimal_Quit = 1,
  89. };
  90.  
  91. // ----------------------------------------------------------------------------
  92. // event tables and other macros for wxWindows
  93. // ----------------------------------------------------------------------------
  94.  
  95. // the event tables connect the wxWindows events with the functions (event
  96. // handlers) which process them. It can be also done at run-time, but for the
  97. // simple menu events like this the static method is much simpler.
  98. BEGIN_EVENT_TABLE(MyFrame, wxFrame)
  99.     EVT_MENU(Minimal_Quit,  MyFrame::OnQuit)
  100.     EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
  101. END_EVENT_TABLE()
  102.  
  103. // Create a new application object: this macro will allow wxWindows to create
  104. // the application object during program execution (it's better than using a
  105. // static object for many reasons) and also declares the accessor function
  106. // wxGetApp() which will return the reference of the right type (i.e. MyApp and
  107. // not wxApp)
  108. IMPLEMENT_APP(MyApp)
  109.  
  110. // ============================================================================
  111. // implementation
  112. // ============================================================================
  113.  
  114. // ----------------------------------------------------------------------------
  115. // the application class
  116. // ----------------------------------------------------------------------------
  117.  
  118. // `Main program' equivalent: the program execution "starts" here
  119. bool MyApp::OnInit()
  120. {
  121.     // Create the main application window
  122.     MyFrame *frame = new MyFrame(_T("Proportional resize"),
  123.                                  wxPoint(50, 50), wxSize(450, 340));
  124.  
  125.     // Show it and tell the application that it's our main window
  126.     // @@@ what does it do exactly, in fact? is it necessary here?
  127.     frame->Show(TRUE);
  128.     SetTopWindow(frame);
  129.  
  130.     // success: wxApp::OnRun() will be called which will enter the main message
  131.     // loop and the application will run. If we returned FALSE here, the
  132.     // application would exit immediately.
  133.     return TRUE;
  134. }
  135.  
  136. // ----------------------------------------------------------------------------
  137. // main frame
  138. // ----------------------------------------------------------------------------
  139.  
  140. // frame constructor
  141. MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
  142.        : wxFrame((wxFrame *)NULL, -1, title, pos, size)
  143. {
  144.     // set the frame icon
  145.     SetIcon(wxICON(mondrian));
  146.  
  147.     // create a menu bar
  148.     wxMenu *menuFile = new wxMenu(_T(""), wxMENU_TEAROFF);
  149.  
  150.     menuFile->Append(wxID_ABOUT, _T("&About...\tCtrl-A"), _T("Show about dialog"));
  151.     menuFile->AppendSeparator();
  152.     menuFile->Append(Minimal_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
  153.  
  154.     // now append the freshly created menu to the menu bar...
  155.     wxMenuBar *menuBar = new wxMenuBar();
  156.     menuBar->Append(menuFile, _T("&File"));
  157.  
  158.     // ... and attach this menu bar to the frame
  159.     SetMenuBar(menuBar);
  160.  
  161. #if wxUSE_STATUSBAR
  162.     // create a status bar just for fun (by default with 1 pane only)
  163.     CreateStatusBar(1);
  164.     SetStatusText(_T("Resize the frame to see how controls react"));
  165. #endif // wxUSE_STATUSBAR
  166.  
  167. #define AddLine(orient) \
  168.     Add( new wxStaticLine( this, -1, wxDefaultPosition, wxSize(2,2), orient), \
  169.     0, wxEXPAND)
  170.  
  171. #define AddButton(label,align) Add( \
  172.     new wxButton( this, -1, label, wxDefaultPosition, wxSize(100,50)), \
  173.     1, wxSHAPED | align)
  174.  
  175.     wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
  176.     // top row -- top-aligned
  177.     wxBoxSizer *hsizer1 = new wxBoxSizer( wxHORIZONTAL );
  178.     hsizer1->AddButton( _T("one"), wxALIGN_LEFT | wxALIGN_TOP);
  179.     hsizer1->AddLine(wxVERTICAL);
  180.     hsizer1->AddButton( _T("two"), wxALIGN_CENTER_HORIZONTAL | wxALIGN_TOP);
  181.     hsizer1->AddLine(wxVERTICAL);
  182.     hsizer1->AddButton( _T("three"), wxALIGN_RIGHT | wxALIGN_TOP);
  183.  
  184.     topsizer->Add(hsizer1, 1, wxEXPAND);
  185.     topsizer->AddLine(wxHORIZONTAL);
  186.  
  187.     wxBoxSizer *hsizer2 = new wxBoxSizer( wxHORIZONTAL );
  188.     hsizer2->AddButton( _T("four"), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
  189.     hsizer2->AddLine(wxVERTICAL);
  190.     // sizer that preserves it's shape
  191.     wxBoxSizer *vsizer = new wxBoxSizer( wxVERTICAL );
  192.     vsizer->Add(
  193.         new wxButton( this, -1, _T("up"), wxDefaultPosition, wxSize(100,25) ),
  194.         1, wxEXPAND);
  195.  
  196.     vsizer->Add(
  197.         new wxButton( this, -1, _T("down"), wxDefaultPosition, wxSize(100,25) ),
  198.         1, wxEXPAND);
  199.  
  200.     hsizer2->Add(vsizer, 1, wxSHAPED | wxALIGN_CENTER);
  201.     hsizer2->AddLine(wxVERTICAL);
  202.     hsizer2->AddButton( _T("six"), wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
  203.  
  204.     topsizer->Add(hsizer2, 1, wxEXPAND);
  205.     topsizer->AddLine(wxHORIZONTAL);
  206.  
  207.     wxBoxSizer *hsizer3 = new wxBoxSizer( wxHORIZONTAL );
  208.     hsizer3->AddButton( _T("seven"), wxALIGN_LEFT | wxALIGN_BOTTOM);
  209.     hsizer3->AddLine(wxVERTICAL);
  210.     hsizer3->AddButton( _T("eight"), wxALIGN_CENTER_HORIZONTAL | wxALIGN_BOTTOM);
  211.     hsizer3->AddLine(wxVERTICAL);
  212.     // wxEXPAND should have no effect
  213.     hsizer3->AddButton( _T("nine"), wxEXPAND | wxALIGN_RIGHT | wxALIGN_BOTTOM);
  214.  
  215.     topsizer->Add(hsizer3, 1, wxEXPAND);
  216.  
  217.     // set frame to minimum size
  218.     topsizer->Fit( this );
  219.  
  220.     // don't allow frame to get smaller than what the sizers tell ye
  221.     // topsizer->SetSizeHints( this );
  222.  
  223.     SetSizer( topsizer );
  224. }
  225.  
  226.  
  227. // event handlers
  228.  
  229. void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
  230. {
  231.     // TRUE is to force the frame to close
  232.     Close(TRUE);
  233. }
  234.  
  235. void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
  236. {
  237.     wxString msg;
  238.     msg.Printf( _T("This is the about dialog of proportional sizer test.\n")
  239.                 _T("Welcome to %s")
  240. #ifdef wxBETA_NUMBER
  241.                _T(" (beta %d)!")
  242. #endif // wxBETA_NUMBER
  243.                , wxVERSION_STRING
  244. #ifdef wxBETA_NUMBER
  245.                , wxBETA_NUMBER
  246. #endif // wxBETA_NUMBER
  247.               );
  248.  
  249.     wxMessageBox(msg, _T("About Shaped Sizer"), wxOK | wxICON_INFORMATION, this);
  250. }
  251.