X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/57bd4c6031d438f11af0ec540136f49a928b923c..ce7208d49d5ce2ca1dc0b3b83f14f1d04f29c4bf:/src/msw/frame.cpp?ds=sidebyside diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index c31faeb708..7cc30151f4 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -232,6 +232,20 @@ void wxFrame::DoSetClientSize(int width, int height) wxPoint pt = GetClientAreaOrigin(); width += pt.x; height += pt.y; +#if wxUSE_TOOLBAR + if ( width ) + { + wxToolBar *toolbar = GetToolBar(); + if ( toolbar && toolbar->HasFlag(wxTB_RIGHT) ) + { + width -= toolbar->GetClientSize().x; + } + if ( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) ) + { + height -= toolbar->GetClientSize().y; + } + } +#endif wxTopLevelWindow::DoSetClientSize(width, height); } @@ -248,7 +262,24 @@ void wxFrame::DoGetClientSize(int *x, int *y) const if ( y ) *y -= pt.y; - +#if wxUSE_TOOLBAR + if( y ) + { + wxToolBar *toolbar = GetToolBar(); + if( toolbar && toolbar->HasFlag( wxTB_BOTTOM ) ) + { + *y -= toolbar->GetClientSize().y; + } + } + if ( x ) + { + wxToolBar *toolbar = GetToolBar(); + if ( toolbar && toolbar->HasFlag(wxTB_RIGHT) ) + { + *x -= toolbar->GetClientSize().x; + } + } +#endif #if wxUSE_STATUSBAR // adjust client area height to take the status bar into account if ( y ) @@ -315,6 +346,13 @@ void wxFrame::PositionStatusBar() int 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; m_frameStatusBar->GetSize(&sw, &sh); @@ -560,6 +598,7 @@ wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& nam void wxFrame::PositionToolBar() { + int x = 0, y = 0; wxToolBar *toolbar = GetToolBar(); if ( toolbar && toolbar->IsShown() ) { @@ -581,9 +620,24 @@ void wxFrame::PositionToolBar() height -= statbar->GetClientSize().y; } #endif // wxUSE_STATUSBAR - - int x = 0; - int y = 0; + int tx, ty, tw, th; + toolbar->GetPosition( &tx, &ty ); + toolbar->GetSize( &tw, &th ); + if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) ) + { + x = 0; + y = 0; + } + else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM ) + { + x = 0; + y = height - th; + } + else if( toolbar->HasFlag(wxTB_RIGHT) ) + { + x = width - tw; + y = 0; + } #if defined(WINCE_WITH_COMMANDBAR) // We're using a commandbar - so we have to allow for it. if (GetMenuBar() && GetMenuBar()->GetCommandBar()) @@ -593,22 +647,33 @@ void wxFrame::PositionToolBar() y = rect.bottom - rect.top; } #endif - - int tx, ty; - int tw, th; - toolbar->GetPosition(&tx, &ty); - toolbar->GetSize(&tw, &th); - + if( ( toolbar->GetWindowStyleFlag() & wxTB_HORIZONTAL ) || ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) ) + { // Adjust if (ty < 0 && (-ty == th)) ty = 0; if (tx < 0 && (-tx == tw)) tx = 0; + } + else if( toolbar->GetWindowStyleFlag() & wxTB_BOTTOM ) + { + 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 ) ) + ty = 0; + if( tx < 0 && ( -tx == tw ) ) + tx = width - tw; + } int desiredW = tw; int desiredH = th; - if ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) + if ( toolbar->IsVertical() ) { desiredH = height; } @@ -627,7 +692,7 @@ void wxFrame::PositionToolBar() bool heightChanging wxDUMMY_INITIALIZE(true); bool widthChanging wxDUMMY_INITIALIZE(true); - if ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) + if ( toolbar->IsVertical() ) { // It's OK if the current height is greater than what can be shown. heightChanging = (desiredH > th) ; @@ -1055,7 +1120,7 @@ wxPoint wxFrame::GetClientAreaOrigin() const { pt.x += w; } - else + else if( ( toolbar->GetWindowStyleFlag() & wxTB_TOP ) ) { pt.y += h; }