X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/195df7a7672277af495a4ecf9bf6eee2a7517069..a8ac548ed05a3a128fa69476cc51acc0504880a2:/samples/widgets/widgets.cpp?ds=sidebyside diff --git a/samples/widgets/widgets.cpp b/samples/widgets/widgets.cpp index 748d97c5da..fc545d0008 100644 --- a/samples/widgets/widgets.cpp +++ b/samples/widgets/widgets.cpp @@ -29,6 +29,8 @@ #include "wx/app.h" #include "wx/log.h" #include "wx/frame.h" + #include "wx/menu.h" + #include "wx/button.h" #include "wx/checkbox.h" #include "wx/listbox.h" @@ -37,7 +39,8 @@ #include "wx/textctrl.h" #endif -#include "wx/notebook.h" +#include "wx/sysopt.h" +#include "wx/bookctrl.h" #include "wx/sizer.h" #include "wx/colordlg.h" @@ -83,32 +86,32 @@ public: protected: // event handlers -#if wxUSE_LOG +#if USE_LOG void OnButtonClearLog(wxCommandEvent& event); -#endif // wxUSE_LOG +#endif // USE_LOG void OnExit(wxCommandEvent& event); #if wxUSE_MENUS void OnSetFgCol(wxCommandEvent& event); void OnSetBgCol(wxCommandEvent& event); #endif // wxUSE_MENUS - // initialize the notebook: add all pages to it - void InitNotebook(); + // initialize the book: add all pages to it + void InitBook(); private: // the panel containing everything wxPanel *m_panel; -#if wxUSE_LOG +#if USE_LOG // the listbox for logging messages wxListBox *m_lboxLog; // the log target we use to redirect messages to the listbox wxLog *m_logTarget; -#endif // wxUSE_LOG +#endif // USE_LOG - // the notebook containing the test pages - wxNotebook *m_notebook; + // the book containing the test pages + wxBookCtrl *m_book; // and the image list for it wxImageList *m_imaglist; @@ -123,7 +126,7 @@ private: DECLARE_EVENT_TABLE() }; -#if wxUSE_LOG +#if USE_LOG // A log target which just redirects the messages to a listbox class LboxLogger : public wxLog { @@ -180,7 +183,7 @@ private: // the old log target wxLog *m_logOld; }; -#endif // wxUSE_LOG +#endif // USE_LOG // array of pages WX_DEFINE_ARRAY_PTR(WidgetsPage *, ArrayWidgetsPage); @@ -196,9 +199,9 @@ IMPLEMENT_APP(WidgetsApp) // ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE(WidgetsFrame, wxFrame) -#if wxUSE_LOG +#if USE_LOG EVT_BUTTON(Widgets_ClearLog, WidgetsFrame::OnButtonClearLog) -#endif // wxUSE_LOG +#endif // USE_LOG EVT_BUTTON(Widgets_Quit, WidgetsFrame::OnExit) EVT_MENU(wxID_EXIT, WidgetsFrame::OnExit) @@ -218,7 +221,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; @@ -261,11 +264,11 @@ WidgetsFrame::WidgetsFrame(const wxString& title) wxTAB_TRAVERSAL) { // init everything -#if wxUSE_LOG +#if USE_LOG m_lboxLog = (wxListBox *)NULL; m_logTarget = (wxLog *)NULL; -#endif // wxUSE_LOG - m_notebook = (wxNotebook *)NULL; +#endif // USE_LOG + m_book = (wxBookCtrl *)NULL; m_imaglist = (wxImageList *)NULL; #if wxUSE_MENUS @@ -286,15 +289,20 @@ WidgetsFrame::WidgetsFrame(const wxString& title) wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL); - // we have 2 panes: notebook which pages demonstrating the controls in the + // 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; + // Uncomment to suppress page theme (draw in solid colour) + // style |= wxNB_NOPAGETHEME; - m_notebook = new wxNotebook(m_panel, wxID_ANY, wxDefaultPosition, - wxDefaultSize, wxNO_FULL_REPAINT_ON_RESIZE|wxCLIP_CHILDREN); - InitNotebook(); + m_book = new wxBookCtrl(m_panel, wxID_ANY, wxDefaultPosition, + wxDefaultSize, style); + InitBook(); +#ifndef __SMARTPHONE__ // the lower one only has the log listbox and a button to clear it -#if wxUSE_LOG +#if USE_LOG wxSizer *sizerDown = new wxStaticBoxSizer( new wxStaticBox( m_panel, wxID_ANY, _T("&Log window") ), wxVERTICAL); @@ -304,30 +312,36 @@ WidgetsFrame::WidgetsFrame(const wxString& title) sizerDown->SetMinSize(100, 150); #else wxSizer *sizerDown = new wxBoxSizer(wxVERTICAL); -#endif // wxUSE_LOG +#endif // USE_LOG wxBoxSizer *sizerBtns = new wxBoxSizer(wxHORIZONTAL); wxButton *btn; -#if wxUSE_LOG +#if USE_LOG btn = new wxButton(m_panel, Widgets_ClearLog, _T("Clear &log")); sizerBtns->Add(btn); sizerBtns->Add(10, 0); // spacer -#endif // wxUSE_LOG +#endif // USE_LOG btn = new wxButton(m_panel, Widgets_Quit, _T("E&xit")); sizerBtns->Add(btn); sizerDown->Add(sizerBtns, 0, wxALL | wxALIGN_RIGHT, 5); // put everything together - sizerTop->Add(m_notebook, 1, wxGROW | (wxALL & ~(wxTOP | wxBOTTOM)), 10); + sizerTop->Add(m_book, 1, wxGROW | (wxALL & ~(wxTOP | wxBOTTOM)), 10); sizerTop->Add(0, 5, 0, wxGROW); // spacer in between sizerTop->Add(sizerDown, 0, wxGROW | (wxALL & ~wxTOP), 10); +#else // !__SMARTPHONE__/__SMARTPHONE__ + + sizerTop->Add(m_book, 1, wxGROW | wxALL ); + +#endif // __SMARTPHONE__ + m_panel->SetSizer(sizerTop); sizerTop->Fit(this); sizerTop->SetSizeHints(this); -#if wxUSE_LOG && !defined(__WXCOCOA__) +#if USE_LOG && !defined(__WXCOCOA__) // wxCocoa's listbox is too flakey to use for logging right now // now that everything is created we can redirect the log messages to the // listbox @@ -336,19 +350,19 @@ WidgetsFrame::WidgetsFrame(const wxString& title) #endif } -void WidgetsFrame::InitNotebook() +void WidgetsFrame::InitBook() { m_imaglist = new wxImageList(32, 32); ArrayWidgetsPage pages; wxArrayString labels; - // we need to first create all pages and only then add them to the notebook + // we need to first create all pages and only then add them to the book // as we need the image list first WidgetsPageInfo *info = WidgetsPage::ms_widgetPages; while ( info ) { - WidgetsPage *page = (*info->GetCtor())(m_notebook, m_imaglist); + WidgetsPage *page = (*info->GetCtor())(m_book, m_imaglist); pages.Add(page); labels.Add(info->GetLabel()); @@ -356,26 +370,31 @@ void WidgetsFrame::InitNotebook() info = info->GetNext(); } - m_notebook->SetImageList(m_imaglist); + m_book->SetImageList(m_imaglist); // now do add them size_t count = pages.GetCount(); for ( size_t n = 0; n < count; n++ ) { - m_notebook->AddPage( - pages[n], - labels[n], - false, // don't select - n // image id - ); + m_book->AddPage( + pages[n], + labels[n], + false, // don't select + n // image id + ); + +/* + wxColour colour = m_book->MSWGetBgColourForChild(pages[n]); + pages[n]->SetBackgroundColour(colour); +*/ } } WidgetsFrame::~WidgetsFrame() { -#if wxUSE_LOG +#if USE_LOG delete m_logTarget; -#endif // wxUSE_LOG +#endif // USE_LOG delete m_imaglist; } @@ -388,37 +407,47 @@ void WidgetsFrame::OnExit(wxCommandEvent& WXUNUSED(event)) Close(); } -#if wxUSE_LOG +#if USE_LOG void WidgetsFrame::OnButtonClearLog(wxCommandEvent& WXUNUSED(event)) { m_lboxLog->Clear(); } -#endif // wxUSE_LOG +#endif // USE_LOG #if wxUSE_MENUS void WidgetsFrame::OnSetFgCol(wxCommandEvent& WXUNUSED(event)) { +#if wxUSE_COLOURDLG wxColour col = wxGetColourFromUser(this, m_colFg); if ( !col.Ok() ) return; m_colFg = col; - WidgetsPage *page = wxStaticCast(m_notebook->GetCurrentPage(), WidgetsPage); + WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage); page->GetWidget()->SetForegroundColour(m_colFg); + page->GetWidget()->Refresh(); +#else + wxLogMessage(_T("None colour dialog available in current build.")); +#endif } void WidgetsFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event)) { +#if wxUSE_COLOURDLG wxColour col = wxGetColourFromUser(this, m_colBg); if ( !col.Ok() ) return; m_colBg = col; - WidgetsPage *page = wxStaticCast(m_notebook->GetCurrentPage(), WidgetsPage); + WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage); page->GetWidget()->SetBackgroundColour(m_colBg); + page->GetWidget()->Refresh(); +#else + wxLogMessage(_T("None colour dialog available in current build.")); +#endif } #endif // wxUSE_MENUS @@ -488,8 +517,8 @@ WidgetsPageInfo::WidgetsPageInfo(Constructor ctor, const wxChar *label) // WidgetsPage // ---------------------------------------------------------------------------- -WidgetsPage::WidgetsPage(wxNotebook *notebook) - : wxPanel(notebook, wxID_ANY, +WidgetsPage::WidgetsPage(wxBookCtrl *book) + : wxPanel(book, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_FULL_REPAINT_ON_RESIZE | wxCLIP_CHILDREN |