/* MainWindow::onHTMLLinkClicked * Called when a link is clicked on the HTML Window, so that * external (http) links are opened in the default browser *******************************************************************/ void MainWindow::onHTMLLinkClicked(wxEvent& e) { wxHtmlLinkEvent& ev = (wxHtmlLinkEvent&)e; string href = ev.GetLinkInfo().GetHref(); if (href.StartsWith("http://")) wxLaunchDefaultBrowser(ev.GetLinkInfo().GetHref()); else if (href.StartsWith("recent://")) { // Recent file string rs = href.Mid(9); unsigned long index = 0; rs.ToULong(&index); SActionHandler::doAction("aman_recent", index); createStartPage(); } else if (href.StartsWith("action://")) { // Action if (href.EndsWith("open")) SActionHandler::doAction("aman_open"); else if (href.EndsWith("newwad")) SActionHandler::doAction("aman_newwad"); else if (href.EndsWith("newzip")) SActionHandler::doAction("aman_newzip"); else if (href.EndsWith("newmap")) SActionHandler::doAction("aman_newmap"); else if (href.EndsWith("reloadstartpage")) createStartPage(); } else html_startpage->OnLinkClicked(ev.GetLinkInfo()); }
/* MainWindow::onHTMLLinkClicked * Called when a link is clicked on the HTML Window, so that * external (http) links are opened in the default browser *******************************************************************/ void MainWindow::onHTMLLinkClicked(wxEvent& e) { wxWebViewEvent& ev = (wxWebViewEvent&)e; string href = ev.GetURL(); #ifdef __WXGTK__ href.Replace("file://", ""); #endif if (href.EndsWith("/")) href.RemoveLast(1); if (href.StartsWith("http://")) { wxLaunchDefaultBrowser(ev.GetURL()); ev.Veto(); } else if (href.StartsWith("recent://")) { // Recent file string rs = href.Mid(9); unsigned long index = 0; rs.ToULong(&index); index++; panel_archivemanager->handleAction(S_FMT("aman_recent%lu", index)); createStartPage(); } else if (href.StartsWith("action://")) { // Action if (href.EndsWith("open")) theApp->doAction("aman_open"); else if (href.EndsWith("newwad")) theApp->doAction("aman_newwad"); else if (href.EndsWith("newzip")) theApp->doAction("aman_newzip"); else if (href.EndsWith("newmap")) { theApp->doAction("aman_newmap"); return; } else if (href.EndsWith("reloadstartpage")) createStartPage(); html_startpage->Reload(); } else if (wxFileExists(href)) { // Navigating to file, open it string page = appPath("startpage.htm", DIR_TEMP); if (wxFileName(href).GetLongPath() != wxFileName(page).GetLongPath()) theArchiveManager->openArchive(href); ev.Veto(); } }
/* MainWindow::onHTMLLinkClicked * Called when a link is clicked on the HTML Window, so that * external (http) links are opened in the default browser *******************************************************************/ void MainWindow::onHTMLLinkClicked(wxHtmlLinkEvent &e) { string href = e.GetLinkInfo().GetHref(); if (href.StartsWith("http://")) wxLaunchDefaultBrowser(e.GetLinkInfo().GetHref()); else if (href.StartsWith("recent://")) { // Recent file string rs = href.Right(1); unsigned long index = 0; rs.ToULong(&index); index++; panel_archivemanager->handleAction(S_FMT("aman_recent%d", index)); } else if (href.StartsWith("action://")) { // Action if (href.EndsWith("open")) theApp->doAction("aman_open"); else if (href.EndsWith("newwad")) theApp->doAction("aman_newwad"); else if (href.EndsWith("newzip")) theApp->doAction("aman_newzip"); else if (href.EndsWith("reloadstartpage")) createStartPage(); } else html_startpage->OnLinkClicked(e.GetLinkInfo()); }
/* MainWindow::onTabChanged * Called when the current tab is changed *******************************************************************/ void MainWindow::onTabChanged(wxAuiNotebookEvent& e) { // Get current page wxWindow* page = notebook_tabs->GetPage(notebook_tabs->GetSelection()); // If start page is selected, refresh it if (page->GetName() == "startpage") { createStartPage(); SetStatusText("", 1); SetStatusText("", 2); } // Archive tab, update undo history panel else if (page->GetName() == "archive") panel_undo_history->setManager(((ArchivePanel*)page)->getUndoManager()); // Continue e.Skip(); }
// ----------------------------------------------------------------------------- // Switches to the Start Page tab, or (re)creates it if it has been closed // ----------------------------------------------------------------------------- void MainWindow::openStartPageTab() { // Find existing tab for (unsigned a = 0; a < stc_tabs_->GetPageCount(); a++) { if (stc_tabs_->GetPage(a)->GetName() == "startpage") { stc_tabs_->SetSelection(a); return; } } // Not found, create start page tab start_page_ = new SStartPage(stc_tabs_); start_page_->init(); stc_tabs_->AddPage(start_page_, "Start Page"); stc_tabs_->SetPageBitmap(0, Icons::getIcon(Icons::General, "logo")); createStartPage(); }
/* MainWindow::onActivate * Called when the window is activated *******************************************************************/ void MainWindow::onActivate(wxActivateEvent& e) { if (!e.GetActive() || this->IsBeingDeleted()) { e.Skip(); return; } // Get current tab wxWindow* page = stc_tabs->GetPage(stc_tabs->GetSelection()); // If start page is selected, refresh it if (page && page->GetName() == "startpage") { createStartPage(false); SetStatusText("", 1); SetStatusText("", 2); } // Check open directory archives for changes on the file system panel_archivemanager->checkDirArchives(); e.Skip(); }
/* MainWindow::onActivate * Called when the window is activated *******************************************************************/ void MainWindow::onActivate(wxActivateEvent& e) { if (!e.GetActive() || this->IsBeingDeleted() || App::isExiting()) { e.Skip(); return; } // Get current tab if (stc_tabs->GetPageCount()) { wxWindow* page = stc_tabs->GetPage(stc_tabs->GetSelection()); // If start page is selected, refresh it if (page && page->GetName() == "startpage") { createStartPage(false); SetStatusText("", 1); SetStatusText("", 2); } } e.Skip(); }
/* MainWindow::setupLayout * Sets up the wxWidgets window layout *******************************************************************/ void MainWindow::setupLayout() { // Create the wxAUI manager & related things m_mgr = new wxAuiManager(this); wxAuiPaneInfo p_inf; // Set icon string icon_filename = appPath("slade.ico", DIR_TEMP); theArchiveManager->programResourceArchive()->getEntry("slade.ico")->exportFile(icon_filename); SetIcon(wxIcon(icon_filename, wxBITMAP_TYPE_ICO)); wxRemoveFile(icon_filename); // -- Editor Area -- notebook_tabs = new wxAuiNotebook(this, -1, wxDefaultPosition, wxDefaultSize, wxAUI_NB_DEFAULT_STYLE|wxNO_BORDER|wxAUI_NB_WINDOWLIST_BUTTON|wxNB_FLAT); notebook_tabs->SetArtProvider(new clAuiTabArt()); // Setup panel info & add panel p_inf.CenterPane(); p_inf.Name("editor_area"); p_inf.PaneBorder(false); m_mgr->AddPane(notebook_tabs, p_inf); // Create Start Page (temporary) html_startpage = new wxHtmlWindow(notebook_tabs, -1, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER, "startpage"); html_startpage->SetName("startpage"); if (show_start_page) { notebook_tabs->AddPage(html_startpage,"Start Page"); notebook_tabs->SetPageBitmap(0, getIcon("i_logo")); createStartPage(); } else html_startpage->Show(false); // -- Console Panel -- ConsolePanel *panel_console = new ConsolePanel(this, -1); // Setup panel info & add panel p_inf.DefaultPane(); p_inf.Float(); p_inf.FloatingSize(600, 400); p_inf.FloatingPosition(100, 100); p_inf.MinSize(-1, 192); p_inf.Show(false); p_inf.Caption("Console"); p_inf.Name("console"); m_mgr->AddPane(panel_console, p_inf); // -- Archive Manager Panel -- panel_archivemanager = new ArchiveManagerPanel(this, notebook_tabs); // Setup panel info & add panel p_inf.DefaultPane(); p_inf.Left(); p_inf.BestSize(192, 480); p_inf.Caption("Archive Manager"); p_inf.Name("archive_manager"); p_inf.Show(true); p_inf.Dock(); m_mgr->AddPane(panel_archivemanager, p_inf); // -- Undo History Panel -- panel_undo_history = new UndoManagerHistoryPanel(this, NULL); // Setup panel info & add panel p_inf.DefaultPane(); p_inf.Right(); p_inf.BestSize(128, 480); p_inf.Caption("Undo History"); p_inf.Name("undo_history"); p_inf.Show(false); p_inf.Dock(); m_mgr->AddPane(panel_undo_history, p_inf); // -- Menu bar -- wxMenuBar *menu = new wxMenuBar(); // File menu wxMenu* fileNewMenu = new wxMenu(""); theApp->getAction("aman_newwad")->addToMenu(fileNewMenu, "&Wad Archive"); theApp->getAction("aman_newzip")->addToMenu(fileNewMenu, "&Zip Archive"); wxMenu* fileMenu = new wxMenu(""); fileMenu->AppendSubMenu(fileNewMenu, "&New", "Create a new Archive"); theApp->getAction("aman_open")->addToMenu(fileMenu); fileMenu->AppendSeparator(); theApp->getAction("aman_save")->addToMenu(fileMenu); theApp->getAction("aman_saveas")->addToMenu(fileMenu); theApp->getAction("aman_saveall")->addToMenu(fileMenu); fileMenu->AppendSubMenu(panel_archivemanager->getRecentMenu(), "&Recent Files"); fileMenu->AppendSeparator(); theApp->getAction("aman_close")->addToMenu(fileMenu); theApp->getAction("aman_closeall")->addToMenu(fileMenu); fileMenu->AppendSeparator(); theApp->getAction("main_exit")->addToMenu(fileMenu); menu->Append(fileMenu, "&File"); // Edit menu wxMenu* editorMenu = new wxMenu(""); theApp->getAction("main_undo")->addToMenu(editorMenu); theApp->getAction("main_redo")->addToMenu(editorMenu); editorMenu->AppendSeparator(); theApp->getAction("main_setbra")->addToMenu(editorMenu); theApp->getAction("main_preferences")->addToMenu(editorMenu); menu->Append(editorMenu, "E&dit"); // View menu wxMenu* viewMenu = new wxMenu(""); theApp->getAction("main_showam")->addToMenu(viewMenu); theApp->getAction("main_showconsole")->addToMenu(viewMenu); theApp->getAction("main_showundohistory")->addToMenu(viewMenu); menu->Append(viewMenu, "&View"); // Help menu wxMenu* helpMenu = new wxMenu(""); theApp->getAction("main_onlinedocs")->addToMenu(helpMenu); theApp->getAction("main_about")->addToMenu(helpMenu); menu->Append(helpMenu, "&Help"); // Set the menu SetMenuBar(menu); // -- Toolbars -- toolbar = new SToolBar(this); // Create File toolbar SToolBarGroup* tbg_file = new SToolBarGroup(toolbar, "_File"); tbg_file->addActionButton("aman_newwad"); tbg_file->addActionButton("aman_newzip"); tbg_file->addActionButton("aman_open"); tbg_file->addActionButton("aman_save"); tbg_file->addActionButton("aman_saveas"); tbg_file->addActionButton("aman_saveall"); tbg_file->addActionButton("aman_close"); tbg_file->addActionButton("aman_closeall"); toolbar->addGroup(tbg_file); // Create Archive toolbar SToolBarGroup* tbg_archive = new SToolBarGroup(toolbar, "_Archive"); tbg_archive->addActionButton("arch_newentry"); tbg_archive->addActionButton("arch_newdir"); tbg_archive->addActionButton("arch_importfiles"); tbg_archive->addActionButton("arch_texeditor"); tbg_archive->addActionButton("arch_mapeditor"); toolbar->addGroup(tbg_archive); // Create Entry toolbar SToolBarGroup* tbg_entry = new SToolBarGroup(toolbar, "_Entry"); tbg_entry->addActionButton("arch_entry_rename"); tbg_entry->addActionButton("arch_entry_delete"); tbg_entry->addActionButton("arch_entry_import"); tbg_entry->addActionButton("arch_entry_export"); tbg_entry->addActionButton("arch_entry_moveup"); tbg_entry->addActionButton("arch_entry_movedown"); toolbar->addGroup(tbg_entry); // Create Base Resource Archive toolbar SToolBarGroup* tbg_bra = new SToolBarGroup(toolbar, "_Base Resource", true); BaseResourceChooser* brc = new BaseResourceChooser(tbg_bra); tbg_bra->addCustomControl(brc); tbg_bra->addActionButton("main_setbra", "t_settings"); toolbar->addGroup(tbg_bra); // Create Palette Chooser toolbar SToolBarGroup* tbg_palette = new SToolBarGroup(toolbar, "_Palette", true); palette_chooser = new PaletteChooser(tbg_palette, -1); palette_chooser->selectPalette(global_palette); tbg_palette->addCustomControl(palette_chooser); toolbar->addGroup(tbg_palette); // Archive and Entry toolbars are initially disabled toolbar->enableGroup("_archive", false); toolbar->enableGroup("_entry", false); // Add toolbar m_mgr->AddPane(toolbar, wxAuiPaneInfo().Top().CaptionVisible(false).MinSize(-1, 30).Resizable(false).PaneBorder(false).Name("toolbar")); // -- Status Bar -- CreateStatusBar(3); // Load previously saved perspective string loadLayout(); // Finalize m_mgr->Update(); Layout(); // Bind events html_startpage->Bind(wxEVT_COMMAND_HTML_LINK_CLICKED, &MainWindow::onHTMLLinkClicked, this); Bind(wxEVT_SIZE, &MainWindow::onSize, this); Bind(wxEVT_CLOSE_WINDOW, &MainWindow::onClose, this); Bind(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, &MainWindow::onTabChanged, this); Bind(wxEVT_MOVE, &MainWindow::onMove, this); Bind(wxEVT_STOOLBAR_LAYOUT_UPDATED, &MainWindow::onToolBarLayoutChanged, this, toolbar->GetId()); }
/* MainWindow::onHTMLLinkClicked * Called when a link is clicked on the HTML Window, so that * external (http) links are opened in the default browser *******************************************************************/ void MainWindow::onHTMLLinkClicked(wxEvent& e) { wxWebViewEvent& ev = (wxWebViewEvent&)e; string href = ev.GetURL(); #ifdef __WXGTK__ if (!href.EndsWith("startpage.htm")) href.Replace("file://", ""); #endif //LOG_MESSAGE(2, "URL %s", href); if (href.EndsWith("/")) href.RemoveLast(1); if (href.StartsWith("http://")) { wxLaunchDefaultBrowser(ev.GetURL()); ev.Veto(); } else if (href.StartsWith("recent://")) { // Recent file string rs = href.Mid(9); unsigned long index = 0; rs.ToULong(&index); SActionHandler::setWxIdOffset(index); SActionHandler::doAction("aman_recent"); createStartPage(); html_startpage->Reload(); } else if (href.StartsWith("action://")) { // Action if (href.EndsWith("open")) SActionHandler::doAction("aman_open"); else if (href.EndsWith("newwad")) SActionHandler::doAction("aman_newwad"); else if (href.EndsWith("newzip")) SActionHandler::doAction("aman_newzip"); else if (href.EndsWith("newmap")) { SActionHandler::doAction("aman_newmap"); return; } else if (href.EndsWith("reloadstartpage")) createStartPage(); html_startpage->Reload(); } else if (wxFileExists(href)) { // Navigating to file, open it string page = App::path("startpage.htm", App::Dir::Temp); if (wxFileName(href).GetLongPath() != wxFileName(page).GetLongPath()) theArchiveManager->openArchive(href); ev.Veto(); } else if (wxDirExists(href)) { // Navigating to folder, open it theArchiveManager->openDirArchive(href); ev.Veto(); } }
/* MainWindow::setupLayout * Sets up the wxWidgets window layout *******************************************************************/ void MainWindow::setupLayout() { // Create the wxAUI manager & related things m_mgr = new wxAuiManager(this); m_mgr->SetArtProvider(new SAuiDockArt()); wxAuiPaneInfo p_inf; // Set icon string icon_filename = App::path("slade.ico", App::Dir::Temp); theArchiveManager->programResourceArchive()->getEntry("slade.ico")->exportFile(icon_filename); SetIcon(wxIcon(icon_filename, wxBITMAP_TYPE_ICO)); wxRemoveFile(icon_filename); // -- Editor Area -- stc_tabs = new STabCtrl(this, true, true, tabs_condensed ? 27 : 31, true, true); // Setup panel info & add panel p_inf.CenterPane(); p_inf.Name("editor_area"); p_inf.PaneBorder(false); m_mgr->AddPane(stc_tabs, p_inf); // Create Start Page #ifdef USE_WEBVIEW_STARTPAGE html_startpage = wxWebView::New(stc_tabs, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxWebViewBackendDefault, wxBORDER_NONE); html_startpage->SetName("startpage"); #ifdef __WXMAC__ html_startpage->SetZoomType(wxWEBVIEW_ZOOM_TYPE_TEXT); #else // !__WXMAC__ html_startpage->SetZoomType(wxWEBVIEW_ZOOM_TYPE_LAYOUT); #endif // __WXMAC__ if (show_start_page) { stc_tabs->AddPage(html_startpage,"Start Page"); stc_tabs->SetPageBitmap(0, Icons::getIcon(Icons::GENERAL, "logo")); createStartPage(); } else html_startpage->Show(false); #else html_startpage = new wxHtmlWindow(stc_tabs, -1, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER, "startpage"); html_startpage->SetName("startpage"); if (show_start_page) { stc_tabs->AddPage(html_startpage, "Start Page"); stc_tabs->SetPageBitmap(0, Icons::getIcon(Icons::GENERAL, "logo")); createStartPage(); } else html_startpage->Show(false); #endif // -- Console Panel -- ConsolePanel* panel_console = new ConsolePanel(this, -1); // Setup panel info & add panel p_inf.DefaultPane(); p_inf.Float(); p_inf.FloatingSize(600, 400); p_inf.FloatingPosition(100, 100); p_inf.MinSize(-1, 192); p_inf.Show(false); p_inf.Caption("Console"); p_inf.Name("console"); m_mgr->AddPane(panel_console, p_inf); // -- Archive Manager Panel -- panel_archivemanager = new ArchiveManagerPanel(this, stc_tabs); // Setup panel info & add panel p_inf.DefaultPane(); p_inf.Left(); p_inf.BestSize(192, 480); p_inf.Caption("Archive Manager"); p_inf.Name("archive_manager"); p_inf.Show(true); p_inf.Dock(); m_mgr->AddPane(panel_archivemanager, p_inf); // -- Undo History Panel -- panel_undo_history = new UndoManagerHistoryPanel(this, nullptr); // Setup panel info & add panel p_inf.DefaultPane(); p_inf.Right(); p_inf.BestSize(128, 480); p_inf.Caption("Undo History"); p_inf.Name("undo_history"); p_inf.Show(false); p_inf.Dock(); m_mgr->AddPane(panel_undo_history, p_inf); // -- Menu bar -- wxMenuBar* menu = new wxMenuBar(); menu->SetThemeEnabled(false); // File menu wxMenu* fileNewMenu = new wxMenu(""); SAction::fromId("aman_newwad")->addToMenu(fileNewMenu, "&Wad Archive"); SAction::fromId("aman_newzip")->addToMenu(fileNewMenu, "&Zip Archive"); SAction::fromId("aman_newmap")->addToMenu(fileNewMenu, "&Map"); wxMenu* fileMenu = new wxMenu(""); fileMenu->AppendSubMenu(fileNewMenu, "&New", "Create a new Archive"); SAction::fromId("aman_open")->addToMenu(fileMenu); SAction::fromId("aman_opendir")->addToMenu(fileMenu); fileMenu->AppendSeparator(); SAction::fromId("aman_save")->addToMenu(fileMenu); SAction::fromId("aman_saveas")->addToMenu(fileMenu); SAction::fromId("aman_saveall")->addToMenu(fileMenu); fileMenu->AppendSubMenu(panel_archivemanager->getRecentMenu(), "&Recent Files"); fileMenu->AppendSeparator(); SAction::fromId("aman_close")->addToMenu(fileMenu); SAction::fromId("aman_closeall")->addToMenu(fileMenu); fileMenu->AppendSeparator(); SAction::fromId("main_exit")->addToMenu(fileMenu); menu->Append(fileMenu, "&File"); // Edit menu wxMenu* editorMenu = new wxMenu(""); SAction::fromId("main_undo")->addToMenu(editorMenu); SAction::fromId("main_redo")->addToMenu(editorMenu); editorMenu->AppendSeparator(); SAction::fromId("main_setbra")->addToMenu(editorMenu); SAction::fromId("main_preferences")->addToMenu(editorMenu); menu->Append(editorMenu, "E&dit"); // View menu wxMenu* viewMenu = new wxMenu(""); SAction::fromId("main_showam")->addToMenu(viewMenu); SAction::fromId("main_showconsole")->addToMenu(viewMenu); SAction::fromId("main_showundohistory")->addToMenu(viewMenu); menu->Append(viewMenu, "&View"); // Help menu wxMenu* helpMenu = new wxMenu(""); SAction::fromId("main_onlinedocs")->addToMenu(helpMenu); SAction::fromId("main_about")->addToMenu(helpMenu); #ifdef __WXMSW__ SAction::fromId("main_updatecheck")->addToMenu(helpMenu); #endif menu->Append(helpMenu, "&Help"); // Set the menu SetMenuBar(menu); // -- Toolbars -- toolbar = new SToolBar(this, true); // Create File toolbar SToolBarGroup* tbg_file = new SToolBarGroup(toolbar, "_File"); tbg_file->addActionButton("aman_newwad"); tbg_file->addActionButton("aman_newzip"); tbg_file->addActionButton("aman_open"); tbg_file->addActionButton("aman_opendir"); tbg_file->addActionButton("aman_save"); tbg_file->addActionButton("aman_saveas"); tbg_file->addActionButton("aman_saveall"); tbg_file->addActionButton("aman_close"); tbg_file->addActionButton("aman_closeall"); toolbar->addGroup(tbg_file); // Create Archive toolbar SToolBarGroup* tbg_archive = new SToolBarGroup(toolbar, "_Archive"); tbg_archive->addActionButton("arch_newentry"); tbg_archive->addActionButton("arch_newdir"); tbg_archive->addActionButton("arch_importfiles"); tbg_archive->addActionButton("arch_texeditor"); tbg_archive->addActionButton("arch_mapeditor"); tbg_archive->addActionButton("arch_run"); toolbar->addGroup(tbg_archive); // Create Entry toolbar SToolBarGroup* tbg_entry = new SToolBarGroup(toolbar, "_Entry"); tbg_entry->addActionButton("arch_entry_rename"); tbg_entry->addActionButton("arch_entry_delete"); tbg_entry->addActionButton("arch_entry_import"); tbg_entry->addActionButton("arch_entry_export"); tbg_entry->addActionButton("arch_entry_moveup"); tbg_entry->addActionButton("arch_entry_movedown"); toolbar->addGroup(tbg_entry); // Create Base Resource Archive toolbar SToolBarGroup* tbg_bra = new SToolBarGroup(toolbar, "_Base Resource", true); BaseResourceChooser* brc = new BaseResourceChooser(tbg_bra); tbg_bra->addCustomControl(brc); tbg_bra->addActionButton("main_setbra", "settings"); toolbar->addGroup(tbg_bra); // Create Palette Chooser toolbar SToolBarGroup* tbg_palette = new SToolBarGroup(toolbar, "_Palette", true); palette_chooser = new PaletteChooser(tbg_palette, -1); palette_chooser->selectPalette(global_palette); tbg_palette->addCustomControl(palette_chooser); toolbar->addGroup(tbg_palette); // Archive and Entry toolbars are initially disabled toolbar->enableGroup("_archive", false); toolbar->enableGroup("_entry", false); // Add toolbar m_mgr->AddPane(toolbar, wxAuiPaneInfo().Top().CaptionVisible(false).MinSize(-1, SToolBar::getBarHeight()).Resizable(false).PaneBorder(false).Name("toolbar")); // -- Status Bar -- CreateStatusBar(3); // Load previously saved perspective string loadLayout(); // Finalize m_mgr->Update(); Layout(); // Bind events #ifdef USE_WEBVIEW_STARTPAGE html_startpage->Bind(wxEVT_WEBVIEW_NAVIGATING, &MainWindow::onHTMLLinkClicked, this); #else html_startpage->Bind(wxEVT_COMMAND_HTML_LINK_CLICKED, &MainWindow::onHTMLLinkClicked, this); #endif Bind(wxEVT_SIZE, &MainWindow::onSize, this); Bind(wxEVT_CLOSE_WINDOW, &MainWindow::onClose, this); Bind(wxEVT_AUINOTEBOOK_PAGE_CHANGED, &MainWindow::onTabChanged, this); Bind(wxEVT_STOOLBAR_LAYOUT_UPDATED, &MainWindow::onToolBarLayoutChanged, this, toolbar->GetId()); Bind(wxEVT_ACTIVATE, &MainWindow::onActivate, this); // Initial focus to toolbar toolbar->SetFocus(); }
// ----------------------------------------------------------------------------- // Sets up the wxWidgets window layout // ----------------------------------------------------------------------------- void MainWindow::setupLayout() { // Create the wxAUI manager & related things aui_mgr_ = new wxAuiManager(this); aui_mgr_->SetArtProvider(new SAuiDockArt()); wxAuiPaneInfo p_inf; // Set icon auto icon_filename = App::path(App::iconFile(), App::Dir::Temp); App::archiveManager().programResourceArchive()->entry(App::iconFile())->exportFile(icon_filename); SetIcon(wxIcon(icon_filename, wxBITMAP_TYPE_ICO)); wxRemoveFile(icon_filename); // -- Editor Area -- stc_tabs_ = new STabCtrl(this, true, true, tabs_condensed ? 27 : 31, true, true); // Setup panel info & add panel p_inf.CenterPane(); p_inf.Name("editor_area"); p_inf.PaneBorder(false); aui_mgr_->AddPane(stc_tabs_, p_inf); // Create Start Page start_page_ = new SStartPage(stc_tabs_); if (show_start_page) { stc_tabs_->AddPage(start_page_, "Start Page"); stc_tabs_->SetPageBitmap(0, Icons::getIcon(Icons::General, "logo")); start_page_->init(); createStartPage(); } else start_page_->Show(false); // -- Console Panel -- auto panel_console = new ConsolePanel(this, -1); // Setup panel info & add panel p_inf.DefaultPane(); p_inf.Float(); p_inf.FloatingSize(WxUtils::scaledSize(600, 400)); p_inf.FloatingPosition(WxUtils::scaledPoint(100, 100)); p_inf.MinSize(WxUtils::scaledSize(-1, 192)); p_inf.Show(false); p_inf.Caption("Console"); p_inf.Name("console"); aui_mgr_->AddPane(panel_console, p_inf); // -- Archive Manager Panel -- panel_archivemanager_ = new ArchiveManagerPanel(this, stc_tabs_); // Setup panel info & add panel p_inf.DefaultPane(); p_inf.Left(); p_inf.BestSize(WxUtils::scaledSize(192, 480)); p_inf.Caption("Archive Manager"); p_inf.Name("archive_manager"); p_inf.Show(true); p_inf.Dock(); aui_mgr_->AddPane(panel_archivemanager_, p_inf); // -- Undo History Panel -- panel_undo_history_ = new UndoManagerHistoryPanel(this, nullptr); // Setup panel info & add panel p_inf.DefaultPane(); p_inf.Right(); p_inf.BestSize(WxUtils::scaledSize(128, 480)); p_inf.Caption("Undo History"); p_inf.Name("undo_history"); p_inf.Show(false); p_inf.Dock(); aui_mgr_->AddPane(panel_undo_history_, p_inf); // -- Menu bar -- auto menu = new wxMenuBar(); menu->SetThemeEnabled(false); // File menu auto file_new_menu = new wxMenu(""); SAction::fromId("aman_newwad")->addToMenu(file_new_menu, "&Wad Archive"); SAction::fromId("aman_newzip")->addToMenu(file_new_menu, "&Zip Archive"); SAction::fromId("aman_newmap")->addToMenu(file_new_menu, "&Map"); auto file_menu = new wxMenu(""); file_menu->AppendSubMenu(file_new_menu, "&New", "Create a new Archive"); SAction::fromId("aman_open")->addToMenu(file_menu); SAction::fromId("aman_opendir")->addToMenu(file_menu); file_menu->AppendSeparator(); SAction::fromId("aman_save")->addToMenu(file_menu); SAction::fromId("aman_saveas")->addToMenu(file_menu); SAction::fromId("aman_saveall")->addToMenu(file_menu); file_menu->AppendSubMenu(panel_archivemanager_->getRecentMenu(), "&Recent Files"); file_menu->AppendSeparator(); SAction::fromId("aman_close")->addToMenu(file_menu); SAction::fromId("aman_closeall")->addToMenu(file_menu); file_menu->AppendSeparator(); SAction::fromId("main_exit")->addToMenu(file_menu); menu->Append(file_menu, "&File"); // Edit menu auto editor_menu = new wxMenu(""); SAction::fromId("main_undo")->addToMenu(editor_menu); SAction::fromId("main_redo")->addToMenu(editor_menu); editor_menu->AppendSeparator(); SAction::fromId("main_setbra")->addToMenu(editor_menu); SAction::fromId("main_preferences")->addToMenu(editor_menu); menu->Append(editor_menu, "E&dit"); // View menu auto view_menu = new wxMenu(""); SAction::fromId("main_showam")->addToMenu(view_menu); SAction::fromId("main_showconsole")->addToMenu(view_menu); SAction::fromId("main_showundohistory")->addToMenu(view_menu); SAction::fromId("main_showstartpage")->addToMenu(view_menu); toolbar_menu_ = new wxMenu(); view_menu->AppendSubMenu(toolbar_menu_, "Toolbars"); menu->Append(view_menu, "&View"); // Tools menu auto tools_menu = new wxMenu(""); SAction::fromId("main_runscript")->addToMenu(tools_menu); menu->Append(tools_menu, "&Tools"); // Help menu auto help_menu = new wxMenu(""); SAction::fromId("main_onlinedocs")->addToMenu(help_menu); SAction::fromId("main_about")->addToMenu(help_menu); #ifdef __WXMSW__ SAction::fromId("main_updatecheck")->addToMenu(help_menu); #endif menu->Append(help_menu, "&Help"); // Set the menu SetMenuBar(menu); // -- Toolbars -- toolbar_ = new SToolBar(this, true); // Create File toolbar auto tbg_file = new SToolBarGroup(toolbar_, "_File"); tbg_file->addActionButton("aman_newwad"); tbg_file->addActionButton("aman_newzip"); tbg_file->addActionButton("aman_open"); tbg_file->addActionButton("aman_opendir"); tbg_file->addActionButton("aman_save"); tbg_file->addActionButton("aman_saveas"); tbg_file->addActionButton("aman_saveall"); tbg_file->addActionButton("aman_close"); tbg_file->addActionButton("aman_closeall"); toolbar_->addGroup(tbg_file); // Create Archive toolbar auto tbg_archive = new SToolBarGroup(toolbar_, "_Archive"); tbg_archive->addActionButton("arch_newentry"); tbg_archive->addActionButton("arch_newdir"); tbg_archive->addActionButton("arch_importfiles"); tbg_archive->addActionButton("arch_texeditor"); tbg_archive->addActionButton("arch_mapeditor"); tbg_archive->addActionButton("arch_run"); toolbar_->addGroup(tbg_archive); // Create Entry toolbar auto tbg_entry = new SToolBarGroup(toolbar_, "_Entry"); tbg_entry->addActionButton("arch_entry_rename"); tbg_entry->addActionButton("arch_entry_delete"); tbg_entry->addActionButton("arch_entry_import"); tbg_entry->addActionButton("arch_entry_export"); tbg_entry->addActionButton("arch_entry_moveup"); tbg_entry->addActionButton("arch_entry_movedown"); toolbar_->addGroup(tbg_entry); // Create Base Resource Archive toolbar auto tbg_bra = new SToolBarGroup(toolbar_, "_Base Resource", true); auto brc = new BaseResourceChooser(tbg_bra); tbg_bra->addCustomControl(brc); tbg_bra->addActionButton("main_setbra", "settings"); toolbar_->addGroup(tbg_bra); // Create Palette Chooser toolbar auto tbg_palette = new SToolBarGroup(toolbar_, "_Palette", true); palette_chooser_ = new PaletteChooser(tbg_palette, -1); palette_chooser_->selectPalette(global_palette); tbg_palette->addCustomControl(palette_chooser_); toolbar_->addGroup(tbg_palette); // Archive and Entry toolbars are initially disabled toolbar_->enableGroup("_archive", false); toolbar_->enableGroup("_entry", false); // Add toolbar aui_mgr_->AddPane( toolbar_, wxAuiPaneInfo() .Top() .CaptionVisible(false) .MinSize(-1, SToolBar::getBarHeight()) .Resizable(false) .PaneBorder(false) .Name("toolbar")); // Populate the 'View->Toolbars' menu populateToolbarsMenu(); toolbar_->enableContextMenu(); // -- Status Bar -- CreateStatusBar(3); // Load previously saved perspective string loadLayout(); // Finalize aui_mgr_->Update(); Layout(); // Bind events Bind(wxEVT_SIZE, &MainWindow::onSize, this); Bind(wxEVT_CLOSE_WINDOW, &MainWindow::onClose, this); Bind(wxEVT_AUINOTEBOOK_PAGE_CHANGED, &MainWindow::onTabChanged, this); Bind(wxEVT_STOOLBAR_LAYOUT_UPDATED, &MainWindow::onToolBarLayoutChanged, this, toolbar_->GetId()); Bind(wxEVT_ACTIVATE, &MainWindow::onActivate, this); Bind(wxEVT_AUINOTEBOOK_PAGE_CLOSE, [&](wxAuiNotebookEvent& e) { // Null start_page pointer if start page tab is closed auto page = stc_tabs_->GetPage(stc_tabs_->GetSelection()); if (page->GetName() == "startpage") start_page_ = nullptr; }); // Initial focus to toolbar toolbar_->SetFocus(); }