BEGIN_EVENT_TABLE(wxFrame, wxFrameBase)
EVT_ACTIVATE(wxFrame::OnActivate)
EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged)
+ EVT_SIZE(wxFrame::OnSize)
END_EVENT_TABLE()
-IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow)
-
#define WX_MAC_STATUSBAR_HEIGHT 18
// ----------------------------------------------------------------------------
long style,
const wxString& name)
{
-
if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) )
return false;
wxFrame::~wxFrame()
{
- m_isBeingDeleted = true;
+ SendDestroyEvent();
+
DeleteAllBars();
}
int w, h;
toolbar->GetSize(&w, &h);
- if ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL )
+ if ( toolbar->HasFlag(wxTB_LEFT) )
{
pt.x += w;
}
- else
+ else if ( toolbar->HasFlag(wxTB_TOP) )
{
#if !wxOSX_USE_NATIVE_TOOLBAR
pt.y += h;
return false;
#if wxUSE_MENUS
- if ( m_frameMenuBar && m_frameMenuBar == wxMenuBar::MacGetInstalledMenuBar() )
+ // we should always enable/disable the menubar, even if we are not current, otherwise
+ // we might miss some state change later (happened eg in the docview sample after PrintPreview)
+ if ( m_frameMenuBar /*&& m_frameMenuBar == wxMenuBar::MacGetInstalledMenuBar()*/)
{
int iMaxMenu = m_frameMenuBar->GetMenuCount();
for ( int i = 0 ; i < iMaxMenu ; ++ i )
wxSysColourChangedEvent event2;
event2.SetEventObject( m_frameStatusBar );
- m_frameStatusBar->ProcessEvent(event2);
+ m_frameStatusBar->GetEventHandler()->ProcessEvent(event2);
}
#endif // wxUSE_STATUSBAR
}
}
-void wxFrame::HandleResized( long timestamp )
-{
- // according to the other ports we handle this within the OS level
- // resize event, not within a wxSizeEvent
+void wxFrame::OnSize(wxSizeEvent& event)
+{
PositionBars();
-
- wxNonOwnedWindow::HandleResized( timestamp );
+
+ event.Skip();
}
#if wxUSE_MENUS
void wxFrame::DetachMenuBar()
{
- if ( m_frameMenuBar )
- m_frameMenuBar->UnsetInvokingWindow();
-
wxFrameBase::DetachMenuBar();
}
if (m_frameMenuBar)
{
- m_frameMenuBar->SetInvokingWindow( this );
if (makeCurrent)
m_frameMenuBar->MacInstallMenuBar();
}
int w, h;
toolbar->GetSize(&w, &h);
- if ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL )
+ if ( toolbar->IsVertical() )
{
if ( x )
*x -= w;
}
+ else if ( toolbar->HasFlag( wxTB_BOTTOM ) )
+ {
+ if ( y )
+ *y -= h;
+ }
else
{
#if !wxOSX_USE_NATIVE_TOOLBAR
if ( m_frameToolBar == toolbar )
return ;
+#ifndef __WXOSX_IPHONE__
#if wxOSX_USE_NATIVE_TOOLBAR
if ( m_frameToolBar )
m_frameToolBar->MacInstallNativeToolbar( false ) ;
#endif
-
+#endif
m_frameToolBar = toolbar ;
+#ifndef __WXOSX_IPHONE__
#if wxOSX_USE_NATIVE_TOOLBAR
if ( toolbar )
toolbar->MacInstallNativeToolbar( true ) ;
#endif
+#endif
}
wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
{
int cw, ch;
- GetSize( &cw , &ch ) ;
-
+ wxTopLevelWindow::DoGetClientSize( &cw , &ch );
+
int statusX = 0 ;
int statusY = 0 ;
#if wxUSE_STATUSBAR
if (GetStatusBar() && GetStatusBar()->IsShown())
{
- GetStatusBar()->GetClientSize(&statusX, &statusY);
+ GetStatusBar()->GetSize(&statusX, &statusY);
ch -= statusY;
}
#endif
+#ifdef __WXOSX_IPHONE__
+ // TODO integrate this in a better way, on iphone the status bar is not a child of the content view
+ // but the toolbar is
+ ch -= 20;
+#endif
+
if (GetToolBar())
{
int tx, ty, tw, th;
tx = ty = 0 ;
GetToolBar()->GetSize(&tw, &th);
- if (GetToolBar()->GetWindowStyleFlag() & wxTB_VERTICAL)
+ if (GetToolBar()->HasFlag(wxTB_LEFT))
+ {
+ // Use the 'real' position. wxSIZE_NO_ADJUSTMENTS
+ // means, pretend we don't have toolbar/status bar, so we
+ // have the original client size.
+ GetToolBar()->SetSize(tx , ty , tw, ch , wxSIZE_NO_ADJUSTMENTS );
+ }
+ else if (GetToolBar()->HasFlag(wxTB_RIGHT))
{
// Use the 'real' position. wxSIZE_NO_ADJUSTMENTS
// means, pretend we don't have toolbar/status bar, so we
// have the original client size.
+ tx = cw - tw;
GetToolBar()->SetSize(tx , ty , tw, ch , wxSIZE_NO_ADJUSTMENTS );
}
- else if (GetToolBar()->GetWindowStyleFlag() & wxTB_BOTTOM)
+ else if (GetToolBar()->HasFlag(wxTB_BOTTOM))
{
- //FIXME: this positions the tool bar almost correctly, but still it doesn't work right yet,
- //as 1) the space for the 'old' top toolbar is still taken up, and 2) the toolbar
- //doesn't extend it's width to the width of the frame.
tx = 0;
- ty = ch - (th + statusY);
+ ty = ch - th;
GetToolBar()->SetSize(tx, ty, cw, th, wxSIZE_NO_ADJUSTMENTS );
}
else