#include "wx/frame.h"
#ifndef WX_PRECOMP
+ #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
#include "wx/app.h"
#include "wx/menu.h"
#include "wx/utils.h"
#include "wx/mdi.h"
#include "wx/panel.h"
#include "wx/log.h"
+ #include "wx/toolbar.h"
+ #include "wx/statusbr.h"
+ #include "wx/menuitem.h"
#endif // WX_PRECOMP
#include "wx/msw/private.h"
-// include <commctrl.h> "properly"
-#include "wx/msw/wrapcctl.h"
-
#if defined(__POCKETPC__) || defined(__SMARTPHONE__)
#include <ole2.h>
#include <aygshell.h>
#include "wx/msw/winundef.h"
#endif
-#if wxUSE_STATUSBAR
- #include "wx/statusbr.h"
- #include "wx/generic/statusbr.h"
-#endif // wxUSE_STATUSBAR
-
-#if wxUSE_TOOLBAR
- #include "wx/toolbar.h"
-#endif // wxUSE_TOOLBAR
-
-#include "wx/menuitem.h"
+#include "wx/generic/statusbr.h"
#ifdef __WXUNIVERSAL__
#include "wx/univ/theme.h"
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);
}
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 )
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);
void wxFrame::PositionToolBar()
{
+ int x = 0, y = 0;
wxToolBar *toolbar = GetToolBar();
if ( toolbar && toolbar->IsShown() )
{
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())
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;
}
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) ;
{
pt.x += w;
}
- else
+ else if( ( toolbar->GetWindowStyleFlag() & wxTB_TOP ) )
{
pt.y += h;
}