/* MainWindow::handleAction * Handles the action [id]. Returns true if the action was handled, * false otherwise *******************************************************************/ bool MainWindow::handleAction(string id) { // We're only interested in "main_" actions if (!id.StartsWith("main_")) return false; // File->Exit if (id == "main_exit") { Close(); return true; } // Edit->Undo if (id == "main_undo") { panel_archivemanager->undo(); return true; } // Edit->Redo if (id == "main_redo") { panel_archivemanager->redo(); return true; } // Edit->Set Base Resource Archive if (id == "main_setbra") { wxDialog dialog_ebr(this, -1, "Edit Base Resource Archives", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER); BaseResourceArchivesPanel brap(&dialog_ebr); wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(&brap, 1, wxEXPAND|wxALL, 4); sizer->Add(dialog_ebr.CreateButtonSizer(wxOK|wxCANCEL), 0, wxEXPAND|wxLEFT|wxRIGHT|wxDOWN, 4); dialog_ebr.SetSizer(sizer); dialog_ebr.Layout(); dialog_ebr.SetInitialSize(wxSize(500, 300)); dialog_ebr.CenterOnParent(); if (dialog_ebr.ShowModal() == wxID_OK) theArchiveManager->openBaseResource(brap.getSelectedPath()); return true; } // Edit->Preferences if (id == "main_preferences") { PreferencesDialog::openPreferences(this); return true; } // View->Archive Manager if (id == "main_showam") { wxAuiManager *m_mgr = wxAuiManager::GetManager(panel_archivemanager); wxAuiPaneInfo& p_inf = m_mgr->GetPane("archive_manager"); p_inf.Show(!p_inf.IsShown()); m_mgr->Update(); return true; } // View->Console if (id == "main_showconsole") { wxAuiManager *m_mgr = wxAuiManager::GetManager(panel_archivemanager); wxAuiPaneInfo& p_inf = m_mgr->GetPane("console"); p_inf.Show(!p_inf.IsShown()); p_inf.MinSize(200, 128); m_mgr->Update(); return true; } // View->Undo History if (id == "main_showundohistory") { wxAuiManager *m_mgr = wxAuiManager::GetManager(panel_archivemanager); wxAuiPaneInfo& p_inf = m_mgr->GetPane("undo_history"); p_inf.Show(!p_inf.IsShown()); m_mgr->Update(); return true; } // Help->About if (id == "main_about") { wxAboutDialogInfo info; info.SetName("SLADE"); info.SetVersion("v" + Global::version); info.SetWebSite("http://slade.mancubus.net"); info.SetDescription("It's a Doom Editor"); // Set icon string icon_filename = appPath("slade.ico", DIR_TEMP); theArchiveManager->programResourceArchive()->getEntry("slade.ico")->exportFile(icon_filename); info.SetIcon(wxIcon(icon_filename, wxBITMAP_TYPE_ICO)); wxRemoveFile(icon_filename); string year = wxNow().Right(4); info.SetCopyright(S_FMT("(C) 2008-%s Simon Judd <*****@*****.**>", year.c_str())); wxAboutBox(info); return true; } // Help->Online Documentation if (id == "main_onlinedocs") { wxLaunchDefaultBrowser("http://slade-editor.wikia.com"); return true; } // Unknown action return false; }
/* MapEditorWindow::handleAction * Handles the action [id]. Returns true if the action was handled, * false otherwise *******************************************************************/ bool MapEditorWindow::handleAction(string id) { // Don't handle actions if hidden if (!IsShown()) return false; // Map->Save if (id == "mapw_save") { // Save map if (saveMap()) { // Save archive Archive* a = currentMapDesc().head->getParent(); if (a && save_archive_with_map) a->save(); } return true; } // Map->Save As if (id == "mapw_saveas") { saveMapAs(); return true; } // Map->Restore Backup if (id == "mapw_backup") { if (mdesc_current.head) { Archive* data = backup_manager->openBackup(mdesc_current.head->getTopParent()->getFilename(false), mdesc_current.name); if (data) { vector<Archive::mapdesc_t> maps = data->detectMaps(); if (!maps.empty()) { editor.getMap().clearMap(); editor.openMap(maps[0]); loadMapScripts(maps[0]); } } } return true; } // Edit->Undo if (id == "mapw_undo") { editor.doUndo(); return true; } // Edit->Redo if (id == "mapw_redo") { editor.doRedo(); return true; } // Editor->Set Base Resource Archive if (id == "mapw_setbra") { wxDialog dialog_ebr(this, -1, "Edit Base Resource Archives", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER); BaseResourceArchivesPanel brap(&dialog_ebr); wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(&brap, 1, wxEXPAND|wxALL, 4); sizer->Add(dialog_ebr.CreateButtonSizer(wxOK|wxCANCEL), 0, wxEXPAND|wxLEFT|wxRIGHT|wxDOWN, 4); dialog_ebr.SetSizer(sizer); dialog_ebr.Layout(); dialog_ebr.SetInitialSize(wxSize(500, 300)); dialog_ebr.CenterOnParent(); if (dialog_ebr.ShowModal() == wxID_OK) theArchiveManager->openBaseResource(brap.getSelectedPath()); return true; } // Editor->Preferences if (id == "mapw_preferences") { PreferencesDialog::openPreferences(this); return true; } // View->Item Properties if (id == "mapw_showproperties") { wxAuiManager* m_mgr = wxAuiManager::GetManager(this); wxAuiPaneInfo& p_inf = m_mgr->GetPane("item_props"); // Toggle window and focus p_inf.Show(!p_inf.IsShown()); map_canvas->SetFocus(); m_mgr->Update(); return true; } // View->Console else if (id == "mapw_showconsole") { wxAuiManager* m_mgr = wxAuiManager::GetManager(this); wxAuiPaneInfo& p_inf = m_mgr->GetPane("console"); // Toggle window and focus if (p_inf.IsShown()) { p_inf.Show(false); map_canvas->SetFocus(); } else { p_inf.Show(true); p_inf.window->SetFocus(); } p_inf.MinSize(200, 128); m_mgr->Update(); return true; } // View->Script Editor else if (id == "mapw_showscripteditor") { wxAuiManager* m_mgr = wxAuiManager::GetManager(this); wxAuiPaneInfo& p_inf = m_mgr->GetPane("script_editor"); // Toggle window and focus if (p_inf.IsShown()) { p_inf.Show(false); map_canvas->SetFocus(); } else if (!theGameConfiguration->scriptLanguage().IsEmpty()) { p_inf.Show(true); p_inf.window->SetFocus(); } p_inf.MinSize(200, 128); m_mgr->Update(); return true; } // View->Map Checks else if (id == "mapw_showchecks") { wxAuiManager* m_mgr = wxAuiManager::GetManager(this); wxAuiPaneInfo& p_inf = m_mgr->GetPane("map_checks"); // Toggle window and focus if (p_inf.IsShown()) { p_inf.Show(false); map_canvas->SetFocus(); } else { p_inf.Show(true); p_inf.window->SetFocus(); } //p_inf.MinSize(200, 128); m_mgr->Update(); return true; } // View->Undo History else if (id == "mapw_showundohistory") { wxAuiManager* m_mgr = wxAuiManager::GetManager(this); wxAuiPaneInfo& p_inf = m_mgr->GetPane("undo_history"); // Toggle window p_inf.Show(!p_inf.IsShown()); m_mgr->Update(); return true; } // Run Map else if (id == "mapw_run_map") { Archive* archive = NULL; if (mdesc_current.head) archive = mdesc_current.head->getParent(); RunDialog dlg(this, archive); if (dlg.ShowModal() == wxID_OK) { WadArchive* wad = writeMap(mdesc_current.name); if (wad) wad->save(appPath("sladetemp_run.wad", DIR_TEMP)); string command = dlg.getSelectedCommandLine(archive, mdesc_current.name, wad->getFilename()); if (!command.IsEmpty()) { // Set working directory string wd = wxGetCwd(); wxSetWorkingDirectory(dlg.getSelectedExeDir()); // Run wxExecute(command, wxEXEC_ASYNC); // Restore working directory wxSetWorkingDirectory(wd); } } return true; } return false; }