X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d08e6e59ed021b0ecfcbf0760347836d6cc45d11..9c112555198f51fcec71106530cddba95a17f3dc:/src/univ/framuniv.cpp diff --git a/src/univ/framuniv.cpp b/src/univ/framuniv.cpp index f6b00d2b10..7f179b0eee 100644 --- a/src/univ/framuniv.cpp +++ b/src/univ/framuniv.cpp @@ -17,7 +17,7 @@ // headers // --------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "univframe.h" #endif @@ -32,6 +32,8 @@ #ifndef WX_PRECOMP #include "wx/frame.h" #include "wx/statusbr.h" + #include "wx/settings.h" + #include "wx/toolbar.h" #endif // WX_PRECOMP // ============================================================================ @@ -40,6 +42,7 @@ BEGIN_EVENT_TABLE(wxFrame, wxFrameBase) EVT_SIZE(wxFrame::OnSize) + EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged) END_EVENT_TABLE() IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow) @@ -56,9 +59,22 @@ bool wxFrame::Create(wxWindow *parent, 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 @@ -72,10 +88,20 @@ void wxFrame::OnSize(wxSizeEvent& event) #if wxUSE_STATUSBAR PositionStatusBar(); #endif // wxUSE_STATUSBAR +#if wxUSE_TOOLBAR + PositionToolBar(); +#endif // wxUSE_TOOLBAR event.Skip(); } +void wxFrame::SendSizeEvent() +{ + wxSizeEvent event(GetSize(), GetId()); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); +} + #if wxUSE_MENUS void wxFrame::PositionMenuBar() @@ -85,11 +111,37 @@ 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, -heightMbar, + + 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 - heightTbar, +#else + - (heightMbar + heightTbar), +#endif GetClientSize().x, heightMbar); } } +void wxFrame::DetachMenuBar() +{ + wxFrameBase::DetachMenuBar(); + SendSizeEvent(); +} + +void wxFrame::AttachMenuBar(wxMenuBar *menubar) +{ + wxFrameBase::AttachMenuBar(menubar); + SendSizeEvent(); +} + #endif // wxUSE_MENUS #if wxUSE_STATUSBAR @@ -98,25 +150,79 @@ void wxFrame::PositionStatusBar() { if ( m_frameStatusBar ) { - wxCoord heightBar = m_frameStatusBar->GetSize().y; - m_frameStatusBar->SetSize(0, GetClientSize().y, - GetClientSize().x, heightBar); + wxSize size = GetClientSize(); + m_frameStatusBar->SetSize(0, size.y, size.x, wxDefaultCoord); } } +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 +#if wxUSE_TOOLBAR + +wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name) +{ + if ( wxFrameBase::CreateToolBar(style, id, name) ) + { + PositionToolBar(); + } + + return m_frameToolBar; +} + +void wxFrame::PositionToolBar() +{ + if ( m_frameToolBar ) + { + wxSize size = GetClientSize(); + int tw, th, tx, ty; + + tx = ty = 0; + m_frameToolBar->GetSize(&tw, &th); + if ( m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL ) + { + tx = -tw; + th = size.y; + } + else + { + ty = -th; + tw = size.x; + } + + m_frameToolBar->SetSize(tx, ty, tw, th); + } +} +#endif // wxUSE_TOOLBAR + wxPoint wxFrame::GetClientAreaOrigin() const { wxPoint pt = wxFrameBase::GetClientAreaOrigin(); -#if wxUSE_MENUS +#if wxUSE_MENUS && !defined(__WXPM__) if ( m_frameMenuBar ) { pt.y += m_frameMenuBar->GetSize().y; } #endif // wxUSE_MENUS +#if wxUSE_TOOLBAR + if ( m_frameToolBar ) + { + if ( m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL ) + pt.x += m_frameToolBar->GetSize().x; + else + pt.y += m_frameToolBar->GetSize().y; + } +#endif // wxUSE_TOOLBAR + return pt; } @@ -137,6 +243,16 @@ void wxFrame::DoGetClientSize(int *width, int *height) const (*height) -= m_frameStatusBar->GetSize().y; } #endif // wxUSE_STATUSBAR + +#if wxUSE_TOOLBAR + if ( m_frameToolBar ) + { + if ( width && (m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL) ) + (*width) -= m_frameToolBar->GetSize().x; + else if ( height ) + (*height) -= m_frameToolBar->GetSize().y; + } +#endif // wxUSE_TOOLBAR } void wxFrame::DoSetClientSize(int width, int height) @@ -155,16 +271,73 @@ void wxFrame::DoSetClientSize(int width, int height) } #endif // wxUSE_STATUSBAR +#if wxUSE_TOOLBAR + if ( m_frameToolBar ) + { +#if wxUSE_STATUSBAR + height += m_frameStatusBar->GetSize().y; +#endif // wxUSE_STATUSBAR + + if ( m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL ) + width += m_frameToolBar->GetSize().x; + else + height += m_frameToolBar->GetSize().y; + } +#endif // wxUSE_TOOLBAR + wxFrameBase::DoSetClientSize(width, height); } +int wxFrame::GetMinWidth() const +{ +#if wxUSE_MENUS + if ( m_frameMenuBar ) + { + return wxMax(m_frameMenuBar->GetBestSize().x, wxFrameBase::GetMinWidth()); + } + else +#endif // wxUSE_MENUS + return wxFrameBase::GetMinWidth(); +} + +int wxFrame::GetMinHeight() const +{ + int height = 0; + +#if wxUSE_MENUS + if ( m_frameMenuBar ) + { + height += m_frameMenuBar->GetSize().y; + } +#endif // wxUSE_MENUS + +#if wxUSE_TOOLBAR + if ( m_frameToolBar ) + { + height += m_frameToolBar->GetSize().y; + } +#endif // wxUSE_TOOLBAR + +#if wxUSE_STATUSBAR + if ( m_frameStatusBar ) + { + height += m_frameStatusBar->GetSize().y; + } +#endif // wxUSE_STATUSBAR + + if ( height ) + return height + wxMax(0, wxFrameBase::GetMinHeight()); + else + return wxFrameBase::GetMinHeight(); +} + 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; }