X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/453535a739f649ce43a65fd7e6b9730363bb1b7c..d7c37bdf337d7ca687263520de432eee4a3722db:/samples/widgets/hyperlnk.cpp?ds=sidebyside diff --git a/samples/widgets/hyperlnk.cpp b/samples/widgets/hyperlnk.cpp index 3c2295b539..3e18b01adf 100644 --- a/samples/widgets/hyperlnk.cpp +++ b/samples/widgets/hyperlnk.cpp @@ -4,9 +4,8 @@ // Purpose: Part of the widgets sample showing wxHyperlinkCtrl // Author: Dimitri Schoolwerth, Vadim Zeitlin // Created: 27 Sep 2003 -// Id: $Id$ // Copyright: (c) 2003 wxWindows team -// License: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -61,6 +60,15 @@ enum HyperlinkPage_Ctrl }; +// alignment radiobox indices +enum +{ + Align_Left, + Align_Centre, + Align_Right, + Align_Max +}; + // ---------------------------------------------------------------------------- // CheckBoxWidgetsPage // ---------------------------------------------------------------------------- @@ -83,19 +91,22 @@ protected: void OnButtonSetURL(wxCommandEvent& event); void OnButtonReset(wxCommandEvent& event); + void OnAlignment(wxCommandEvent& event); + void OnGeneric(wxCommandEvent& event); // reset the control parameters void Reset(); // (re)create the hyperctrl void CreateHyperlink(); + void CreateHyperlinkLong(long); // the controls // ------------ // the checkbox itself and the sizer it is in - wxHyperlinkCtrl *m_hyperlink; - wxSizer *m_sizerHyperlink; + wxGenericHyperlinkCtrl *m_hyperlink; + wxGenericHyperlinkCtrl *m_hyperlinkLong; wxTextCtrl *m_label; wxTextCtrl *m_url; @@ -106,6 +117,9 @@ protected: // the text entries for command parameters wxTextCtrl *m_textLabel; + wxRadioBox *m_radioAlignMode; + wxCheckBox *m_checkGeneric; + private: DECLARE_EVENT_TABLE() DECLARE_WIDGETS_PAGE(HyperlinkWidgetsPage) @@ -119,6 +133,9 @@ BEGIN_EVENT_TABLE(HyperlinkWidgetsPage, WidgetsPage) EVT_BUTTON(HyperlinkPage_Reset, HyperlinkWidgetsPage::OnButtonReset) EVT_BUTTON(HyperlinkPage_SetLabel, HyperlinkWidgetsPage::OnButtonSetLabel) EVT_BUTTON(HyperlinkPage_SetURL, HyperlinkWidgetsPage::OnButtonSetURL) + + EVT_RADIOBOX(wxID_ANY, HyperlinkWidgetsPage::OnAlignment) + EVT_CHECKBOX(wxID_ANY, HyperlinkWidgetsPage::OnGeneric) END_EVENT_TABLE() // ============================================================================ @@ -150,36 +167,86 @@ void HyperlinkWidgetsPage::CreateContent() sizerLeft->Add( CreateSizerWithTextAndButton( HyperlinkPage_SetURL , wxT("Set &URL"), wxID_ANY, &m_url ), 0, wxALL | wxALIGN_RIGHT , 5 ); + static const wxString alignments[] = + { + wxT("&left"), + wxT("¢re"), + wxT("&right") + }; + wxCOMPILE_TIME_ASSERT( WXSIZEOF(alignments) == Align_Max, + AlignMismatch ); + + m_radioAlignMode = new wxRadioBox(this, wxID_ANY, wxT("alignment"), + wxDefaultPosition, wxDefaultSize, + WXSIZEOF(alignments), alignments); + m_radioAlignMode->SetSelection(1); // start with "centre" selected since + // wxHL_DEFAULT_STYLE contains wxHL_ALIGN_CENTRE + sizerLeft->Add(m_radioAlignMode, 0, wxALL|wxGROW, 5); + + m_checkGeneric = new wxCheckBox(this, wxID_ANY, wxT("Use generic version"), + wxDefaultPosition, wxDefaultSize); + sizerLeft->Add(m_checkGeneric, 0, wxALL|wxGROW, 5); + // right pane - wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL); + wxSizer *szHyperlinkLong = new wxBoxSizer(wxVERTICAL); + wxSizer *szHyperlink = new wxBoxSizer(wxHORIZONTAL); m_visit = new wxStaticText(this, wxID_ANY, wxT("Visit ")); - m_hyperlink = new wxHyperlinkCtrl(this, - HyperlinkPage_Ctrl, - wxT("wxWidgets website"), - wxT("www.wxwidgets.org")); + if (m_checkGeneric->IsChecked()) + { + m_hyperlink = new wxGenericHyperlinkCtrl(this, + HyperlinkPage_Ctrl, + wxT("wxWidgets website"), + wxT("www.wxwidgets.org")); + } + else + { + m_hyperlink = new wxHyperlinkCtrl(this, + HyperlinkPage_Ctrl, + wxT("wxWidgets website"), + wxT("www.wxwidgets.org")); + } m_fun = new wxStaticText(this, wxID_ANY, wxT(" for fun!")); - sizerRight->Add(0, 0, 1, wxCENTRE); - sizerRight->Add(m_visit, 0, wxCENTRE); - sizerRight->Add(m_hyperlink, 0, wxCENTRE); - sizerRight->Add(m_fun, 0, wxCENTRE); - sizerRight->Add(0, 0, 1, wxCENTRE); - sizerRight->SetMinSize(150, 0); - m_sizerHyperlink = sizerRight; // save it to modify it later + szHyperlink->Add(0, 0, 1, wxCENTRE); + szHyperlink->Add(m_visit, 0, wxCENTRE); + szHyperlink->Add(m_hyperlink, 0, wxCENTRE); + szHyperlink->Add(m_fun, 0, wxCENTRE); + szHyperlink->Add(0, 0, 1, wxCENTRE); + szHyperlink->SetMinSize(150, 0); + + if (m_checkGeneric->IsChecked()) + { + m_hyperlinkLong = new wxGenericHyperlinkCtrl(this, + wxID_ANY, + wxT("This is a long hyperlink"), + wxT("www.wxwidgets.org")); + } + else + { + m_hyperlinkLong = new wxHyperlinkCtrl(this, + wxID_ANY, + wxT("This is a long hyperlink"), + wxT("www.wxwidgets.org")); + } + + szHyperlinkLong->Add(0, 0, 1, wxCENTRE); + szHyperlinkLong->Add(szHyperlink, 0, wxCENTRE|wxGROW); + szHyperlinkLong->Add(0, 0, 1, wxCENTRE); + szHyperlinkLong->Add(m_hyperlinkLong, 0, wxGROW); + szHyperlinkLong->Add(0, 0, 1, wxCENTRE); + // the 3 panes panes compose the window sizerTop->Add(sizerLeft, 0, (wxALL & ~wxLEFT), 10); - sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10); + sizerTop->Add(szHyperlinkLong, 1, wxGROW | (wxALL & ~wxRIGHT), 10); // final initializations Reset(); SetSizer(sizerTop); - - sizerTop->Fit(this); } void HyperlinkWidgetsPage::Reset() @@ -193,25 +260,68 @@ void HyperlinkWidgetsPage::CreateHyperlink() const wxString label = m_hyperlink->GetLabel(); const wxString url = m_hyperlink->GetURL(); - size_t count = m_sizerHyperlink->GetChildren().GetCount(); - for ( size_t n = 0; n < count; n++ ) + wxGenericHyperlinkCtrl *hyp; + if (m_checkGeneric->IsChecked()) + { + hyp = new wxGenericHyperlinkCtrl(this, + HyperlinkPage_Ctrl, + label, + url); + } + else { - m_sizerHyperlink->Remove(0); + hyp = new wxHyperlinkCtrl(this, + HyperlinkPage_Ctrl, + label, + url); } + // update sizer's child window + GetSizer()->Replace(m_hyperlink, hyp, true); + + // update our pointer delete m_hyperlink; + m_hyperlink = hyp; + + // relayout the sizer + GetSizer()->Layout(); +} + +void HyperlinkWidgetsPage::CreateHyperlinkLong(long style) +{ + style = (wxHL_DEFAULT_STYLE & ~wxHL_ALIGN_CENTRE)|style; + + wxGenericHyperlinkCtrl *hyp; + if (m_checkGeneric->IsChecked()) + { + hyp = new wxGenericHyperlinkCtrl(this, + wxID_ANY, + wxT("This is a long hyperlink"), + wxT("www.wxwidgets.org"), + wxDefaultPosition, + wxDefaultSize, + style); + } + else + { + hyp = new wxHyperlinkCtrl(this, + wxID_ANY, + wxT("This is a long hyperlink"), + wxT("www.wxwidgets.org"), + wxDefaultPosition, + wxDefaultSize, + style); + } + + // update sizer's child window + GetSizer()->Replace(m_hyperlinkLong, hyp, true); - m_hyperlink = new wxHyperlinkCtrl(this, - HyperlinkPage_Ctrl, - label, - url); - - m_sizerHyperlink->Add(0, 0, 1, wxCENTRE); - m_sizerHyperlink->Add(m_visit, 0, wxCENTRE); - m_sizerHyperlink->Add(m_hyperlink, 0, wxCENTRE); - m_sizerHyperlink->Add(m_fun, 0, wxCENTRE); - m_sizerHyperlink->Add(0, 0, 1, wxCENTRE); - m_sizerHyperlink->Layout(); + // update our pointer + delete m_hyperlinkLong; + m_hyperlinkLong = hyp; + + // relayout the sizer + GetSizer()->Layout(); } // ---------------------------------------------------------------------------- @@ -237,4 +347,36 @@ void HyperlinkWidgetsPage::OnButtonSetURL(wxCommandEvent& WXUNUSED(event)) CreateHyperlink(); } +void HyperlinkWidgetsPage::OnAlignment(wxCommandEvent& WXUNUSED(event)) +{ + long addstyle; + switch ( m_radioAlignMode->GetSelection() ) + { + default: + case Align_Max: + wxFAIL_MSG( wxT("unknown alignment") ); + // fall through + + case Align_Left: + addstyle = wxHL_ALIGN_LEFT; + break; + + case Align_Centre: + addstyle = wxHL_ALIGN_CENTRE; + break; + + case Align_Right: + addstyle = wxHL_ALIGN_RIGHT; + break; + } + + CreateHyperlinkLong(addstyle); +} + +void HyperlinkWidgetsPage::OnGeneric(wxCommandEvent& event) +{ + CreateHyperlink(); + OnAlignment(event); +} + #endif // wxUSE_HYPERLINKCTRL