X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/443aec6f41be3d7428a2c61accc611b42dc9238d..88932ec82d048d006cdc81bd309f5e59aee799ac:/src/univ/framuniv.cpp diff --git a/src/univ/framuniv.cpp b/src/univ/framuniv.cpp index 08ccc26c63..01076f3e65 100644 --- a/src/univ/framuniv.cpp +++ b/src/univ/framuniv.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: univ/frame.cpp +// Name: src/univ/framuniv.cpp // Purpose: wxFrame class for wxUniversal // Author: Vadim Zeitlin // Modified by: @@ -17,10 +17,6 @@ // headers // --------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "univframe.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,10 +24,12 @@ #pragma hdrstop #endif - #include "wx/menu.h" +#include "wx/frame.h" + #ifndef WX_PRECOMP - #include "wx/frame.h" + #include "wx/menu.h" #include "wx/statusbr.h" + #include "wx/settings.h" #include "wx/toolbar.h" #endif // WX_PRECOMP @@ -41,25 +39,37 @@ BEGIN_EVENT_TABLE(wxFrame, wxFrameBase) EVT_SIZE(wxFrame::OnSize) + EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged) END_EVENT_TABLE() -IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow) - // ---------------------------------------------------------------------------- // ctors // ---------------------------------------------------------------------------- bool wxFrame::Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos, - const wxSize& size, - long style, - const wxString& name) + 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); + if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) ) + return false; + + SetOwnBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); + + return true; } +// Responds to colour changes, and passes event on to children. +void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event) +{ + SetOwnBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); + Refresh(); + + event.Skip(); +} // ---------------------------------------------------------------------------- // menu support @@ -80,13 +90,6 @@ void wxFrame::OnSize(wxSizeEvent& event) event.Skip(); } -void wxFrame::SendSizeEvent() -{ - wxSizeEvent event(GetSize(), GetId()); - event.SetEventObject(this); - GetEventHandler()->ProcessEvent(event); -} - #if wxUSE_MENUS void wxFrame::PositionMenuBar() @@ -96,13 +99,21 @@ void wxFrame::PositionMenuBar() // the menubar is positioned above the client size, hence the negative // y coord wxCoord heightMbar = m_frameMenuBar->GetSize().y; - m_frameMenuBar->SetSize(0, -#ifdef __WXPM__ // FIXME -- remove this, make wxOS2/Univ behave as + + wxCoord heightTbar = 0; + +#if wxUSE_TOOLBAR + if ( m_frameToolBar ) + heightTbar = m_frameToolBar->GetSize().y; +#endif // wxUSE_TOOLBAR + + m_frameMenuBar->SetSize(0, +#ifdef __WXPM__ // FIXME -- remove this, make wxOS2/Univ behave as // the rest of the world!!! - GetClientSize().y - heightMbar, + GetClientSize().y - heightMbar - heightTbar, #else - -heightMbar, -#endif + - (heightMbar + heightTbar), +#endif GetClientSize().x, heightMbar); } } @@ -128,7 +139,7 @@ void wxFrame::PositionStatusBar() if ( m_frameStatusBar ) { wxSize size = GetClientSize(); - m_frameStatusBar->SetSize(0, size.y, size.x, -1); + m_frameStatusBar->SetSize(0, size.y, size.x, wxDefaultCoord); } } @@ -251,8 +262,6 @@ void wxFrame::DoSetClientSize(int width, int height) #if wxUSE_TOOLBAR if ( m_frameToolBar ) { - height += m_frameStatusBar->GetSize().y; - if ( m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL ) width += m_frameToolBar->GetSize().x; else @@ -263,13 +272,44 @@ void wxFrame::DoSetClientSize(int width, int height) wxFrameBase::DoSetClientSize(width, height); } +wxSize wxFrame::GetMinSize() const +{ + wxSize size = wxFrameBase::GetMinSize(); + +#if wxUSE_MENUS + if ( m_frameMenuBar ) + { + const wxSize sizeMenu = m_frameMenuBar->GetBestSize(); + if ( sizeMenu.x > size.x ) + size.x = sizeMenu.x; + size.y += sizeMenu.y; + } +#endif // wxUSE_MENUS + +#if wxUSE_TOOLBAR + if ( m_frameToolBar ) + { + size.y += m_frameToolBar->GetSize().y; + } +#endif // wxUSE_TOOLBAR + +#if wxUSE_STATUSBAR + if ( m_frameStatusBar ) + { + size.y += m_frameStatusBar->GetSize().y; + } +#endif // wxUSE_STATUSBAR + + return size; +} + bool wxFrame::Enable(bool enable) { if (!wxFrameBase::Enable(enable)) - return FALSE; + return false; #ifdef __WXMICROWIN__ if (m_frameMenuBar) m_frameMenuBar->Enable(enable); #endif - return TRUE; + return true; }