Applied patch [ 681893 ] Combobox in toolbar

This patch adds controls (i.e. combobox) to toolbars.
It also changes the toolbar sample so the combobox is
actually shown.

Otto Wyss


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19243 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2003-02-18 09:38:02 +00:00
parent 8586126c7b
commit a8f4cabe1e
5 changed files with 99 additions and 22 deletions

View File

@@ -72,6 +72,24 @@ public:
// no position yet
m_x =
m_y = -1;
m_width =
m_height = 0;
// not pressed yet
m_isInverted = FALSE;
// mouse not here yet
m_underMouse = FALSE;
}
wxToolBarTool(wxToolBar *tbar, wxControl *control)
: wxToolBarToolBase(tbar, control)
{
// no position yet
m_x =
m_y = -1;
m_width =
m_height = 0;
// not pressed yet
m_isInverted = FALSE;
@@ -96,9 +114,11 @@ public:
bool IsUnderMouse() { return m_underMouse; }
public:
// the tool position (the size is known by the toolbar itself)
int m_x,
m_y;
// the tool position (for controls)
wxCoord m_x;
wxCoord m_y;
wxCoord m_width;
wxCoord m_height;
private:
// TRUE if the tool is pressed
@@ -330,9 +350,7 @@ wxToolBarToolBase *wxToolBar::CreateTool(int id,
wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control)
{
wxFAIL_MSG( wxT("Toolbar doesn't support controls yet (TODO)") );
return NULL;
return new wxToolBarTool(this, control);
}
// ----------------------------------------------------------------------------
@@ -358,13 +376,39 @@ wxRect wxToolBar::GetToolRect(wxToolBarToolBase *toolBase) const
if ( IsVertical() )
{
rect.width = m_defaultWidth;
rect.height = tool->IsSeparator() ? m_widthSeparator : m_defaultHeight;
if (tool->IsButton())
{
rect.width = m_defaultWidth;
rect.height = m_defaultHeight;
}
else if (tool->IsSeparator())
{
rect.width = m_defaultWidth;
rect.height = m_widthSeparator;
}
else // control
{
rect.width = tool->m_width;
rect.height = tool->m_height;
}
}
else // horizontal
{
rect.width = tool->IsSeparator() ? m_widthSeparator : m_defaultWidth;
rect.height = m_defaultHeight;
if (tool->IsButton())
{
rect.width = m_defaultWidth;
rect.height = m_defaultHeight;
}
else if (tool->IsSeparator())
{
rect.width = m_widthSeparator;
rect.height = m_defaultHeight;
}
else // control
{
rect.width = tool->m_width;
rect.height = tool->m_height;
}
}
rect.width += 2*m_xMargin;
@@ -410,7 +454,25 @@ void wxToolBar::DoLayout()
tool->m_y = y;
// TODO ugly number fiddling
*pCur += ( tool->IsSeparator() ? m_widthSeparator : (widthTool+2) ) + margin;
if (tool->IsButton())
{
*pCur += widthTool;
}
else if (tool->IsSeparator())
{
*pCur += m_widthSeparator;
}
else if (!IsVertical()) // horizontal control
{
wxControl *control = tool->GetControl();
wxSize size = control->GetSize();
tool->m_y += (m_defaultHeight - size.y)/2;
tool->m_width = size.x;
tool->m_height = size.y;
*pCur += tool->m_width;
}
*pCur += margin;
}
// calculate the total toolbar size
@@ -562,7 +624,15 @@ void wxToolBar::DoDraw(wxControlRenderer *renderer)
}
//else: leave both the label and the bitmap invalid to draw a separator
rend->DrawToolBarButton(dc, label, bitmap, rectTool, flags);
if ( !tool->IsControl() )
{
rend->DrawToolBarButton(dc, label, bitmap, rectTool, flags, tool->GetStyle());
}
else // control
{
wxControl *control = tool->GetControl();
control->Move(tool->m_x, tool->m_y);
}
}
}