⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        ogl/stufio/mainfrm.cpp// Purpose:     Studio main frame// Author:      Julian Smart// Modified by:// Created:     27/7/98// RCS-ID:      $Id: mainfrm.cpp,v 1.8 2005/12/19 10:55:11 ABX Exp $// 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 constructorcsFrame::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, _T("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& WXUNUSED(event)){    wxHelpControllerBase* help;    help = wxGetApp().GetHelpController();    if (help)        help->DisplayContents();}void csFrame::OnSettings(wxCommandEvent& WXUNUSED(event)){#if wxUSE_WX_RESOURCES    csSettingsDialog* dialog = new csSettingsDialog(this);    /* int ret = */ dialog->ShowModal();    dialog->Destroy();#endif // wxUSE_WX_RESOURCES}void csFrame::OnQuit(wxCommandEvent& WXUNUSED(event)){      Close(true);}void csFrame::OnAbout(wxCommandEvent& WXUNUSED(event)){      (void)wxMessageBox(_T("OGL Studio\n(c) 1999, Julian Smart"), _T("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);    event.Skip();}// Make sure the correct toolbars are showing for the active viewvoid csFrame::OnIdle(wxIdleEvent& 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__)        // 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 wxWidgets, 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 // __WXMSW__    }    event.Skip();}// General handler for disabling itemsvoid 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());*/}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -