]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/toolbar.cpp
Updated version
[wxWidgets.git] / src / univ / toolbar.cpp
index e0d4b6f169489fd584128e622f1dc7dbb0175ab0..1745a900fd93144c277f0a39396cf38a967a9a0c 100644 (file)
@@ -40,6 +40,7 @@
 
 #include "wx/toolbar.h"
 #include "wx/image.h"
+#include "wx/log.h"
 
 // ----------------------------------------------------------------------------
 // constants
@@ -161,7 +162,7 @@ void wxToolBar::SetMargins(int x, int y)
 {
     // This required for similar visual effects under
     // native platforms and wxUniv.
-    wxToolBarBase::SetMargins( x + 2, y + 2 );
+    wxToolBarBase::SetMargins( x + 3, y + 3 );
 }
 
 // ----------------------------------------------------------------------------
@@ -405,7 +406,8 @@ void wxToolBar::DoLayout()
         tool->m_x = x;
         tool->m_y = y;
 
-        *pCur += (tool->IsSeparator() ? m_widthSeparator : widthTool) + margin;
+        // TODO ugly number fiddling
+        *pCur += ( tool->IsSeparator() ? m_widthSeparator : (widthTool+2) ) + margin;
     }
 
     // calculate the total toolbar size
@@ -489,6 +491,12 @@ void wxToolBar::DoDraw(wxControlRenderer *renderer)
             break;
         }
         
+        if (tool->IsSeparator() && !HasFlag(wxTB_FLAT))
+        {
+            // Draw seperators only in flat mode
+            continue;
+        }
+        
         // deal with the flags
         int flags = 0;
 
@@ -632,11 +640,12 @@ bool wxStdToolbarInputHandler::HandleMouse(wxInputConsumer *consumer,
 
     if ( event.Button(1) )
     {
-        if ( !tool || !tool->IsEnabled() )
-            return TRUE;
 
         if ( event.LeftDown() || event.LeftDClick() )
         {
+            if ( !tool || !tool->IsEnabled() )
+                return TRUE;
+                
             m_winCapture = tbar;
             m_winCapture->CaptureMouse();
             
@@ -654,20 +663,17 @@ bool wxStdToolbarInputHandler::HandleMouse(wxInputConsumer *consumer,
                 m_winCapture = NULL;
             }
 
-            if ( tool == m_toolCapture )
+            if (m_toolCapture)
             {
-                // this will generate a click event
-                consumer->PerformAction( wxACTION_BUTTON_TOGGLE, tool->GetId() );
-
-                m_toolCapture = NULL;
-                
-                return TRUE;
+                if ( tool == m_toolCapture )
+                    consumer->PerformAction( wxACTION_BUTTON_TOGGLE, m_toolCapture->GetId() );
+                else
+                    consumer->PerformAction( wxACTION_TOOLBAR_LEAVE, m_toolCapture->GetId() );
             }
-            //else: the mouse was released outside the tool or in
-            //      a different tool
             
             m_toolCapture = NULL;
-            
+                
+            return TRUE;
         }
         //else: don't do anything special about the double click
     }
@@ -694,27 +700,40 @@ bool wxStdToolbarInputHandler::HandleMouseMove(wxInputConsumer *consumer,
             tool = (wxToolBarTool*) tbar->FindToolForPosition( event.GetX(), event.GetY() );
         }
         
-        if ((tool) && (tool == m_toolLast))
+        if (m_toolCapture)
         {
-            // Still over the same tool as last time
-            return TRUE;
+            // During capture we only care of the captured tool
+            if (tool && (tool != m_toolCapture))
+                tool = NULL;
+                
+            if (tool == m_toolLast)
+                return TRUE;
+                
+            if (tool)
+                consumer->PerformAction( wxACTION_BUTTON_PRESS, m_toolCapture->GetId() );
+            else
+                consumer->PerformAction( wxACTION_BUTTON_RELEASE, m_toolCapture->GetId() );
+                
+            m_toolLast = tool;
         }
-        
-        if (m_toolLast)
+        else
         {
-            // Leave old tool if any
-            consumer->PerformAction( wxACTION_TOOLBAR_LEAVE, m_toolLast->GetId() );
-        }
+            if (tool == m_toolLast)
+               return TRUE;
+               
+            if (m_toolLast)
+            {
+                // Leave old tool if any
+                consumer->PerformAction( wxACTION_TOOLBAR_LEAVE, m_toolLast->GetId() );
+            }
+            
+            if (tool)
+            {
+                // Enter new tool if any
+                consumer->PerformAction( wxACTION_TOOLBAR_ENTER, tool->GetId() );
+            }
         
-        if (m_toolCapture && (m_toolCapture != tool))
-            m_toolLast = NULL;
-        else
             m_toolLast = tool;
-        
-        if (m_toolLast)
-        {
-            // Enter new tool if any
-            consumer->PerformAction( wxACTION_TOOLBAR_ENTER, m_toolLast->GetId() );
         }
         
         return TRUE;