X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4159f685e27805a55af8164bdbaf5b396aae84ca..c5c04fabb02c27bcc8115bff024d74ddd48f8175:/src/mac/mdi.cpp?ds=inline diff --git a/src/mac/mdi.cpp b/src/mac/mdi.cpp index b41f8735e8..1d9e43f170 100644 --- a/src/mac/mdi.cpp +++ b/src/mac/mdi.cpp @@ -1,12 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// // Name: mdi.cpp // Purpose: MDI classes -// Author: AUTHOR +// Author: Stefan Csomor // Modified by: -// Created: ??/??/98 +// Created: 1998-01-01 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -17,6 +17,8 @@ #include "wx/menu.h" #include "wx/settings.h" +#include "wx/mac/private.h" + extern wxWindowList wxModelessWindows; #if !USE_SHARED_LIBRARY @@ -42,6 +44,7 @@ static const int IDM_WINDOWCASCADE = 4002; static const int IDM_WINDOWICONS = 4003; static const int IDM_WINDOWNEXT = 4004; static const int IDM_WINDOWTILEVERT = 4005; +static const int IDM_WINDOWPREV = 4006; // This range gives a maximum of 500 MDI children. Should be enough :-) static const int wxFIRST_MDI_CHILD = 4100; @@ -68,33 +71,33 @@ bool wxMDIParentFrame::Create(wxWindow *parent, long style, const wxString& name) { - m_clientWindow = NULL; - m_currentChild = NULL; - - // this style can be used to prevent a window from having the standard MDI - // "Window" menu - if ( style & wxFRAME_NO_WINDOW_MENU ) - { - m_windowMenu = (wxMenu *)NULL; - style -= wxFRAME_NO_WINDOW_MENU ; - } - else // normal case: we have the window menu, so construct it - { - m_windowMenu = new wxMenu; - - m_windowMenu->Append(IDM_WINDOWCASCADE, wxT("&Cascade")); - m_windowMenu->Append(IDM_WINDOWTILEHOR, wxT("Tile &Horizontally")); - m_windowMenu->Append(IDM_WINDOWTILEVERT, wxT("Tile &Vertically")); - m_windowMenu->AppendSeparator(); - m_windowMenu->Append(IDM_WINDOWICONS, wxT("&Arrange Icons")); - m_windowMenu->Append(IDM_WINDOWNEXT, wxT("&Next")); - } - - wxFrame::Create( parent , id , title , wxPoint( 2000 , 2000 ) , size , style , name ) ; - m_parentFrameActive = TRUE; + m_clientWindow = NULL; + m_currentChild = NULL; + + // this style can be used to prevent a window from having the standard MDI + // "Window" menu + if ( style & wxFRAME_NO_WINDOW_MENU ) + { + m_windowMenu = (wxMenu *)NULL; + style -= wxFRAME_NO_WINDOW_MENU ; + } + else // normal case: we have the window menu, so construct it + { + m_windowMenu = new wxMenu; - OnCreateClient(); - + m_windowMenu->Append(IDM_WINDOWCASCADE, wxT("&Cascade")); + m_windowMenu->Append(IDM_WINDOWTILEHOR, wxT("Tile &Horizontally")); + m_windowMenu->Append(IDM_WINDOWTILEVERT, wxT("Tile &Vertically")); + m_windowMenu->AppendSeparator(); + m_windowMenu->Append(IDM_WINDOWICONS, wxT("&Arrange Icons")); + m_windowMenu->Append(IDM_WINDOWNEXT, wxT("&Next")); + } + + wxFrame::Create( parent , id , title , wxPoint( 2000 , 2000 ) , size , style , name ) ; + m_parentFrameActive = TRUE; + + OnCreateClient(); + return TRUE; } @@ -105,13 +108,13 @@ wxMDIParentFrame::~wxMDIParentFrame() m_frameToolBar = NULL; m_frameStatusBar = NULL; m_clientWindow = NULL ; - + if (m_windowMenu) { delete m_windowMenu; m_windowMenu = (wxMenu*) NULL; } - + if ( m_clientWindow ) { delete m_clientWindow; @@ -123,51 +126,51 @@ wxMDIParentFrame::~wxMDIParentFrame() // Get size *available for subwindows* i.e. excluding menu bar. void wxMDIParentFrame::DoGetClientSize(int *x, int *y) const { - wxDisplaySize( x , y ) ; + wxDisplaySize( x , y ) ; } void wxMDIParentFrame::SetMenuBar(wxMenuBar *menu_bar) { - wxFrame::SetMenuBar( menu_bar ) ; + wxFrame::SetMenuBar( menu_bar ) ; } void wxMDIParentFrame::OnSize(wxSizeEvent& event) { #if wxUSE_CONSTRAINTS if (GetAutoLayout()) - Layout(); + Layout(); #endif int x = 0; int y = 0; int width, height; GetClientSize(&width, &height); - + if ( GetClientWindow() ) GetClientWindow()->SetSize(x, y, width, height); } void wxMDIParentFrame::OnActivate(wxActivateEvent& event) { - if ( m_currentChild && event.GetActive() ) - { - wxActivateEvent event(wxEVT_ACTIVATE, TRUE, m_currentChild->GetId()); - event.SetEventObject( m_currentChild ); - m_currentChild->GetEventHandler()->ProcessEvent(event) ; - } - else if ( event.GetActive() ) - { - if ( m_frameMenuBar != NULL ) - { - m_frameMenuBar->MacInstallMenuBar() ; - } - - } + if ( m_currentChild && event.GetActive() ) + { + wxActivateEvent event(wxEVT_ACTIVATE, TRUE, m_currentChild->GetId()); + event.SetEventObject( m_currentChild ); + m_currentChild->GetEventHandler()->ProcessEvent(event) ; + } + else if ( event.GetActive() ) + { + if ( m_frameMenuBar != NULL ) + { + m_frameMenuBar->MacInstallMenuBar() ; + } + + } } // Returns the active MDI child window wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const { - return m_currentChild ; + return m_currentChild ; } // Create the client window class (don't Create the window, @@ -182,7 +185,7 @@ wxMDIClientWindow *wxMDIParentFrame::OnCreateClient() void wxMDIParentFrame::OnSysColourChanged(wxSysColourChangedEvent& event) { // TODO - + // Propagate the event to the non-top-level children wxFrame::OnSysColourChanged(event); } @@ -224,26 +227,27 @@ void wxMDIChildFrame::Init() } bool wxMDIChildFrame::Create(wxMDIParentFrame *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) { SetName(name); - + if ( id > -1 ) m_windowId = id; else m_windowId = (int)NewControlId(); - + if (parent) parent->AddChild(this); - - MacCreateRealWindow( title, pos , size , MacRemoveBordersFromStyle(style) , name ) ; - - m_macWindowBackgroundTheme = kThemeBrushDocumentWindowBackground ; - + + MacCreateRealWindow( title, pos , size , MacRemoveBordersFromStyle(style) , name ) ; + + m_macWindowBackgroundTheme = kThemeBrushDocumentWindowBackground ; + SetThemeWindowBackground( (WindowRef) m_macWindow , m_macWindowBackgroundTheme , false ) ; + wxModelessWindows.Append(this); return FALSE; } @@ -258,7 +262,7 @@ wxMDIChildFrame::~wxMDIChildFrame() void wxMDIChildFrame::SetMenuBar(wxMenuBar *menu_bar) { - return wxFrame::SetMenuBar( menu_bar ) ; + return wxFrame::SetMenuBar( menu_bar ) ; } // MDI operations @@ -291,15 +295,15 @@ wxMDIClientWindow::~wxMDIClientWindow() bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style) { - + m_windowId = (int)NewControlId(); - + if ( parent ) { - parent->AddChild(this); + parent->AddChild(this); } - m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE); - + m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE); + wxModelessWindows.Append(this); return TRUE; }