X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f0fa4312b1a537189ada21bec53cff5618e6660b..f2b7492a88eef36f26668cefff8d3f8b91e5f50e:/samples/widgets/static.cpp diff --git a/samples/widgets/static.cpp b/samples/widgets/static.cpp index 0082fde6fd..8e4a24e0f6 100644 --- a/samples/widgets/static.cpp +++ b/samples/widgets/static.cpp @@ -53,7 +53,8 @@ enum { StaticPage_Reset = wxID_HIGHEST, StaticPage_BoxText, - StaticPage_LabelText + StaticPage_LabelText, + StaticPage_LabelTextWithMarkup }; // alignment radiobox values @@ -73,6 +74,13 @@ enum StaticVAlign_Max }; +enum +{ + StaticEllipsize_Start, + StaticEllipsize_Middle, + StaticEllipsize_End +}; + // ---------------------------------------------------------------------------- // MyStaticText and MyStaticBox // ---------------------------------------------------------------------------- @@ -145,6 +153,9 @@ public: virtual wxControl *GetWidget() const { return m_statText; } virtual void RecreateWidget() { CreateStatic(); } + // lazy creation of the content + virtual void CreateContent(); + protected: // event handlers void OnCheckOrRadioBox(wxCommandEvent& event); @@ -152,6 +163,7 @@ protected: void OnButtonReset(wxCommandEvent& event); void OnButtonBoxText(wxCommandEvent& event); void OnButtonLabelText(wxCommandEvent& event); + void OnButtonLabelWithMarkupText(wxCommandEvent& event); // reset all parameters void Reset(); @@ -164,15 +176,19 @@ protected: // the check/radio boxes for styles wxCheckBox *m_chkVert, - *m_chkAutoResize; + *m_chkAutoResize, + *m_chkEllipsize, + *m_chkMarkup; wxRadioBox *m_radioHAlign, - *m_radioVAlign; + *m_radioVAlign, + *m_radioEllipsize; // the controls and the sizer containing them wxStaticBox *m_staticBox; wxStaticBoxSizer *m_sizerStatBox; - wxStaticText *m_statText; + wxStaticText *m_statText, + *m_statTextWithMarkup; #if wxUSE_STATLINE wxStaticLine *m_statLine; #endif // wxUSE_STATLINE @@ -180,7 +196,8 @@ protected: // the text entries for command parameters wxTextCtrl *m_textBox, - *m_textLabel; + *m_textLabel, + *m_textLabelWithMarkup; private: DECLARE_EVENT_TABLE() @@ -194,6 +211,7 @@ private: BEGIN_EVENT_TABLE(StaticWidgetsPage, WidgetsPage) EVT_BUTTON(StaticPage_Reset, StaticWidgetsPage::OnButtonReset) EVT_BUTTON(StaticPage_LabelText, StaticWidgetsPage::OnButtonLabelText) + EVT_BUTTON(StaticPage_LabelTextWithMarkup, StaticWidgetsPage::OnButtonLabelWithMarkupText) EVT_BUTTON(StaticPage_BoxText, StaticWidgetsPage::OnButtonBoxText) EVT_CHECKBOX(wxID_ANY, StaticWidgetsPage::OnCheckOrRadioBox) @@ -205,15 +223,13 @@ END_EVENT_TABLE() // ============================================================================ IMPLEMENT_WIDGETS_PAGE(StaticWidgetsPage, _T("Static"), - (int)wxPlatform(GENERIC_CTRLS).If(wxMSW,NATIVE_CTRLS) + (int)wxPlatform(GENERIC_CTRLS).If(wxOS_WINDOWS,NATIVE_CTRLS) ); StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist) - : WidgetsPage(book) + : WidgetsPage(book, imaglist, statbox_xpm) { - imaglist->Add(wxBitmap(statbox_xpm)); - // init everything m_chkVert = m_chkAutoResize = (wxCheckBox *)NULL; @@ -224,12 +240,17 @@ StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl *book, #if wxUSE_STATLINE m_statLine = (wxStaticLine *)NULL; #endif // wxUSE_STATLINE - m_statText = (wxStaticText *)NULL; + m_statText = m_statTextWithMarkup = (wxStaticText *)NULL; m_staticBox = (wxStaticBox *)NULL; m_sizerStatBox = (wxStaticBoxSizer *)NULL; m_sizerStatic = (wxSizer *)NULL; + m_textBox = m_textLabel = m_textLabelWithMarkup = NULL; +} + +void StaticWidgetsPage::CreateContent() +{ wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL); // left pane @@ -237,6 +258,7 @@ StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl *book, 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")); sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer @@ -265,6 +287,24 @@ StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl *book, 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, _T("&Ellipsize")); + + static const wxString ellipsizeMode[] = + { + _T("&start"), + _T("&middle"), + _T("&end"), + }; + + m_radioEllipsize = new wxRadioBox(this, wxID_ANY, _T("&Ellipsize mode"), + wxDefaultPosition, wxDefaultSize, + WXSIZEOF(ellipsizeMode), ellipsizeMode); + + sizerLeft->Add(m_radioEllipsize, 0, wxGROW | wxALL, 5); + wxButton *btn = new wxButton(this, StaticPage_Reset, _T("&Reset")); sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15); @@ -284,8 +324,23 @@ StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl *book, 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); + + + // 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 label\ninside the 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...")); // right pane wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL); @@ -299,12 +354,7 @@ StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl *book, sizerTop->Add(sizerMiddle, 0, wxGROW | wxALL, 10); sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10); - // final initializations - Reset(); - SetSizer(sizerTop); - - sizerTop->Fit(this); } // ---------------------------------------------------------------------------- @@ -315,6 +365,8 @@ void StaticWidgetsPage::Reset() { 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); @@ -330,17 +382,26 @@ void StaticWidgetsPage::CreateStatic() // delete m_sizerStatBox; -- deleted by Remove() m_sizerStatic->Remove(m_sizerStatBox); delete m_statText; + delete m_statTextWithMarkup; #if wxUSE_STATLINE delete m_statLine; #endif // wxUSE_STATLINE } int flagsBox = 0, - flagsText = ms_defaultFlags; + flagsText = ms_defaultFlags, + flagsDummyText = ms_defaultFlags; if ( !m_chkAutoResize->GetValue() ) { flagsText |= wxST_NO_AUTORESIZE; + flagsDummyText |= wxST_NO_AUTORESIZE; + } + + if ( m_chkMarkup->GetValue() ) + { + flagsText |= wxST_MARKUP; + flagsDummyText |= wxST_MARKUP; } int align = 0; @@ -382,6 +443,29 @@ void StaticWidgetsPage::CreateStatic() break; } + if ( m_chkEllipsize->GetValue() ) + { + switch ( m_radioEllipsize->GetSelection() ) + { + default: + wxFAIL_MSG(_T("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; @@ -393,7 +477,11 @@ void StaticWidgetsPage::CreateStatic() m_statText = new MyStaticText(this, wxID_ANY, m_textLabel->GetValue(), wxDefaultPosition, wxDefaultSize, - flagsText); + flagsDummyText); + m_statTextWithMarkup = new wxStaticText(this, wxID_ANY, + m_textLabelWithMarkup->GetValue(), + wxDefaultPosition, wxDefaultSize, + flagsText); #if wxUSE_STATLINE m_statLine = new wxStaticLine(this, wxID_ANY, @@ -405,7 +493,7 @@ void StaticWidgetsPage::CreateStatic() #if wxUSE_STATLINE m_sizerStatBox->Add(m_statLine, 0, wxGROW | wxALL, 5); #endif // wxUSE_STATLINE - m_sizerStatBox->Add(0, 0, 1); + m_sizerStatBox->Add(m_statTextWithMarkup, 1, wxGROW | wxALL, 5); m_sizerStatic->Add(m_sizerStatBox, 1, wxGROW); @@ -423,8 +511,13 @@ void StaticWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event)) CreateStatic(); } -void StaticWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event)) +void StaticWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event) { + if (event.GetEventObject() == wx_static_cast(wxObject*, m_chkEllipsize)) + { + m_radioEllipsize->Enable(event.IsChecked()); + } + CreateStatic(); } @@ -433,8 +526,29 @@ void StaticWidgetsPage::OnButtonBoxText(wxCommandEvent& WXUNUSED(event)) m_sizerStatBox->GetStaticBox()->SetLabel(m_textBox->GetValue()); } +void StaticWidgetsPage::OnButtonLabelWithMarkupText(wxCommandEvent& WXUNUSED(event)) +{ + m_statTextWithMarkup->SetLabel(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_statTextWithMarkup->GetLabel().c_str()); + wxLogMessage(wxT("The label text is '%s'"), + m_statTextWithMarkup->GetLabelText().c_str()); +} + 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().c_str()); + wxLogMessage(wxT("The label text is '%s'"), + m_statText->GetLabelText().c_str()); }