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:
parent
250b589f71
commit
c1dfe27754
@ -1,12 +1,12 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: notebook.cpp
|
||||
// Purpose: wxNotebook demo
|
||||
// Name: samples/notebook/notebook.cpp
|
||||
// Purpose: a sample demonstrating notebook usage
|
||||
// Author: Julian Smart
|
||||
// Modified by:
|
||||
// Modified by: Dimitri Schoolwerth
|
||||
// Created: 26/10/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c)
|
||||
// Licence: wxWindows licence
|
||||
// Copyright: (c) 1998-2002 wxWindows team
|
||||
// License: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// For compilers that support precompilation, includes "wx.h".
|
||||
@ -20,297 +20,456 @@
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
// If 1, use a dialog. Otherwise use a frame.
|
||||
#define USE_TABBED_DIALOG 1
|
||||
|
||||
#include "wx/imaglist.h"
|
||||
#include "wx/artprov.h"
|
||||
#include "notebook.h"
|
||||
|
||||
#if USE_TABBED_DIALOG
|
||||
MyDialog* dialog = (MyDialog *) NULL;
|
||||
#else // !USE_TABBED_DIALOG
|
||||
MyFrame* frame = (MyFrame *) NULL;
|
||||
#endif // USE_TABBED_DIALOG
|
||||
// Name of the Veto page
|
||||
#define VETO_PAGE_NAME wxT("Veto")
|
||||
|
||||
IMPLEMENT_APP(MyApp)
|
||||
|
||||
bool MyApp::OnInit()
|
||||
{
|
||||
// Create the main window
|
||||
#if USE_TABBED_DIALOG
|
||||
dialog = new MyDialog((wxFrame *) NULL, -1, "Notebook", wxPoint(-1, -1), wxSize(365, 390),
|
||||
wxRESIZE_BORDER);
|
||||
dialog->ShowModal();
|
||||
delete dialog;
|
||||
// Create the main window
|
||||
MyFrame *frame = new MyFrame( wxT("Notebook sample") );
|
||||
|
||||
// Quit immediately the dialog has been dismissed
|
||||
return FALSE;
|
||||
#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
|
||||
// Problem with generic wxNotebook implementation whereby it doesn't size
|
||||
// properly unless you set the size again
|
||||
#if defined(__WIN16__) || defined(__WXMOTIF__)
|
||||
int width, height;
|
||||
frame->GetSize(& width, & height);
|
||||
frame->SetSize(-1, -1, width, height);
|
||||
int width, height;
|
||||
frame->GetSize(& width, & height);
|
||||
frame->SetSize(-1, -1, width, height);
|
||||
#endif
|
||||
|
||||
return TRUE;
|
||||
#endif
|
||||
frame->Show();
|
||||
|
||||
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));
|
||||
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);
|
||||
// Empty
|
||||
}
|
||||
|
||||
#if USE_TABBED_DIALOG
|
||||
|
||||
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)
|
||||
void MyNotebook::CreateInitialPages()
|
||||
{
|
||||
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);
|
||||
|
||||
wxLayoutConstraints* c = new wxLayoutConstraints;
|
||||
c->left.SameAs(this, wxLeft, 4);
|
||||
c->right.SameAs(this, wxRight, 4);
|
||||
c->top.SameAs(this, wxTop, 4);
|
||||
c->bottom.SameAs(this, wxBottom, 40);
|
||||
|
||||
m_notebook->SetConstraints(c);
|
||||
|
||||
wxGetApp().InitTabView(m_notebook, this);
|
||||
|
||||
SetAutoLayout(TRUE);
|
||||
Layout();
|
||||
|
||||
Centre(wxBOTH);
|
||||
delete wxLog::SetActiveTarget(m_logTargetOld);
|
||||
}
|
||||
|
||||
void MyFrame::ReInitNotebook()
|
||||
{
|
||||
int flags;
|
||||
|
||||
switch ( m_radioOrient->GetSelection() )
|
||||
{
|
||||
default:
|
||||
wxFAIL_MSG( wxT("unknown notebook orientation") );
|
||||
// fall through
|
||||
|
||||
case ORIENT_TOP:
|
||||
flags = wxNB_TOP;
|
||||
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)
|
||||
EVT_BUTTON(wxID_OK, MyFrame::OnOK)
|
||||
EVT_BUTTON(ID_DELETE_PAGE, MyFrame::OnDeletePage)
|
||||
EVT_BUTTON(ID_ADD_PAGE, MyFrame::OnAddPage)
|
||||
EVT_BUTTON(ID_INSERT_PAGE, MyFrame::OnInsertPage)
|
||||
EVT_BUTTON(ID_NEXT_PAGE, MyFrame::OnNextPage)
|
||||
EVT_RADIOBOX(ID_RADIO_ORIENT, MyFrame::OnCheckOrRadioBox)
|
||||
EVT_CHECKBOX(ID_CHK_SHOWIMAGES, MyFrame::OnCheckOrRadioBox)
|
||||
|
||||
EVT_BUTTON(ID_BTN_ADD_PAGE, MyFrame::OnButtonAddPage)
|
||||
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)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
MyFrame::MyFrame(wxFrame* parent, const wxWindowID id, const wxString& title,
|
||||
const wxPoint& pos, const wxSize& size, const long windowStyle):
|
||||
wxFrame(parent, id, title, pos, size, windowStyle)
|
||||
void MyFrame::OnCheckOrRadioBox(wxCommandEvent& event)
|
||||
{
|
||||
m_panel = (wxPanel*) NULL;
|
||||
m_notebook = (wxNotebook*) NULL;
|
||||
Init();
|
||||
ReInitNotebook();
|
||||
}
|
||||
|
||||
void MyFrame::OnAddPage(wxCommandEvent& WXUNUSED(event))
|
||||
void MyFrame::OnButtonAddPage( wxCommandEvent& WXUNUSED(event) )
|
||||
{
|
||||
static size_t s_pageAdded = 0;
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
wxWindow *test = NULL;
|
||||
|
||||
void MyFrame::OnDeletePage(wxCommandEvent& WXUNUSED(event))
|
||||
void MyFrame::OnButtonDeletePage( wxCommandEvent& WXUNUSED(event) )
|
||||
{
|
||||
if (m_notebook->GetPageCount() > 0)
|
||||
m_notebook->DeletePage( m_notebook->GetPageCount()-1 );
|
||||
int sel = m_notebook->GetSelection();
|
||||
|
||||
/*
|
||||
if (test)
|
||||
if (sel != -1)
|
||||
{
|
||||
m_notebook->AddPage( test, "Readded" );
|
||||
test = NULL;
|
||||
m_notebook->DeletePage(sel);
|
||||
}
|
||||
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();
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
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))
|
||||
void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) )
|
||||
{
|
||||
static int s_nPages = -1;
|
||||
static int s_nSel = -1;
|
||||
@ -323,10 +482,8 @@ void MyFrame::OnIdle(wxIdleEvent& WXUNUSED(event))
|
||||
s_nSel = nSel;
|
||||
|
||||
wxString title;
|
||||
title.Printf("Notebook (%d pages, selection: %d)", nPages, nSel);
|
||||
title.Printf(wxT("Notebook (%d pages, selection: %d)"), nPages, nSel);
|
||||
|
||||
SetTitle(title);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // USE_TABBED_DIALOG
|
||||
|
@ -1,96 +1,124 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: notebook.h
|
||||
// Purpose: wxNotebook demo
|
||||
// Name: samples/notebook/notebook.h
|
||||
// Purpose: a sample demonstrating notebook usage
|
||||
// Author: Julian Smart
|
||||
// Modified by:
|
||||
// Modified by: Dimitri Schoolwerth
|
||||
// Created: 25/10/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c)
|
||||
// Licence: wxWindows licence
|
||||
// Copyright: (c) 1998-2002 wxWindows team
|
||||
// License: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "wx/notebook.h"
|
||||
|
||||
// Define a new application
|
||||
class MyApp: public wxApp
|
||||
class MyApp : public wxApp
|
||||
{
|
||||
public:
|
||||
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)
|
||||
|
||||
#if USE_TABBED_DIALOG
|
||||
|
||||
class MyDialog: public wxDialog
|
||||
//
|
||||
class MyNotebook : public wxNotebook
|
||||
{
|
||||
public:
|
||||
MyDialog(wxWindow* parent, const wxWindowID id, const wxString& title,
|
||||
const wxPoint& pos, const wxSize& size, const long windowStyle = wxDEFAULT_DIALOG_STYLE);
|
||||
MyNotebook(wxWindow *parent, wxWindowID id = -1,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize, long style = 0);
|
||||
|
||||
void OnOK(wxCommandEvent& event);
|
||||
void OnCloseWindow(wxCloseEvent& event);
|
||||
void Init();
|
||||
void CreateInitialPages();
|
||||
|
||||
protected:
|
||||
wxNotebook* m_notebook;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
int GetIconIndex() const;
|
||||
};
|
||||
|
||||
#else // USE_TABBED_DIALOG
|
||||
|
||||
class MyFrame: public wxFrame
|
||||
//
|
||||
class MyFrame : public wxFrame
|
||||
{
|
||||
public:
|
||||
MyFrame(wxFrame* parent, const wxWindowID id, const wxString& title,
|
||||
const wxPoint& pos, const wxSize& size, const long windowStyle = wxDEFAULT_FRAME_STYLE);
|
||||
MyFrame(const wxString& title, const wxPoint& pos = wxDefaultPosition,
|
||||
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 Init();
|
||||
|
||||
protected:
|
||||
wxNotebook* m_notebook;
|
||||
wxPanel* m_panel; // Panel containing notebook and OK/Cancel/Help
|
||||
private:
|
||||
wxLog *m_logTargetOld;
|
||||
|
||||
|
||||
// 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()
|
||||
};
|
||||
|
||||
#endif // USE_TABBED_DIALOG
|
||||
|
||||
// File ids
|
||||
#define TEST_ABOUT 2
|
||||
|
||||
// Tab ids
|
||||
#define TEST_TAB_DOG 1
|
||||
#define TEST_TAB_CAT 2
|
||||
#define TEST_TAB_GOAT 3
|
||||
#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
|
||||
enum ID_CONTROLS
|
||||
{
|
||||
ID_RADIO_ORIENT = wxID_HIGHEST,
|
||||
ID_CHK_SHOWIMAGES,
|
||||
ID_BTN_ADD_PAGE,
|
||||
ID_BTN_INSERT_PAGE,
|
||||
ID_BTN_DELETE_PAGE,
|
||||
ID_BTN_NEXT_PAGE,
|
||||
ID_NOTEBOOK
|
||||
};
|
||||
|
||||
// notebook orientations
|
||||
enum ORIENT
|
||||
{
|
||||
ORIENT_TOP,
|
||||
ORIENT_BOTTOM,
|
||||
ORIENT_LEFT,
|
||||
ORIENT_RIGHT,
|
||||
ORIENT_MAX
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user