1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Studio main frame
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
10 /////////////////////////////////////////////////////////////////////////////
12 // For compilers that support precompilation, includes "wx/wx.h".
13 #include "wx/wxprec.h"
24 #include "wx/laywin.h"
29 #include "cspalette.h"
33 BEGIN_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
)
54 // Define my frame constructor
55 csFrame::csFrame(wxDocManager
* manager
, wxFrame
*parent
, wxWindowID id
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
, long style
):
56 wxDocMDIParentFrame(manager
, parent
, id
, title
, pos
, size
, style
, _T("frame"))
58 CreateToolBar(wxNO_BORDER
|wxTB_FLAT
|wxTB_HORIZONTAL
);
59 wxGetApp().InitToolBar(GetToolBar());
62 wxAcceleratorEntry entries
[4];
64 entries
[0].Set(wxACCEL_NORMAL
, WXK_F1
, wxID_HELP
);
65 entries
[1].Set(wxACCEL_CTRL
, 'O', wxID_OPEN
);
66 entries
[2].Set(wxACCEL_CTRL
, 'N', wxID_NEW
);
67 entries
[3].Set(wxACCEL_CTRL
, 'P', wxID_PRINT
);
69 wxAcceleratorTable
accel(4, entries
);
70 SetAcceleratorTable(accel
);
73 void csFrame::OnHelp(wxCommandEvent
& WXUNUSED(event
))
75 wxHelpControllerBase
* help
;
76 help
= wxGetApp().GetHelpController();
78 help
->DisplayContents();
81 void csFrame::OnSettings(wxCommandEvent
& WXUNUSED(event
))
83 csSettingsDialog
* dialog
= new csSettingsDialog(this);
84 /* int ret = */ dialog
->ShowModal();
88 void csFrame::OnQuit(wxCommandEvent
& WXUNUSED(event
))
93 void csFrame::OnAbout(wxCommandEvent
& WXUNUSED(event
))
95 (void)wxMessageBox(_T("OGL Studio\n(c) 1999, Julian Smart"), _T("About OGL Studio"), wxICON_INFORMATION
);
98 void csFrame::OnSashDragPaletteWindow(wxSashEvent
& event
)
100 if (event
.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE
)
103 switch (event
.GetId())
105 case ID_LAYOUT_WINDOW_PALETTE
:
107 wxGetApp().GetDiagramPaletteSashWindow()->SetDefaultSize(wxSize(10000, event
.GetDragRect().height
));
111 wxLayoutAlgorithm layout
;
112 layout
.LayoutMDIFrame(this);
115 void csFrame::OnSashDragProjectWindow(wxSashEvent
& event
)
117 if (event
.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE
)
120 switch (event
.GetId())
122 case ID_LAYOUT_WINDOW_PROJECT
:
124 wxGetApp().GetProjectSashWindow()->SetDefaultSize(wxSize(event
.GetDragRect().width
, 10000));
128 wxLayoutAlgorithm layout
;
129 layout
.LayoutMDIFrame(this);
132 // Define the behaviour for the frame closing
133 // - must delete all frames except for the main one.
134 void csFrame::OnCloseWindow(wxCloseEvent
& event
)
137 GetPosition(& x
, & y
);
138 wxGetApp().m_mainFramePos
= wxPoint(x
, y
);
141 wxGetApp().m_mainFrameSize
= wxSize(x
, y
);
143 wxDocMDIParentFrame::OnCloseWindow(event
);
146 void csFrame::OnSize(wxSizeEvent
& event
)
148 wxLayoutAlgorithm layout
;
149 layout
.LayoutMDIFrame(this);
153 // Make sure the correct toolbars are showing for the active view
154 void csFrame::OnIdle(wxIdleEvent
& event
)
156 wxSashLayoutWindow
* paletteWin
= wxGetApp().GetDiagramPaletteSashWindow();
157 wxSashLayoutWindow
* diagramToolBarWin
= wxGetApp().GetDiagramToolBarSashWindow();
158 if (!paletteWin
|| !diagramToolBarWin
)
160 bool doLayout
= false;
161 if (GetActiveChild())
163 if (!paletteWin
->IsShown() || !diagramToolBarWin
->IsShown())
165 paletteWin
->Show(true);
166 diagramToolBarWin
->Show(true);
173 if (paletteWin
->IsShown() || diagramToolBarWin
->IsShown())
175 paletteWin
->Show(false);
176 diagramToolBarWin
->Show(false);
182 wxLayoutAlgorithm layout
;
183 layout
.LayoutMDIFrame(this);
185 #if defined(__WXMSW__) && defined(__WIN95__)
186 // Need to do something else to get it to refresh properly
187 // when a client frame is first displayed; moving the client
188 // window doesn't cause the proper refresh. Just refreshing the
189 // client doesn't work (presumably because it's clipping the
191 // FIXED in wxWidgets, by intercepting wxMDIClientWindow::DoSetSize
192 // and checking if the position has changed, before redrawing the
195 wxMDIChildFrame
* childFrame
= GetActiveChild();
198 HWND hWnd
= (HWND
) childFrame
->GetHWND();
199 ::RedrawWindow(hWnd
, NULL
, NULL
, RDW_FRAME
|RDW_ALLCHILDREN
|RDW_INVALIDATE
);
208 // General handler for disabling items
209 void csFrame::OnUpdateDisable(wxUpdateUIEvent
& event
)
214 void csFrame::OnSaveUpdate(wxUpdateUIEvent
& event
)
216 event
.Enable( (GetActiveChild() != NULL
) );
223 BEGIN_EVENT_TABLE(csMDIChildFrame
, wxDocMDIChildFrame
)
224 EVT_ACTIVATE(csMDIChildFrame::OnActivate
)
227 csMDIChildFrame::csMDIChildFrame(wxDocument
* doc
, wxView
* view
, wxMDIParentFrame
*parent
, wxWindowID id
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
, long style
):
228 wxDocMDIChildFrame(doc
, view
, parent
, id
, title
, pos
, size
, style
)
231 wxAcceleratorEntry entries
[18];
233 // Usual editing functions
234 entries
[0].Set(wxACCEL_NORMAL
, WXK_DELETE
, wxID_CLEAR
);
235 entries
[1].Set(wxACCEL_CTRL
, 'X', wxID_CUT
);
236 entries
[2].Set(wxACCEL_CTRL
, 'C', wxID_COPY
);
237 entries
[3].Set(wxACCEL_SHIFT
, WXK_INSERT
, wxID_PASTE
);
238 entries
[4].Set(wxACCEL_CTRL
, 'V', wxID_PASTE
);
239 entries
[5].Set(wxACCEL_CTRL
, 'A', ID_CS_SELECT_ALL
);
242 entries
[6].Set(wxACCEL_CTRL
, 'Z', wxID_UNDO
);
243 entries
[7].Set(wxACCEL_CTRL
, 'Y', wxID_REDO
);
246 entries
[8].Set(wxACCEL_NORMAL
, WXK_RETURN
, ID_CS_EDIT_PROPERTIES
);
247 entries
[9].Set(wxACCEL_ALT
, WXK_RETURN
, ID_CS_EDIT_PROPERTIES
);
248 entries
[10].Set(wxACCEL_CTRL
, 'D', wxID_DUPLICATE
);
249 entries
[11].Set(wxACCEL_NORMAL
, WXK_F1
, wxID_HELP
);
252 entries
[12].Set(wxACCEL_CTRL
, 'S', wxID_SAVE
);
253 entries
[13].Set(wxACCEL_NORMAL
, WXK_F12
, wxID_SAVEAS
);
254 entries
[14].Set(wxACCEL_CTRL
, 'O', wxID_OPEN
);
255 entries
[15].Set(wxACCEL_CTRL
, 'N', wxID_NEW
);
256 entries
[16].Set(wxACCEL_CTRL
, 'P', wxID_PRINT
);
257 entries
[17].Set(wxACCEL_CTRL
, 'W', wxID_CLOSE
);
260 wxAcceleratorTable
accel(18, entries
);
261 SetAcceleratorTable(accel
);
264 void csMDIChildFrame::OnActivate(wxActivateEvent
& event
)
266 wxDocMDIChildFrame::OnActivate(event
);
268 wxSashLayoutWindow* win = wxGetApp().GetDiagramPaletteSashWindow();
272 win->Show(event.GetActive());
274 wxLayoutAlgorithm layout;
275 layout.LayoutMDIFrame((wxMDIParentFrame*) GetParent());