#include "tycho.h" #include "mapprops.h" #include "menu.h" #include "project.h" #include "../ui/ui_menu.h" #include "../ui/ui_about.h" #include "../ui/ui_license.h" #include #include #include #include Menu::Menu(QWidget *parent) : QMainWindow(parent), ui(new Ui::Menu) { ui->setupUi(this); ui->actionOpen->setShortcut(QKeySequence(QKeySequence::Open)); ui->actionNew->setShortcut(QKeySequence(QKeySequence::New)); ui->actionQuit->setShortcut(QKeySequence(QKeySequence::Quit)); ui->actionAbout->setShortcut(QKeySequence(QKeySequence::HelpContents)); ui->actionMapProps->setShortcut(QKeySequence(tr("Ctrl+P"))); dbgPrintFunc(); } Menu::~Menu() { dbgPrintFunc(); } void Menu::mapNew() { QScopedPointer view{new ProjectView}; addProject(view.take()); } void Menu::mapOpen() { auto fname = QFileDialog::getOpenFileName( this, tr("Open Map File"), QString(), tr("Marathon Map files (*.scen *.sceA Map)")); QScopedPointer view{new ProjectView}; if(view->model()->open(fname)) { addProject(view.take()); } } void Menu::openAbout() { QDialog dlg{this}; Ui::About ui{}; ui.setupUi(&dlg); ui.labelVer->setText(tr(tychoVersion())); ui.labelAuthors->setText(tr(tychoAuthors()).replace(':', '\n')); connect(ui.btnLicense, &QPushButton::clicked, this, [&](){ openLicense(&dlg); }); dlg.exec(); } void Menu::openLicense(QWidget *parent) { QDialog dlg{parent}; Ui::License ui{}; ui.setupUi(&dlg); ui.text->setPlainText(tychoLicenseText()); connect(ui.btnCopy, &QPushButton::clicked, this, [&]() { ui.text->selectAll(); ui.text->copy(); }); dlg.exec(); } void Menu::openMapProperties() { auto view = activeProject(); if(view) { MapProps props{view->model(), view}; props.exec(); } } void Menu::updateActions() { auto view = activeProject(); bool active = view != nullptr; ui->actionMapProps->setEnabled(active); dbgPrintFunc(); } void Menu::closeEvent(QCloseEvent *event) { for(auto *win : ui->mdiArea->subWindowList()) { if(!win->close()) { event->ignore(); return; } } event->accept(); } ProjectView *Menu::activeProject() const { return qobject_cast(activeSubWindow()); } QMdiSubWindow *Menu::activeSubWindow() const { return ui->mdiArea->activeSubWindow(); } void Menu::addProject(ProjectView *view) { auto win = ui->mdiArea->addSubWindow(view); win->showMaximized(); } // EOF