X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/39bc0347fda3505f7fb43447f21efd84b9e00b3c..615f68c6b9fb887d2cfcbc6a3c6c3716a34a914e:/samples/widgets/static.cpp diff --git a/samples/widgets/static.cpp b/samples/widgets/static.cpp index 8e4a24e0f6..58a2d0610e 100644 --- a/samples/widgets/static.cpp +++ b/samples/widgets/static.cpp @@ -6,7 +6,7 @@ // Created: 11.04.01 // Id: $Id$ // Copyright: (c) 2001 Vadim Zeitlin -// License: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -40,6 +40,8 @@ #include "wx/sizer.h" #include "wx/statline.h" +#include "wx/generic/stattextg.h" +#include "wx/wupdlock.h" #include "widgets.h" #include "icons/statbox.xpm" @@ -81,64 +83,6 @@ enum StaticEllipsize_End }; -// ---------------------------------------------------------------------------- -// MyStaticText and MyStaticBox -// ---------------------------------------------------------------------------- - -// these 2 classes simply show that the static controls can get the mouse -// clicks too -- this used to be broken under MSW but works now - -class MyStaticText : public wxStaticText -{ -public: - MyStaticText(wxWindow* parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0) - : wxStaticText(parent, id, label, pos, size, style) - { - } - -protected: - void OnMouseEvent(wxMouseEvent& WXUNUSED(event)) - { - wxLogMessage(wxT("Clicked on static text")); - } - - DECLARE_EVENT_TABLE() -}; - -class MyStaticBox : public wxStaticBox -{ -public: - MyStaticBox(wxWindow* parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0) - : wxStaticBox(parent, id, label, pos, size, style) - { - } - -protected: - void OnMouseEvent(wxMouseEvent& WXUNUSED(event)) - { - wxLogMessage(wxT("Clicked on static box")); - } - - DECLARE_EVENT_TABLE() -}; - -BEGIN_EVENT_TABLE(MyStaticText, wxStaticText) - EVT_LEFT_UP(MyStaticText::OnMouseEvent) -END_EVENT_TABLE() - -BEGIN_EVENT_TABLE(MyStaticBox, wxStaticBox) - EVT_LEFT_UP(MyStaticBox::OnMouseEvent) -END_EVENT_TABLE() // ---------------------------------------------------------------------------- // StaticWidgetsPage @@ -151,6 +95,20 @@ public: 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 @@ -163,7 +121,10 @@ protected: 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(); @@ -176,19 +137,27 @@ protected: // the check/radio boxes for styles wxCheckBox *m_chkVert, + *m_chkGeneric, *m_chkAutoResize, - *m_chkEllipsize, - *m_chkMarkup; + *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 - wxStaticBox *m_staticBox; wxStaticBoxSizer *m_sizerStatBox; - wxStaticText *m_statText, - *m_statTextWithMarkup; + wxStaticTextBase *m_statText; + +#if wxUSE_MARKUP + wxStaticTextBase *m_statMarkup; +#endif // wxUSE_MARKUP + #if wxUSE_STATLINE wxStaticLine *m_statLine; #endif // wxUSE_STATLINE @@ -196,8 +165,11 @@ protected: // the text entries for command parameters wxTextCtrl *m_textBox, - *m_textLabel, - *m_textLabelWithMarkup; + *m_textLabel; + +#if wxUSE_MARKUP + wxTextCtrl *m_textLabelWithMarkup; +#endif // wxUSE_MARKUP private: DECLARE_EVENT_TABLE() @@ -211,7 +183,9 @@ private: BEGIN_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) @@ -222,7 +196,7 @@ END_EVENT_TABLE() // implementation // ============================================================================ -IMPLEMENT_WIDGETS_PAGE(StaticWidgetsPage, _T("Static"), +IMPLEMENT_WIDGETS_PAGE(StaticWidgetsPage, wxT("Static"), (int)wxPlatform(GENERIC_CTRLS).If(wxOS_WINDOWS,NATIVE_CTRLS) ); @@ -232,7 +206,12 @@ StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl *book, { // init everything m_chkVert = - m_chkAutoResize = (wxCheckBox *)NULL; + m_chkAutoResize = + m_chkGeneric = +#if wxUSE_MARKUP + m_chkGreen = +#endif // wxUSE_MARKUP + NULL; m_radioHAlign = m_radioVAlign = (wxRadioBox *)NULL; @@ -240,13 +219,19 @@ StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl *book, #if wxUSE_STATLINE m_statLine = (wxStaticLine *)NULL; #endif // wxUSE_STATLINE - m_statText = m_statTextWithMarkup = (wxStaticText *)NULL; +#if wxUSE_MARKUP + m_statText = m_statMarkup = NULL; +#endif // wxUSE_MARKUP - m_staticBox = (wxStaticBox *)NULL; m_sizerStatBox = (wxStaticBoxSizer *)NULL; m_sizerStatic = (wxSizer *)NULL; - m_textBox = m_textLabel = m_textLabelWithMarkup = NULL; + m_textBox = + m_textLabel = +#if wxUSE_MARKUP + m_textLabelWithMarkup = +#endif // wxUSE_MARKUP + NULL; } void StaticWidgetsPage::CreateContent() @@ -254,35 +239,34 @@ void StaticWidgetsPage::CreateContent() wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL); // left pane - wxStaticBox *box = new wxStaticBox(this, wxID_ANY, _T("&Set style")); + wxSizer *sizerLeft = new wxStaticBoxSizer(wxVERTICAL, this, "&Set style"); - wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL); - - m_chkMarkup = CreateCheckBoxAndAddToSizer(sizerLeft, _T("Support &markup")); - m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Vertical line")); - m_chkAutoResize = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Fit to text")); + 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[] = { - _T("left"), - _T("centre"), - _T("right"), + wxT("left"), + wxT("centre"), + wxT("right"), }; static const wxString valign[] = { - _T("top"), - _T("centre"), - _T("bottom"), + wxT("top"), + wxT("centre"), + wxT("bottom"), }; - m_radioHAlign = new wxRadioBox(this, wxID_ANY, _T("&Horz alignment"), + m_radioHAlign = new wxRadioBox(this, wxID_ANY, wxT("&Horz alignment"), wxDefaultPosition, wxDefaultSize, - WXSIZEOF(halign), halign); - m_radioVAlign = new wxRadioBox(this, wxID_ANY, _T("&Vert alignment"), + WXSIZEOF(halign), halign, 3); + m_radioVAlign = new wxRadioBox(this, wxID_ANY, wxT("&Vert alignment"), wxDefaultPosition, wxDefaultSize, - WXSIZEOF(valign), valign); + WXSIZEOF(valign), valign, 3); sizerLeft->Add(m_radioHAlign, 0, wxGROW | wxALL, 5); sizerLeft->Add(m_radioVAlign, 0, wxGROW | wxALL, 5); @@ -290,57 +274,76 @@ void StaticWidgetsPage::CreateContent() sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer - m_chkEllipsize = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Ellipsize")); + m_chkEllipsize = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("&Ellipsize")); static const wxString ellipsizeMode[] = { - _T("&start"), - _T("&middle"), - _T("&end"), + wxT("&start"), + wxT("&middle"), + wxT("&end"), }; - m_radioEllipsize = new wxRadioBox(this, wxID_ANY, _T("&Ellipsize mode"), + m_radioEllipsize = new wxRadioBox(this, wxID_ANY, wxT("&Ellipsize mode"), wxDefaultPosition, wxDefaultSize, - WXSIZEOF(ellipsizeMode), ellipsizeMode); + WXSIZEOF(ellipsizeMode), ellipsizeMode, + 3); sizerLeft->Add(m_radioEllipsize, 0, wxGROW | wxALL, 5); - wxButton *btn = new wxButton(this, StaticPage_Reset, _T("&Reset")); + wxButton *btn = new wxButton(this, StaticPage_Reset, wxT("&Reset")); sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15); // middle pane - wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, _T("&Change labels")); - wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL); - - wxSizer *sizerRow; - - sizerRow = CreateSizerWithTextAndButton(StaticPage_BoxText, - _T("Change &box label"), - wxID_ANY, &m_textBox); - sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5); - - sizerRow = CreateSizerWithTextAndButton(StaticPage_LabelText, - _T("Change &text label"), - wxID_ANY, &m_textLabel); - sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5); - - sizerRow = CreateSizerWithTextAndButton(StaticPage_LabelTextWithMarkup, - _T("Change decorated text label"), - wxID_ANY, &m_textLabelWithMarkup); - sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5); - + 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_COMMAND_BUTTON_CLICKED, + 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_COMMAND_BUTTON_CLICKED, + 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_COMMAND_BUTTON_CLICKED, + 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(_T("This is a box")); - m_textLabel->SetValue(_T("And this is a\n\tlabel inside the box with a &mnemonic.\n") - _T("Only this text is affected by the ellipsize settings.")); - m_textLabelWithMarkup->SetValue(_T("Another label, this time decorated ") - _T("with markup; here you need entities ") - _T("for the symbols: < > & ' " ") - _T(" but you can still place &mnemonics...")); + 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 decorated ") + wxT("with markup; 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); @@ -363,10 +366,10 @@ void StaticWidgetsPage::CreateContent() void StaticWidgetsPage::Reset() { + m_chkGeneric->SetValue(false); m_chkVert->SetValue(false); m_chkAutoResize->SetValue(true); m_chkEllipsize->SetValue(true); - m_chkMarkup->SetValue(true); m_radioHAlign->SetSelection(StaticHAlign_Left); m_radioVAlign->SetSelection(StaticVAlign_Top); @@ -374,15 +377,18 @@ void StaticWidgetsPage::Reset() void StaticWidgetsPage::CreateStatic() { + wxWindowUpdateLocker lock(this); + bool isVert = m_chkVert->GetValue(); if ( m_sizerStatBox ) { - delete m_staticBox; // delete m_sizerStatBox; -- deleted by Remove() m_sizerStatic->Remove(m_sizerStatBox); delete m_statText; - delete m_statTextWithMarkup; +#if wxUSE_MARKUP + delete m_statMarkup; +#endif // wxUSE_MARKUP #if wxUSE_STATLINE delete m_statLine; #endif // wxUSE_STATLINE @@ -398,17 +404,11 @@ void StaticWidgetsPage::CreateStatic() flagsDummyText |= wxST_NO_AUTORESIZE; } - if ( m_chkMarkup->GetValue() ) - { - flagsText |= wxST_MARKUP; - flagsDummyText |= wxST_MARKUP; - } - int align = 0; switch ( m_radioHAlign->GetSelection() ) { default: - wxFAIL_MSG(_T("unexpected radiobox selection")); + wxFAIL_MSG(wxT("unexpected radiobox selection")); // fall through case StaticHAlign_Left: @@ -427,7 +427,7 @@ void StaticWidgetsPage::CreateStatic() switch ( m_radioVAlign->GetSelection() ) { default: - wxFAIL_MSG(_T("unexpected radiobox selection")); + wxFAIL_MSG(wxT("unexpected radiobox selection")); // fall through case StaticVAlign_Top: @@ -448,7 +448,7 @@ void StaticWidgetsPage::CreateStatic() switch ( m_radioEllipsize->GetSelection() ) { default: - wxFAIL_MSG(_T("unexpected radiobox selection")); + wxFAIL_MSG(wxT("unexpected radiobox selection")); // fall through case StaticEllipsize_Start: @@ -469,19 +469,46 @@ void StaticWidgetsPage::CreateStatic() flagsText |= align; flagsBox |= align; - m_staticBox = new MyStaticBox(this, wxID_ANY, m_textBox->GetValue(), - wxDefaultPosition, wxDefaultSize, - flagsBox); - m_sizerStatBox = new wxStaticBoxSizer(m_staticBox, isVert ? wxHORIZONTAL - : wxVERTICAL); + wxStaticBox *staticBox = new wxStaticBox(this, wxID_ANY, + m_textBox->GetValue(), + wxDefaultPosition, wxDefaultSize, + flagsBox); + m_sizerStatBox = new wxStaticBoxSizer(staticBox, isVert ? wxHORIZONTAL + : wxVERTICAL); - m_statText = new MyStaticText(this, wxID_ANY, m_textLabel->GetValue(), - wxDefaultPosition, wxDefaultSize, - flagsDummyText); - m_statTextWithMarkup = new wxStaticText(this, wxID_ANY, - m_textLabelWithMarkup->GetValue(), - wxDefaultPosition, wxDefaultSize, - flagsText); + if ( m_chkGeneric->GetValue() ) + { + m_statText = new wxGenericStaticText(this, wxID_ANY, + m_textLabel->GetValue(), + wxDefaultPosition, wxDefaultSize, + flagsDummyText); +#if wxUSE_MARKUP + m_statMarkup = new wxGenericStaticText(this, wxID_ANY, + wxString(), + wxDefaultPosition, wxDefaultSize, + flagsText); +#endif // wxUSE_MARKUP + } + else // use native versions + { + m_statText = new wxStaticText(this, wxID_ANY, + m_textLabel->GetValue(), + wxDefaultPosition, wxDefaultSize, + flagsDummyText); +#if wxUSE_MARKUP + m_statMarkup = new wxStaticText(this, wxID_ANY, + wxString(), + wxDefaultPosition, wxDefaultSize, + flagsText); +#endif // wxUSE_MARKUP + } + +#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(this, wxID_ANY, @@ -493,11 +520,20 @@ void StaticWidgetsPage::CreateStatic() #if wxUSE_STATLINE m_sizerStatBox->Add(m_statLine, 0, wxGROW | wxALL, 5); #endif // wxUSE_STATLINE - m_sizerStatBox->Add(m_statTextWithMarkup, 1, wxGROW | wxALL, 5); +#if wxUSE_MARKUP + m_sizerStatBox->Add(m_statMarkup, 1, wxGROW | wxALL, 5); +#endif // wxUSE_MARKUP m_sizerStatic->Add(m_sizerStatBox, 1, 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); } // ---------------------------------------------------------------------------- @@ -513,7 +549,7 @@ void StaticWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event)) void StaticWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event) { - if (event.GetEventObject() == wx_static_cast(wxObject*, m_chkEllipsize)) + if (event.GetEventObject() == static_cast(m_chkEllipsize)) { m_radioEllipsize->Enable(event.IsChecked()); } @@ -526,29 +562,43 @@ void StaticWidgetsPage::OnButtonBoxText(wxCommandEvent& WXUNUSED(event)) m_sizerStatBox->GetStaticBox()->SetLabel(m_textBox->GetValue()); } -void StaticWidgetsPage::OnButtonLabelWithMarkupText(wxCommandEvent& WXUNUSED(event)) +void StaticWidgetsPage::OnButtonLabelText(wxCommandEvent& WXUNUSED(event)) { - m_statTextWithMarkup->SetLabel(m_textLabelWithMarkup->GetValue()); + 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_statTextWithMarkup->GetLabel().c_str()); + m_statText->GetLabel()); wxLogMessage(wxT("The label text is '%s'"), - m_statTextWithMarkup->GetLabelText().c_str()); + m_statText->GetLabelText()); } -void StaticWidgetsPage::OnButtonLabelText(wxCommandEvent& WXUNUSED(event)) +#if wxUSE_MARKUP +void StaticWidgetsPage::OnButtonLabelWithMarkupText(wxCommandEvent& WXUNUSED(event)) { - m_statText->SetLabel(m_textLabel->GetValue()); + 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_statText->GetLabel().c_str()); + m_statMarkup->GetLabel()); wxLogMessage(wxT("The label text is '%s'"), - m_statText->GetLabelText().c_str()); + 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"); + } }