X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e6feb95a79834836e88143b15d9f424ebe79621..31a06b07cce898a22d0ca3992501e85da9c22f13:/src/univ/framuniv.cpp diff --git a/src/univ/framuniv.cpp b/src/univ/framuniv.cpp index b55c96ae49..19b2c610cb 100644 --- a/src/univ/framuniv.cpp +++ b/src/univ/framuniv.cpp @@ -5,7 +5,7 @@ // Modified by: // Created: 19.05.01 // RCS-ID: $Id$ -// Copyright: (c) 2001 Vadim Zeitlin +// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -31,69 +31,111 @@ #include "wx/menu.h" #ifndef WX_PRECOMP #include "wx/frame.h" + #include "wx/statusbr.h" #endif // WX_PRECOMP // ============================================================================ // implementation // ============================================================================ -BEGIN_EVENT_TABLE(wxFrame, wxFrameNative) +BEGIN_EVENT_TABLE(wxFrame, wxFrameBase) EVT_SIZE(wxFrame::OnSize) END_EVENT_TABLE() -#if defined(__WXMSW__) - IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxFrameMSW) -#elif defined(__WXGTK__) - IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxFrameGTK) -#endif +IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow) // ---------------------------------------------------------------------------- // ctors // ---------------------------------------------------------------------------- -wxFrame::wxFrame() +bool wxFrame::Create(wxWindow *parent, + wxWindowID id, + const wxString& title, + const wxPoint& pos, + const wxSize& size, + long style, + const wxString& name) { + return wxTopLevelWindow::Create(parent, id, title, pos, size, style, name); } -wxFrame::wxFrame(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos, - const wxSize& size, - long style, - const wxString& name) - : wxFrameNative(parent, id, title, pos, size, style, name) -{ - m_renderer = NULL; -} // ---------------------------------------------------------------------------- -// geometry +// menu support // ---------------------------------------------------------------------------- void wxFrame::OnSize(wxSizeEvent& event) { +#if wxUSE_MENUS PositionMenuBar(); +#endif // wxUSE_MENUS +#if wxUSE_STATUSBAR + PositionStatusBar(); +#endif // wxUSE_STATUSBAR event.Skip(); } +void wxFrame::SendSizeEvent() +{ + wxSizeEvent event(GetSize(), GetId()); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); +} + +#if wxUSE_MENUS + void wxFrame::PositionMenuBar() { -#if wxUSE_MENUS if ( m_frameMenuBar ) { // the menubar is positioned above the client size, hence the negative // y coord - m_frameMenuBar->SetSize(0, -m_frameMenuBar->GetSize().y, - GetClientSize().x, -1); + wxCoord heightMbar = m_frameMenuBar->GetSize().y; + m_frameMenuBar->SetSize(0, -heightMbar, + GetClientSize().x, heightMbar); } +} + +void wxFrame::DetachMenuBar() +{ + wxFrameBase::DetachMenuBar(); + SendSizeEvent(); +} + +void wxFrame::AttachMenuBar(wxMenuBar *menubar) +{ + wxFrameBase::AttachMenuBar(menubar); + SendSizeEvent(); +} + #endif // wxUSE_MENUS + +#if wxUSE_STATUSBAR + +void wxFrame::PositionStatusBar() +{ + if ( m_frameStatusBar ) + { + wxCoord heightBar = m_frameStatusBar->GetSize().y; + m_frameStatusBar->SetSize(0, GetClientSize().y, + GetClientSize().x, heightBar); + } +} + +wxStatusBar* wxFrame::CreateStatusBar(int number, long style, + wxWindowID id, const wxString& name) +{ + wxStatusBar *bar = wxFrameBase::CreateStatusBar(number, style, id, name); + SendSizeEvent(); + return bar; } +#endif // wxUSE_STATUSBAR + wxPoint wxFrame::GetClientAreaOrigin() const { - wxPoint pt = wxFrameNative::GetClientAreaOrigin(); + wxPoint pt = wxFrameBase::GetClientAreaOrigin(); #if wxUSE_MENUS if ( m_frameMenuBar ) @@ -105,3 +147,51 @@ wxPoint wxFrame::GetClientAreaOrigin() const return pt; } +void wxFrame::DoGetClientSize(int *width, int *height) const +{ + wxFrameBase::DoGetClientSize(width, height); + +#if wxUSE_MENUS + if ( m_frameMenuBar && height ) + { + (*height) -= m_frameMenuBar->GetSize().y; + } +#endif // wxUSE_MENUS + +#if wxUSE_STATUSBAR + if ( m_frameStatusBar && height ) + { + (*height) -= m_frameStatusBar->GetSize().y; + } +#endif // wxUSE_STATUSBAR +} + +void wxFrame::DoSetClientSize(int width, int height) +{ +#if wxUSE_MENUS + if ( m_frameMenuBar ) + { + height += m_frameMenuBar->GetSize().y; + } +#endif // wxUSE_MENUS + +#if wxUSE_STATUSBAR + if ( m_frameStatusBar ) + { + height += m_frameStatusBar->GetSize().y; + } +#endif // wxUSE_STATUSBAR + + wxFrameBase::DoSetClientSize(width, height); +} + +bool wxFrame::Enable(bool enable) +{ + if (!wxFrameBase::Enable(enable)) + return FALSE; +#ifdef __WXMICROWIN__ + if (m_frameMenuBar) + m_frameMenuBar->Enable(enable); +#endif + return TRUE; +}