]> git.saurik.com Git - wxWidgets.git/commitdiff
toggle the first button in a radio tools group initially (second version of patch...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 1 Apr 2007 15:06:11 +0000 (15:06 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 1 Apr 2007 15:06:11 +0000 (15:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45205 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/univ/toolbar.cpp

index ccdff2fd2c40a07b424ffa4942009fe3e68ee5ff..41dc5d22813557a9012a4c98c65da2cc82e2aa72 100644 (file)
@@ -424,6 +424,29 @@ bool wxToolBar::Realize()
     m_needsLayout = true;
     DoLayout();
 
     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;
     SetInitialSize(wxDefaultSize);
 
     return true;
@@ -721,18 +744,6 @@ bool wxToolBar::PerformAction(const wxControlAction& action,
 
         PerformAction( wxACTION_BUTTON_CLICK, numArg );
 
 
         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 );
         // 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?") );
 
 
         wxASSERT_MSG( tool->IsInverted(), _T("release unpressed button?") );
 
-        tool->Invert();
+        if(tool->IsInverted())
+        {
+            tool->Invert();
+        }
 
         RefreshTool( tool );
     }
 
         RefreshTool( tool );
     }
@@ -760,7 +774,15 @@ bool wxToolBar::PerformAction(const wxControlAction& action,
         bool isToggled;
         if ( tool->CanBeToggled() )
         {
         bool isToggled;
         if ( tool->CanBeToggled() )
         {
-            tool->Toggle();
+            if ( tool->IsButton() && tool->GetKind() == wxITEM_RADIO )
+            {
+                UnToggleRadioGroup(tool);
+                tool->Toggle(true);
+            }
+            else
+            {
+                tool->Toggle();
+            }
 
             RefreshTool( tool );
 
 
             RefreshTool( tool );