X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d408730ce4d27aeea9e798d887f4577a3c65f762..628f87da565360ec2fce102c9b46341cf42cd3d3:/src/univ/toolbar.cpp diff --git a/src/univ/toolbar.cpp b/src/univ/toolbar.cpp index 264bddd043..41dc5d2281 100644 --- a/src/univ/toolbar.cpp +++ b/src/univ/toolbar.cpp @@ -104,8 +104,8 @@ public: m_underMouse = false; } - wxToolBarTool(wxToolBar *tbar, wxControl *control) - : wxToolBarToolBase(tbar, control) + wxToolBarTool(wxToolBar *tbar, wxControl *control, const wxString& label) + : wxToolBarToolBase(tbar, control, label) { // no position yet m_x = @@ -328,9 +328,10 @@ wxToolBarToolBase *wxToolBar::CreateTool(int id, clientData, shortHelp, longHelp); } -wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control) +wxToolBarToolBase * +wxToolBar::CreateTool(wxControl *control, const wxString& label) { - return new wxToolBarTool(this, control); + return new wxToolBarTool(this, control, label); } // ---------------------------------------------------------------------------- @@ -423,6 +424,29 @@ bool wxToolBar::Realize() m_needsLayout = true; DoLayout(); + // the first item in the radio group is checked by default to be consistent + // with wxGTK and the menu radio items + int radioGroupCount = 0; + + for ( wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); + node; + node = node->GetNext() ) + { + wxToolBarTool *tool = (wxToolBarTool*) node->GetData(); + + if ( !tool->IsButton() || tool->GetKind() != wxITEM_RADIO ) + { + radioGroupCount = 0; + continue; + } + + bool toggle = !radioGroupCount++; + if ( tool->Toggle(toggle) ) + { + DoToggleTool(tool, toggle); + } + } + SetInitialSize(wxDefaultSize); return true; @@ -720,18 +744,6 @@ bool wxToolBar::PerformAction(const wxControlAction& action, PerformAction( wxACTION_BUTTON_CLICK, numArg ); - // Write by Danny Raynor to change state again. - // Check button still pressed or not - if ( tool->CanBeToggled() && tool->IsToggled() ) - { - tool->Toggle(false); - } - - if( tool->IsInverted() ) - { - PerformAction( wxACTION_TOOLBAR_RELEASE, numArg ); - } - // Set mouse leave toolbar button range (If still in the range, // toolbar button would get focus again PerformAction( wxACTION_TOOLBAR_LEAVE, numArg ); @@ -750,7 +762,10 @@ bool wxToolBar::PerformAction(const wxControlAction& action, wxASSERT_MSG( tool->IsInverted(), _T("release unpressed button?") ); - tool->Invert(); + if(tool->IsInverted()) + { + tool->Invert(); + } RefreshTool( tool ); } @@ -759,7 +774,15 @@ bool wxToolBar::PerformAction(const wxControlAction& action, bool isToggled; if ( tool->CanBeToggled() ) { - tool->Toggle(); + if ( tool->IsButton() && tool->GetKind() == wxITEM_RADIO ) + { + UnToggleRadioGroup(tool); + tool->Toggle(true); + } + else + { + tool->Toggle(); + } RefreshTool( tool );