X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/25057abaacf5ccf30bf136ec2ac430eb61664c3b..143e2719f50c27850552474c6e9281adc451566e:/samples/widgets/widgets.cpp diff --git a/samples/widgets/widgets.cpp b/samples/widgets/widgets.cpp index fc545d0008..2b03a39c03 100644 --- a/samples/widgets/widgets.cpp +++ b/samples/widgets/widgets.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Program: wxWidgets Widgets Sample -// Name: widgets.cpp +// Name: samples/widgets/widgets.cpp // Purpose: Sample showing most of the simple wxWidgets widgets // Author: Vadim Zeitlin // Created: 27.03.01 @@ -37,12 +37,15 @@ #include "wx/statbox.h" #include "wx/stattext.h" #include "wx/textctrl.h" + #include "wx/msgdlg.h" #endif #include "wx/sysopt.h" #include "wx/bookctrl.h" #include "wx/sizer.h" #include "wx/colordlg.h" +#include "wx/fontdlg.h" +#include "wx/textdlg.h" #include "widgets.h" @@ -55,8 +58,13 @@ enum { Widgets_ClearLog = 100, Widgets_Quit, +#if wxUSE_TOOLTIPS + Widgets_SetTooltip, +#endif // wxUSE_TOOLTIPS Widgets_SetFgColour, - Widgets_SetBgColour + Widgets_SetBgColour, + Widgets_SetFont, + Widgets_Enable }; // ---------------------------------------------------------------------------- @@ -90,9 +98,15 @@ protected: void OnButtonClearLog(wxCommandEvent& event); #endif // USE_LOG void OnExit(wxCommandEvent& event); + #if wxUSE_MENUS +#if wxUSE_TOOLTIPS + void OnSetTooltip(wxCommandEvent& event); +#endif // wxUSE_TOOLTIPS void OnSetFgCol(wxCommandEvent& event); void OnSetBgCol(wxCommandEvent& event); + void OnSetFont(wxCommandEvent& event); + void OnEnable(wxCommandEvent& event); #endif // wxUSE_MENUS // initialize the book: add all pages to it @@ -111,15 +125,16 @@ private: #endif // USE_LOG // the book containing the test pages - wxBookCtrl *m_book; + wxBookCtrlBase *m_book; // and the image list for it wxImageList *m_imaglist; #if wxUSE_MENUS - // last chosen fg/bg colours + // last chosen fg/bg colours and font wxColour m_colFg, m_colBg; + wxFont m_font; #endif // wxUSE_MENUS // any class wishing to process wxWidgets events must use this macro @@ -204,9 +219,16 @@ BEGIN_EVENT_TABLE(WidgetsFrame, wxFrame) #endif // USE_LOG EVT_BUTTON(Widgets_Quit, WidgetsFrame::OnExit) - EVT_MENU(wxID_EXIT, WidgetsFrame::OnExit) +#if wxUSE_TOOLTIPS + EVT_MENU(Widgets_SetTooltip, WidgetsFrame::OnSetTooltip) +#endif // wxUSE_TOOLTIPS + EVT_MENU(Widgets_SetFgColour, WidgetsFrame::OnSetFgCol) EVT_MENU(Widgets_SetBgColour, WidgetsFrame::OnSetBgCol) + EVT_MENU(Widgets_SetFont, WidgetsFrame::OnSetFont) + EVT_MENU(Widgets_Enable, WidgetsFrame::OnEnable) + + EVT_MENU(wxID_EXIT, WidgetsFrame::OnExit) END_EVENT_TABLE() // ============================================================================ @@ -221,7 +243,7 @@ bool WidgetsApp::OnInit() { if ( !wxApp::OnInit() ) return false; - + // the reason for having these ifdef's is that I often run two copies of // this sample side by side and it is useful to see which one is which wxString title; @@ -268,19 +290,27 @@ WidgetsFrame::WidgetsFrame(const wxString& title) m_lboxLog = (wxListBox *)NULL; m_logTarget = (wxLog *)NULL; #endif // USE_LOG - m_book = (wxBookCtrl *)NULL; + m_book = (wxBookCtrlBase *)NULL; m_imaglist = (wxImageList *)NULL; #if wxUSE_MENUS // create the menubar wxMenuBar *mbar = new wxMenuBar; wxMenu *menuWidget = new wxMenu; +#if wxUSE_TOOLTIPS + menuWidget->Append(Widgets_SetTooltip, _T("Set &tooltip...\tCtrl-T")); + menuWidget->AppendSeparator(); +#endif // wxUSE_TOOLTIPS menuWidget->Append(Widgets_SetFgColour, _T("Set &foreground...\tCtrl-F")); menuWidget->Append(Widgets_SetBgColour, _T("Set &background...\tCtrl-B")); + menuWidget->Append(Widgets_SetFont, _T("Set f&ont...\tCtrl-O")); + menuWidget->AppendCheckItem(Widgets_Enable, _T("&Enable/disable\tCtrl-E")); menuWidget->AppendSeparator(); menuWidget->Append(wxID_EXIT, _T("&Quit\tCtrl-Q")); mbar->Append(menuWidget, _T("&Widget")); SetMenuBar(mbar); + + mbar->Check(Widgets_Enable, true); #endif // wxUSE_MENUS // create controls @@ -291,13 +321,18 @@ WidgetsFrame::WidgetsFrame(const wxString& title) // we have 2 panes: book with pages demonstrating the controls in the // upper one and the log window with some buttons in the lower - - int style = wxNO_FULL_REPAINT_ON_RESIZE|wxCLIP_CHILDREN|wxBC_DEFAULT; + + int style = wxNO_FULL_REPAINT_ON_RESIZE|wxCLIP_CHILDREN|wxBK_DEFAULT; // Uncomment to suppress page theme (draw in solid colour) - // style |= wxNB_NOPAGETHEME; + //style |= wxNB_NOPAGETHEME; m_book = new wxBookCtrl(m_panel, wxID_ANY, wxDefaultPosition, - wxDefaultSize, style); +#ifdef __WXMOTIF__ + wxSize(500, wxDefaultCoord), // under Motif, height is a function of the width... +#else + wxDefaultSize, +#endif + style); InitBook(); #ifndef __SMARTPHONE__ @@ -416,40 +451,132 @@ void WidgetsFrame::OnButtonClearLog(wxCommandEvent& WXUNUSED(event)) #if wxUSE_MENUS +#if wxUSE_TOOLTIPS + +void WidgetsFrame::OnSetTooltip(wxCommandEvent& WXUNUSED(event)) +{ + static wxString s_tip = _T("This is a tooltip"); + + wxString s = wxGetTextFromUser + ( + _T("Tooltip text: "), + _T("Widgets sample"), + s_tip, + this + ); + + if ( s.empty() ) + return; + + s_tip = s; + + if( wxMessageBox( _T("Test multiline tooltip text?"), + _T("Widgets sample"), + wxYES_NO, + this + ) == wxYES ) + { + s = _T("#1 ") + s_tip + _T("\n") + _T("#2 ") + s_tip; + } + + WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage); + page->GetWidget()->SetToolTip(s); + + wxControl *ctrl2 = page->GetWidget2(); + if ( ctrl2 ) + ctrl2->SetToolTip(s); +} + +#endif // wxUSE_TOOLTIPS + void WidgetsFrame::OnSetFgCol(wxCommandEvent& WXUNUSED(event)) { #if wxUSE_COLOURDLG + // allow for debugging the default colour the first time this is called + WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage); + if (!m_colFg.Ok()) + m_colFg = page->GetForegroundColour(); + wxColour col = wxGetColourFromUser(this, m_colFg); if ( !col.Ok() ) return; m_colFg = col; - WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage); page->GetWidget()->SetForegroundColour(m_colFg); page->GetWidget()->Refresh(); + + wxControl *ctrl2 = page->GetWidget2(); + if ( ctrl2 ) + { + ctrl2->SetForegroundColour(m_colFg); + ctrl2->Refresh(); + } #else - wxLogMessage(_T("None colour dialog available in current build.")); + wxLogMessage(_T("Colour selection dialog not available in current build.")); #endif } void WidgetsFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event)) { #if wxUSE_COLOURDLG + WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage); + if ( !m_colBg.Ok() ) + m_colBg = page->GetBackgroundColour(); + wxColour col = wxGetColourFromUser(this, m_colBg); if ( !col.Ok() ) return; m_colBg = col; - WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage); page->GetWidget()->SetBackgroundColour(m_colBg); page->GetWidget()->Refresh(); + + wxControl *ctrl2 = page->GetWidget2(); + if ( ctrl2 ) + { + ctrl2->SetBackgroundColour(m_colFg); + ctrl2->Refresh(); + } +#else + wxLogMessage(_T("Colour selection dialog not available in current build.")); +#endif +} + +void WidgetsFrame::OnSetFont(wxCommandEvent& WXUNUSED(event)) +{ +#if wxUSE_FONTDLG + WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage); + if (!m_font.Ok()) + m_font = page->GetFont(); + + wxFont font = wxGetFontFromUser(this, m_font); + if ( !font.Ok() ) + return; + + m_font = font; + + page->GetWidget()->SetFont(m_font); + page->GetWidget()->Refresh(); + + wxControl *ctrl2 = page->GetWidget2(); + if ( ctrl2 ) + { + ctrl2->SetFont(m_font); + ctrl2->Refresh(); + } #else - wxLogMessage(_T("None colour dialog available in current build.")); + wxLogMessage(_T("Font selection dialog not available in current build.")); #endif } +void WidgetsFrame::OnEnable(wxCommandEvent& event) +{ + WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage); + page->GetWidget()->Enable(event.IsChecked()); +} + #endif // wxUSE_MENUS // ---------------------------------------------------------------------------- @@ -517,7 +644,7 @@ WidgetsPageInfo::WidgetsPageInfo(Constructor ctor, const wxChar *label) // WidgetsPage // ---------------------------------------------------------------------------- -WidgetsPage::WidgetsPage(wxBookCtrl *book) +WidgetsPage::WidgetsPage(wxBookCtrlBase *book) : wxPanel(book, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_FULL_REPAINT_ON_RESIZE | @@ -571,4 +698,3 @@ wxCheckBox *WidgetsPage::CreateCheckBoxAndAddToSizer(wxSizer *sizer, return checkbox; } -