+++ /dev/null
-/////////////////////////////////////////////////////////////////////////////
-// Name: mainfrm.cpp
-// Purpose: Studio main frame
-// Author: Julian Smart
-// Modified by:
-// Created: 27/7/98
-// RCS-ID: $Id$
-// Copyright: (c) Julian Smart
-// Licence:
-/////////////////////////////////////////////////////////////////////////////
-
-// For compilers that support precompilation, includes "wx/wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
-#ifndef WX_PRECOMP
-#include "wx/wx.h"
-#include "wx/mdi.h"
-#endif
-
-#include "wx/laywin.h"
-
-#include "studio.h"
-#include "view.h"
-#include "doc.h"
-#include "cspalette.h"
-#include "mainfrm.h"
-#include "dialogs.h"
-
-BEGIN_EVENT_TABLE(csFrame, wxDocMDIParentFrame)
- EVT_MENU(ID_CS_ABOUT, csFrame::OnAbout)
- EVT_MENU(wxID_EXIT, csFrame::OnQuit)
- EVT_MENU(wxID_HELP, csFrame::OnHelp)
- EVT_MENU(ID_CS_SETTINGS, csFrame::OnSettings)
- EVT_SIZE(csFrame::OnSize)
- EVT_SASH_DRAGGED(ID_LAYOUT_WINDOW_PALETTE, csFrame::OnSashDragPaletteWindow)
- EVT_SASH_DRAGGED(ID_LAYOUT_WINDOW_PROJECT, csFrame::OnSashDragProjectWindow)
- EVT_IDLE(csFrame::OnIdle)
- EVT_UPDATE_UI(wxID_PRINT, csFrame::OnUpdateDisable)
- EVT_UPDATE_UI(wxID_PREVIEW, csFrame::OnUpdateDisable)
- EVT_UPDATE_UI(wxID_SAVE, csFrame::OnSaveUpdate)
- EVT_UPDATE_UI(wxID_SAVEAS, csFrame::OnSaveUpdate)
- EVT_UPDATE_UI(wxID_UNDO, csFrame::OnUpdateDisable)
- EVT_UPDATE_UI(wxID_REDO, csFrame::OnUpdateDisable)
- EVT_UPDATE_UI(wxID_CUT, csFrame::OnUpdateDisable)
- EVT_UPDATE_UI(wxID_COPY, csFrame::OnUpdateDisable)
- EVT_UPDATE_UI(wxID_PASTE, csFrame::OnUpdateDisable)
- EVT_CLOSE(csFrame::OnCloseWindow)
-END_EVENT_TABLE()
-
-// Define my frame constructor
-csFrame::csFrame(wxDocManager* manager, wxFrame *parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size,
- long style):
- wxDocMDIParentFrame(manager, parent, id, title, pos, size, style, "frame")
-{
- CreateToolBar(wxNO_BORDER|wxTB_FLAT|wxTB_HORIZONTAL);
- wxGetApp().InitToolBar(GetToolBar());
-
- // Accelerators
- wxAcceleratorEntry entries[4];
-
- entries[0].Set(wxACCEL_NORMAL, WXK_F1, wxID_HELP);
- entries[1].Set(wxACCEL_CTRL, 'O', wxID_OPEN);
- entries[2].Set(wxACCEL_CTRL, 'N', wxID_NEW);
- entries[3].Set(wxACCEL_CTRL, 'P', wxID_PRINT);
-
- wxAcceleratorTable accel(4, entries);
- SetAcceleratorTable(accel);
-}
-
-void csFrame::OnHelp(wxCommandEvent& event)
-{
- wxGetApp().GetHelpController().DisplayContents();
-}
-
-void csFrame::OnSettings(wxCommandEvent& event)
-{
- csSettingsDialog* dialog = new csSettingsDialog(this);
- int ret = dialog->ShowModal();
- dialog->Destroy();
-}
-
-void csFrame::OnQuit(wxCommandEvent& event)
-{
- Close(TRUE);
-}
-
-void csFrame::OnAbout(wxCommandEvent& event)
-{
- (void)wxMessageBox("OGL Studio\n(c) 1999, Julian Smart", "About OGL Studio", wxICON_INFORMATION);
-}
-
-void csFrame::OnSashDragPaletteWindow(wxSashEvent& event)
-{
- if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE)
- return;
-
- switch (event.GetId())
- {
- case ID_LAYOUT_WINDOW_PALETTE:
- {
- wxGetApp().GetDiagramPaletteSashWindow()->SetDefaultSize(wxSize(10000, event.GetDragRect().height));
- break;
- }
- }
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame(this);
-}
-
-void csFrame::OnSashDragProjectWindow(wxSashEvent& event)
-{
- if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE)
- return;
-
- switch (event.GetId())
- {
- case ID_LAYOUT_WINDOW_PROJECT:
- {
- wxGetApp().GetProjectSashWindow()->SetDefaultSize(wxSize(event.GetDragRect().width, 10000));
- break;
- }
- }
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame(this);
-}
-
-// Define the behaviour for the frame closing
-// - must delete all frames except for the main one.
-void csFrame::OnCloseWindow(wxCloseEvent& event)
-{
- int x, y;
- GetPosition(& x, & y);
- wxGetApp().m_mainFramePos = wxPoint(x, y);
-
- GetSize(& x, & y);
- wxGetApp().m_mainFrameSize = wxSize(x, y);
-
- wxDocMDIParentFrame::OnCloseWindow(event);
-}
-
-void csFrame::OnSize(wxSizeEvent& event)
-{
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame(this);
-}
-
-// Make sure the correct toolbars are showing for the active view
-void csFrame::OnIdle(wxIdleEvent& event)
-{
- wxDocMDIParentFrame::OnIdle(event);
-
- wxSashLayoutWindow* paletteWin = wxGetApp().GetDiagramPaletteSashWindow();
- wxSashLayoutWindow* diagramToolBarWin = wxGetApp().GetDiagramToolBarSashWindow();
- if (!paletteWin || !diagramToolBarWin)
- return;
- bool doLayout = FALSE;
- if (GetActiveChild())
- {
- if (!paletteWin->IsShown() || !diagramToolBarWin->IsShown())
- {
- paletteWin->Show(TRUE);
- diagramToolBarWin->Show(TRUE);
-
- doLayout = TRUE;
- }
- }
- else
- {
- if (paletteWin->IsShown() || diagramToolBarWin->IsShown())
- {
- paletteWin->Show(FALSE);
- diagramToolBarWin->Show(FALSE);
- doLayout = TRUE;
- }
- }
- if (doLayout)
- {
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame(this);
-
-#if defined(__WXMSW__) && defined(__WIN95__)
- // Need to do something else to get it to refresh properly
- // when a client frame is first displayed; moving the client
- // window doesn't cause the proper refresh. Just refreshing the
- // client doesn't work (presumably because it's clipping the
- // children).
- // FIXED in wxWindows, by intercepting wxMDIClientWindow::DoSetSize
- // and checking if the position has changed, before redrawing the
- // child windows.
-#if 0
- wxMDIChildFrame* childFrame = GetActiveChild();
- if (childFrame)
- {
- HWND hWnd = (HWND) childFrame->GetHWND();
- ::RedrawWindow(hWnd, NULL, NULL, RDW_FRAME|RDW_ALLCHILDREN|RDW_INVALIDATE );
-
- }
-#endif
-#endif
- }
-}
-
-// General handler for disabling items
-void csFrame::OnUpdateDisable(wxUpdateUIEvent& event)
-{
- event.Enable(FALSE);
-}
-
-void csFrame::OnSaveUpdate(wxUpdateUIEvent& event)
-{
- event.Enable( (GetActiveChild() != NULL) );
-}
-
-/*
- * Child frame
- */
-
-BEGIN_EVENT_TABLE(csMDIChildFrame, wxDocMDIChildFrame)
- EVT_ACTIVATE(csMDIChildFrame::OnActivate)
-END_EVENT_TABLE()
-
-csMDIChildFrame::csMDIChildFrame(wxDocument* doc, wxView* view, wxMDIParentFrame *parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style):
- wxDocMDIChildFrame(doc, view, parent, id, title, pos, size, style)
-{
- // Accelerators
- wxAcceleratorEntry entries[18];
-
- // Usual editing functions
- entries[0].Set(wxACCEL_NORMAL, WXK_DELETE, wxID_CLEAR);
- entries[1].Set(wxACCEL_CTRL, 'X', wxID_CUT);
- entries[2].Set(wxACCEL_CTRL, 'C', wxID_COPY);
- entries[3].Set(wxACCEL_SHIFT, WXK_INSERT, wxID_PASTE);
- entries[4].Set(wxACCEL_CTRL, 'V', wxID_PASTE);
- entries[5].Set(wxACCEL_CTRL, 'A', ID_CS_SELECT_ALL);
-
- // Undo/redo
- entries[6].Set(wxACCEL_CTRL, 'Z', wxID_UNDO);
- entries[7].Set(wxACCEL_CTRL, 'Y', wxID_REDO);
-
- // Other
- entries[8].Set(wxACCEL_NORMAL, WXK_RETURN, ID_CS_EDIT_PROPERTIES);
- entries[9].Set(wxACCEL_ALT, WXK_RETURN, ID_CS_EDIT_PROPERTIES);
- entries[10].Set(wxACCEL_CTRL, 'D', wxID_DUPLICATE);
- entries[11].Set(wxACCEL_NORMAL, WXK_F1, wxID_HELP);
-
- // File handling
- entries[12].Set(wxACCEL_CTRL, 'S', wxID_SAVE);
- entries[13].Set(wxACCEL_NORMAL, WXK_F12, wxID_SAVEAS);
- entries[14].Set(wxACCEL_CTRL, 'O', wxID_OPEN);
- entries[15].Set(wxACCEL_CTRL, 'N', wxID_NEW);
- entries[16].Set(wxACCEL_CTRL, 'P', wxID_PRINT);
- entries[17].Set(wxACCEL_CTRL, 'W', wxID_CLOSE);
-
-
- wxAcceleratorTable accel(18, entries);
- SetAcceleratorTable(accel);
-}
-
-void csMDIChildFrame::OnActivate(wxActivateEvent& event)
-{
- wxDocMDIChildFrame::OnActivate(event);
-/*
- wxSashLayoutWindow* win = wxGetApp().GetDiagramPaletteSashWindow();
- if (!win)
- return;
-
- win->Show(event.GetActive());
-
- wxLayoutAlgorithm layout;
- layout.LayoutMDIFrame((wxMDIParentFrame*) GetParent());
-*/
-}
-