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 wxFrame::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);
186 // General handler for disabling items
187 void csFrame::OnUpdateDisable(wxUpdateUIEvent
& event
)
192 void csFrame::OnSaveUpdate(wxUpdateUIEvent
& event
)
194 event
.Enable( (GetActiveChild() != NULL
) );
201 BEGIN_EVENT_TABLE(csMDIChildFrame
, wxDocMDIChildFrame
)
202 EVT_ACTIVATE(csMDIChildFrame::OnActivate
)
205 csMDIChildFrame::csMDIChildFrame(wxDocument
* doc
, wxView
* view
, wxMDIParentFrame
*parent
, wxWindowID id
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
, long style
):
206 wxDocMDIChildFrame(doc
, view
, parent
, id
, title
, pos
, size
, style
)
209 wxAcceleratorEntry entries
[18];
211 // Usual editing functions
212 entries
[0].Set(wxACCEL_NORMAL
, WXK_DELETE
, wxID_CLEAR
);
213 entries
[1].Set(wxACCEL_CTRL
, 'X', wxID_CUT
);
214 entries
[2].Set(wxACCEL_CTRL
, 'C', wxID_COPY
);
215 entries
[3].Set(wxACCEL_SHIFT
, WXK_INSERT
, wxID_PASTE
);
216 entries
[4].Set(wxACCEL_CTRL
, 'V', wxID_PASTE
);
217 entries
[5].Set(wxACCEL_CTRL
, 'A', ID_CS_SELECT_ALL
);
220 entries
[6].Set(wxACCEL_CTRL
, 'Z', wxID_UNDO
);
221 entries
[7].Set(wxACCEL_CTRL
, 'Y', wxID_REDO
);
224 entries
[8].Set(wxACCEL_NORMAL
, WXK_RETURN
, ID_CS_EDIT_PROPERTIES
);
225 entries
[9].Set(wxACCEL_ALT
, WXK_RETURN
, ID_CS_EDIT_PROPERTIES
);
226 entries
[10].Set(wxACCEL_CTRL
, 'D', wxID_DUPLICATE
);
227 entries
[11].Set(wxACCEL_NORMAL
, WXK_F1
, wxID_HELP
);
230 entries
[12].Set(wxACCEL_CTRL
, 'S', wxID_SAVE
);
231 entries
[13].Set(wxACCEL_NORMAL
, WXK_F12
, wxID_SAVEAS
);
232 entries
[14].Set(wxACCEL_CTRL
, 'O', wxID_OPEN
);
233 entries
[15].Set(wxACCEL_CTRL
, 'N', wxID_NEW
);
234 entries
[16].Set(wxACCEL_CTRL
, 'P', wxID_PRINT
);
235 entries
[17].Set(wxACCEL_CTRL
, 'W', wxID_CLOSE
);
238 wxAcceleratorTable
accel(18, entries
);
239 SetAcceleratorTable(accel
);
242 void csMDIChildFrame::OnActivate(wxActivateEvent
& event
)
244 wxDocMDIChildFrame::OnActivate(event
);
246 wxSashLayoutWindow* win = wxGetApp().GetDiagramPaletteSashWindow();
250 win->Show(event.GetActive());
252 wxLayoutAlgorithm layout;
253 layout.LayoutMDIFrame((wxMDIParentFrame*) GetParent());