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 wxDocMDIParentFrame::OnIdle(event
);
155 wxSashLayoutWindow
* paletteWin
= wxGetApp().GetDiagramPaletteSashWindow();
156 wxSashLayoutWindow
* diagramToolBarWin
= wxGetApp().GetDiagramToolBarSashWindow();
157 if (!paletteWin
|| !diagramToolBarWin
)
159 bool doLayout
= FALSE
;
160 if (GetActiveChild())
162 if (!paletteWin
->IsShown() || !diagramToolBarWin
->IsShown())
164 paletteWin
->Show(TRUE
);
165 diagramToolBarWin
->Show(TRUE
);
172 if (paletteWin
->IsShown() || diagramToolBarWin
->IsShown())
174 paletteWin
->Show(FALSE
);
175 diagramToolBarWin
->Show(FALSE
);
181 wxLayoutAlgorithm layout
;
182 layout
.LayoutMDIFrame(this);
184 #if defined(__WXMSW__) && defined(__WIN95__)
185 // Need to do something else to get it to refresh properly
186 // when a client frame is first displayed; moving the client
187 // window doesn't cause the proper refresh. Just refreshing the
188 // client doesn't work (presumably because it's clipping the
190 // FIXED in wxWindows, by intercepting wxMDIClientWindow::DoSetSize
191 // and checking if the position has changed, before redrawing the
194 wxMDIChildFrame
* childFrame
= GetActiveChild();
197 HWND hWnd
= (HWND
) childFrame
->GetHWND();
198 ::RedrawWindow(hWnd
, NULL
, NULL
, RDW_FRAME
|RDW_ALLCHILDREN
|RDW_INVALIDATE
);
206 // General handler for disabling items
207 void csFrame::OnUpdateDisable(wxUpdateUIEvent
& event
)
212 void csFrame::OnSaveUpdate(wxUpdateUIEvent
& event
)
214 event
.Enable( (GetActiveChild() != NULL
) );
221 BEGIN_EVENT_TABLE(csMDIChildFrame
, wxDocMDIChildFrame
)
222 EVT_ACTIVATE(csMDIChildFrame::OnActivate
)
225 csMDIChildFrame::csMDIChildFrame(wxDocument
* doc
, wxView
* view
, wxMDIParentFrame
*parent
, wxWindowID id
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
, long style
):
226 wxDocMDIChildFrame(doc
, view
, parent
, id
, title
, pos
, size
, style
)
229 wxAcceleratorEntry entries
[18];
231 // Usual editing functions
232 entries
[0].Set(wxACCEL_NORMAL
, WXK_DELETE
, wxID_CLEAR
);
233 entries
[1].Set(wxACCEL_CTRL
, 'X', wxID_CUT
);
234 entries
[2].Set(wxACCEL_CTRL
, 'C', wxID_COPY
);
235 entries
[3].Set(wxACCEL_SHIFT
, WXK_INSERT
, wxID_PASTE
);
236 entries
[4].Set(wxACCEL_CTRL
, 'V', wxID_PASTE
);
237 entries
[5].Set(wxACCEL_CTRL
, 'A', ID_CS_SELECT_ALL
);
240 entries
[6].Set(wxACCEL_CTRL
, 'Z', wxID_UNDO
);
241 entries
[7].Set(wxACCEL_CTRL
, 'Y', wxID_REDO
);
244 entries
[8].Set(wxACCEL_NORMAL
, WXK_RETURN
, ID_CS_EDIT_PROPERTIES
);
245 entries
[9].Set(wxACCEL_ALT
, WXK_RETURN
, ID_CS_EDIT_PROPERTIES
);
246 entries
[10].Set(wxACCEL_CTRL
, 'D', wxID_DUPLICATE
);
247 entries
[11].Set(wxACCEL_NORMAL
, WXK_F1
, wxID_HELP
);
250 entries
[12].Set(wxACCEL_CTRL
, 'S', wxID_SAVE
);
251 entries
[13].Set(wxACCEL_NORMAL
, WXK_F12
, wxID_SAVEAS
);
252 entries
[14].Set(wxACCEL_CTRL
, 'O', wxID_OPEN
);
253 entries
[15].Set(wxACCEL_CTRL
, 'N', wxID_NEW
);
254 entries
[16].Set(wxACCEL_CTRL
, 'P', wxID_PRINT
);
255 entries
[17].Set(wxACCEL_CTRL
, 'W', wxID_CLOSE
);
258 wxAcceleratorTable
accel(18, entries
);
259 SetAcceleratorTable(accel
);
262 void csMDIChildFrame::OnActivate(wxActivateEvent
& event
)
264 wxDocMDIChildFrame::OnActivate(event
);
266 wxSashLayoutWindow* win = wxGetApp().GetDiagramPaletteSashWindow();
270 win->Show(event.GetActive());
272 wxLayoutAlgorithm layout;
273 layout.LayoutMDIFrame((wxMDIParentFrame*) GetParent());