From 5c68088294f06c857b2226100fd14956f03abc01 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 1 Apr 2007 15:06:11 +0000 Subject: [PATCH] toggle the first button in a radio tools group initially (second version of patch 1469227) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45205 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/univ/toolbar.cpp | 50 +++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/src/univ/toolbar.cpp b/src/univ/toolbar.cpp index ccdff2fd2c..41dc5d2281 100644 --- a/src/univ/toolbar.cpp +++ b/src/univ/toolbar.cpp @@ -424,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; @@ -721,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 ); @@ -751,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 ); } @@ -760,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 ); -- 2.45.2