Rearranged widgets sample to show more and categorized widgets.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39190 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba
2006-05-17 19:49:09 +00:00
parent 689f42f4b4
commit f2fdc4d56e
27 changed files with 1059 additions and 299 deletions

View File

@@ -42,6 +42,7 @@
#include "wx/sysopt.h"
#include "wx/bookctrl.h"
#include "wx/treebook.h"
#include "wx/sizer.h"
#include "wx/colordlg.h"
#include "wx/fontdlg.h"
@@ -49,6 +50,8 @@
#include "widgets.h"
#include "../sample.xpm"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
@@ -81,6 +84,17 @@ enum
Widgets_GoToPageLast = Widgets_GoToPage + 100
};
const wxChar *WidgetsCategories[MAX_PAGES] = {
wxT("Native"),
wxT("Generic"),
wxT("Pickers"),
wxT("Comboboxes"),
wxT("With items"),
wxT("Editable"),
wxT("Books"),
wxT("All controls")
};
// ----------------------------------------------------------------------------
// our classes
// ----------------------------------------------------------------------------
@@ -114,7 +128,7 @@ protected:
void OnExit(wxCommandEvent& event);
#if wxUSE_MENUS
void OnPageChanged(wxBookCtrlEvent& event);
void OnPageChanged(WidgetsBookCtrlEvent& event);
void OnGoToPage(wxCommandEvent& event);
#if wxUSE_TOOLTIPS
@@ -130,6 +144,9 @@ protected:
// initialize the book: add all pages to it
void InitBook();
// finding current page assuming book inside book
WidgetsPage *CurrentPage();
private:
// the panel containing everything
wxPanel *m_panel;
@@ -143,10 +160,7 @@ private:
#endif // USE_LOG
// the book containing the test pages
wxBookCtrlBase *m_book;
// and the image list for it
wxImageList *m_imaglist;
WidgetsBookCtrl *m_book;
#if wxUSE_MENUS
// last chosen fg/bg colours and font
@@ -242,7 +256,7 @@ BEGIN_EVENT_TABLE(WidgetsFrame, wxFrame)
#endif // wxUSE_TOOLTIPS
#if wxUSE_MENUS
EVT_BOOKCTRL_PAGE_CHANGED(Widgets_BookCtrl, WidgetsFrame::OnPageChanged)
EVT_WIDGETS_PAGE_CHANGED(wxID_ANY, WidgetsFrame::OnPageChanged)
EVT_MENU_RANGE(Widgets_GoToPage, Widgets_GoToPageLast,
WidgetsFrame::OnGoToPage)
@@ -312,13 +326,15 @@ WidgetsFrame::WidgetsFrame(const wxString& title)
wxCLIP_CHILDREN |
wxTAB_TRAVERSAL)
{
// set the frame icon
SetIcon(wxICON(sample));
// init everything
#if USE_LOG
m_lboxLog = (wxListBox *)NULL;
m_logTarget = (wxLog *)NULL;
#endif // USE_LOG
m_book = (wxBookCtrlBase *)NULL;
m_imaglist = (wxImageList *)NULL;
m_book = (WidgetsBookCtrl *)NULL;
#if wxUSE_MENUS
// create the menubar
@@ -364,7 +380,7 @@ WidgetsFrame::WidgetsFrame(const wxString& title)
// Uncomment to suppress page theme (draw in solid colour)
//style |= wxNB_NOPAGETHEME;
m_book = new wxBookCtrl(m_panel, Widgets_BookCtrl, wxDefaultPosition,
m_book = new WidgetsBookCtrl(m_panel, Widgets_BookCtrl, wxDefaultPosition,
#ifdef __WXMOTIF__
wxSize(500, wxDefaultCoord), // under Motif, height is a function of the width...
#else
@@ -425,49 +441,121 @@ WidgetsFrame::WidgetsFrame(const wxString& title)
void WidgetsFrame::InitBook()
{
m_imaglist = new wxImageList(32, 32);
wxImageList *imageList = new wxImageList(32, 32);
ArrayWidgetsPage pages;
wxArrayString labels;
imageList->Add(wxBitmap(sample_xpm));
#if !USE_TREEBOOK
WidgetsBookCtrl *books[MAX_PAGES];
#endif
ArrayWidgetsPage pages[MAX_PAGES];
wxArrayString labels[MAX_PAGES];
wxMenu *menuPages = new wxMenu;
unsigned nPage = 0;
unsigned int nPage = 0, nFKey = 0;
int cat, imageId = 1;
// we need to first create all pages and only then add them to the book
// as we need the image list first
//
// we also construct the pages menu during this first iteration
for ( WidgetsPageInfo *info = WidgetsPage::ms_widgetPages;
info;
info = info->GetNext(), nPage++ )
for ( cat = 0; cat < MAX_PAGES; cat++ )
{
WidgetsPage *page = (*info->GetCtor())(m_book, m_imaglist);
pages.Add(page);
#if USE_TREEBOOK
nPage++; // increase for parent page
#else
books[cat] = new WidgetsBookCtrl( m_book, wxID_ANY );
#endif
labels.Add(info->GetLabel());
menuPages->AppendRadioItem
(
Widgets_GoToPage + nPage,
wxString::Format(wxT("%s\tF%u"),
info->GetLabel().c_str(), nPage + 1)
);
for ( WidgetsPageInfo *info = WidgetsPage::ms_widgetPages;
info;
info = info->GetNext() )
{
if( (info->GetCategories() & ( 1 << cat )) == 0)
continue;
WidgetsPage *page = (*info->GetCtor())(
#if USE_TREEBOOK
m_book
#else
books[cat]
#endif
, imageList);
pages[cat].Add(page);
labels[cat].Add(info->GetLabel());
if ( cat == ALL_PAGE )
{
wxString radioLabel(info->GetLabel());
nFKey++;
if ( nFKey <= 12 )
{
radioLabel << wxT("\tF" ) << nFKey;
}
menuPages->AppendRadioItem(
Widgets_GoToPage + nPage,
radioLabel
);
#if !USE_TREEBOOK
// consider only for book in book architecture
nPage++;
#endif
}
#if USE_TREEBOOK
// consider only for treebook architecture (with subpages)
nPage++;
#endif
}
}
GetMenuBar()->Append(menuPages, _T("&Page"));
m_book->SetImageList(m_imaglist);
m_book->AssignImageList(imageList);
// now do add them
size_t count = pages.GetCount();
for ( size_t n = 0; n < count; n++ )
for ( cat = 0; cat < MAX_PAGES; cat++ )
{
m_book->AddPage(
pages[n],
labels[n],
false, // don't select
n // image id
);
#if USE_TREEBOOK
m_book->AddPage(NULL,WidgetsCategories[cat],false,0);
#else
m_book->AddPage(books[cat],WidgetsCategories[cat],false,0);
books[cat]->SetImageList(imageList);
#endif
// now do add them
size_t count = pages[cat].GetCount();
for ( size_t n = 0; n < count; n++ )
{
#if USE_TREEBOOK
m_book->AddSubPage(
#else
books[cat]->AddPage(
#endif
pages[cat][n],
labels[cat][n],
false, // don't select
imageId++
);
}
}
#if USE_TREEBOOK
// for treebook page #0 is empty parent page only
m_book->SetSelection(1);
#endif
}
WidgetsPage *WidgetsFrame::CurrentPage()
{
#if USE_TREEBOOK
return wxStaticCast(m_book->GetCurrentPage(), WidgetsPage);
#else
WidgetsBookCtrl *book = wxStaticCast(m_book->GetCurrentPage(), WidgetsBookCtrl);
if (!book) return NULL;
return wxStaticCast(book->GetCurrentPage(), WidgetsPage);
#endif
}
WidgetsFrame::~WidgetsFrame()
@@ -475,7 +563,6 @@ WidgetsFrame::~WidgetsFrame()
#if USE_LOG
delete m_logTarget;
#endif // USE_LOG
delete m_imaglist;
}
// ----------------------------------------------------------------------------
@@ -496,15 +583,22 @@ void WidgetsFrame::OnButtonClearLog(wxCommandEvent& WXUNUSED(event))
#if wxUSE_MENUS
void WidgetsFrame::OnPageChanged(wxBookCtrlEvent& event)
void WidgetsFrame::OnPageChanged(WidgetsBookCtrlEvent& event)
{
GetMenuBar()->Check(Widgets_GoToPage + event.GetSelection(), true);
wxMenuItem *item = GetMenuBar()->FindItem(Widgets_GoToPage + event.GetSelection());
if (item) item->Check();
event.Skip();
}
void WidgetsFrame::OnGoToPage(wxCommandEvent& event)
{
#if USE_TREEBOOK
m_book->SetSelection(event.GetId() - Widgets_GoToPage);
#else
m_book->SetSelection(m_book->GetPageCount()-1);
WidgetsBookCtrl *book = wxStaticCast(m_book->GetCurrentPage(), WidgetsBookCtrl);
book->SetSelection(event.GetId() - Widgets_GoToPage);
#endif
}
#if wxUSE_TOOLTIPS
@@ -527,7 +621,7 @@ void WidgetsFrame::OnSetTooltip(wxCommandEvent& WXUNUSED(event))
s_tip = dialog.GetValue();
s_tip.Replace(_T("\\n"), _T("\n"));
WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage);
WidgetsPage *page = CurrentPage();
page->GetWidget()->SetToolTip(s_tip);
wxControl *ctrl2 = page->GetWidget2();
@@ -541,7 +635,7 @@ 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);
WidgetsPage *page = CurrentPage();
if (!m_colFg.Ok())
m_colFg = page->GetForegroundColour();
@@ -568,7 +662,7 @@ void WidgetsFrame::OnSetFgCol(wxCommandEvent& WXUNUSED(event))
void WidgetsFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event))
{
#if wxUSE_COLOURDLG
WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage);
WidgetsPage *page = CurrentPage();
if ( !m_colBg.Ok() )
m_colBg = page->GetBackgroundColour();
@@ -595,7 +689,7 @@ void WidgetsFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event))
void WidgetsFrame::OnSetFont(wxCommandEvent& WXUNUSED(event))
{
#if wxUSE_FONTDLG
WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage);
WidgetsPage *page = CurrentPage();
if (!m_font.Ok())
m_font = page->GetFont();
@@ -621,7 +715,7 @@ void WidgetsFrame::OnSetFont(wxCommandEvent& WXUNUSED(event))
void WidgetsFrame::OnEnable(wxCommandEvent& event)
{
WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage);
WidgetsPage *page = CurrentPage();
page->GetWidget()->Enable(event.IsChecked());
}
@@ -647,7 +741,7 @@ void WidgetsFrame::OnSetBorder(wxCommandEvent& event)
WidgetsPage::ms_defaultFlags &= ~wxBORDER_MASK;
WidgetsPage::ms_defaultFlags |= border;
WidgetsPage *page = wxStaticCast(m_book->GetCurrentPage(), WidgetsPage);
WidgetsPage *page = CurrentPage();
page->RecreateWidget();
}
@@ -657,8 +751,9 @@ void WidgetsFrame::OnSetBorder(wxCommandEvent& event)
// WidgetsPageInfo
// ----------------------------------------------------------------------------
WidgetsPageInfo::WidgetsPageInfo(Constructor ctor, const wxChar *label)
WidgetsPageInfo::WidgetsPageInfo(Constructor ctor, const wxChar *label, int categories)
: m_label(label)
, m_categories(categories)
{
m_ctor = ctor;
@@ -716,7 +811,7 @@ WidgetsPageInfo::WidgetsPageInfo(Constructor ctor, const wxChar *label)
int WidgetsPage::ms_defaultFlags = wxBORDER_DEFAULT;
WidgetsPageInfo *WidgetsPage::ms_widgetPages = NULL;
WidgetsPage::WidgetsPage(wxBookCtrlBase *book)
WidgetsPage::WidgetsPage(WidgetsBookCtrl *book)
: wxPanel(book, wxID_ANY,
wxDefaultPosition, wxDefaultSize,
wxNO_FULL_REPAINT_ON_RESIZE |