Applied patch [ 581280 ] Revamped notebook sample

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16214 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2002-07-19 19:57:58 +00:00
parent 250b589f71
commit c1dfe27754
2 changed files with 480 additions and 295 deletions

View File

@@ -1,12 +1,12 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: notebook.cpp // Name: samples/notebook/notebook.cpp
// Purpose: wxNotebook demo // Purpose: a sample demonstrating notebook usage
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by: Dimitri Schoolwerth
// Created: 26/10/98 // Created: 26/10/98
// RCS-ID: $Id$ // RCS-ID: $Id$
// Copyright: (c) // Copyright: (c) 1998-2002 wxWindows team
// Licence: wxWindows licence // License: wxWindows license
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h". // For compilers that support precompilation, includes "wx.h".
@@ -20,297 +20,456 @@
#include "wx/wx.h" #include "wx/wx.h"
#endif #endif
// If 1, use a dialog. Otherwise use a frame. #include "wx/imaglist.h"
#define USE_TABBED_DIALOG 1 #include "wx/artprov.h"
#include "notebook.h" #include "notebook.h"
#if USE_TABBED_DIALOG // Name of the Veto page
MyDialog* dialog = (MyDialog *) NULL; #define VETO_PAGE_NAME wxT("Veto")
#else // !USE_TABBED_DIALOG
MyFrame* frame = (MyFrame *) NULL;
#endif // USE_TABBED_DIALOG
IMPLEMENT_APP(MyApp) IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() bool MyApp::OnInit()
{ {
// Create the main window // Create the main window
#if USE_TABBED_DIALOG MyFrame *frame = new MyFrame( wxT("Notebook sample") );
dialog = new MyDialog((wxFrame *) NULL, -1, "Notebook", wxPoint(-1, -1), wxSize(365, 390),
wxRESIZE_BORDER);
dialog->ShowModal();
delete dialog;
// Quit immediately the dialog has been dismissed // Problem with generic wxNotebook implementation whereby it doesn't size
return FALSE; // properly unless you set the size again
#else
frame = new MyFrame((wxFrame*) NULL, -1, "Notebook", wxPoint(-1, -1), wxSize(465, 390) );
// Problem with generic wxNotebook implementation whereby it doesn't size properly unless
// you set the size again
#if defined(__WIN16__) || defined(__WXMOTIF__) #if defined(__WIN16__) || defined(__WXMOTIF__)
int width, height; int width, height;
frame->GetSize(& width, & height); frame->GetSize(& width, & height);
frame->SetSize(-1, -1, width, height); frame->SetSize(-1, -1, width, height);
#endif #endif
return TRUE; frame->Show();
#endif
return TRUE;
} }
void MyApp::InitTabView(wxNotebook* notebook, wxWindow* window) MyNotebook::MyNotebook(wxWindow *parent, wxWindowID id,
const wxPoint& pos, const wxSize& size, long style)
: wxNotebook(parent, id, pos, size, style)
{ {
m_okButton = new wxButton(window, wxID_OK, "Close", wxPoint(-1, -1), wxSize(80, 25)); // Empty
m_cancelButton = new wxButton(window, ID_DELETE_PAGE, "&Delete page", wxPoint(-1, -1), wxSize(80, 25));
m_addPageButton = new wxButton(window, ID_ADD_PAGE, "&Add page", wxPoint(-1, -1), wxSize(80, 25));
m_insertPageButton = new wxButton(window, ID_INSERT_PAGE, "&Insert page", wxPoint(-1, -1), wxSize(80, 25));
m_nextPageButton = new wxButton(window, ID_NEXT_PAGE, "&Next page", wxPoint(-1, -1), wxSize(80, 25));
m_okButton->SetDefault();
wxLayoutConstraints *c;
c = new wxLayoutConstraints;
c->right.SameAs(window, wxRight, 4);
c->bottom.SameAs(window, wxBottom, 4);
c->height.AsIs();
c->width.AsIs();
m_addPageButton->SetConstraints(c);
c = new wxLayoutConstraints;
c->right.SameAs(m_addPageButton, wxLeft, 4);
c->bottom.SameAs(window, wxBottom, 4);
c->height.AsIs();
c->width.AsIs();
m_insertPageButton->SetConstraints(c);
c = new wxLayoutConstraints;
c->right.SameAs(m_insertPageButton, wxLeft, 4);
c->bottom.SameAs(window, wxBottom, 4);
c->height.AsIs();
c->width.AsIs();
m_nextPageButton->SetConstraints(c);
c = new wxLayoutConstraints;
c->right.SameAs(m_nextPageButton, wxLeft, 4);
c->bottom.SameAs(window, wxBottom, 4);
c->height.AsIs();
c->width.AsIs();
m_cancelButton->SetConstraints(c);
c = new wxLayoutConstraints;
c->right.SameAs(m_cancelButton, wxLeft, 4);
c->bottom.SameAs(window, wxBottom, 4);
c->height.AsIs();
c->width.AsIs();
m_okButton->SetConstraints(c);
// Add some panels
wxPanel *panel1 = new wxPanel(notebook, -1);
// panel1->SetBackgroundColour(wxColour("RED"));
(void)new wxButton(panel1, -1, "Press me", wxPoint(10, 10));
(void)new wxTextCtrl(panel1, -1, "1234", wxPoint(10, 40), wxSize(120, 150));
notebook->AddPage(panel1, "Cat", TRUE);
wxPanel *panel2 = new wxPanel(notebook, -1);
panel2->SetAutoLayout(TRUE);
panel2->SetBackgroundColour(wxColour("BLUE"));
wxString animals[] = { "Fox", "Hare", "Rabbit", "Sabre-toothed tiger", "T Rex" };
wxRadioBox *radiobox = new wxRadioBox(panel2, -1, "Choose one",
wxDefaultPosition, wxDefaultSize, 5, animals,
2, wxRA_SPECIFY_ROWS);
c = new wxLayoutConstraints;
c->left.SameAs(panel2, wxLeft, 10);
c->top.SameAs(panel2, wxTop, 5);
c->height.PercentOf(panel2, wxHeight, 50);
c->right.SameAs(panel2, wxRight, 10);
radiobox->SetConstraints(c);
wxRadioBox *radiobox2 = new wxRadioBox(panel2, -1, "Choose one",
wxDefaultPosition, wxDefaultSize,
5, animals,
2, wxRA_SPECIFY_ROWS);
c = new wxLayoutConstraints;
c->left.SameAs(radiobox, wxLeft);
c->height.AsIs();
c->top.Below(radiobox, 5);
c->right.SameAs(radiobox, wxRight);
radiobox2->SetConstraints(c);
notebook->AddPage(panel2, "Dog");
wxPanel *panel3 = new wxPanel(notebook, -1);
panel3->SetBackgroundColour(wxColour("WHITE"));
notebook->AddPage(panel3, "Goat");
wxPanel *panel4 = new wxPanel(notebook, -1);
panel4->SetBackgroundColour(wxColour("YELLOW"));
notebook->AddPage(panel4, "Sheep");
wxPanel *panel5 = new wxPanel(notebook, -1);
panel5->SetBackgroundColour(wxColour("MAGENTA"));
(void)new wxStaticText(panel5, -1, "This page has been inserted, not added", wxPoint(10, 10) );
notebook->InsertPage(0, panel5, "Sheep");
notebook->SetSelection(2);
} }
#if USE_TABBED_DIALOG void MyNotebook::CreateInitialPages()
BEGIN_EVENT_TABLE(MyDialog, wxDialog)
EVT_BUTTON(wxID_OK, MyDialog::OnOK)
EVT_BUTTON(wxID_CANCEL, MyDialog::OnOK)
END_EVENT_TABLE()
MyDialog::MyDialog(wxWindow* parent, const wxWindowID id, const wxString& title,
const wxPoint& pos, const wxSize& size, const long windowStyle):
wxDialog(parent, id, title, pos, size, windowStyle)
{ {
Init(); wxPanel *panel = (wxPanel *) NULL;
wxBoxSizer *sizerPanel = (wxBoxSizer *) NULL;
// Create and add some panels to the notebook
// Panel 1
panel = new wxPanel(this);
sizerPanel = new wxBoxSizer(wxVERTICAL);
sizerPanel->Add( new wxButton( panel, -1, wxT("Button") ) );
sizerPanel->Add( new wxTextCtrl(panel, -1, wxT("1234"),
wxDefaultPosition, wxSize(120, 150) ) );
panel->SetSizer(sizerPanel);
AddPage( panel, wxT("Controls without sizer"), TRUE, GetIconIndex() );
// Panel 2
panel = new wxPanel(this);
wxString animals[] = { wxT("Fox"), wxT("Hare"), wxT("Rabbit"),
wxT("Sabre-toothed tiger"), wxT("T Rex") };
wxRadioBox *radiobox1 = new wxRadioBox(panel, -1, wxT("Choose one"),
wxDefaultPosition, wxDefaultSize, 5, animals, 2, wxRA_SPECIFY_ROWS);
wxString computers[] = { wxT("Amiga"), wxT("Commodore 64"), wxT("PET"),
wxT("Another") };
wxRadioBox *radiobox2 = new wxRadioBox(panel, -1,
wxT("Choose your favourite"), wxDefaultPosition, wxDefaultSize,
4, computers, 0, wxRA_SPECIFY_COLS);
sizerPanel = new wxBoxSizer(wxVERTICAL);
sizerPanel->Add(radiobox1, 2, wxEXPAND);
sizerPanel->Add(radiobox2, 1, wxEXPAND);
panel->SetSizer(sizerPanel);
AddPage( panel, wxT("Radiobuttons"), FALSE, GetIconIndex() );
// Panel 3
panel = new wxPanel(this);
(void) new wxStaticText( panel, -1,
wxT("This page intentionally left blank"), wxPoint(10, 10) );
AddPage( panel, VETO_PAGE_NAME, FALSE, GetIconIndex() );
// Panel 4
panel = new wxPanel(this);
wxButton *buttonBig = new wxButton( panel, -1, wxT("Big button"),
wxPoint(0, 0), wxSize(480, 360) );
sizerPanel = new wxBoxSizer(wxVERTICAL);
sizerPanel->Add(buttonBig, 1, wxEXPAND);
panel->SetSizer(sizerPanel);
AddPage( panel, wxT("Big button"), FALSE, GetIconIndex() );
// Panel 5
panel = new wxPanel(this);
panel->SetBackgroundColour( wxColour( wxT("MAROON") ) );
(void) new wxStaticText( panel, -1,
wxT("This page has been inserted, not added."), wxPoint(10, 10) );
InsertPage( 0, panel, wxT("Inserted"), FALSE, GetIconIndex() );
SetSelection(2);
} }
void MyDialog::OnOK(wxCommandEvent& WXUNUSED(event) ) int MyNotebook::GetIconIndex() const
{ {
EndModal(wxID_OK); if (m_imageList)
{
int nImages = m_imageList->GetImageCount();
if (nImages > 0)
{
return GetPageCount() % nImages;
}
}
return -1;
} }
void MyDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event) ) MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
long style)
: wxFrame((wxWindow *) NULL, -1, title, pos, size, style)
{ {
EndModal(wxID_CANCEL); m_panel = (wxPanel *) NULL;
m_notebook = (MyNotebook *) NULL;
m_imageList = (wxImageList *) NULL;
m_panel = new wxPanel(this, -1, wxDefaultPosition, wxDefaultSize,
wxTAB_TRAVERSAL|wxCLIP_CHILDREN|wxNO_BORDER);
// Create remaining controls
// must be in sync with Orient enum
wxString strOrientations[] =
{
wxT("&Top"),
wxT("&Bottom"),
wxT("&Left"),
wxT("&Right"),
};
wxASSERT_MSG( WXSIZEOF(strOrientations) == ORIENT_MAX,
wxT("forgot to update something") );
m_radioOrient = new wxRadioBox
(
m_panel, ID_RADIO_ORIENT,
wxT("&Tab orientation"),
wxDefaultPosition, wxDefaultSize,
WXSIZEOF(strOrientations), strOrientations,
1, wxRA_SPECIFY_COLS
);
m_chkShowImages = new wxCheckBox( m_panel, ID_CHK_SHOWIMAGES,
wxT("&Show images") );
m_btnAddPage = new wxButton( m_panel, ID_BTN_ADD_PAGE, wxT("&Add page") );
m_btnInsertPage = new wxButton( m_panel, ID_BTN_INSERT_PAGE,
wxT("&Insert page") );
m_btnDeletePage = new wxButton( m_panel, ID_BTN_DELETE_PAGE,
wxT("&Delete page") );
m_btnNextPage = new wxButton( m_panel, ID_BTN_NEXT_PAGE,
wxT("&Next page") );
m_btnExit = new wxButton( m_panel, wxID_OK, wxT("&Exit") );
m_btnExit->SetDefault();
m_notebook = new MyNotebook(m_panel, ID_NOTEBOOK);
m_text = new wxTextCtrl(m_panel, -1, wxEmptyString,
wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY);
m_logTargetOld = wxLog::SetActiveTarget( new wxLogTextCtrl(m_text) );
// Create the notebook's panels
m_notebook->CreateInitialPages();
// Set sizers
m_sizerFrame = new wxBoxSizer(wxVERTICAL);
m_sizerTop = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer *sizerLeft = new wxBoxSizer(wxVERTICAL);
{
sizerLeft->Add(m_radioOrient, 0, wxEXPAND);
sizerLeft->Add(m_chkShowImages, 0, wxEXPAND | wxTOP, 4);
sizerLeft->Add(0, 0, 1); // Spacer
sizerLeft->Add(m_btnAddPage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4);
sizerLeft->Add(m_btnInsertPage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4);
sizerLeft->Add(m_btnDeletePage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4);
sizerLeft->Add(m_btnNextPage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4);
sizerLeft->Add(0, 0, 1); // Spacer
sizerLeft->Add(m_btnExit, 0, wxEXPAND);
}
m_sizerTop->Add(sizerLeft, 0, wxEXPAND | wxALL, 4);
m_sizerFrame->Add(m_sizerTop, 1, wxEXPAND);
m_sizerFrame->Add(m_text, 0, wxEXPAND);
ReInitNotebook();
m_panel->SetSizer(m_sizerFrame);
m_panel->SetAutoLayout(TRUE);
m_sizerFrame->Fit(this);
Centre(wxBOTH);
} }
void MyDialog::Init() MyFrame::~MyFrame()
{ {
m_notebook = new wxNotebook(this, ID_NOTEBOOK); delete wxLog::SetActiveTarget(m_logTargetOld);
}
wxLayoutConstraints* c = new wxLayoutConstraints;
c->left.SameAs(this, wxLeft, 4); void MyFrame::ReInitNotebook()
c->right.SameAs(this, wxRight, 4); {
c->top.SameAs(this, wxTop, 4); int flags;
c->bottom.SameAs(this, wxBottom, 40);
switch ( m_radioOrient->GetSelection() )
m_notebook->SetConstraints(c); {
default:
wxGetApp().InitTabView(m_notebook, this); wxFAIL_MSG( wxT("unknown notebook orientation") );
// fall through
SetAutoLayout(TRUE);
Layout(); case ORIENT_TOP:
flags = wxNB_TOP;
Centre(wxBOTH); break;
case ORIENT_BOTTOM:
flags = wxNB_BOTTOM;
break;
case ORIENT_LEFT:
flags = wxNB_LEFT;
break;
case ORIENT_RIGHT:
flags = wxNB_RIGHT;
break;
}
MyNotebook *notebook = m_notebook;
m_notebook = new MyNotebook(m_panel, ID_NOTEBOOK,
wxDefaultPosition, wxDefaultSize,
flags);
CreateImageList();
if ( notebook )
{
int sel = notebook->GetSelection();
int count = notebook->GetPageCount();
for ( int n = 0; n < count; n++ )
{
wxNotebookPage *page = notebook->GetPage(0);
page->Reparent(m_notebook);
m_notebook->AddPage( page, notebook->GetPageText(0), FALSE,
m_notebook->GetIconIndex() );
notebook->RemovePage(0);
}
if (m_sizerNotebook)
{
m_sizerTop->Remove(m_sizerNotebook);
}
delete notebook;
// restore selection
if ( sel != -1 )
{
m_notebook->SetSelection(sel);
}
}
m_sizerNotebook = new wxNotebookSizer(m_notebook);
m_sizerTop->Add(m_sizerNotebook, 1, wxEXPAND | wxALL, 4);
m_sizerTop->Layout();
}
void MyFrame::CreateImageList()
{
if (m_imageList)
{
delete m_imageList;
m_imageList = (wxImageList *) NULL;
}
if ( m_chkShowImages->IsChecked() )
{
// create a dummy image list with a few icons
wxSize size(32, 32);
m_imageList = new wxImageList( size.GetWidth(), size.GetHeight() );
m_imageList->Add
(
wxArtProvider::GetIcon(wxART_INFORMATION, wxART_OTHER, size)
);
m_imageList->Add
(
wxArtProvider::GetIcon(wxART_QUESTION, wxART_OTHER, size)
);
m_imageList->Add
(
wxArtProvider::GetIcon(wxART_WARNING, wxART_OTHER, size)
);
m_imageList->Add
(
wxArtProvider::GetIcon(wxART_ERROR, wxART_OTHER, size)
);
m_notebook->SetImageList(m_imageList);
}
} }
#else // USE_TABBED_DIALOG
BEGIN_EVENT_TABLE(MyFrame, wxFrame) BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_BUTTON(wxID_OK, MyFrame::OnOK) EVT_RADIOBOX(ID_RADIO_ORIENT, MyFrame::OnCheckOrRadioBox)
EVT_BUTTON(ID_DELETE_PAGE, MyFrame::OnDeletePage) EVT_CHECKBOX(ID_CHK_SHOWIMAGES, MyFrame::OnCheckOrRadioBox)
EVT_BUTTON(ID_ADD_PAGE, MyFrame::OnAddPage)
EVT_BUTTON(ID_INSERT_PAGE, MyFrame::OnInsertPage) EVT_BUTTON(ID_BTN_ADD_PAGE, MyFrame::OnButtonAddPage)
EVT_BUTTON(ID_NEXT_PAGE, MyFrame::OnNextPage) EVT_BUTTON(ID_BTN_INSERT_PAGE, MyFrame::OnButtonInsertPage)
EVT_BUTTON(ID_BTN_DELETE_PAGE, MyFrame::OnButtonDeletePage)
EVT_BUTTON(ID_BTN_NEXT_PAGE, MyFrame::OnButtonNextPage)
EVT_BUTTON(wxID_OK, MyFrame::OnButtonExit)
EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyFrame::OnNotebook)
EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyFrame::OnNotebook)
EVT_IDLE(MyFrame::OnIdle) EVT_IDLE(MyFrame::OnIdle)
END_EVENT_TABLE() END_EVENT_TABLE()
MyFrame::MyFrame(wxFrame* parent, const wxWindowID id, const wxString& title, void MyFrame::OnCheckOrRadioBox(wxCommandEvent& event)
const wxPoint& pos, const wxSize& size, const long windowStyle):
wxFrame(parent, id, title, pos, size, windowStyle)
{ {
m_panel = (wxPanel*) NULL; ReInitNotebook();
m_notebook = (wxNotebook*) NULL;
Init();
} }
void MyFrame::OnAddPage(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnButtonAddPage( wxCommandEvent& WXUNUSED(event) )
{ {
static size_t s_pageAdded = 0; static size_t s_pageAdded = 0;
wxPanel *panel = new wxPanel( m_notebook, -1 ); wxPanel *panel = new wxPanel( m_notebook, -1 );
(void)new wxButton( panel, -1, "Button", wxPoint( 10,10 ), wxSize(-1,-1) ); (void) new wxButton( panel, -1, wxT("Button"),
wxPoint(10, 10), wxSize(-1, -1) );
m_notebook->AddPage( panel, wxString::Format("Added %u", ++s_pageAdded) ); m_notebook->AddPage(panel, wxString::Format(wxT("Added %u"),
++s_pageAdded), FALSE, m_notebook->GetIconIndex() );
} }
void MyFrame::OnInsertPage(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnButtonInsertPage( wxCommandEvent& WXUNUSED(event) )
{ {
static size_t s_pageIns = 0; static size_t s_pageIns = 0;
wxPanel *panel = new wxPanel( m_notebook, -1 ); wxPanel *panel = new wxPanel( m_notebook, -1 );
(void)new wxButton( panel, -1, "Button", wxPoint( 10,10 ), wxSize(-1,-1) ); (void) new wxButton( panel, -1, wxT("Button"),
wxPoint(10, 10), wxSize(-1, -1) );
m_notebook->InsertPage( 0, panel,
wxString::Format(wxT("Inserted %u"), ++s_pageIns), FALSE,
m_notebook->GetIconIndex() );
m_notebook->InsertPage(0, panel, wxString::Format("Inserted %u", ++s_pageIns) );
m_notebook->SetSelection(0); m_notebook->SetSelection(0);
} }
wxWindow *test = NULL; void MyFrame::OnButtonDeletePage( wxCommandEvent& WXUNUSED(event) )
void MyFrame::OnDeletePage(wxCommandEvent& WXUNUSED(event))
{ {
if (m_notebook->GetPageCount() > 0) int sel = m_notebook->GetSelection();
m_notebook->DeletePage( m_notebook->GetPageCount()-1 );
/* if (sel != -1)
if (test)
{ {
m_notebook->AddPage( test, "Readded" ); m_notebook->DeletePage(sel);
test = NULL;
} }
else
{
test = m_notebook->GetPage( m_notebook->GetPageCount()-1 );
m_notebook->RemovePage( m_notebook->GetPageCount()-1 );
}
*/
} }
void MyFrame::OnNextPage(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnButtonNextPage( wxCommandEvent& WXUNUSED(event) )
{ {
m_notebook->AdvanceSelection(); m_notebook->AdvanceSelection();
} }
void MyFrame::OnOK(wxCommandEvent& WXUNUSED(event) ) void MyFrame::OnButtonExit( wxCommandEvent& WXUNUSED(event) )
{ {
Destroy(); Close();
} }
void MyFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event) ) void MyFrame::OnNotebook(wxNotebookEvent& event)
{ {
Destroy(); wxString str = wxT("Unknown notebook event");
wxEventType eventType = event.GetEventType();
if (eventType == wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED)
{
str = wxT("Notebook changed");
}
else if (eventType == wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING)
{
int idx = event.GetOldSelection();
if ( idx != -1 && m_notebook->GetPageText(idx) == VETO_PAGE_NAME )
{
if
(
wxMessageBox(
wxT("Are you sure you want to leave this notebook page?\n")
wxT("(This demonstrates veto-ing)"),
wxT("Notebook sample"),
wxICON_QUESTION | wxYES_NO, this) != wxYES )
{
event.Veto();
return;
}
}
str = wxT("Notebook changing");
}
static int s_numNotebookEvents = 0;
wxLogMessage(wxT("Notebook event #%d: %s (%d)"),
s_numNotebookEvents++, str, eventType);
m_text->SetInsertionPointEnd();
event.Skip();
} }
void MyFrame::Init() void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
{
m_panel = new wxPanel(this, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxCLIP_CHILDREN);
wxLayoutConstraints* c = new wxLayoutConstraints;
c->left.SameAs(this, wxLeft);
c->right.SameAs(this, wxRight);
c->top.SameAs(this, wxTop);
c->bottom.SameAs(this, wxBottom);
m_panel->SetConstraints(c);
m_notebook = new wxNotebook(m_panel, ID_NOTEBOOK);
c = new wxLayoutConstraints;
c->left.SameAs(m_panel, wxLeft, 4);
c->right.SameAs(m_panel, wxRight, 4);
c->top.SameAs(m_panel, wxTop, 4);
c->bottom.SameAs(m_panel, wxBottom, 40);
m_notebook->SetConstraints(c);
wxGetApp().InitTabView(m_notebook, m_panel);
m_panel->SetAutoLayout(TRUE);
SetAutoLayout(TRUE);
Centre(wxBOTH);
Show(TRUE);
}
void MyFrame::OnIdle(wxIdleEvent& WXUNUSED(event))
{ {
static int s_nPages = -1; static int s_nPages = -1;
static int s_nSel = -1; static int s_nSel = -1;
@@ -323,10 +482,8 @@ void MyFrame::OnIdle(wxIdleEvent& WXUNUSED(event))
s_nSel = nSel; s_nSel = nSel;
wxString title; wxString title;
title.Printf("Notebook (%d pages, selection: %d)", nPages, nSel); title.Printf(wxT("Notebook (%d pages, selection: %d)"), nPages, nSel);
SetTitle(title); SetTitle(title);
} }
} }
#endif // USE_TABBED_DIALOG

View File

@@ -1,96 +1,124 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: notebook.h // Name: samples/notebook/notebook.h
// Purpose: wxNotebook demo // Purpose: a sample demonstrating notebook usage
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by: Dimitri Schoolwerth
// Created: 25/10/98 // Created: 25/10/98
// RCS-ID: $Id$ // RCS-ID: $Id$
// Copyright: (c) // Copyright: (c) 1998-2002 wxWindows team
// Licence: wxWindows licence // License: wxWindows license
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#include "wx/notebook.h" #include "wx/notebook.h"
// Define a new application // Define a new application
class MyApp: public wxApp class MyApp : public wxApp
{ {
public: public:
bool OnInit(); bool OnInit();
void InitTabView(wxNotebook* notebook, wxWindow* window);
wxButton* m_okButton;
wxButton* m_cancelButton;
wxButton* m_addPageButton, *m_insertPageButton;
wxButton* m_nextPageButton;
}; };
DECLARE_APP(MyApp) DECLARE_APP(MyApp)
#if USE_TABBED_DIALOG //
class MyNotebook : public wxNotebook
class MyDialog: public wxDialog
{ {
public: public:
MyDialog(wxWindow* parent, const wxWindowID id, const wxString& title, MyNotebook(wxWindow *parent, wxWindowID id = -1,
const wxPoint& pos, const wxSize& size, const long windowStyle = wxDEFAULT_DIALOG_STYLE); const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0);
void OnOK(wxCommandEvent& event); void CreateInitialPages();
void OnCloseWindow(wxCloseEvent& event);
void Init();
protected: int GetIconIndex() const;
wxNotebook* m_notebook;
DECLARE_EVENT_TABLE()
}; };
#else // USE_TABBED_DIALOG //
class MyFrame : public wxFrame
class MyFrame: public wxFrame
{ {
public: public:
MyFrame(wxFrame* parent, const wxWindowID id, const wxString& title, MyFrame(const wxString& title, const wxPoint& pos = wxDefaultPosition,
const wxPoint& pos, const wxSize& size, const long windowStyle = wxDEFAULT_FRAME_STYLE); const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE);
virtual ~MyFrame();
// Recreates the notebook with the same pages, but with possibly
// a different orientation and optionally with images.
void ReInitNotebook();
void CreateImageList();
void OnCheckOrRadioBox(wxCommandEvent& event);
void OnButtonAddPage(wxCommandEvent& event);
void OnButtonInsertPage(wxCommandEvent& event);
void OnButtonDeletePage(wxCommandEvent& event);
void OnButtonNextPage(wxCommandEvent& event);
void OnButtonExit(wxCommandEvent& event);
void OnNotebook(wxNotebookEvent& event);
void OnOK(wxCommandEvent& event);
void OnCloseWindow(wxCloseEvent& event);
void OnAddPage(wxCommandEvent& event);
void OnInsertPage(wxCommandEvent& event);
void OnNextPage(wxCommandEvent& event);
void OnDeletePage(wxCommandEvent& event);
void OnIdle(wxIdleEvent& event); void OnIdle(wxIdleEvent& event);
void Init();
protected: private:
wxNotebook* m_notebook; wxLog *m_logTargetOld;
wxPanel* m_panel; // Panel containing notebook and OK/Cancel/Help
// Controls
wxPanel *m_panel; // Panel containing notebook and other controls
wxRadioBox *m_radioOrient;
wxCheckBox *m_chkShowImages;
wxButton *m_btnAddPage;
wxButton *m_btnInsertPage;
wxButton *m_btnDeletePage;
wxButton *m_btnNextPage;
wxButton *m_btnExit;
MyNotebook *m_notebook;
// Log window
wxTextCtrl *m_text;
// Sizers
// The frame's sizer. Consists of m_sizerTop and the log window
// at the bottom.
wxBoxSizer *m_sizerFrame;
// Sizer that contains the notebook and controls on the left
wxBoxSizer *m_sizerTop;
// Sizer for m_notebook
wxNotebookSizer *m_sizerNotebook;
wxImageList *m_imageList;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
#endif // USE_TABBED_DIALOG enum ID_CONTROLS
{
// File ids ID_RADIO_ORIENT = wxID_HIGHEST,
#define TEST_ABOUT 2 ID_CHK_SHOWIMAGES,
ID_BTN_ADD_PAGE,
// Tab ids ID_BTN_INSERT_PAGE,
#define TEST_TAB_DOG 1 ID_BTN_DELETE_PAGE,
#define TEST_TAB_CAT 2 ID_BTN_NEXT_PAGE,
#define TEST_TAB_GOAT 3 ID_NOTEBOOK
#define TEST_TAB_GUINEAPIG 4 };
#define TEST_TAB_ANTEATER 5
#define TEST_TAB_HUMMINGBIRD 6
#define TEST_TAB_SHEEP 7
#define TEST_TAB_COW 8
#define TEST_TAB_HORSE 9
#define TEST_TAB_PIG 10
#define TEST_TAB_OSTRICH 11
#define TEST_TAB_AARDVARK 12
#define ID_NOTEBOOK 1000
#define ID_ADD_PAGE 1200
#define ID_DELETE_PAGE 1201
#define ID_NEXT_PAGE 1202
#define ID_INSERT_PAGE 1203
// notebook orientations
enum ORIENT
{
ORIENT_TOP,
ORIENT_BOTTOM,
ORIENT_LEFT,
ORIENT_RIGHT,
ORIENT_MAX
};