2019-05-30 00:09:58 -07:00
|
|
|
#include "tycho.h"
|
2019-06-08 19:14:38 -07:00
|
|
|
#include "mapprops.h"
|
|
|
|
#include "menu.h"
|
2019-06-13 18:10:33 -07:00
|
|
|
#include "project.h"
|
2019-06-08 19:14:38 -07:00
|
|
|
#include "../ui/ui_about.h"
|
2019-06-14 10:03:32 -07:00
|
|
|
#include "../ui/ui_license.h"
|
2019-05-15 21:28:33 -07:00
|
|
|
|
2019-06-13 19:52:25 -07:00
|
|
|
#include <QCloseEvent>
|
2019-05-30 00:09:58 -07:00
|
|
|
#include <QFileDialog>
|
2019-06-13 18:10:33 -07:00
|
|
|
#include <QMdiSubWindow>
|
2019-05-30 00:09:58 -07:00
|
|
|
#include <iostream>
|
|
|
|
|
2019-06-08 19:14:38 -07:00
|
|
|
Menu::Menu(QWidget *parent) :
|
2019-06-15 18:42:24 -07:00
|
|
|
QMainWindow(parent)
|
2019-05-15 21:28:33 -07:00
|
|
|
{
|
2019-06-15 18:42:24 -07:00
|
|
|
setupUi(this);
|
2019-06-13 19:52:25 -07:00
|
|
|
|
2019-06-15 18:42:24 -07:00
|
|
|
actionAbout->setShortcut(QKeySequence(QKeySequence::HelpContents));
|
|
|
|
actionClose->setShortcut(QKeySequence(QKeySequence::Close));
|
|
|
|
actionMapProps->setShortcut(QKeySequence(tr("Ctrl+P")));
|
|
|
|
actionNew->setShortcut(QKeySequence(QKeySequence::New));
|
|
|
|
actionOpen->setShortcut(QKeySequence(QKeySequence::Open));
|
|
|
|
actionQuit->setShortcut(QKeySequence(QKeySequence::Quit));
|
2019-06-13 19:52:25 -07:00
|
|
|
|
2019-06-10 09:05:05 -07:00
|
|
|
dbgPrintFunc();
|
2019-05-15 21:28:33 -07:00
|
|
|
}
|
|
|
|
|
2019-06-08 19:14:38 -07:00
|
|
|
Menu::~Menu()
|
2019-05-15 21:28:33 -07:00
|
|
|
{
|
2019-05-30 00:09:58 -07:00
|
|
|
dbgPrintFunc();
|
|
|
|
}
|
|
|
|
|
2019-06-08 19:14:38 -07:00
|
|
|
void Menu::mapNew()
|
2019-05-30 00:09:58 -07:00
|
|
|
{
|
2019-06-13 18:10:33 -07:00
|
|
|
QScopedPointer view{new ProjectView};
|
|
|
|
|
|
|
|
addProject(view.take());
|
2019-05-30 00:09:58 -07:00
|
|
|
}
|
|
|
|
|
2019-06-08 19:14:38 -07:00
|
|
|
void Menu::mapOpen()
|
2019-05-30 00:09:58 -07:00
|
|
|
{
|
|
|
|
auto fname =
|
|
|
|
QFileDialog::getOpenFileName(
|
|
|
|
this,
|
|
|
|
tr("Open Map File"),
|
|
|
|
QString(),
|
|
|
|
tr("Marathon Map files (*.scen *.sceA Map)"));
|
|
|
|
|
2019-06-13 18:10:33 -07:00
|
|
|
QScopedPointer view{new ProjectView};
|
|
|
|
|
|
|
|
if(view->model()->open(fname)) {
|
|
|
|
addProject(view.take());
|
|
|
|
}
|
2019-05-30 00:09:58 -07:00
|
|
|
}
|
|
|
|
|
2019-06-08 19:14:38 -07:00
|
|
|
void Menu::openAbout()
|
2019-05-30 00:09:58 -07:00
|
|
|
{
|
2019-06-08 19:14:38 -07:00
|
|
|
QDialog dlg{this};
|
2019-06-14 10:03:32 -07:00
|
|
|
Ui::About ui{};
|
2019-05-30 00:09:58 -07:00
|
|
|
|
2019-06-14 10:03:32 -07:00
|
|
|
ui.setupUi(&dlg);
|
|
|
|
|
2019-06-14 10:23:16 -07:00
|
|
|
auto text = ui.labelText->text();
|
|
|
|
|
|
|
|
text.replace("AUTHORS",
|
|
|
|
tr(tychoAuthors()).replace(':', ", ").toHtmlEscaped());
|
|
|
|
text.replace("HOMEPAGE", tr(tychoHomepage()));
|
|
|
|
text.replace("REPOSITORY", tr(tychoRepository()));
|
|
|
|
text.replace("VERSION", tr(tychoVersion()));
|
|
|
|
|
|
|
|
ui.labelText->setText(text);
|
2019-06-14 10:03:32 -07:00
|
|
|
|
|
|
|
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();
|
|
|
|
});
|
2019-05-30 00:09:58 -07:00
|
|
|
|
|
|
|
dlg.exec();
|
2019-05-16 14:50:59 -07:00
|
|
|
}
|
|
|
|
|
2019-06-08 19:14:38 -07:00
|
|
|
void Menu::openMapProperties()
|
2019-05-16 14:50:59 -07:00
|
|
|
{
|
2019-06-13 18:10:33 -07:00
|
|
|
auto view = activeProject();
|
|
|
|
|
|
|
|
if(view) {
|
|
|
|
MapProps props{view->model(), view};
|
|
|
|
props.exec();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Menu::updateActions()
|
|
|
|
{
|
|
|
|
auto view = activeProject();
|
|
|
|
bool active = view != nullptr;
|
|
|
|
|
2019-06-15 18:42:24 -07:00
|
|
|
actionClose->setEnabled(active);
|
|
|
|
actionMapProps->setEnabled(active);
|
2019-06-13 20:14:39 -07:00
|
|
|
|
|
|
|
dbgPrintFunc();
|
2019-06-13 18:10:33 -07:00
|
|
|
}
|
2019-06-08 19:14:38 -07:00
|
|
|
|
2019-06-13 19:52:25 -07:00
|
|
|
void Menu::closeEvent(QCloseEvent *event)
|
|
|
|
{
|
2019-06-15 18:42:24 -07:00
|
|
|
for(auto *win : mdiArea->subWindowList()) {
|
2019-06-13 19:52:25 -07:00
|
|
|
if(!win->close()) {
|
|
|
|
event->ignore();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
event->accept();
|
|
|
|
}
|
|
|
|
|
2019-06-13 18:10:33 -07:00
|
|
|
ProjectView *Menu::activeProject() const
|
|
|
|
{
|
2019-06-13 20:14:39 -07:00
|
|
|
return qobject_cast<ProjectView *>(activeSubWindow());
|
2019-06-13 18:10:33 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
QMdiSubWindow *Menu::activeSubWindow() const
|
|
|
|
{
|
2019-06-15 18:42:24 -07:00
|
|
|
return mdiArea->activeSubWindow();
|
2019-06-13 18:10:33 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void Menu::addProject(ProjectView *view)
|
|
|
|
{
|
2019-06-15 18:42:24 -07:00
|
|
|
auto win = mdiArea->addSubWindow(view);
|
|
|
|
|
2019-06-13 18:10:33 -07:00
|
|
|
win->showMaximized();
|
2019-05-15 21:28:33 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// EOF
|