X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/45e6e6f8ab806b337dffeb3b52fec7eba3c845ef..2ada746fb47bf68c9f2dab6399a6cd5510320984:/samples/toolbar/toolbar.cpp diff --git a/samples/toolbar/toolbar.cpp b/samples/toolbar/toolbar.cpp index fcb326433e..98cf74b127 100644 --- a/samples/toolbar/toolbar.cpp +++ b/samples/toolbar/toolbar.cpp @@ -47,6 +47,12 @@ #error You need to enable XPM support to use XPM bitmaps with toolbar! #endif // USE_XPM_BITMAPS +// If this is 1, the sample will test an extra toolbar identical to the +// main one, but not managed by the frame. This can test subtle differences +// in the way toolbars are handled, especially on Mac where there is one +// native, 'installed' toolbar. +#define USE_UNMANAGED_TOOLBAR 0 + // ---------------------------------------------------------------------------- // resources // ---------------------------------------------------------------------------- @@ -78,6 +84,57 @@ enum Positions // classes // ---------------------------------------------------------------------------- +class MyMiniControl: public wxControl +{ +public: + MyMiniControl( wxWindow *parent ) : + wxControl( parent, -1, wxDefaultPosition, wxSize(80,22), wxBORDER_SUNKEN, wxDefaultValidator, "MyMiniControl" ) + { + m_hasFocus = false; + } + void OnPaint(wxPaintEvent &WXUNUSED(event)) + { + wxPaintDC dc(this); + dc.SetPen( *wxTRANSPARENT_PEN ); + dc.SetBrush( *wxWHITE_BRUSH ); + wxSize size = GetClientSize(); + dc.DrawRectangle( 0,0,size.x,size.y ); + if (m_hasFocus) + dc.DrawText( "Focussed", 1,1 ); + } + void OnSetFocus(wxFocusEvent &WXUNUSED(event)) + { + m_hasFocus = true; + Refresh(); + } + void OnKillFocus(wxFocusEvent &WXUNUSED(event)) + { + m_hasFocus = false; + Refresh(); + } + virtual wxSize GetBestSize() + { + return wxSize(80,22); + } + virtual bool AcceptsFocus() + { + return true; + } + + bool m_hasFocus; + +private: + DECLARE_EVENT_TABLE() +}; + +BEGIN_EVENT_TABLE(MyMiniControl, wxControl) + EVT_PAINT(MyMiniControl::OnPaint) + EVT_SET_FOCUS(MyMiniControl::OnSetFocus) + EVT_KILL_FOCUS(MyMiniControl::OnKillFocus) +END_EVENT_TABLE() + + + // Define a new application class MyApp : public wxApp { @@ -96,6 +153,7 @@ public: const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE|wxCLIP_CHILDREN|wxNO_FULL_REPAINT_ON_RESIZE); + void PopulateToolbar(wxToolBarBase* toolBar); void RecreateToolbar(); void OnQuit(wxCommandEvent& event); @@ -125,6 +183,7 @@ public: void OnToolLeftClick(wxCommandEvent& event); void OnToolRightClick(wxCommandEvent& event); + void OnToolDropdown(wxCommandEvent& event); void OnCombo(wxCommandEvent& event); @@ -154,6 +213,9 @@ private: wxTextCtrl *m_textWindow; + wxPanel *m_panel; + wxToolBar *m_extraToolBar; + wxToolBar *m_tbar; // the path to the custom bitmap for the test toolbar tool @@ -245,6 +307,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_TOOL_RCLICKED(wxID_ANY, MyFrame::OnToolRightClick) + EVT_TOOL_DROPDOWN(wxID_ANY, MyFrame::OnToolDropdown) + EVT_UPDATE_UI(wxID_COPY, MyFrame::OnUpdateCopyAndCut) EVT_UPDATE_UI(wxID_CUT, MyFrame::OnUpdateCopyAndCut) @@ -275,7 +339,7 @@ bool MyApp::OnInit() // Create the main frame window MyFrame* frame = new MyFrame((wxFrame *) NULL, wxID_ANY, _T("wxToolBar Sample"), - wxPoint(100, 100), wxSize(550, 300)); + wxPoint(100, 100), wxSize(550, 500)); frame->Show(true); @@ -334,6 +398,11 @@ void MyFrame::RecreateToolbar() toolBar = CreateToolBar(style, ID_TOOLBAR); #endif + PopulateToolbar(toolBar); +} + +void MyFrame::PopulateToolbar(wxToolBarBase* toolBar) +{ // Set up toolbar enum { @@ -385,8 +454,16 @@ void MyFrame::RecreateToolbar() toolBar->SetToolBitmapSize(wxSize(w, h)); toolBar->AddTool(wxID_NEW, _T("New"), - toolBarBitmaps[Tool_new], wxNullBitmap, wxITEM_NORMAL, + toolBarBitmaps[Tool_new], wxNullBitmap, wxITEM_DROPDOWN, _T("New file"), _T("This is help for new file tool")); + + wxMenu* menu = new wxMenu; + menu->Append(wxID_ANY, _T("&First dummy item")); + menu->Append(wxID_ANY, _T("&Second dummy item")); + menu->AppendSeparator(); + menu->Append(wxID_EXIT, _T("Exit")); + toolBar->SetDropdownMenu(wxID_NEW, menu); + toolBar->AddTool(wxID_OPEN, _T("Open"), toolBarBitmaps[Tool_open], wxNullBitmap, wxITEM_NORMAL, _T("Open file"), _T("This is help for open file tool")); @@ -402,16 +479,18 @@ void MyFrame::RecreateToolbar() combo->Append(_T("combobox")); combo->Append(_T("in a")); combo->Append(_T("toolbar")); - toolBar->AddControl(combo); + toolBar->AddControl(combo, _T("Combo Label")); wxSpinCtrl *spin = new wxSpinCtrl( toolBar, ID_SPIN, wxT("0"), wxDefaultPosition, wxSize(80,wxDefaultCoord), 0, 0, 100 ); toolBar->AddControl( spin ); - + wxTextCtrl *text = new wxTextCtrl( toolBar, -1, wxT("text"), wxDefaultPosition, wxSize(80,wxDefaultCoord) ); toolBar->AddControl( text ); - + wxSearchCtrl *srch = new wxSearchCtrl( toolBar, -1, wxT("xx"), wxDefaultPosition, wxSize(80,wxDefaultCoord), wxSUNKEN_BORDER ); toolBar->AddControl( srch ); + + toolBar->AddControl( new MyMiniControl( toolBar) ); } #endif // toolbars which don't support controls @@ -580,25 +659,45 @@ MyFrame::MyFrame(wxFrame* parent, menuBar->Check(IDM_TOOLBAR_TOP_ORIENTATION, true ); m_toolbarPosition = TOOLBAR_TOP; + // Create the toolbar RecreateToolbar(); - m_textWindow = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); -} - -#if USE_GENERIC_TBAR - -wxToolBar* MyFrame::OnCreateToolBar(long style, - wxWindowID id, - const wxString& name) -{ - return (wxToolBar *)new wxToolBarSimple(this, id, - wxDefaultPosition, wxDefaultSize, - style, name); + m_panel = new wxPanel(this, wxID_ANY); +#if USE_UNMANAGED_TOOLBAR + m_extraToolBar = new wxToolBar(m_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_TEXT|wxTB_FLAT|wxTB_TOP); + PopulateToolbar(m_extraToolBar); +#else + m_extraToolBar = NULL; +#endif + + m_textWindow = new wxTextCtrl(m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); + + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + m_panel->SetSizer(sizer); + if (m_extraToolBar) + sizer->Add(m_extraToolBar, 0, wxEXPAND, 0); + sizer->Add(0,0,6); + sizer->Add(m_textWindow, 1, wxEXPAND, 0); + + wxControl *control; + control = new wxControl( m_panel, -1, wxPoint(30,20), wxSize(50,50), wxBORDER_SUNKEN ); + control = new wxControl( m_panel, -1, wxPoint(130,20), wxSize(50,50), wxBORDER_SIMPLE ); + control = new wxControl( m_panel, -1, wxPoint(230,20), wxSize(50,50), wxBORDER_RAISED ); + control = new wxControl( m_panel, -1, wxPoint(330,20), wxSize(50,50), wxBORDER_THEME ); + + wxScrolledWindow *scrolled; + scrolled = new wxScrolledWindow( m_panel, -1, wxPoint(30,120), wxSize(80,80), wxHSCROLL|wxVSCROLL | wxBORDER_SUNKEN ); + scrolled->SetVirtualSize(400,400); + scrolled->SetScrollRate(10,10); + scrolled = new wxScrolledWindow( m_panel, -1, wxPoint(130,120), wxSize(80,80), wxHSCROLL|wxVSCROLL | wxBORDER_SIMPLE ); + scrolled->SetVirtualSize(400,400); + scrolled->SetScrollRate(10,10); + scrolled = new wxScrolledWindow( m_panel, -1, wxPoint(230,120), wxSize(80,80), wxHSCROLL|wxVSCROLL | wxBORDER_RAISED ); + scrolled->SetVirtualSize(400,400); + scrolled->SetScrollRate(10,10); } -#endif // USE_GENERIC_TBAR - void MyFrame::LayoutChildren() { wxSize size = GetClientSize(); @@ -615,7 +714,7 @@ void MyFrame::LayoutChildren() offset = 0; } - m_textWindow->SetSize(offset, 0, size.x - offset, size.y); + m_panel->SetSize(offset, 0, size.x - offset, size.y); } void MyFrame::OnSize(wxSizeEvent& event) @@ -881,3 +980,12 @@ void MyFrame::OnToggleRadioBtn(wxCommandEvent& event) event.GetId() - IDM_TOOLBAR_TOGGLERADIOBTN1, true); } } + +void MyFrame::OnToolDropdown(wxCommandEvent& event) +{ + wxString str; + str.Printf( _T("Dropdown on tool %d\n"), event.GetId()); + m_textWindow->WriteText( str ); + + event.Skip(); +}