| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606 |
- /////////////////////////////////////////////////////////////////////////////
- // Program: wxWidgets Widgets Sample
- // Name: static.cpp
- // Purpose: Part of the widgets sample showing various static controls
- // Author: Vadim Zeitlin
- // Created: 11.04.01
- // Copyright: (c) 2001 Vadim Zeitlin
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- // ============================================================================
- // declarations
- // ============================================================================
- // ----------------------------------------------------------------------------
- // headers
- // ----------------------------------------------------------------------------
- // for compilers that support precompilation, includes "wx/wx.h".
- #include "wx/wxprec.h"
- #ifdef __BORLANDC__
- #pragma hdrstop
- #endif
- // for all others, include the necessary headers
- #ifndef WX_PRECOMP
- #include "wx/log.h"
- #include "wx/bitmap.h"
- #include "wx/button.h"
- #include "wx/checkbox.h"
- #include "wx/radiobox.h"
- #include "wx/statbox.h"
- #include "wx/stattext.h"
- #include "wx/textctrl.h"
- #endif
- #include "wx/sizer.h"
- #include "wx/statline.h"
- #include "wx/generic/stattextg.h"
- #include "wx/wupdlock.h"
- #include "widgets.h"
- #include "icons/statbox.xpm"
- // ----------------------------------------------------------------------------
- // constants
- // ----------------------------------------------------------------------------
- // control ids
- enum
- {
- StaticPage_Reset = wxID_HIGHEST,
- StaticPage_BoxText,
- StaticPage_LabelText,
- StaticPage_LabelTextWithMarkup
- };
- // alignment radiobox values
- enum
- {
- StaticHAlign_Left,
- StaticHAlign_Centre,
- StaticHAlign_Right,
- StaticHAlign_Max
- };
- enum
- {
- StaticVAlign_Top,
- StaticVAlign_Centre,
- StaticVAlign_Bottom,
- StaticVAlign_Max
- };
- enum
- {
- StaticEllipsize_Start,
- StaticEllipsize_Middle,
- StaticEllipsize_End
- };
- // ----------------------------------------------------------------------------
- // StaticWidgetsPage
- // ----------------------------------------------------------------------------
- class StaticWidgetsPage : public WidgetsPage
- {
- public:
- StaticWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist);
- virtual ~StaticWidgetsPage(){};
- virtual wxControl *GetWidget() const { return m_statText; }
- virtual Widgets GetWidgets() const
- {
- Widgets widgets;
- widgets.push_back(m_sizerStatBox->GetStaticBox());
- widgets.push_back(m_statText);
- #if wxUSE_MARKUP
- widgets.push_back(m_statMarkup);
- #endif // wxUSE_MARKUP
- #if wxUSE_STATLINE
- widgets.push_back(m_statLine);
- #endif // wxUSE_STATLINE
- return widgets;
- }
- virtual void RecreateWidget() { CreateStatic(); }
- // lazy creation of the content
- virtual void CreateContent();
- protected:
- // event handlers
- void OnCheckOrRadioBox(wxCommandEvent& event);
- void OnButtonReset(wxCommandEvent& event);
- void OnButtonBoxText(wxCommandEvent& event);
- void OnButtonLabelText(wxCommandEvent& event);
- #if wxUSE_MARKUP
- void OnButtonLabelWithMarkupText(wxCommandEvent& event);
- #endif // wxUSE_MARKUP
- void OnMouseEvent(wxMouseEvent& event);
- // reset all parameters
- void Reset();
- // (re)create all controls
- void CreateStatic();
- // the controls
- // ------------
- // the check/radio boxes for styles
- wxCheckBox *m_chkVert,
- *m_chkGeneric,
- *m_chkAutoResize,
- *m_chkEllipsize;
- #if wxUSE_MARKUP
- wxCheckBox *m_chkMarkup,
- *m_chkGreen;
- #endif // wxUSE_MARKUP
- wxRadioBox *m_radioHAlign,
- *m_radioVAlign,
- *m_radioEllipsize;
- // the controls and the sizer containing them
- wxStaticBoxSizer *m_sizerStatBox;
- wxStaticTextBase *m_statText;
- #if wxUSE_MARKUP
- wxStaticTextBase *m_statMarkup;
- #endif // wxUSE_MARKUP
- #if wxUSE_STATLINE
- wxStaticLine *m_statLine;
- #endif // wxUSE_STATLINE
- wxSizer *m_sizerStatic;
- // the text entries for command parameters
- wxTextCtrl *m_textBox,
- *m_textLabel;
- #if wxUSE_MARKUP
- wxTextCtrl *m_textLabelWithMarkup;
- #endif // wxUSE_MARKUP
- private:
- wxDECLARE_EVENT_TABLE();
- DECLARE_WIDGETS_PAGE(StaticWidgetsPage)
- };
- // ----------------------------------------------------------------------------
- // event tables
- // ----------------------------------------------------------------------------
- wxBEGIN_EVENT_TABLE(StaticWidgetsPage, WidgetsPage)
- EVT_BUTTON(StaticPage_Reset, StaticWidgetsPage::OnButtonReset)
- EVT_BUTTON(StaticPage_LabelText, StaticWidgetsPage::OnButtonLabelText)
- #if wxUSE_MARKUP
- EVT_BUTTON(StaticPage_LabelTextWithMarkup, StaticWidgetsPage::OnButtonLabelWithMarkupText)
- #endif // wxUSE_MARKUP
- EVT_BUTTON(StaticPage_BoxText, StaticWidgetsPage::OnButtonBoxText)
- EVT_CHECKBOX(wxID_ANY, StaticWidgetsPage::OnCheckOrRadioBox)
- EVT_RADIOBOX(wxID_ANY, StaticWidgetsPage::OnCheckOrRadioBox)
- wxEND_EVENT_TABLE()
- // ============================================================================
- // implementation
- // ============================================================================
- IMPLEMENT_WIDGETS_PAGE(StaticWidgetsPage, wxT("Static"),
- (int)wxPlatform(GENERIC_CTRLS).If(wxOS_WINDOWS,NATIVE_CTRLS)
- );
- StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl *book,
- wxImageList *imaglist)
- : WidgetsPage(book, imaglist, statbox_xpm)
- {
- // init everything
- m_chkVert =
- m_chkAutoResize =
- m_chkGeneric =
- #if wxUSE_MARKUP
- m_chkGreen =
- #endif // wxUSE_MARKUP
- NULL;
- m_radioHAlign =
- m_radioVAlign = (wxRadioBox *)NULL;
- m_statText = NULL;
- #if wxUSE_STATLINE
- m_statLine = (wxStaticLine *)NULL;
- #endif // wxUSE_STATLINE
- #if wxUSE_MARKUP
- m_statMarkup = NULL;
- #endif // wxUSE_MARKUP
- m_sizerStatBox = (wxStaticBoxSizer *)NULL;
- m_sizerStatic = (wxSizer *)NULL;
- m_textBox =
- m_textLabel =
- #if wxUSE_MARKUP
- m_textLabelWithMarkup =
- #endif // wxUSE_MARKUP
- NULL;
- }
- void StaticWidgetsPage::CreateContent()
- {
- wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
- // left pane
- wxSizer *sizerLeft = new wxStaticBoxSizer(wxVERTICAL, this, "&Set style");
- m_chkGeneric = CreateCheckBoxAndAddToSizer(sizerLeft,
- "&Generic wxStaticText");
- m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, "&Vertical line");
- m_chkAutoResize = CreateCheckBoxAndAddToSizer(sizerLeft, "&Fit to text");
- sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
- static const wxString halign[] =
- {
- wxT("left"),
- wxT("centre"),
- wxT("right"),
- };
- static const wxString valign[] =
- {
- wxT("top"),
- wxT("centre"),
- wxT("bottom"),
- };
- m_radioHAlign = new wxRadioBox(this, wxID_ANY, wxT("&Horz alignment"),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(halign), halign, 3);
- m_radioVAlign = new wxRadioBox(this, wxID_ANY, wxT("&Vert alignment"),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(valign), valign, 3);
- sizerLeft->Add(m_radioHAlign, 0, wxGROW | wxALL, 5);
- sizerLeft->Add(m_radioVAlign, 0, wxGROW | wxALL, 5);
- sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
- m_chkEllipsize = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("&Ellipsize"));
- static const wxString ellipsizeMode[] =
- {
- wxT("&start"),
- wxT("&middle"),
- wxT("&end"),
- };
- m_radioEllipsize = new wxRadioBox(this, wxID_ANY, wxT("&Ellipsize mode"),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(ellipsizeMode), ellipsizeMode,
- 3);
- sizerLeft->Add(m_radioEllipsize, 0, wxGROW | wxALL, 5);
- wxButton *btn = new wxButton(this, StaticPage_Reset, wxT("&Reset"));
- sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
- // middle pane
- wxSizer *sizerMiddle = new wxStaticBoxSizer(wxVERTICAL, this,
- "&Change labels");
- m_textBox = new wxTextCtrl(this, wxID_ANY, wxEmptyString);
- wxButton *b1 = new wxButton(this, wxID_ANY, "Change &box label");
- b1->Connect(wxEVT_BUTTON,
- wxCommandEventHandler(StaticWidgetsPage::OnButtonBoxText),
- NULL, this);
- sizerMiddle->Add(m_textBox, 0, wxEXPAND|wxALL, 5);
- sizerMiddle->Add(b1, 0, wxLEFT|wxBOTTOM, 5);
- m_textLabel = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
- wxDefaultPosition, wxDefaultSize,
- wxTE_MULTILINE|wxHSCROLL);
- wxButton *b2 = new wxButton(this, wxID_ANY, "Change &text label");
- b2->Connect(wxEVT_BUTTON,
- wxCommandEventHandler(StaticWidgetsPage::OnButtonLabelText),
- NULL, this);
- sizerMiddle->Add(m_textLabel, 0, wxEXPAND|wxALL, 5);
- sizerMiddle->Add(b2, 0, wxLEFT|wxBOTTOM, 5);
- #if wxUSE_MARKUP
- m_textLabelWithMarkup = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
- wxDefaultPosition, wxDefaultSize,
- wxTE_MULTILINE|wxHSCROLL);
- wxButton *b3 = new wxButton(this, wxID_ANY, "Change decorated text label");
- b3->Connect(wxEVT_BUTTON,
- wxCommandEventHandler(StaticWidgetsPage::OnButtonLabelWithMarkupText),
- NULL, this);
- sizerMiddle->Add(m_textLabelWithMarkup, 0, wxEXPAND|wxALL, 5);
- sizerMiddle->Add(b3, 0, wxLEFT|wxBOTTOM, 5);
- m_chkGreen = CreateCheckBoxAndAddToSizer(sizerMiddle,
- "Decorated label on g&reen");
- #endif // wxUSE_MARKUP
- // final initializations
- // NB: must be done _before_ calling CreateStatic()
- Reset();
- m_textBox->SetValue(wxT("This is a &box"));
- m_textLabel->SetValue(wxT("And this is a\n\tlabel inside the box with a &mnemonic.\n")
- wxT("Only this text is affected by the ellipsize settings."));
- #if wxUSE_MARKUP
- m_textLabelWithMarkup->SetValue(wxT("Another label, this time <b>decorated</b> ")
- wxT("with <u>markup</u>; here you need entities ")
- wxT("for the symbols: < > & ' " ")
- wxT(" but you can still place &mnemonics..."));
- #endif // wxUSE_MARKUP
- // right pane
- wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
- sizerRight->SetMinSize(150, 0);
- m_sizerStatic = sizerRight;
- CreateStatic();
- // the 3 panes panes compose the window
- sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
- sizerTop->Add(sizerMiddle, 0, wxGROW | wxALL, 10);
- sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
- SetSizer(sizerTop);
- }
- // ----------------------------------------------------------------------------
- // operations
- // ----------------------------------------------------------------------------
- void StaticWidgetsPage::Reset()
- {
- m_chkGeneric->SetValue(false);
- m_chkVert->SetValue(false);
- m_chkAutoResize->SetValue(true);
- m_chkEllipsize->SetValue(true);
- m_radioHAlign->SetSelection(StaticHAlign_Left);
- m_radioVAlign->SetSelection(StaticVAlign_Top);
- }
- void StaticWidgetsPage::CreateStatic()
- {
- wxWindowUpdateLocker lock(this);
- bool isVert = m_chkVert->GetValue();
- if ( m_sizerStatBox )
- {
- // delete m_sizerStatBox; -- deleted by Remove()
- m_sizerStatic->Remove(m_sizerStatBox);
- delete m_statText;
- #if wxUSE_MARKUP
- delete m_statMarkup;
- #endif // wxUSE_MARKUP
- #if wxUSE_STATLINE
- delete m_statLine;
- #endif // wxUSE_STATLINE
- }
- int flagsBox = 0,
- flagsText = ms_defaultFlags,
- flagsDummyText = ms_defaultFlags;
- if ( !m_chkAutoResize->GetValue() )
- {
- flagsText |= wxST_NO_AUTORESIZE;
- flagsDummyText |= wxST_NO_AUTORESIZE;
- }
- int align = 0;
- switch ( m_radioHAlign->GetSelection() )
- {
- default:
- wxFAIL_MSG(wxT("unexpected radiobox selection"));
- // fall through
- case StaticHAlign_Left:
- align |= wxALIGN_LEFT;
- break;
- case StaticHAlign_Centre:
- align |= wxALIGN_CENTRE_HORIZONTAL;
- break;
- case StaticHAlign_Right:
- align |= wxALIGN_RIGHT;
- break;
- }
- switch ( m_radioVAlign->GetSelection() )
- {
- default:
- wxFAIL_MSG(wxT("unexpected radiobox selection"));
- // fall through
- case StaticVAlign_Top:
- align |= wxALIGN_TOP;
- break;
- case StaticVAlign_Centre:
- align |= wxALIGN_CENTRE_VERTICAL;
- break;
- case StaticVAlign_Bottom:
- align |= wxALIGN_BOTTOM;
- break;
- }
- if ( m_chkEllipsize->GetValue() )
- {
- switch ( m_radioEllipsize->GetSelection() )
- {
- default:
- wxFAIL_MSG(wxT("unexpected radiobox selection"));
- // fall through
- case StaticEllipsize_Start:
- flagsDummyText |= wxST_ELLIPSIZE_START;
- break;
- case StaticEllipsize_Middle:
- flagsDummyText |= wxST_ELLIPSIZE_MIDDLE;
- break;
- case StaticEllipsize_End:
- flagsDummyText |= wxST_ELLIPSIZE_END;
- break;
- }
- }
- flagsDummyText |= align;
- flagsText |= align;
- flagsBox |= align;
- wxStaticBox *staticBox = new wxStaticBox(this, wxID_ANY,
- m_textBox->GetValue(),
- wxDefaultPosition, wxDefaultSize,
- flagsBox);
- m_sizerStatBox = new wxStaticBoxSizer(staticBox, isVert ? wxHORIZONTAL
- : wxVERTICAL);
- if ( m_chkGeneric->GetValue() )
- {
- m_statText = new wxGenericStaticText(staticBox, wxID_ANY,
- m_textLabel->GetValue(),
- wxDefaultPosition, wxDefaultSize,
- flagsDummyText);
- #if wxUSE_MARKUP
- m_statMarkup = new wxGenericStaticText(staticBox, wxID_ANY,
- wxString(),
- wxDefaultPosition, wxDefaultSize,
- flagsText);
- #endif // wxUSE_MARKUP
- }
- else // use native versions
- {
- m_statText = new wxStaticText(staticBox, wxID_ANY,
- m_textLabel->GetValue(),
- wxDefaultPosition, wxDefaultSize,
- flagsDummyText);
- #if wxUSE_MARKUP
- m_statMarkup = new wxStaticText(staticBox, wxID_ANY,
- wxString(),
- wxDefaultPosition, wxDefaultSize,
- flagsText);
- #endif // wxUSE_MARKUP
- }
- m_statText->SetToolTip("Tooltip for a label inside the box");
- #if wxUSE_MARKUP
- m_statMarkup->SetLabelMarkup(m_textLabelWithMarkup->GetValue());
- if ( m_chkGreen->GetValue() )
- m_statMarkup->SetBackgroundColour(*wxGREEN);
- #endif // wxUSE_MARKUP
- #if wxUSE_STATLINE
- m_statLine = new wxStaticLine(staticBox, wxID_ANY,
- wxDefaultPosition, wxDefaultSize,
- isVert ? wxLI_VERTICAL : wxLI_HORIZONTAL);
- #endif // wxUSE_STATLINE
- m_sizerStatBox->Add(m_statText, 0, wxGROW | wxALL, 5);
- #if wxUSE_STATLINE
- m_sizerStatBox->Add(m_statLine, 0, wxGROW | wxALL, 5);
- #endif // wxUSE_STATLINE
- #if wxUSE_MARKUP
- m_sizerStatBox->Add(m_statMarkup, 0, wxALL, 5);
- #endif // wxUSE_MARKUP
- m_sizerStatic->Add(m_sizerStatBox, 0, wxGROW);
- m_sizerStatic->Layout();
- m_statText->Connect(wxEVT_LEFT_UP,
- wxMouseEventHandler(StaticWidgetsPage::OnMouseEvent),
- NULL, this);
- staticBox->Connect(wxEVT_LEFT_UP,
- wxMouseEventHandler(StaticWidgetsPage::OnMouseEvent),
- NULL, this);
- }
- // ----------------------------------------------------------------------------
- // event handlers
- // ----------------------------------------------------------------------------
- void StaticWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
- {
- Reset();
- CreateStatic();
- }
- void StaticWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
- {
- if (event.GetEventObject() == static_cast<wxObject*>(m_chkEllipsize))
- {
- m_radioEllipsize->Enable(event.IsChecked());
- }
- CreateStatic();
- }
- void StaticWidgetsPage::OnButtonBoxText(wxCommandEvent& WXUNUSED(event))
- {
- m_sizerStatBox->GetStaticBox()->SetLabel(m_textBox->GetValue());
- }
- void StaticWidgetsPage::OnButtonLabelText(wxCommandEvent& WXUNUSED(event))
- {
- m_statText->SetLabel(m_textLabel->GetValue());
- // test GetLabel() and GetLabelText(); the first should return the
- // label as it is written in the relative text control; the second should
- // return the label as it's shown in the wxStaticText
- wxLogMessage(wxT("The original label should be '%s'"),
- m_statText->GetLabel());
- wxLogMessage(wxT("The label text is '%s'"),
- m_statText->GetLabelText());
- }
- #if wxUSE_MARKUP
- void StaticWidgetsPage::OnButtonLabelWithMarkupText(wxCommandEvent& WXUNUSED(event))
- {
- m_statMarkup->SetLabelMarkup(m_textLabelWithMarkup->GetValue());
- // test GetLabel() and GetLabelText(); the first should return the
- // label as it is written in the relative text control; the second should
- // return the label as it's shown in the wxStaticText
- wxLogMessage(wxT("The original label should be '%s'"),
- m_statMarkup->GetLabel());
- wxLogMessage(wxT("The label text is '%s'"),
- m_statMarkup->GetLabelText());
- }
- #endif // wxUSE_MARKUP
- void StaticWidgetsPage::OnMouseEvent(wxMouseEvent& event)
- {
- if ( event.GetEventObject() == m_statText )
- {
- wxLogMessage("Clicked on static text");
- }
- else
- {
- wxLogMessage("Clicked on static box");
- }
- }
|