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

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Program:     wxWindows Widgets Sample
  3. // Name:        static.cpp
  4. // Purpose:     Part of the widgets sample showing various static controls
  5. // Author:      Vadim Zeitlin
  6. // Created:     11.04.01
  7. // Id:          $Id: static.cpp,v 1.6 2002/05/09 00:28:36 VZ Exp $
  8. // Copyright:   (c) 2001 Vadim Zeitlin
  9. // License:     wxWindows license
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. // ============================================================================
  13. // declarations
  14. // ============================================================================
  15.  
  16. // ----------------------------------------------------------------------------
  17. // headers
  18. // ----------------------------------------------------------------------------
  19.  
  20. // for compilers that support precompilation, includes "wx/wx.h".
  21. #include "wx/wxprec.h"
  22.  
  23. #ifdef __BORLANDC__
  24.     #pragma hdrstop
  25. #endif
  26.  
  27. // for all others, include the necessary headers
  28. #ifndef WX_PRECOMP
  29.     #include "wx/log.h"
  30.  
  31.     #include "wx/button.h"
  32.     #include "wx/checkbox.h"
  33.     #include "wx/radiobox.h"
  34.     #include "wx/statbox.h"
  35.     #include "wx/stattext.h"
  36.     #include "wx/textctrl.h"
  37. #endif
  38.  
  39. #include "wx/sizer.h"
  40.  
  41. #include "wx/statline.h"
  42.  
  43. #include "widgets.h"
  44. #include "icons/statbox.xpm"
  45.  
  46. // ----------------------------------------------------------------------------
  47. // constants
  48. // ----------------------------------------------------------------------------
  49.  
  50. // control ids
  51. enum
  52. {
  53.     StaticPage_Reset = 100,
  54.     StaticPage_BoxText,
  55.     StaticPage_LabelText
  56. };
  57.  
  58. // alignment radiobox values
  59. enum
  60. {
  61.     StaticHAlign_Left,
  62.     StaticHAlign_Centre,
  63.     StaticHAlign_Right,
  64.     StaticHAlign_Max
  65. };
  66.  
  67. enum
  68. {
  69.     StaticVAlign_Top,
  70.     StaticVAlign_Centre,
  71.     StaticVAlign_Bottom,
  72.     StaticVAlign_Max
  73. };
  74.  
  75. // ----------------------------------------------------------------------------
  76. // MyStaticText and MyStaticBox
  77. // ----------------------------------------------------------------------------
  78.  
  79. // these 2 classes simply show that the static controls can get the mouse
  80. // clicks too -- this used to be broken under MSW but works now
  81.  
  82. class MyStaticText : public wxStaticText
  83. {
  84. public:
  85.     MyStaticText(wxWindow* parent,
  86.                       wxWindowID id,
  87.                       const wxString& label,
  88.                       const wxPoint& pos = wxDefaultPosition,
  89.                       const wxSize& size = wxDefaultSize,
  90.                       long style = 0)
  91.         : wxStaticText(parent, id, label, pos, size, style)
  92.     {
  93.     }
  94.  
  95. protected:
  96.     void OnMouseEvent(wxMouseEvent& event)
  97.     {
  98.         wxLogMessage(wxT("Clicked on static text"));
  99.     }
  100.  
  101.     DECLARE_EVENT_TABLE()
  102. };
  103.  
  104. class MyStaticBox : public wxStaticBox
  105. {
  106. public:
  107.     MyStaticBox(wxWindow* parent,
  108.                 wxWindowID id,
  109.                 const wxString& label,
  110.                 const wxPoint& pos = wxDefaultPosition,
  111.                 const wxSize& size = wxDefaultSize,
  112.                 long style = 0)
  113.         : wxStaticBox(parent, id, label, pos, size, style)
  114.     {
  115.     }
  116.  
  117. protected:
  118.     void OnMouseEvent(wxMouseEvent& event)
  119.     {
  120.         wxLogMessage(wxT("Clicked on static box"));
  121.     }
  122.  
  123.     DECLARE_EVENT_TABLE()
  124. };
  125.  
  126. BEGIN_EVENT_TABLE(MyStaticText, wxStaticText)
  127.     EVT_LEFT_UP(MyStaticText::OnMouseEvent)
  128. END_EVENT_TABLE()
  129.  
  130. BEGIN_EVENT_TABLE(MyStaticBox, wxStaticBox)
  131.     EVT_LEFT_UP(MyStaticBox::OnMouseEvent)
  132. END_EVENT_TABLE()
  133.  
  134. // ----------------------------------------------------------------------------
  135. // StaticWidgetsPage
  136. // ----------------------------------------------------------------------------
  137.  
  138. class StaticWidgetsPage : public WidgetsPage
  139. {
  140. public:
  141.     StaticWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
  142.     virtual ~StaticWidgetsPage();
  143.  
  144. protected:
  145.     // event handlers
  146.     void OnCheckOrRadioBox(wxCommandEvent& event);
  147.  
  148.     void OnButtonReset(wxCommandEvent& event);
  149.     void OnButtonBoxText(wxCommandEvent& event);
  150.     void OnButtonLabelText(wxCommandEvent& event);
  151.  
  152.     // reset all parameters
  153.     void Reset();
  154.  
  155.     // (re)create all controls
  156.     void CreateStatic();
  157.  
  158.     // the controls
  159.     // ------------
  160.  
  161.     // the check/radio boxes for styles
  162.     wxCheckBox *m_chkVert,
  163.                *m_chkAutoResize;
  164.  
  165.     wxRadioBox *m_radioHAlign,
  166.                *m_radioVAlign;
  167.  
  168.     // the controls and the sizer containing them
  169.     wxStaticBoxSizer *m_sizerStatBox;
  170.     wxStaticText *m_statText;
  171.     wxStaticLine *m_statLine;
  172.     wxSizer *m_sizerStatic;
  173.  
  174.     // the text entries for command parameters
  175.     wxTextCtrl *m_textBox,
  176.                *m_textLabel;
  177.  
  178. private:
  179.     DECLARE_EVENT_TABLE()
  180.     DECLARE_WIDGETS_PAGE(StaticWidgetsPage)
  181. };
  182.  
  183. // ----------------------------------------------------------------------------
  184. // event tables
  185. // ----------------------------------------------------------------------------
  186.  
  187. BEGIN_EVENT_TABLE(StaticWidgetsPage, WidgetsPage)
  188.     EVT_BUTTON(StaticPage_Reset, StaticWidgetsPage::OnButtonReset)
  189.     EVT_BUTTON(StaticPage_LabelText, StaticWidgetsPage::OnButtonLabelText)
  190.     EVT_BUTTON(StaticPage_BoxText, StaticWidgetsPage::OnButtonBoxText)
  191.  
  192.     EVT_CHECKBOX(-1, StaticWidgetsPage::OnCheckOrRadioBox)
  193.     EVT_RADIOBOX(-1, StaticWidgetsPage::OnCheckOrRadioBox)
  194. END_EVENT_TABLE()
  195.  
  196. // ============================================================================
  197. // implementation
  198. // ============================================================================
  199.  
  200. IMPLEMENT_WIDGETS_PAGE(StaticWidgetsPage, _T("Static"));
  201.  
  202. StaticWidgetsPage::StaticWidgetsPage(wxNotebook *notebook,
  203.                                        wxImageList *imaglist)
  204.                   : WidgetsPage(notebook)
  205. {
  206.     imaglist->Add(wxBitmap(statbox_xpm));
  207.  
  208.     // init everything
  209.     m_chkVert =
  210.     m_chkAutoResize = (wxCheckBox *)NULL;
  211.  
  212.     m_radioHAlign =
  213.     m_radioVAlign = (wxRadioBox *)NULL;
  214.  
  215.     m_statLine = (wxStaticLine *)NULL;
  216.     m_statText = (wxStaticText *)NULL;
  217.  
  218.     m_sizerStatBox = (wxStaticBoxSizer *)NULL;
  219.     m_sizerStatic = (wxSizer *)NULL;
  220.  
  221.     wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
  222.  
  223.     // left pane
  224.     wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
  225.  
  226.     wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
  227.  
  228.     m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Vertical line"));
  229.     m_chkAutoResize = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Fit to text"));
  230.     sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
  231.  
  232.     static const wxString halign[] =
  233.     {
  234.         _T("left"),
  235.         _T("centre"),
  236.         _T("right"),
  237.     };
  238.  
  239.     static const wxString valign[] =
  240.     {
  241.         _T("top"),
  242.         _T("centre"),
  243.         _T("bottom"),
  244.     };
  245.  
  246.     m_radioHAlign = new wxRadioBox(this, -1, _T("&Horz alignment"),
  247.                                    wxDefaultPosition, wxDefaultSize,
  248.                                    WXSIZEOF(halign), halign);
  249.     m_radioVAlign = new wxRadioBox(this, -1, _T("&Vert alignment"),
  250.                                    wxDefaultPosition, wxDefaultSize,
  251.                                    WXSIZEOF(valign), valign);
  252.  
  253.     sizerLeft->Add(m_radioHAlign, 0, wxGROW | wxALL, 5);
  254.     sizerLeft->Add(m_radioVAlign, 0, wxGROW | wxALL, 5);
  255.  
  256.     wxButton *btn = new wxButton(this, StaticPage_Reset, _T("&Reset"));
  257.     sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
  258.  
  259.     // middle pane
  260.     wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change labels"));
  261.     wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
  262.  
  263.     wxSizer *sizerRow;
  264.  
  265.     sizerRow = CreateSizerWithTextAndButton(StaticPage_BoxText,
  266.                                             _T("Change &box label"),
  267.                                             -1, &m_textBox);
  268.     sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
  269.  
  270.     sizerRow = CreateSizerWithTextAndButton(StaticPage_LabelText,
  271.                                             _T("Change &text label"),
  272.                                             -1, &m_textLabel);
  273.     sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
  274.  
  275.     m_textBox->SetValue(_T("This is a box"));
  276.     m_textLabel->SetValue(_T("And this is a label\ninside the box"));
  277.  
  278.     // right pane
  279.     wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
  280.     sizerRight->SetMinSize(150, 0);
  281.     m_sizerStatic = sizerRight;
  282.  
  283.     CreateStatic();
  284.  
  285.     // the 3 panes panes compose the window
  286.     sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
  287.     sizerTop->Add(sizerMiddle, 0, wxGROW | wxALL, 10);
  288.     sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
  289.  
  290.     // final initializations
  291.     Reset();
  292.  
  293.     SetAutoLayout(TRUE);
  294.     SetSizer(sizerTop);
  295.  
  296.     sizerTop->Fit(this);
  297. }
  298.  
  299. StaticWidgetsPage::~StaticWidgetsPage()
  300. {
  301. }
  302.  
  303. // ----------------------------------------------------------------------------
  304. // operations
  305. // ----------------------------------------------------------------------------
  306.  
  307. void StaticWidgetsPage::Reset()
  308. {
  309.     m_chkVert->SetValue(FALSE);
  310.     m_chkAutoResize->SetValue(TRUE);
  311.  
  312.     m_radioHAlign->SetSelection(StaticHAlign_Left);
  313.     m_radioVAlign->SetSelection(StaticVAlign_Top);
  314. }
  315.  
  316. void StaticWidgetsPage::CreateStatic()
  317. {
  318.     bool isVert = m_chkVert->GetValue();
  319.  
  320.     if ( m_sizerStatBox )
  321.     {
  322.         m_sizerStatic->Remove(m_sizerStatBox);
  323.  
  324.         // delete m_sizerStatBox; -- deleted by Remove()
  325.         delete m_statText;
  326.         delete m_statLine;
  327.     }
  328.  
  329.     int flagsBox = 0,
  330.         flagsText = 0;
  331.  
  332.     if ( !m_chkAutoResize->GetValue() )
  333.     {
  334.         flagsText |= wxST_NO_AUTORESIZE;
  335.     }
  336.  
  337.     int align = 0;
  338.     switch ( m_radioHAlign->GetSelection() )
  339.     {
  340.         default:
  341.             wxFAIL_MSG(_T("unexpected radiobox selection"));
  342.             // fall through
  343.  
  344.         case StaticHAlign_Left:
  345.             align |= wxALIGN_LEFT;
  346.             break;
  347.  
  348.         case StaticHAlign_Centre:
  349.             align |= wxALIGN_CENTRE_HORIZONTAL;
  350.             break;
  351.  
  352.         case StaticHAlign_Right:
  353.             align |= wxALIGN_RIGHT;
  354.             break;
  355.     }
  356.  
  357.     switch ( m_radioVAlign->GetSelection() )
  358.     {
  359.         default:
  360.             wxFAIL_MSG(_T("unexpected radiobox selection"));
  361.             // fall through
  362.  
  363.         case StaticVAlign_Top:
  364.             align |= wxALIGN_TOP;
  365.             break;
  366.  
  367.         case StaticVAlign_Centre:
  368.             align |= wxALIGN_CENTRE_VERTICAL;
  369.             break;
  370.  
  371.         case StaticVAlign_Bottom:
  372.             align |= wxALIGN_BOTTOM;
  373.             break;
  374.     }
  375.  
  376.     flagsText |= align;
  377.     flagsBox |= align;
  378.  
  379.     wxStaticBox *box = new MyStaticBox(this, -1, m_textBox->GetValue(),
  380.                                        wxDefaultPosition, wxDefaultSize,
  381.                                        flagsBox);
  382.     m_sizerStatBox = new wxStaticBoxSizer(box, isVert ? wxHORIZONTAL
  383.                                                       : wxVERTICAL);
  384.  
  385.     m_statText = new MyStaticText(this, -1, m_textLabel->GetValue(),
  386.                                   wxDefaultPosition, wxDefaultSize,
  387.                                   flagsText);
  388.  
  389.     m_statLine = new wxStaticLine(this, -1,
  390.                                   wxDefaultPosition, wxDefaultSize,
  391.                                   isVert ? wxLI_VERTICAL : wxLI_HORIZONTAL);
  392.  
  393.     m_sizerStatBox->Add(m_statText, 1, wxGROW | wxALL, 5);
  394.     m_sizerStatBox->Add(m_statLine, 0, wxGROW | wxALL, 5);
  395.     m_sizerStatBox->Add(0, 0, 1);
  396.  
  397.     m_sizerStatic->Add(m_sizerStatBox, 1, wxGROW);
  398.  
  399.     m_sizerStatic->Layout();
  400. }
  401.  
  402. // ----------------------------------------------------------------------------
  403. // event handlers
  404. // ----------------------------------------------------------------------------
  405.  
  406. void StaticWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
  407. {
  408.     Reset();
  409.  
  410.     CreateStatic();
  411. }
  412.  
  413. void StaticWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
  414. {
  415.     CreateStatic();
  416. }
  417.  
  418. void StaticWidgetsPage::OnButtonBoxText(wxCommandEvent& event)
  419. {
  420.     m_sizerStatBox->GetStaticBox()->SetLabel(m_textBox->GetValue());
  421. }
  422.  
  423. void StaticWidgetsPage::OnButtonLabelText(wxCommandEvent& event)
  424. {
  425.     m_statText->SetLabel(m_textLabel->GetValue());
  426. }
  427.  
  428.