X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/14d1ccd89decb9d84f394fb2218eddbfdba56baf..7b9da2077d0975db6c965a85c91d5aca671ab5e3:/samples/toolbar/test.cpp diff --git a/samples/toolbar/test.cpp b/samples/toolbar/test.cpp index 80aaeff9c1..f6278e43a8 100644 --- a/samples/toolbar/test.cpp +++ b/samples/toolbar/test.cpp @@ -6,137 +6,171 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + // For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" +#include #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #ifndef WX_PRECOMP -#include "wx/wx.h" + #include #endif -#include "wx/toolbar.h" -#include "test.h" +#include +#include + +// ---------------------------------------------------------------------------- +// resources +// ---------------------------------------------------------------------------- + +#if defined(__WXGTK__) || defined(__WXMOTIF__) + #include "mondrian.xpm" + #include "bitmaps/new.xpm" + #include "bitmaps/open.xpm" + #include "bitmaps/save.xpm" + #include "bitmaps/copy.xpm" + #include "bitmaps/cut.xpm" + // #include "bitmaps/paste.xpm" + #include "bitmaps/print.xpm" + #include "bitmaps/preview.xpm" + #include "bitmaps/help.xpm" +#endif // GTK or Motif + +// ---------------------------------------------------------------------------- +// classes +// ---------------------------------------------------------------------------- + +// Define a new application +class MyApp: public wxApp +{ +public: + bool OnInit(); + bool InitToolbar(wxToolBar* toolBar, bool smallicons = FALSE); +}; -IMPLEMENT_APP(MyApp) +// Define a new frame +class MyFrame: public wxFrame +{ +public: + MyFrame(wxFrame *parent, + wxWindowID id = -1, + const wxString& title = "wxToolBar Sample", + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDEFAULT_FRAME_STYLE); -#ifdef __X__ -// TODO: include XBM or XPM icons for X apps -#endif + void OnQuit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); -// The `main program' equivalent, creating the windows and returning the -// main frame -bool MyApp::OnInit(void) -{ - // Create the main frame window - MyFrame* frame = new MyFrame(NULL, -1, "wxToolBar Sample", wxPoint(100, 100), wxSize(450, 300)); + void OnToggleToolbar(wxCommandEvent& event); + void OnEnablePrint(wxCommandEvent& event) { DoEnablePrint(); } + void OnToggleHelp(wxCommandEvent& event) { DoToggleHelp(); } - // Give it a status line - frame->CreateStatusBar(); + void OnAppendMenu(wxCommandEvent& event); + void OnDeleteMenu(wxCommandEvent& event); + void OnToggleMenu(wxCommandEvent& event); - // Give it an icon -#ifdef __WXMSW__ - frame->SetIcon(wxIcon("mondrian")); -#endif -#ifdef __X__ - frame->SetIcon(wxIcon("mondrian.xbm")); -#endif + void OnToolLeftClick(wxCommandEvent& event); + void OnToolEnter(wxCommandEvent& event); - // Make a menubar - wxMenu *fileMenu = new wxMenu; - fileMenu->Append(TEST_QUIT, "E&xit"); + void OnCombo(wxCommandEvent& event); - wxMenu *helpMenu = new wxMenu; - helpMenu->Append(TEST_ABOUT, "&About"); +private: + void DoEnablePrint(); + void DoToggleHelp(); - wxMenuBar* menuBar = new wxMenuBar; + bool m_smallToolbar; + wxTextCtrl* m_textWindow; - menuBar->Append(fileMenu, "&File"); - menuBar->Append(helpMenu, "&Help"); + DECLARE_EVENT_TABLE() +}; - // Associate the menu bar with the frame - frame->SetMenuBar(menuBar); +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- - // Create the toolbar - TestToolBar* toolRibbon = new TestToolBar(frame, -1, wxPoint(0, 0), wxSize(100, 30), - wxNO_BORDER|wxTB_FLAT, wxVERTICAL, 1); - toolRibbon->SetMargins(5, 5); +const int ID_TOOLBAR = 500; - // Tell the frame about it - frame->SetToolBar(toolRibbon); +enum +{ + IDM_TOOLBAR_TOGGLETOOLBAR = 200, + IDM_TOOLBAR_ENABLEPRINT, + IDM_TOOLBAR_TOGGLEHELP, - // Force a resize, just in case. - frame->OnSize(wxSizeEvent(wxSize(-1, -1), frame->GetId())); - frame->Show(TRUE); + ID_COMBO = 1000 +}; - frame->SetStatusText("Hello, wxWindows"); - - SetTopWindow(frame); +// ---------------------------------------------------------------------------- +// event tables +// ---------------------------------------------------------------------------- - return TRUE; -} +// Notice that wxID_HELP will be processed for the 'About' menu and the toolbar +// help button. BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MENU(TEST_QUIT, MyFrame::OnQuit) - EVT_MENU(TEST_ABOUT, MyFrame::OnAbout) - EVT_MENU_HIGHLIGHT_ALL(MyFrame::OnMenuHighlight) - EVT_CLOSE(MyFrame::OnCloseWindow) + EVT_MENU(wxID_EXIT, MyFrame::OnQuit) + EVT_MENU(wxID_HELP, MyFrame::OnAbout) + + EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBAR, MyFrame::OnToggleToolbar) + EVT_MENU(IDM_TOOLBAR_ENABLEPRINT, MyFrame::OnEnablePrint) + EVT_MENU(IDM_TOOLBAR_TOGGLEHELP, MyFrame::OnToggleHelp) + + EVT_MENU(-1, MyFrame::OnToolLeftClick) + + EVT_COMBOBOX(ID_COMBO, MyFrame::OnCombo) + + EVT_TOOL_ENTER(ID_TOOLBAR, MyFrame::OnToolEnter) END_EVENT_TABLE() -// Define my frame constructor -MyFrame::MyFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos, - const wxSize& size, long style): - wxFrame(parent, id, title, pos, size, style) -{ - m_textWindow = new wxTextCtrl(this, -1, "", wxPoint(0, 0), wxSize(-1, -1), wxTE_MULTILINE); -} +// ============================================================================ +// implementation +// ============================================================================ -void MyFrame::OnQuit(wxCommandEvent& event) -{ - Close(TRUE); -} +// ---------------------------------------------------------------------------- +// MyApp +// ---------------------------------------------------------------------------- -void MyFrame::OnAbout(wxCommandEvent& event) -{ - (void)wxMessageBox("wxWindows wxToolBar demo\n", "About wxToolBar"); -} +IMPLEMENT_APP(MyApp) -// Intercept menu item selection - only has an effect in Windows -void MyFrame::OnMenuHighlight(wxMenuEvent& event) +// The `main program' equivalent, creating the windows and returning the +// main frame +bool MyApp::OnInit() { - char *msg = NULL; - switch (event.GetMenuId()) - { - case TEST_QUIT: - msg = "Quit program"; - break; - case -1: - msg = ""; - break; - } - if (msg) - SetStatusText(msg); -} + // Create the main frame window + MyFrame* frame = new MyFrame((wxFrame *) NULL, -1, + "wxToolBar Sample", + wxPoint(100, 100), wxSize(450, 300)); -// Define the behaviour for the frame closing -// - must delete all frames except for the main one. -void MyFrame::OnCloseWindow(wxCloseEvent& event) -{ - Destroy(); -} + // VZ: what's this for?? +#if 0 + // Force a resize. This should probably be replaced by a call to a wxFrame + // function that lays out default decorations and the remaining content window. + wxSizeEvent event(wxSize(-1, -1), frame->GetId()); + frame->OnSize(event); +#endif // 0 -BEGIN_EVENT_TABLE(TestToolBar, wxToolBar95) - EVT_PAINT(TestToolBar::OnPaint) -END_EVENT_TABLE() + frame->Show(TRUE); + + frame->SetStatusText("Hello, wxWindows"); -TestToolBar::TestToolBar(wxFrame* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, - long style, int direction, int RowsOrColumns): - wxToolBar(parent, id, pos, size, style, direction, RowsOrColumns) + SetTopWindow(frame); + + return TRUE; +} + +bool MyApp::InitToolbar(wxToolBar* toolBar, bool smallicons) { // Set up toolbar wxBitmap* toolBarBitmaps[8]; @@ -144,24 +178,27 @@ TestToolBar::TestToolBar(wxFrame* parent, wxWindowID id, const wxPoint& pos, con #ifdef __WXMSW__ toolBarBitmaps[0] = new wxBitmap("icon1"); toolBarBitmaps[1] = new wxBitmap("icon2"); - toolBarBitmaps[2] = new wxBitmap("icon3"); - toolBarBitmaps[3] = new wxBitmap("icon4"); - toolBarBitmaps[4] = new wxBitmap("icon5"); - toolBarBitmaps[5] = new wxBitmap("icon6"); - toolBarBitmaps[6] = new wxBitmap("icon7"); - toolBarBitmaps[7] = new wxBitmap("icon8"); -#endif -#ifdef __X__ - // TODO - toolBarBitmaps[0] = new wxBitmap(...); - toolBarBitmaps[1] = new wxBitmap(...); - toolBarBitmaps[2] = new wxBitmap(...); - toolBarBitmaps[3] = new wxBitmap(...); - toolBarBitmaps[4] = new wxBitmap(...); - toolBarBitmaps[5] = new wxBitmap(...); - toolBarBitmaps[6] = new wxBitmap(...); - toolBarBitmaps[7] = new wxBitmap(...); - + if ( !smallicons ) + { + toolBarBitmaps[2] = new wxBitmap("icon3"); + toolBarBitmaps[3] = new wxBitmap("icon4"); + toolBarBitmaps[4] = new wxBitmap("icon5"); + toolBarBitmaps[5] = new wxBitmap("icon6"); + toolBarBitmaps[6] = new wxBitmap("icon7"); + toolBarBitmaps[7] = new wxBitmap("icon8"); + } +#else + toolBarBitmaps[0] = new wxBitmap( new_xpm ); + toolBarBitmaps[1] = new wxBitmap( open_xpm ); + if ( !smallicons ) + { + toolBarBitmaps[2] = new wxBitmap( save_xpm ); + toolBarBitmaps[3] = new wxBitmap( copy_xpm ); + toolBarBitmaps[4] = new wxBitmap( cut_xpm ); + toolBarBitmaps[5] = new wxBitmap( preview_xpm ); + toolBarBitmaps[6] = new wxBitmap( print_xpm ); + toolBarBitmaps[7] = new wxBitmap( help_xpm ); + } #endif #ifdef __WXMSW__ @@ -169,66 +206,184 @@ TestToolBar::TestToolBar(wxFrame* parent, wxWindowID id, const wxPoint& pos, con #else int width = 16; #endif - int offX = 5; int currentX = 5; - AddTool(0, *(toolBarBitmaps[0]), wxNullBitmap, FALSE, (float)currentX, -1, NULL, "New file"); - currentX += width + 5; - AddTool(1, *(toolBarBitmaps[1]), wxNullBitmap, FALSE, (float)currentX, -1, NULL, "Open file"); - currentX += width + 5; - AddTool(2, *(toolBarBitmaps[2]), wxNullBitmap, FALSE, (float)currentX, -1, NULL, "Save file"); + toolBar->AddTool(wxID_NEW, *(toolBarBitmaps[0]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "New file"); currentX += width + 5; - AddSeparator(); - AddTool(3, *(toolBarBitmaps[3]), wxNullBitmap, FALSE, (float)currentX, -1, NULL, "Copy"); + toolBar->AddTool(wxID_OPEN, *(toolBarBitmaps[1]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Open file"); currentX += width + 5; - AddTool(4, *(toolBarBitmaps[4]), wxNullBitmap, FALSE, (float)currentX, -1, NULL, "Cut"); - currentX += width + 5; - AddTool(5, *(toolBarBitmaps[5]), wxNullBitmap, FALSE, (float)currentX, -1, NULL, "Paste"); - currentX += width + 5; - AddSeparator(); - AddTool(6, *(toolBarBitmaps[6]), wxNullBitmap, FALSE, (float)currentX, -1, NULL, "Print"); - currentX += width + 5; - AddSeparator(); - AddTool(7, *(toolBarBitmaps[7]), wxNullBitmap, TRUE, currentX, -1, NULL, "Help"); + toolBar->AddTool(wxID_SAVE, *(toolBarBitmaps[2]), wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, "Toggle button 1"); + + toolBar->AddSeparator(); - CreateTools(); + wxComboBox *combo = new wxComboBox(toolBar, ID_COMBO); + combo->Append("This"); + combo->Append("is a"); + combo->Append("combobox"); + combo->Append("in a"); + combo->Append("toolbar"); + toolBar->AddControl(combo); + + toolBar->AddSeparator(); + + if ( !smallicons ) + { + currentX += width + 5; + toolBar->AddTool(wxID_COPY, *(toolBarBitmaps[3]), wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, "Toggle button 2"); + currentX += width + 5; + toolBar->AddTool(wxID_CUT, *(toolBarBitmaps[4]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Toggle/Untoggle help button"); + currentX += width + 5; + toolBar->AddTool(wxID_PASTE, *(toolBarBitmaps[5]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Paste"); + currentX += width + 5; + toolBar->AddSeparator(); + toolBar->AddTool(wxID_PRINT, *(toolBarBitmaps[6]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Print"); + currentX += width + 5; + toolBar->AddSeparator(); + toolBar->AddTool(wxID_HELP, *(toolBarBitmaps[7]), wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, "Help button"); + } + + toolBar->Realize(); // Can delete the bitmaps since they're reference counted - int i; - for (i = 0; i < 8; i++) + int i, max = smallicons ? 3 : WXSIZEOF(toolBarBitmaps); + for (i = 0; i < max; i++) delete toolBarBitmaps[i]; + + return TRUE; } -bool TestToolBar::OnLeftClick(int toolIndex, bool toggled) +// ---------------------------------------------------------------------------- +// MyFrame +// ---------------------------------------------------------------------------- + +// Define my frame constructor +MyFrame::MyFrame(wxFrame* parent, + wxWindowID id, + const wxString& title, + const wxPoint& pos, + const wxSize& size, + long style) + : wxFrame(parent, id, title, pos, size, style) { - char buf[200]; - sprintf(buf, "Clicked on tool %d", toolIndex); - ((wxFrame*) GetParent())->SetStatusText(buf); - return TRUE; + m_textWindow = new wxTextCtrl(this, -1, "", wxPoint(0, 0), wxSize(-1, -1), wxTE_MULTILINE); + m_smallToolbar = FALSE; + + // Give it a status line + CreateStatusBar(); + + // Give it an icon + SetIcon(wxICON(mondrian)); + + // Make a menubar + wxMenu *tbarMenu = new wxMenu; + tbarMenu->Append(IDM_TOOLBAR_TOGGLETOOLBAR, "&Toggle toolbar", "Change the toolbar kind"); + tbarMenu->Append(IDM_TOOLBAR_ENABLEPRINT, "&Enable print button", ""); + tbarMenu->Append(IDM_TOOLBAR_TOGGLEHELP, "Toggle &help button", ""); + + wxMenu *fileMenu = new wxMenu; + fileMenu->Append(wxID_EXIT, "E&xit", "Quit toolbar sample" ); + + wxMenu *helpMenu = new wxMenu; + helpMenu->Append(wxID_HELP, "&About", "About toolbar sample"); + + wxMenuBar* menuBar = new wxMenuBar( wxMB_DOCKABLE ); + + menuBar->Append(fileMenu, "&File"); + menuBar->Append(tbarMenu, "&Toolbar"); + menuBar->Append(helpMenu, "&Help"); + + // Associate the menu bar with the frame + SetMenuBar(menuBar); + + // Create the toolbar + wxToolBar *tbar = CreateToolBar(wxNO_BORDER | wxTB_HORIZONTAL | + wxTB_FLAT | wxTB_DOCKABLE, + ID_TOOLBAR); + + tbar->SetMargins( 4, 4 ); + + wxGetApp().InitToolbar(tbar); } -void TestToolBar::OnMouseEnter(int toolIndex) +void MyFrame::OnToggleToolbar(wxCommandEvent& WXUNUSED(event)) { - char buf[200]; - if (toolIndex > -1) - { - sprintf(buf, "This is tool number %d", toolIndex); - ((wxFrame*)GetParent())->SetStatusText(buf); - } - else ((wxFrame*)GetParent())->SetStatusText(""); + // delete and recreate the toolbar + wxToolBar *tbar = GetToolBar(); + delete tbar; + + SetToolBar(NULL); + tbar = CreateToolBar(wxNO_BORDER | wxTB_HORIZONTAL | + wxTB_FLAT | wxTB_DOCKABLE, + ID_TOOLBAR); + + m_smallToolbar = !m_smallToolbar; + wxGetApp().InitToolbar(tbar, m_smallToolbar); +} + +void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) +{ + Close(TRUE); } -void TestToolBar::OnPaint(wxPaintEvent& event) +void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { - wxToolBar::OnPaint(event); + (void)wxMessageBox("wxWindows toolbar sample", "About wxToolBar"); +} - wxPaintDC dc(this); - - int w, h; - GetSize(&w, &h); - dc.SetPen(wxBLACK_PEN); - dc.SetBrush(wxTRANSPARENT_BRUSH); - dc.DrawLine(0, h-1, w, h-1); +void MyFrame::OnToolLeftClick(wxCommandEvent& event) +{ + wxString str; + str.Printf( _T("Clicked on tool %d\n"), event.GetId()); + m_textWindow->WriteText( str ); + + if (event.GetId() == wxID_HELP) + { + if ( event.GetExtraLong() != 0 ) + m_textWindow->WriteText( _T("Help button down now.\n") ); + else + m_textWindow->WriteText( _T("Help button up now.\n") ); + } + + if (event.GetId() == wxID_COPY) + { + DoEnablePrint(); + } + + if (event.GetId() == wxID_CUT) + { + DoToggleHelp(); + } +} + +void MyFrame::OnCombo(wxCommandEvent& event) +{ + wxLogStatus(_T("Combobox string '%s' selected"), event.GetString().c_str()); +} + +void MyFrame::DoEnablePrint() +{ + wxToolBar *tb = GetToolBar(); + if (tb->GetToolEnabled(wxID_PRINT)) + tb->EnableTool( wxID_PRINT, FALSE ); + else + tb->EnableTool( wxID_PRINT, TRUE ); +} + +void MyFrame::DoToggleHelp() +{ + wxToolBar *tb = GetToolBar(); + tb->ToggleTool( wxID_HELP, !tb->GetToolState( wxID_HELP ) ); } +void MyFrame::OnToolEnter(wxCommandEvent& event) +{ + if (event.GetSelection() > -1) + { + wxString str; + str.Printf(_T("This is tool number %d"), event.GetSelection()); + SetStatusText(str); + } + else + SetStatusText(""); +}