Fixed conflicts with Robert's similar fixes; fixed toolbar size calculation

and allowed for vertical toolbar


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14396 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart 2002-02-24 23:04:46 +00:00
parent d1017acfc3
commit 16c9a4258f
5 changed files with 76 additions and 16 deletions

View File

@ -101,9 +101,10 @@ protected:
const wxString& shortHelpString,
const wxString& longHelpString);
virtual wxToolBarToolBase *CreateTool(wxControl *control);
private:
wxToolBarTool *m_captured;
wxCoord m_maxWidth, m_maxHeight;
private:
void OnMouse( wxMouseEvent &event );

View File

@ -297,7 +297,7 @@ void MyFrame::RecreateToolbar()
toolBar->AddTool(wxID_OPEN, toolBarBitmaps[1], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Open file");
// neither the generic nor Motif native toolbars really support this
#if (wxUSE_TOOLBAR_NATIVE && !USE_GENERIC_TBAR) && !defined(__WXMOTIF__)
#if (wxUSE_TOOLBAR_NATIVE && !USE_GENERIC_TBAR) && !defined(__WXMOTIF__) && !defined(__WXX11__)
// adding a combo to a vertical toolbar is not very smart
if ( m_horzToolbar )
{

View File

@ -152,7 +152,7 @@ wxPoint wxFrameBase::GetClientAreaOrigin() const
{
wxPoint pt = wxTopLevelWindow::GetClientAreaOrigin();
#if wxUSE_TOOLBAR
#if wxUSE_TOOLBAR && !defined(__WXUNIVERSAL__)
wxToolBar *toolbar = GetToolBar();
if ( toolbar && toolbar->IsShown() )
{

View File

@ -96,18 +96,17 @@ void wxFrame::PositionMenuBar()
// the menubar is positioned above the client size, hence the negative
// y coord
wxCoord heightMbar = m_frameMenuBar->GetSize().y;
wxCoord heightTbar = 0;
// In between sits the toolbar
if (m_frameToolBar)
heightTbar = m_frameToolBar->GetSize().y;
m_frameMenuBar->SetSize(0,
#ifdef __WXPM__ // FIXME -- remove this, make wxOS2/Univ behave as
// the rest of the world!!!
GetClientSize().y - heightMbar,
GetClientSize().y - heightMbar - heightTbar,
#else
- heightMbar - heightTbar,
- (heightMbar + heightTbar),
#endif
GetClientSize().x, heightMbar);
}

View File

@ -46,7 +46,7 @@ END_EVENT_TABLE()
bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
const wxPoint& pos, const wxSize& size,
long style, const wxString& name )
{
{
bool ret = wxToolBarBase::Create( parent, id, pos, size, style, wxDefaultValidator, name );
return ret;
@ -54,8 +54,18 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id,
void wxToolBar::Init()
{
// TODO: this is from tbarbase.cpp, but should be in
// wxToolbarBase::Init
// the list owns the pointers
m_tools.DeleteContents(TRUE);
m_xMargin = m_yMargin = 0;
m_maxRows = m_maxCols = 0;
// End TODO
m_maxWidth = 0;
m_maxHeight = 0;
m_captured = NULL;
SetToolBitmapSize( wxSize(16,15) );
}
@ -186,7 +196,19 @@ bool wxToolBar::Realize()
if (!wxToolBarBase::Realize())
return FALSE;
int x = 5;
int x;
int y;
if (GetWindowStyleFlag() & wxTB_VERTICAL)
{
x = m_xMargin;
y = 5;
}
else
{
y = m_yMargin;
x = 5;
}
for ( wxToolBarToolsList::Node *node = m_tools.GetFirst();
node;
@ -194,15 +216,53 @@ bool wxToolBar::Realize()
{
wxToolBarTool *tool = (wxToolBarTool*) node->Data();
if (tool->GetId() == -1)
if (GetWindowStyleFlag() & wxTB_VERTICAL)
{
x += 6;
continue;
if (tool->GetId() == -1)
{
y += 6;
continue;
}
tool->m_x = m_xMargin;
tool->m_y = y;
y += m_defaultHeight + 6;
// Calculate the maximum height or width (depending on style)
// so we know how to size the toolbar in Realize.
// We could get the size of the tool instead of the
// default bitmap size
if (m_maxWidth < (m_defaultWidth + 2*(m_xMargin + 2)))
m_maxWidth = (m_defaultWidth + 2*(m_xMargin + 2)) ;
}
else
{
if (tool->GetId() == -1)
{
x += 6;
continue;
}
tool->m_x = x;
tool->m_y = m_yMargin;
x += m_defaultWidth + 6;
// Calculate the maximum height or width (depending on style)
// so we know how to size the toolbar in Realize.
// We could get the size of the tool instead of the
// default bitmap size
if (m_maxHeight < (m_defaultHeight + 2*(m_yMargin + 2)))
m_maxHeight = (m_defaultHeight + 2*(m_yMargin + 2)) ;
}
tool->m_x = x;
tool->m_y = 4;
x += m_defaultWidth + 6;
}
wxSize sz = GetSize();
if (GetWindowStyleFlag() & wxTB_VERTICAL)
{
SetSize(m_maxWidth, sz.y);
}
else
{
SetSize(sz.x, m_maxHeight);
}
SetSize( x+16, m_defaultHeight + 14 );