/////////////////////////////////////////////////////////////////////////////
-// Name: frame.cpp
+// Name: src/mac/carbon/frame.cpp
// Purpose: wxFrame
// Author: Stefan Csomor
// Modified by:
#include "wx/wxprec.h"
#include "wx/frame.h"
-#include "wx/statusbr.h"
-#include "wx/toolbar.h"
-#include "wx/menuitem.h"
-#include "wx/menu.h"
-#include "wx/dcclient.h"
-#include "wx/dialog.h"
-#include "wx/settings.h"
-#include "wx/app.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/app.h"
+ #include "wx/dcclient.h"
+ #include "wx/menu.h"
+ #include "wx/dialog.h"
+ #include "wx/settings.h"
+ #include "wx/toolbar.h"
+ #include "wx/statusbr.h"
+ #include "wx/menuitem.h"
+#endif // WX_PRECOMP
#include "wx/mac/uma.h"
extern wxWindowList wxModelessWindows;
-extern wxList wxPendingDelete;
BEGIN_EVENT_TABLE(wxFrame, wxFrameBase)
EVT_ACTIVATE(wxFrame::OnActivate)
void wxFrame::Init()
{
- m_frameMenuBar = NULL;
- m_frameStatusBar = NULL;
m_winLastFocused = NULL;
-
-#if wxUSE_TOOLBAR
- m_frameToolBar = NULL;
-#endif
-
-#if wxUSE_TOOLTIPS
- // NB: is this used anywhere?
- m_hwndToolTip = NULL;
-#endif
-
- m_iconized = false;
}
bool wxFrame::Create(wxWindow *parent,
}
}
#endif
-
+
return pt;
}
return true;
}
+#if wxUSE_STATUSBAR
wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, wxWindowID id,
const wxString& name)
{
wxStatusBar *statusBar;
statusBar = new wxStatusBar(this, id, style, name);
- statusBar->SetSize(100 , WX_MAC_STATUSBAR_HEIGHT);
+ statusBar->SetSize(100, WX_MAC_STATUSBAR_HEIGHT);
statusBar->SetFieldsCount(number);
return statusBar;
m_frameStatusBar->SetSize(0, h, w, WX_MAC_STATUSBAR_HEIGHT);
}
}
+#endif // wxUSE_STATUSBAR
// Responds to colour changes, and passes event on to children.
void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event)
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE));
Refresh();
+#if wxUSE_STATUSBAR
if ( m_frameStatusBar )
{
wxSysColourChangedEvent event2;
event2.SetEventObject( m_frameStatusBar );
m_frameStatusBar->ProcessEvent(event2);
}
+#endif // wxUSE_STATUSBAR
// Propagate the event to the non-top-level children
wxWindow::OnSysColourChanged(event);
? m_winLastFocused->GetParent()
: NULL;
- if ( !parent )
+ if (parent == NULL)
parent = this;
wxSetFocusToChild(parent, &m_winLastFocused);
if (m_frameMenuBar != NULL)
{
- m_frameMenuBar->MacInstallMenuBar() ;
+ m_frameMenuBar->MacInstallMenuBar();
}
- else if (wxTheApp->GetTopWindow() && wxTheApp->GetTopWindow()->IsKindOf(CLASSINFO(wxFrame)))
+ else
{
- // Trying toplevel frame membar
- if (((wxFrame*)wxTheApp->GetTopWindow())->GetMenuBar())
- ((wxFrame*)wxTheApp->GetTopWindow())->GetMenuBar()->MacInstallMenuBar();
- }
+ wxFrame *tlf = wxDynamicCast( wxTheApp->GetTopWindow(), wxFrame );
+ if (tlf != NULL)
+ {
+ // Trying top-level frame membar
+ if (tlf->GetMenuBar())
+ tlf->GetMenuBar()->MacInstallMenuBar();
+ }
+ }
}
}
void wxFrame::AttachMenuBar( wxMenuBar *menuBar )
{
- wxFrameBase::AttachMenuBar(menuBar);
+ wxFrame* tlf = wxDynamicCast( wxFindWinFromMacWindow( FrontNonFloatingWindow() ) , wxFrame );
+ bool makeCurrent = false;
+
+ // if this is already the current menubar or we are the frontmost window
+ if ( (tlf == this) || (m_frameMenuBar == wxMenuBar::MacGetInstalledMenuBar()) )
+ makeCurrent = true;
+ // or there is an app-level menubar like MDI
+ else if ( tlf && (tlf->GetMenuBar() == NULL) && (((wxFrame*)wxTheApp->GetTopWindow()) == this) )
+ makeCurrent = true;
+
+ wxFrameBase::AttachMenuBar( menuBar );
if (m_frameMenuBar)
+ {
m_frameMenuBar->SetInvokingWindow( this );
+ if (makeCurrent)
+ m_frameMenuBar->MacInstallMenuBar();
+ }
}
void wxFrame::DoGetClientSize(int *x, int *y) const
{
if ( m_frameToolBar == toolbar )
return ;
-
+
#if wxMAC_USE_NATIVE_TOOLBAR
if ( m_frameToolBar )
m_frameToolBar->MacInstallNativeToolbar( false ) ;
int cw, ch;
GetSize( &cw , &ch ) ;
+
+ int statusX = 0 ;
+ int statusY = 0 ;
+#if wxUSE_STATUSBAR
if (GetStatusBar() && GetStatusBar()->IsShown())
{
- int statusX, statusY;
-
GetStatusBar()->GetClientSize(&statusX, &statusY);
ch -= statusY;
}
+#endif
if (GetToolBar())
{
// have the original client size.
GetToolBar()->SetSize(tx , ty , tw, ch , wxSIZE_NO_ADJUSTMENTS );
}
+ else if (GetToolBar()->GetWindowStyleFlag() & 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);
+ GetToolBar()->SetSize(tx, ty, cw, th, wxSIZE_NO_ADJUSTMENTS );
+ }
else
{
#if !wxMAC_USE_NATIVE_TOOLBAR
}
}
}
+#endif // wxUSE_TOOLBAR
+
+void wxFrame::PositionBars()
+{
+#if wxUSE_STATUSBAR
+ PositionStatusBar();
#endif
+#if wxUSE_TOOLBAR
+ PositionToolBar();
+#endif
+}
+