X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/373a5fb355f4023f96b14bbf8161cbd1de5b846e..e7445ff8ee26e39fab1e35455e1bef954bdf636f:/src/msw/frame.cpp diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index edc5c5c22c..41518eac18 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: msw/frame.cpp +// Name: src/msw/frame.cpp // Purpose: wxFrame // Author: Julian Smart // Modified by: @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "frame.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,8 +24,9 @@ #pragma hdrstop #endif +#include "wx/frame.h" + #ifndef WX_PRECOMP - #include "wx/frame.h" #include "wx/app.h" #include "wx/menu.h" #include "wx/utils.h" @@ -38,6 +35,7 @@ #include "wx/dcclient.h" #include "wx/mdi.h" #include "wx/panel.h" + #include "wx/log.h" #endif // WX_PRECOMP #include "wx/msw/private.h" @@ -46,6 +44,12 @@ #include #endif +#if defined(__POCKETPC__) || defined(__SMARTPHONE__) + #include + #include + #include "wx/msw/winundef.h" +#endif + #if wxUSE_STATUSBAR #include "wx/statusbr.h" #include "wx/generic/statusbr.h" @@ -56,7 +60,6 @@ #endif // wxUSE_TOOLBAR #include "wx/menuitem.h" -#include "wx/log.h" #ifdef __WXUNIVERSAL__ #include "wx/univ/theme.h" @@ -113,10 +116,14 @@ wxBEGIN_FLAGS( wxFrameStyle ) // frame styles wxFLAGS_MEMBER(wxSTAY_ON_TOP) wxFLAGS_MEMBER(wxCAPTION) +#if WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxTHICK_FRAME) +#endif // WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxSYSTEM_MENU) wxFLAGS_MEMBER(wxRESIZE_BORDER) +#if WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxRESIZE_BOX) +#endif // WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxCLOSE_BOX) wxFLAGS_MEMBER(wxMAXIMIZE_BOX) wxFLAGS_MEMBER(wxMINIMIZE_BOX) @@ -169,15 +176,14 @@ IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow) void wxFrame::Init() { +#if wxUSE_MENUS + m_hMenu = NULL; +#endif // wxUSE_MENUS + #if wxUSE_TOOLTIPS m_hwndToolTip = 0; #endif - // Data to save/restore when calling ShowFullScreen - m_fsStatusBarFields = 0; - m_fsStatusBarHeight = 0; - m_fsToolBarHeight = 0; - m_wasMinimized = false; } @@ -192,12 +198,21 @@ bool wxFrame::Create(wxWindow *parent, if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) ) return false; - SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); + SetOwnBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); -#if defined(__SMARTPHONE__) && defined(__WXWINCE__) +#if defined(__SMARTPHONE__) SetLeftMenu(wxID_EXIT, _("Done")); #endif +#if wxUSE_ACCEL && defined(__POCKETPC__) + // The guidelines state that Ctrl+Q should quit the app. + // Let's define an accelerator table to send wxID_EXIT. + wxAcceleratorEntry entries[1]; + entries[0].Set(wxACCEL_CTRL, 'Q', wxID_EXIT); + wxAcceleratorTable accel(1, entries); + SetAcceleratorTable(accel); +#endif // wxUSE_ACCEL && __POCKETPC__ + return true; } @@ -349,7 +364,7 @@ void wxFrame::AttachMenuBar(wxMenuBar *menubar) #elif defined(WINCE_WITHOUT_COMMANDBAR) if (!GetToolBar()) { - wxToolBar* toolBar = new wxToolBar(this, wxID_ANY, + wxToolMenuBar* toolBar = new wxToolMenuBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE | wxTB_HORIZONTAL, wxToolBarNameStr, menubar); @@ -420,7 +435,7 @@ void wxFrame::InternalSetMenuBar() // Responds to colour changes, and passes event on to children. void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event) { - SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); + SetOwnBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); Refresh(); #if wxUSE_STATUSBAR @@ -439,92 +454,94 @@ void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event) // Pass true to show full screen, false to restore. bool wxFrame::ShowFullScreen(bool show, long style) { + // TODO-CE: add support for CE +#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__) if ( IsFullScreen() == show ) return false; if (show) { + // zap the toolbar, menubar, and statusbar if needed + // + // TODO: hide commandbar for WINCE_WITH_COMMANDBAR #if wxUSE_TOOLBAR - -#if defined(WINCE_WITH_COMMANDBAR) - // TODO: hide commandbar -#else wxToolBar *theToolBar = GetToolBar(); - if (theToolBar) - theToolBar->GetSize(NULL, &m_fsToolBarHeight); - - // zap the toolbar, menubar, and statusbar if ((style & wxFULLSCREEN_NOTOOLBAR) && theToolBar) { - theToolBar->SetSize(wxDefaultCoord,0); - theToolBar->Show(false); + if ( theToolBar->IsShown() ) + { + theToolBar->SetSize(wxDefaultCoord,0); + theToolBar->Show(false); + } + else // prevent it from being restored later + { + style &= ~wxFULLSCREEN_NOTOOLBAR; + } } -#endif // __WXWINCE__ #endif // wxUSE_TOOLBAR -#if defined(__WXMICROWIN__) -#elif defined(__WXWINCE__) - // TODO: make it work for WinCE -#else if (style & wxFULLSCREEN_NOMENUBAR) SetMenu((HWND)GetHWND(), (HMENU) NULL); -#endif #if wxUSE_STATUSBAR wxStatusBar *theStatusBar = GetStatusBar(); - if (theStatusBar) - theStatusBar->GetSize(NULL, &m_fsStatusBarHeight); // Save the number of fields in the statusbar if ((style & wxFULLSCREEN_NOSTATUSBAR) && theStatusBar) { - //m_fsStatusBarFields = theStatusBar->GetFieldsCount(); - //SetStatusBar((wxStatusBar*) NULL); - //delete theStatusBar; - theStatusBar->Show(false); + if ( theStatusBar->IsShown() ) + theStatusBar->Show(false); + else + style &= ~wxFULLSCREEN_NOSTATUSBAR; } - else - m_fsStatusBarFields = 0; #endif // wxUSE_STATUSBAR } - else + else // restore to normal { + // restore the toolbar, menubar, and statusbar if we had hid them #if wxUSE_TOOLBAR -#if defined(WINCE_WITHOUT_COMMANDBAR) - // TODO: show commandbar -#else wxToolBar *theToolBar = GetToolBar(); - // restore the toolbar, menubar, and statusbar - if (theToolBar && (m_fsStyle & wxFULLSCREEN_NOTOOLBAR)) + if ((m_fsStyle & wxFULLSCREEN_NOTOOLBAR) && theToolBar) { - theToolBar->SetSize(wxDefaultCoord, m_fsToolBarHeight); theToolBar->Show(true); } -#endif // __WXWINCE__ #endif // wxUSE_TOOLBAR -#if wxUSE_STATUSBAR - if ( m_fsStyle & wxFULLSCREEN_NOSTATUSBAR ) + if (m_fsStyle & wxFULLSCREEN_NOMENUBAR) { - //CreateStatusBar(m_fsStatusBarFields); - if (GetStatusBar()) + WXHMENU menu = m_hMenu; + +#if wxUSE_MDI_ARCHITECTURE + wxMDIParentFrame *frame = wxDynamicCast(this, wxMDIParentFrame); + if (frame) + { + wxMDIChildFrame *child = frame->GetActiveChild(); + if (child) + { + menu = child->GetWinMenu(); + } + } +#endif // wxUSE_MDI_ARCHITECTURE + + if (menu) { - GetStatusBar()->Show(true); - PositionStatusBar(); + ::SetMenu(GetHwnd(), (HMENU)menu); } } -#endif // wxUSE_STATUSBAR -#if defined(__WXMICROWIN__) -#elif defined(__WXWINCE__) - // TODO: make it work for WinCE -#else - if ((m_fsStyle & wxFULLSCREEN_NOMENUBAR) && (m_hMenu != 0)) - SetMenu((HWND)GetHWND(), (HMENU)m_hMenu); -#endif +#if wxUSE_STATUSBAR + wxStatusBar *theStatusBar = GetStatusBar(); + + if ((m_fsStyle & wxFULLSCREEN_NOSTATUSBAR) && theStatusBar) + { + theStatusBar->Show(true); + PositionStatusBar(); + } +#endif // wxUSE_STATUSBAR } +#endif // !defined(__WXMICROWIN__) && !defined(__WXWINCE__) return wxFrameBase::ShowFullScreen(show, style); } @@ -671,17 +688,15 @@ void wxFrame::IconizeChildFrames(bool bIconize) // them appear in the taskbar because they are, by virtue of this // style, not managed by the taskbar - instead leave Windows take care // of them -#ifdef __WIN95__ if ( win->GetWindowStyle() & wxFRAME_TOOL_WINDOW ) continue; -#endif // Win95 // the child MDI frames are a special case and should not be touched by // the parent frame - instead, they are managed by the user wxFrame *frame = wxDynamicCast(win, wxFrame); if ( frame #if wxUSE_MDI_ARCHITECTURE - && !wxDynamicCast(frame, wxMDIChildFrame) + && !frame->IsMDIChild() #endif // wxUSE_MDI_ARCHITECTURE ) { @@ -716,7 +731,7 @@ WXHICON wxFrame::GetDefaultIcon() const // preprocessing // --------------------------------------------------------------------------- -bool wxFrame::MSWTranslateMessage(WXMSG* pMsg) +bool wxFrame::MSWDoTranslateMessage(wxFrame *frame, WXMSG *pMsg) { if ( wxWindow::MSWTranslateMessage(pMsg) ) return true; @@ -724,14 +739,14 @@ bool wxFrame::MSWTranslateMessage(WXMSG* pMsg) #if wxUSE_MENUS && wxUSE_ACCEL && !defined(__WXUNIVERSAL__) // try the menu bar accels wxMenuBar *menuBar = GetMenuBar(); - if ( !menuBar ) - return false; + if ( menuBar ) + { + const wxAcceleratorTable& acceleratorTable = menuBar->GetAccelTable(); + return acceleratorTable.Translate(frame, pMsg); + } +#endif // wxUSE_MENUS && wxUSE_ACCEL - const wxAcceleratorTable& acceleratorTable = menuBar->GetAccelTable(); - return acceleratorTable.Translate(this, pMsg); -#else return false; -#endif // wxUSE_MENUS && wxUSE_ACCEL } // ---------------------------------------------------------------------------