]>
git.saurik.com Git - wxWidgets.git/blob - src/common/docmdi.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Frame classes for MDI document/view applications
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
13 #pragma implementation "docmdi.h"
16 // For compilers that support precompilation, includes "wx.h".
17 #include "wx/wxprec.h"
23 #if wxUSE_MDI_ARCHITECTURE
25 #include "wx/docmdi.h"
28 * Docview MDI parent frame
31 IMPLEMENT_CLASS(wxDocMDIParentFrame
, wxMDIParentFrame
)
33 BEGIN_EVENT_TABLE(wxDocMDIParentFrame
, wxMDIParentFrame
)
34 EVT_MENU(wxID_EXIT
, wxDocMDIParentFrame::OnExit
)
35 EVT_MENU_RANGE(wxID_FILE1
, wxID_FILE9
, wxDocMDIParentFrame::OnMRUFile
)
36 EVT_CLOSE(wxDocMDIParentFrame::OnCloseWindow
)
39 wxDocMDIParentFrame::wxDocMDIParentFrame()
44 wxDocMDIParentFrame::wxDocMDIParentFrame(wxDocManager
*manager
, wxFrame
*frame
, wxWindowID id
, const wxString
& title
,
45 const wxPoint
& pos
, const wxSize
& size
, long style
, const wxString
& name
)
48 Create(manager
, frame
, id
, title
, pos
, size
, style
, name
);
51 bool wxDocMDIParentFrame::Create(wxDocManager
*manager
, wxFrame
*frame
, wxWindowID id
, const wxString
& title
,
52 const wxPoint
& pos
, const wxSize
& size
, long style
, const wxString
& name
)
54 m_docManager
= manager
;
55 return wxMDIParentFrame::Create(frame
, id
, title
, pos
, size
, style
, name
);
58 void wxDocMDIParentFrame::OnExit(wxCommandEvent
& WXUNUSED(event
))
63 void wxDocMDIParentFrame::Init()
68 void wxDocMDIParentFrame::OnMRUFile(wxCommandEvent
& event
)
70 wxString
f(m_docManager
->GetHistoryFile(event
.GetId() - wxID_FILE1
));
72 (void)m_docManager
->CreateDocument(f
, wxDOC_SILENT
);
75 // Extend event processing to search the view's event table
76 bool wxDocMDIParentFrame::ProcessEvent(wxEvent
& event
)
78 // Try the document manager, then do default processing
79 if (!m_docManager
|| !m_docManager
->ProcessEvent(event
))
80 return wxEvtHandler::ProcessEvent(event
);
85 void wxDocMDIParentFrame::OnCloseWindow(wxCloseEvent
& event
)
87 if (m_docManager
->Clear(!event
.CanVeto()))
97 * Default document child frame for MDI children
100 IMPLEMENT_CLASS(wxDocMDIChildFrame
, wxMDIChildFrame
)
102 BEGIN_EVENT_TABLE(wxDocMDIChildFrame
, wxMDIChildFrame
)
103 EVT_ACTIVATE(wxDocMDIChildFrame::OnActivate
)
104 EVT_CLOSE(wxDocMDIChildFrame::OnCloseWindow
)
107 void wxDocMDIChildFrame::Init()
109 m_childDocument
= (wxDocument
*) NULL
;
110 m_childView
= (wxView
*) NULL
;
113 wxDocMDIChildFrame::wxDocMDIChildFrame()
118 wxDocMDIChildFrame::wxDocMDIChildFrame(wxDocument
*doc
, wxView
*view
, wxMDIParentFrame
*frame
, wxWindowID id
,
119 const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
, long style
, const wxString
& name
)
122 Create(doc
, view
, frame
, id
, title
, pos
, size
, style
, name
);
125 bool wxDocMDIChildFrame::Create(wxDocument
*doc
, wxView
*view
, wxMDIParentFrame
*frame
, wxWindowID id
,
126 const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
, long style
, const wxString
& name
)
128 m_childDocument
= doc
;
130 if (wxMDIChildFrame::Create(frame
, id
, title
, pos
, size
, style
, name
))
133 view
->SetFrame(this);
140 wxDocMDIChildFrame::~wxDocMDIChildFrame(void)
142 m_childView
= (wxView
*) NULL
;
145 // Extend event processing to search the view's event table
146 bool wxDocMDIChildFrame::ProcessEvent(wxEvent
& event
)
148 static wxEvent
*ActiveEvent
= NULL
;
150 // Break recursion loops
151 if (ActiveEvent
== &event
)
154 ActiveEvent
= &event
;
157 if ( !m_childView
|| ! m_childView
->ProcessEvent(event
) )
159 // Only hand up to the parent if it's a menu command
160 if (!event
.IsKindOf(CLASSINFO(wxCommandEvent
)) || !GetParent() || !GetParent()->ProcessEvent(event
))
161 ret
= wxEvtHandler::ProcessEvent(event
);
172 void wxDocMDIChildFrame::OnActivate(wxActivateEvent
& event
)
174 wxMDIChildFrame::OnActivate(event
);
176 if (event
.GetActive() && m_childView
)
177 m_childView
->Activate(event
.GetActive());
180 void wxDocMDIChildFrame::OnCloseWindow(wxCloseEvent
& event
)
182 // Close view but don't delete the frame while doing so!
183 // ...since it will be deleted by wxWindows if we return TRUE.
186 bool ans
= event
.CanVeto()
187 ? m_childView
->Close(FALSE
) // FALSE means don't delete associated window
188 : TRUE
; // Must delete.
192 m_childView
->Activate(FALSE
);
194 m_childView
= (wxView
*) NULL
;
195 m_childDocument
= (wxDocument
*) NULL
;
207 // wxUSE_DOC_VIEW_ARCHITECTURE