]> git.saurik.com Git - wxWidgets.git/blame - contrib/samples/ogl/studio/mainfrm.cpp
IsDialogMessage fix
[wxWidgets.git] / contrib / samples / ogl / studio / mainfrm.cpp
CommitLineData
1fc25a89
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: mainfrm.cpp
3// Purpose: Studio main frame
4// Author: Julian Smart
5// Modified by:
6// Created: 27/7/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
9// Licence:
10/////////////////////////////////////////////////////////////////////////////
11
12// For compilers that support precompilation, includes "wx/wx.h".
13#include "wx/wxprec.h"
14
15#ifdef __BORLANDC__
16#pragma hdrstop
17#endif
18
19#ifndef WX_PRECOMP
20#include "wx/wx.h"
21#include "wx/mdi.h"
22#endif
23
24#include "wx/laywin.h"
25
26#include "studio.h"
27#include "view.h"
28#include "doc.h"
29#include "cspalette.h"
30#include "mainfrm.h"
31#include "dialogs.h"
32
33BEGIN_EVENT_TABLE(csFrame, wxDocMDIParentFrame)
34 EVT_MENU(ID_CS_ABOUT, csFrame::OnAbout)
35 EVT_MENU(wxID_EXIT, csFrame::OnQuit)
36 EVT_MENU(wxID_HELP, csFrame::OnHelp)
37 EVT_MENU(ID_CS_SETTINGS, csFrame::OnSettings)
38 EVT_SIZE(csFrame::OnSize)
39 EVT_SASH_DRAGGED(ID_LAYOUT_WINDOW_PALETTE, csFrame::OnSashDragPaletteWindow)
40 EVT_SASH_DRAGGED(ID_LAYOUT_WINDOW_PROJECT, csFrame::OnSashDragProjectWindow)
41 EVT_IDLE(csFrame::OnIdle)
42 EVT_UPDATE_UI(wxID_PRINT, csFrame::OnUpdateDisable)
43 EVT_UPDATE_UI(wxID_PREVIEW, csFrame::OnUpdateDisable)
44 EVT_UPDATE_UI(wxID_SAVE, csFrame::OnSaveUpdate)
45 EVT_UPDATE_UI(wxID_SAVEAS, csFrame::OnSaveUpdate)
46 EVT_UPDATE_UI(wxID_UNDO, csFrame::OnUpdateDisable)
47 EVT_UPDATE_UI(wxID_REDO, csFrame::OnUpdateDisable)
48 EVT_UPDATE_UI(wxID_CUT, csFrame::OnUpdateDisable)
49 EVT_UPDATE_UI(wxID_COPY, csFrame::OnUpdateDisable)
50 EVT_UPDATE_UI(wxID_PASTE, csFrame::OnUpdateDisable)
51 EVT_CLOSE(csFrame::OnCloseWindow)
52END_EVENT_TABLE()
53
54// Define my frame constructor
55csFrame::csFrame(wxDocManager* manager, wxFrame *parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size,
56 long style):
1484b5cc 57 wxDocMDIParentFrame(manager, parent, id, title, pos, size, style, _T("frame"))
1fc25a89
JS
58{
59 CreateToolBar(wxNO_BORDER|wxTB_FLAT|wxTB_HORIZONTAL);
60 wxGetApp().InitToolBar(GetToolBar());
61
62 // Accelerators
63 wxAcceleratorEntry entries[4];
64
65 entries[0].Set(wxACCEL_NORMAL, WXK_F1, wxID_HELP);
66 entries[1].Set(wxACCEL_CTRL, 'O', wxID_OPEN);
67 entries[2].Set(wxACCEL_CTRL, 'N', wxID_NEW);
68 entries[3].Set(wxACCEL_CTRL, 'P', wxID_PRINT);
69
70 wxAcceleratorTable accel(4, entries);
71 SetAcceleratorTable(accel);
72}
73
1484b5cc 74void csFrame::OnHelp(wxCommandEvent& WXUNUSED(event))
1fc25a89
JS
75{
76 wxGetApp().GetHelpController().DisplayContents();
77}
78
1484b5cc 79void csFrame::OnSettings(wxCommandEvent& WXUNUSED(event))
1fc25a89
JS
80{
81 csSettingsDialog* dialog = new csSettingsDialog(this);
1484b5cc 82 /* int ret = */ dialog->ShowModal();
1fc25a89
JS
83 dialog->Destroy();
84}
85
1484b5cc 86void csFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
1fc25a89
JS
87{
88 Close(TRUE);
89}
90
1484b5cc 91void csFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
1fc25a89 92{
1484b5cc 93 (void)wxMessageBox(_T("OGL Studio\n(c) 1999, Julian Smart"), _T("About OGL Studio"), wxICON_INFORMATION);
1fc25a89
JS
94}
95
96void csFrame::OnSashDragPaletteWindow(wxSashEvent& event)
97{
98 if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE)
99 return;
100
101 switch (event.GetId())
102 {
103 case ID_LAYOUT_WINDOW_PALETTE:
104 {
105 wxGetApp().GetDiagramPaletteSashWindow()->SetDefaultSize(wxSize(10000, event.GetDragRect().height));
106 break;
107 }
108 }
109 wxLayoutAlgorithm layout;
110 layout.LayoutMDIFrame(this);
111}
112
113void csFrame::OnSashDragProjectWindow(wxSashEvent& event)
114{
115 if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE)
116 return;
117
118 switch (event.GetId())
119 {
120 case ID_LAYOUT_WINDOW_PROJECT:
121 {
122 wxGetApp().GetProjectSashWindow()->SetDefaultSize(wxSize(event.GetDragRect().width, 10000));
123 break;
124 }
125 }
126 wxLayoutAlgorithm layout;
127 layout.LayoutMDIFrame(this);
128}
129
130// Define the behaviour for the frame closing
131// - must delete all frames except for the main one.
132void csFrame::OnCloseWindow(wxCloseEvent& event)
133{
134 int x, y;
135 GetPosition(& x, & y);
136 wxGetApp().m_mainFramePos = wxPoint(x, y);
137
138 GetSize(& x, & y);
139 wxGetApp().m_mainFrameSize = wxSize(x, y);
140
141 wxDocMDIParentFrame::OnCloseWindow(event);
142}
143
1484b5cc 144void csFrame::OnSize(wxSizeEvent& WXUNUSED(event))
1fc25a89
JS
145{
146 wxLayoutAlgorithm layout;
147 layout.LayoutMDIFrame(this);
148}
149
150// Make sure the correct toolbars are showing for the active view
151void csFrame::OnIdle(wxIdleEvent& event)
152{
1fc25a89
JS
153 wxSashLayoutWindow* paletteWin = wxGetApp().GetDiagramPaletteSashWindow();
154 wxSashLayoutWindow* diagramToolBarWin = wxGetApp().GetDiagramToolBarSashWindow();
155 if (!paletteWin || !diagramToolBarWin)
156 return;
157 bool doLayout = FALSE;
158 if (GetActiveChild())
159 {
160 if (!paletteWin->IsShown() || !diagramToolBarWin->IsShown())
161 {
162 paletteWin->Show(TRUE);
163 diagramToolBarWin->Show(TRUE);
164
165 doLayout = TRUE;
166 }
167 }
168 else
169 {
170 if (paletteWin->IsShown() || diagramToolBarWin->IsShown())
171 {
172 paletteWin->Show(FALSE);
173 diagramToolBarWin->Show(FALSE);
174 doLayout = TRUE;
175 }
176 }
177 if (doLayout)
178 {
179 wxLayoutAlgorithm layout;
180 layout.LayoutMDIFrame(this);
181
182#if defined(__WXMSW__) && defined(__WIN95__)
183 // Need to do something else to get it to refresh properly
184 // when a client frame is first displayed; moving the client
185 // window doesn't cause the proper refresh. Just refreshing the
186 // client doesn't work (presumably because it's clipping the
187 // children).
188 // FIXED in wxWindows, by intercepting wxMDIClientWindow::DoSetSize
189 // and checking if the position has changed, before redrawing the
190 // child windows.
191#if 0
192 wxMDIChildFrame* childFrame = GetActiveChild();
193 if (childFrame)
194 {
195 HWND hWnd = (HWND) childFrame->GetHWND();
196 ::RedrawWindow(hWnd, NULL, NULL, RDW_FRAME|RDW_ALLCHILDREN|RDW_INVALIDATE );
197
198 }
199#endif
200#endif
201 }
34f7e40f 202 event.Skip();
1fc25a89
JS
203}
204
205// General handler for disabling items
206void csFrame::OnUpdateDisable(wxUpdateUIEvent& event)
207{
208 event.Enable(FALSE);
209}
210
211void csFrame::OnSaveUpdate(wxUpdateUIEvent& event)
212{
213 event.Enable( (GetActiveChild() != NULL) );
214}
215
216/*
217 * Child frame
218 */
219
220BEGIN_EVENT_TABLE(csMDIChildFrame, wxDocMDIChildFrame)
221 EVT_ACTIVATE(csMDIChildFrame::OnActivate)
222END_EVENT_TABLE()
223
224csMDIChildFrame::csMDIChildFrame(wxDocument* doc, wxView* view, wxMDIParentFrame *parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style):
225 wxDocMDIChildFrame(doc, view, parent, id, title, pos, size, style)
226{
227 // Accelerators
228 wxAcceleratorEntry entries[18];
229
230 // Usual editing functions
231 entries[0].Set(wxACCEL_NORMAL, WXK_DELETE, wxID_CLEAR);
232 entries[1].Set(wxACCEL_CTRL, 'X', wxID_CUT);
233 entries[2].Set(wxACCEL_CTRL, 'C', wxID_COPY);
234 entries[3].Set(wxACCEL_SHIFT, WXK_INSERT, wxID_PASTE);
235 entries[4].Set(wxACCEL_CTRL, 'V', wxID_PASTE);
236 entries[5].Set(wxACCEL_CTRL, 'A', ID_CS_SELECT_ALL);
237
238 // Undo/redo
239 entries[6].Set(wxACCEL_CTRL, 'Z', wxID_UNDO);
240 entries[7].Set(wxACCEL_CTRL, 'Y', wxID_REDO);
241
242 // Other
243 entries[8].Set(wxACCEL_NORMAL, WXK_RETURN, ID_CS_EDIT_PROPERTIES);
244 entries[9].Set(wxACCEL_ALT, WXK_RETURN, ID_CS_EDIT_PROPERTIES);
245 entries[10].Set(wxACCEL_CTRL, 'D', wxID_DUPLICATE);
246 entries[11].Set(wxACCEL_NORMAL, WXK_F1, wxID_HELP);
247
248 // File handling
249 entries[12].Set(wxACCEL_CTRL, 'S', wxID_SAVE);
250 entries[13].Set(wxACCEL_NORMAL, WXK_F12, wxID_SAVEAS);
251 entries[14].Set(wxACCEL_CTRL, 'O', wxID_OPEN);
252 entries[15].Set(wxACCEL_CTRL, 'N', wxID_NEW);
253 entries[16].Set(wxACCEL_CTRL, 'P', wxID_PRINT);
254 entries[17].Set(wxACCEL_CTRL, 'W', wxID_CLOSE);
255
256
257 wxAcceleratorTable accel(18, entries);
258 SetAcceleratorTable(accel);
259}
260
261void csMDIChildFrame::OnActivate(wxActivateEvent& event)
262{
263 wxDocMDIChildFrame::OnActivate(event);
264/*
265 wxSashLayoutWindow* win = wxGetApp().GetDiagramPaletteSashWindow();
266 if (!win)
267 return;
268
269 win->Show(event.GetActive());
270
271 wxLayoutAlgorithm layout;
272 layout.LayoutMDIFrame((wxMDIParentFrame*) GetParent());
273*/
274}
275