#include "wx/toolbar.h"
#include "wx/image.h"
+#include "wx/log.h"
// ----------------------------------------------------------------------------
// constants
{
// This required for similar visual effects under
// native platforms and wxUniv.
- wxToolBarBase::SetMargins( x + 2, y + 2 );
+ wxToolBarBase::SetMargins( x + 3, y + 3 );
}
// ----------------------------------------------------------------------------
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
break;
}
+ if (tool->IsSeparator() && !HasFlag(wxTB_FLAT))
+ {
+ // Draw seperators only in flat mode
+ continue;
+ }
+
// deal with the flags
int flags = 0;
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();
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
}
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;