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
,
57 wxDocMDIParentFrame(manager
, parent
, id
, title
, pos
, size
, style
, "frame")
59 CreateToolBar(wxNO_BORDER
|wxTB_FLAT
|wxTB_HORIZONTAL
);
60 wxGetApp().InitToolBar(GetToolBar());
63 wxAcceleratorEntry entries
[4];
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
);
70 wxAcceleratorTable
accel(4, entries
);
71 SetAcceleratorTable(accel
);
74 void csFrame::OnHelp(wxCommandEvent
& event
)
76 wxGetApp().GetHelpController().DisplayContents();
79 void csFrame::OnSettings(wxCommandEvent
& event
)
81 csSettingsDialog
* dialog
= new csSettingsDialog(this);
82 int ret
= dialog
->ShowModal();
86 void csFrame::OnQuit(wxCommandEvent
& event
)
91 void csFrame::OnAbout(wxCommandEvent
& event
)
93 (void)wxMessageBox("OGL Studio\n(c) 1999, Julian Smart", "About OGL Studio", wxICON_INFORMATION
);
96 void csFrame::OnSashDragPaletteWindow(wxSashEvent
& event
)
98 if (event
.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE
)
101 switch (event
.GetId())
103 case ID_LAYOUT_WINDOW_PALETTE
:
105 wxGetApp().GetDiagramPaletteSashWindow()->SetDefaultSize(wxSize(10000, event
.GetDragRect().height
));
109 wxLayoutAlgorithm layout
;
110 layout
.LayoutMDIFrame(this);
113 void csFrame::OnSashDragProjectWindow(wxSashEvent
& event
)
115 if (event
.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE
)
118 switch (event
.GetId())
120 case ID_LAYOUT_WINDOW_PROJECT
:
122 wxGetApp().GetProjectSashWindow()->SetDefaultSize(wxSize(event
.GetDragRect().width
, 10000));
126 wxLayoutAlgorithm layout
;
127 layout
.LayoutMDIFrame(this);
130 // Define the behaviour for the frame closing
131 // - must delete all frames except for the main one.
132 void csFrame::OnCloseWindow(wxCloseEvent
& event
)
135 GetPosition(& x
, & y
);
136 wxGetApp().m_mainFramePos
= wxPoint(x
, y
);
139 wxGetApp().m_mainFrameSize
= wxSize(x
, y
);
141 wxDocMDIParentFrame::OnCloseWindow(event
);
144 void csFrame::OnSize(wxSizeEvent
& event
)
146 wxLayoutAlgorithm layout
;
147 layout
.LayoutMDIFrame(this);
150 // Make sure the correct toolbars are showing for the active view
151 void csFrame::OnIdle(wxIdleEvent
& event
)
153 wxSashLayoutWindow
* paletteWin
= wxGetApp().GetDiagramPaletteSashWindow();
154 wxSashLayoutWindow
* diagramToolBarWin
= wxGetApp().GetDiagramToolBarSashWindow();
155 if (!paletteWin
|| !diagramToolBarWin
)
157 bool doLayout
= FALSE
;
158 if (GetActiveChild())
160 if (!paletteWin
->IsShown() || !diagramToolBarWin
->IsShown())
162 paletteWin
->Show(TRUE
);
163 diagramToolBarWin
->Show(TRUE
);
170 if (paletteWin
->IsShown() || diagramToolBarWin
->IsShown())
172 paletteWin
->Show(FALSE
);
173 diagramToolBarWin
->Show(FALSE
);
179 wxLayoutAlgorithm layout
;
180 layout
.LayoutMDIFrame(this);
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
188 // FIXED in wxWindows, by intercepting wxMDIClientWindow::DoSetSize
189 // and checking if the position has changed, before redrawing the
192 wxMDIChildFrame
* childFrame
= GetActiveChild();
195 HWND hWnd
= (HWND
) childFrame
->GetHWND();
196 ::RedrawWindow(hWnd
, NULL
, NULL
, RDW_FRAME
|RDW_ALLCHILDREN
|RDW_INVALIDATE
);
205 // General handler for disabling items
206 void csFrame::OnUpdateDisable(wxUpdateUIEvent
& event
)
211 void csFrame::OnSaveUpdate(wxUpdateUIEvent
& event
)
213 event
.Enable( (GetActiveChild() != NULL
) );
220 BEGIN_EVENT_TABLE(csMDIChildFrame
, wxDocMDIChildFrame
)
221 EVT_ACTIVATE(csMDIChildFrame::OnActivate
)
224 csMDIChildFrame::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
)
228 wxAcceleratorEntry entries
[18];
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
);
239 entries
[6].Set(wxACCEL_CTRL
, 'Z', wxID_UNDO
);
240 entries
[7].Set(wxACCEL_CTRL
, 'Y', wxID_REDO
);
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
);
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
);
257 wxAcceleratorTable
accel(18, entries
);
258 SetAcceleratorTable(accel
);
261 void csMDIChildFrame::OnActivate(wxActivateEvent
& event
)
263 wxDocMDIChildFrame::OnActivate(event
);
265 wxSashLayoutWindow* win = wxGetApp().GetDiagramPaletteSashWindow();
269 win->Show(event.GetActive());
271 wxLayoutAlgorithm layout;
272 layout.LayoutMDIFrame((wxMDIParentFrame*) GetParent());