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:
parent
8586126c7b
commit
a8f4cabe1e
@ -203,7 +203,8 @@ public:
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxRect& rect,
|
||||
int flags = 0) = 0;
|
||||
int flags = 0,
|
||||
long style = 0) = 0;
|
||||
|
||||
// draw a (part of) line in the text control
|
||||
virtual void DrawTextLine(wxDC& dc,
|
||||
@ -621,8 +622,9 @@ public:
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxRect& rect,
|
||||
int flags = 0)
|
||||
{ m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags); }
|
||||
int flags = 0,
|
||||
long style = 0)
|
||||
{ m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style); }
|
||||
virtual void DrawTextLine(wxDC& dc,
|
||||
const wxString& text,
|
||||
const wxRect& rect,
|
||||
|
@ -299,7 +299,7 @@ void MyFrame::RecreateToolbar()
|
||||
toolBar->AddTool(wxID_OPEN, _T("Open"), toolBarBitmaps[1], _T("Open file"));
|
||||
|
||||
// neither the generic nor Motif native toolbars really support this
|
||||
#if (wxUSE_TOOLBAR_NATIVE && !USE_GENERIC_TBAR) && !defined(__WXMOTIF__) && !defined(__WXX11__)
|
||||
#if (wxUSE_TOOLBAR_NATIVE && !USE_GENERIC_TBAR) && !defined(__WXMOTIF__) && !defined(__WXX11__) || defined(__WXUNIVERSAL__)
|
||||
// adding a combo to a vertical toolbar is not very smart
|
||||
if ( m_horzToolbar )
|
||||
{
|
||||
|
@ -165,7 +165,8 @@ public:
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxRect& rect,
|
||||
int flags);
|
||||
int flags = 0,
|
||||
long style = 0);
|
||||
|
||||
virtual void DrawTextLine(wxDC& dc,
|
||||
const wxString& text,
|
||||
@ -1632,7 +1633,8 @@ void wxGTKRenderer::DrawToolBarButton(wxDC& dc,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxRect& rectOrig,
|
||||
int flags)
|
||||
int flags,
|
||||
long style)
|
||||
{
|
||||
// we don't draw the separators at all
|
||||
if ( !label.empty() || bitmap.Ok() )
|
||||
|
@ -239,7 +239,8 @@ public:
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxRect& rect,
|
||||
int flags);
|
||||
int flags = 0,
|
||||
long style = 0);
|
||||
virtual void DrawTextLine(wxDC& dc,
|
||||
const wxString& text,
|
||||
const wxRect& rect,
|
||||
@ -2407,9 +2408,10 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxRect& rectOrig,
|
||||
int flags)
|
||||
int flags,
|
||||
long style)
|
||||
{
|
||||
if ( !label.empty() || bitmap.Ok() )
|
||||
if (style == wxTOOL_STYLE_BUTTON)
|
||||
{
|
||||
wxRect rect = rectOrig;
|
||||
rect.Deflate(BORDER_THICKNESS);
|
||||
@ -2425,7 +2427,7 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
|
||||
|
||||
dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
|
||||
}
|
||||
else // a separator
|
||||
else if (style == wxTOOL_STYLE_SEPARATOR)
|
||||
{
|
||||
// leave a small gap aroudn the line, also account for the toolbar
|
||||
// border itself
|
||||
@ -2433,6 +2435,7 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
|
||||
rectOrig.y + 2*BORDER_THICKNESS,
|
||||
rectOrig.GetBottom() - BORDER_THICKNESS);
|
||||
}
|
||||
// don't draw wxTOOL_STYLE_CONTROL
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user