many fixes to toolbar positioning code

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42842 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-10-31 13:11:46 +00:00
parent 35386afc20
commit 3882e74621

View File

@@ -232,20 +232,22 @@ void wxFrame::DoSetClientSize(int width, int height)
wxPoint pt = GetClientAreaOrigin(); wxPoint pt = GetClientAreaOrigin();
width += pt.x; width += pt.x;
height += pt.y; height += pt.y;
#if wxUSE_TOOLBAR #if wxUSE_TOOLBAR
if ( width ) wxToolBar * const toolbar = GetToolBar();
if ( toolbar )
{ {
wxToolBar *toolbar = GetToolBar(); if ( toolbar->HasFlag(wxTB_RIGHT | wxTB_BOTTOM) )
if ( toolbar && toolbar->HasFlag(wxTB_RIGHT) )
{ {
width -= toolbar->GetClientSize().x; const wxSize sizeTB = toolbar->GetSize();
} if ( toolbar->HasFlag(wxTB_RIGHT) )
if ( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) ) width -= sizeTB.x;
{ else // wxTB_BOTTOM
height -= toolbar->GetClientSize().y; height -= sizeTB.y;
} }
//else: toolbar already taken into account by GetClientAreaOrigin()
} }
#endif #endif // wxUSE_TOOLBAR
wxTopLevelWindow::DoSetClientSize(width, height); wxTopLevelWindow::DoSetClientSize(width, height);
} }
@@ -262,24 +264,29 @@ void wxFrame::DoGetClientSize(int *x, int *y) const
if ( y ) if ( y )
*y -= pt.y; *y -= pt.y;
#if wxUSE_TOOLBAR #if wxUSE_TOOLBAR
if( y ) wxToolBar * const toolbar = GetToolBar();
if ( toolbar )
{ {
wxToolBar *toolbar = GetToolBar(); if ( toolbar->HasFlag(wxTB_RIGHT | wxTB_BOTTOM) )
if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
{ {
*y -= toolbar->GetClientSize().y; const wxSize sizeTB = toolbar->GetSize();
if ( toolbar->HasFlag(wxTB_RIGHT) )
{
if ( x )
*x -= sizeTB.x;
}
else // wxTB_BOTTOM
{
if ( y )
*y -= sizeTB.y;
}
} }
//else: toolbar already taken into account by GetClientAreaOrigin()
} }
if ( x ) #endif // wxUSE_TOOLBAR
{
wxToolBar *toolbar = GetToolBar();
if ( toolbar && toolbar->HasFlag(wxTB_RIGHT) )
{
*x -= toolbar->GetClientSize().x;
}
}
#endif
#if wxUSE_STATUSBAR #if wxUSE_STATUSBAR
// adjust client area height to take the status bar into account // adjust client area height to take the status bar into account
if ( y ) if ( y )
@@ -346,13 +353,7 @@ void wxFrame::PositionStatusBar()
int w, h; int w, h;
GetClientSize(&w, &h); GetClientSize(&w, &h);
#if wxUSE_TOOLBAR
wxToolBar *toolbar = GetToolBar();
if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) )
h += toolbar->GetClientRect().height;
if( toolbar && toolbar->HasFlag( wxTB_RIGHT ) )
w += toolbar->GetClientRect().width;
#endif
int sw, sh; int sw, sh;
m_frameStatusBar->GetSize(&sw, &sh); m_frameStatusBar->GetSize(&sw, &sh);
@@ -360,6 +361,7 @@ void wxFrame::PositionStatusBar()
// we use the adjusted sizes without using wxSIZE_NO_ADJUSTMENTS. // we use the adjusted sizes without using wxSIZE_NO_ADJUSTMENTS.
m_frameStatusBar->SetSize(0, h, w, sh); m_frameStatusBar->SetSize(0, h, w, sh);
} }
#endif // wxUSE_STATUSBAR #endif // wxUSE_STATUSBAR
#if wxUSE_MENUS_NATIVE #if wxUSE_MENUS_NATIVE
@@ -620,24 +622,27 @@ void wxFrame::PositionToolBar()
height -= statbar->GetClientSize().y; height -= statbar->GetClientSize().y;
} }
#endif // wxUSE_STATUSBAR #endif // wxUSE_STATUSBAR
int tx, ty, tw, th;
toolbar->GetPosition( &tx, &ty ); int tx, ty, tw, th;
toolbar->GetSize( &tw, &th ); toolbar->GetPosition( &tx, &ty );
if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) ) toolbar->GetSize( &tw, &th );
{
x = 0; if ( toolbar->HasFlag(wxTB_BOTTOM) )
y = 0; {
} x = 0;
else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM ) y = height - th;
{ }
x = 0; else if ( toolbar->HasFlag(wxTB_RIGHT) )
y = height - th; {
} x = width - tw;
else if( toolbar->HasFlag(wxTB_RIGHT) ) y = 0;
{ }
x = width - tw; else // left or top
y = 0; {
} x = 0;
y = 0;
}
#if defined(WINCE_WITH_COMMANDBAR) #if defined(WINCE_WITH_COMMANDBAR)
// We're using a commandbar - so we have to allow for it. // We're using a commandbar - so we have to allow for it.
if (GetMenuBar() && GetMenuBar()->GetCommandBar()) if (GetMenuBar() && GetMenuBar()->GetCommandBar())
@@ -646,29 +651,29 @@ void wxFrame::PositionToolBar()
::GetWindowRect((HWND) GetMenuBar()->GetCommandBar(), &rect); ::GetWindowRect((HWND) GetMenuBar()->GetCommandBar(), &rect);
y = rect.bottom - rect.top; y = rect.bottom - rect.top;
} }
#endif #endif // WINCE_WITH_COMMANDBAR
if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) )
{ if ( toolbar->HasFlag(wxTB_BOTTOM) )
// Adjust {
if (ty < 0 && (-ty == th)) if ( ty < 0 && ( -ty == th ) )
ty = 0; ty = height - th;
if (tx < 0 && (-tx == tw)) if ( tx < 0 && (-tx == tw ) )
tx = 0; tx = 0;
} }
else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM ) else if ( toolbar->HasFlag(wxTB_RIGHT) )
{
if( ty < 0 && ( -ty == th ) )
ty = height - th;
if( tx < 0 && ( -tx == tw ) )
tx = 0;
}
else if( toolbar->HasFlag(wxTB_RIGHT) )
{ {
if( ty < 0 && ( -ty == th ) ) if( ty < 0 && ( -ty == th ) )
ty = 0; ty = 0;
if( tx < 0 && ( -tx == tw ) ) if( tx < 0 && ( -tx == tw ) )
tx = width - tw; tx = width - tw;
} }
else // left or top
{
if (ty < 0 && (-ty == th))
ty = 0;
if (tx < 0 && (-tx == tw))
tx = 0;
}
int desiredW = tw; int desiredW = tw;
int desiredH = th; int desiredH = th;
@@ -680,8 +685,6 @@ void wxFrame::PositionToolBar()
else else
{ {
desiredW = width; desiredW = width;
// if ( toolbar->GetWindowStyleFlag() & wxTB_FLAT )
// desiredW -= 3;
} }
// use the 'real' MSW position here, don't offset relativly to the // use the 'real' MSW position here, don't offset relativly to the
@@ -1110,19 +1113,18 @@ wxPoint wxFrame::GetClientAreaOrigin() const
#if wxUSE_TOOLBAR && !defined(__WXUNIVERSAL__) && \ #if wxUSE_TOOLBAR && !defined(__WXUNIVERSAL__) && \
(!defined(__WXWINCE__) || (_WIN32_WCE >= 400 && !defined(__POCKETPC__) && !defined(__SMARTPHONE__))) (!defined(__WXWINCE__) || (_WIN32_WCE >= 400 && !defined(__POCKETPC__) && !defined(__SMARTPHONE__)))
wxToolBar *toolbar = GetToolBar(); wxToolBar * const toolbar = GetToolBar();
if ( toolbar && toolbar->IsShown() ) if ( toolbar && toolbar->IsShown() )
{ {
int w, h; const wxSize sizeTB = toolbar->GetSize();
toolbar->GetSize(&w, &h);
if ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) if ( toolbar->HasFlag(wxTB_TOP) )
{ {
pt.x += w; pt.y += sizeTB.y;
} }
else if( ( toolbar->GetWindowStyleFlag() & wxTB_TOP ) ) else if ( toolbar->HasFlag(wxTB_LEFT) )
{ {
pt.y += h; pt.x += sizeTB.x;
} }
} }
#endif // wxUSE_TOOLBAR #endif // wxUSE_TOOLBAR