From 214b94848a50b224aa3b2101b21149ae82e3706f Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Thu, 23 Sep 2004 22:39:24 +0000 Subject: [PATCH] Fix from Jed Burgess that correctly untoggles radio toolbar items when another one in the same group is selected. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29296 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/tbarbase.cpp | 10 ++++++++-- src/mac/carbon/toolbar.cpp | 23 +++++++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/common/tbarbase.cpp b/src/common/tbarbase.cpp index e3b306923c..69f106b9ee 100644 --- a/src/common/tbarbase.cpp +++ b/src/common/tbarbase.cpp @@ -385,7 +385,10 @@ void wxToolBarBase::UnToggleRadioGroup(wxToolBarToolBase *tool) if ( !tool->IsButton() || tool->GetKind() != wxITEM_RADIO ) break; - tool->Toggle(false); + if ( tool->Toggle(false) ) + { + DoToggleTool(tool, false); + } nodeNext = nodeNext->GetNext(); } @@ -398,7 +401,10 @@ void wxToolBarBase::UnToggleRadioGroup(wxToolBarToolBase *tool) if ( !tool->IsButton() || tool->GetKind() != wxITEM_RADIO ) break; - tool->Toggle(false); + if ( tool->Toggle(false) ) + { + DoToggleTool(tool, false); + } nodePrev = nodePrev->GetPrevious(); } diff --git a/src/mac/carbon/toolbar.cpp b/src/mac/carbon/toolbar.cpp index 0ae7bed16e..9a6f08cd1f 100644 --- a/src/mac/carbon/toolbar.cpp +++ b/src/mac/carbon/toolbar.cpp @@ -123,10 +123,9 @@ static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef wxToolBarTool* tbartool = (wxToolBarTool*)data ; if ( tbartool->CanBeToggled() ) { - tbartool->Toggle( GetControl32BitValue( (ControlRef) tbartool->GetControlHandle() ) ) ; + ((wxToolBar*)tbartool->GetToolBar())->ToggleTool(tbartool->GetId(), GetControl32BitValue((ControlRef)tbartool->GetControlHandle())); } ((wxToolBar*)tbartool->GetToolBar())->OnLeftClick( tbartool->GetId() , tbartool -> IsToggled() ) ; - result = noErr; } break ; @@ -349,12 +348,32 @@ bool wxToolBar::Realize() node = node->GetNext(); } + bool lastWasRadio = FALSE; node = m_tools.GetFirst(); while (node) { wxToolBarTool *tool = (wxToolBarTool *)node->GetData(); wxSize cursize = tool->GetSize() ; + bool isRadio = FALSE; + + if ( tool->IsButton() && tool->GetKind() == wxITEM_RADIO ) + { + if ( !lastWasRadio ) + { + if (tool->Toggle(true)) + { + DoToggleTool(tool, true); + } + } + isRadio = TRUE; + } + else + { + isRadio = FALSE; + } + lastWasRadio = isRadio; + // for the moment we just do a single row/column alignement if ( x + cursize.x > maxWidth ) maxWidth = x + cursize.x ; -- 2.47.2