diff --git a/mdlviewer/include/mainwindow.h b/mdlviewer/include/mainwindow.h index 10d96b2..2c15f59 100644 --- a/mdlviewer/include/mainwindow.h +++ b/mdlviewer/include/mainwindow.h @@ -3,18 +3,20 @@ #pragma once -#include - #include "filecache.h" +#include "novusmainwindow.h" struct GameData; class MDLPart; -class MainWindow : public QMainWindow { +class MainWindow : public NovusMainWindow +{ public: MainWindow(GameData* data); -private: +protected: + void setupFileMenu(QMenu *menu) override; + GameData* data = nullptr; MDLPart* part = nullptr; FileCache cache; diff --git a/mdlviewer/src/mainwindow.cpp b/mdlviewer/src/mainwindow.cpp index 6cba1e4..0fe010d 100644 --- a/mdlviewer/src/mainwindow.cpp +++ b/mdlviewer/src/mainwindow.cpp @@ -19,48 +19,13 @@ #include "mdlpart.h" #include "utility.h" -MainWindow::MainWindow(GameData* data) : data(data), cache(FileCache{*data}) { - setWindowTitle(QStringLiteral("Model Viewer")); +MainWindow::MainWindow(GameData *data) + : NovusMainWindow() + , data(data) + , cache(FileCache{*data}) +{ setMinimumSize(640, 480); - - auto fileMenu = menuBar()->addMenu(QStringLiteral("File")); - - auto openMDLFile = fileMenu->addAction(QStringLiteral("Open MDL...")); - openMDLFile->setIcon(QIcon::fromTheme(QStringLiteral("document-open"))); - connect(openMDLFile, &QAction::triggered, [=] { - auto fileName = QFileDialog::getOpenFileName(nullptr, QStringLiteral("Open MDL File"), QStringLiteral("~"), QStringLiteral("FFXIV Model File (*.mdl)")); - - auto buffer = physis_read_file(fileName.toStdString().c_str()); - - part->addModel(physis_mdl_parse(buffer.size, buffer.data), QStringLiteral("mdl"), {}, 0); - }); - - fileMenu->addSeparator(); - - auto quitAction = fileMenu->addAction(QStringLiteral("Quit")); - quitAction->setIcon(QIcon::fromTheme(QStringLiteral("gtk-quit"))); - connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit); - - auto helpMenu = menuBar()->addMenu(QStringLiteral("Help")); - - auto donateAction = helpMenu->addAction(QStringLiteral("Donate")); - connect(donateAction, &QAction::triggered, this, [] { - QDesktopServices::openUrl(QUrl(QStringLiteral("https://redstrate.com/fund"))); - }); - donateAction->setIcon(QIcon::fromTheme(QStringLiteral("help-donate"))); - - helpMenu->addSeparator(); - - auto aboutNovusAction = helpMenu->addAction(QStringLiteral("About Model Viewer")); - aboutNovusAction->setIcon(QIcon::fromTheme(QStringLiteral("help-about"))); - connect(aboutNovusAction, &QAction::triggered, this, [this] { - auto window = new KAboutApplicationDialog(KAboutData::applicationData(), this); - window->show(); - }); - - auto aboutQtAction = helpMenu->addAction(QStringLiteral("About Qt")); - aboutQtAction->setIcon(QIcon(QStringLiteral(":/qt-project.org/qmessagebox/images/qtlogo-64.png"))); - connect(aboutQtAction, &QAction::triggered, QApplication::instance(), &QApplication::aboutQt); + setupMenubar(); auto dummyWidget = new QWidget(); setCentralWidget(dummyWidget); @@ -71,9 +36,18 @@ MainWindow::MainWindow(GameData* data) : data(data), cache(FileCache{*data}) { part = new MDLPart(data, cache); - const int raceCode = physis_get_race_code(Race::Hyur, Subrace::Midlander, Gender::Male); - QString skelName = QStringLiteral(":/skeletons/c%1b0001.skel").arg(raceCode, 4, 10, QLatin1Char{'0'}); - part->setSkeleton(physis_skeleton_from_skel(utility::readFromQrc(skelName))); - layout->addWidget(part); -} \ No newline at end of file +} + +void MainWindow::setupFileMenu(QMenu *menu) +{ + auto openMDLFile = menu->addAction(QStringLiteral("Open MDL...")); + openMDLFile->setIcon(QIcon::fromTheme(QStringLiteral("document-open"))); + connect(openMDLFile, &QAction::triggered, [=] { + auto fileName = QFileDialog::getOpenFileName(nullptr, QStringLiteral("Open MDL File"), QStringLiteral("~"), QStringLiteral("FFXIV Model File (*.mdl)")); + + auto buffer = physis_read_file(fileName.toStdString().c_str()); + + part->addModel(physis_mdl_parse(buffer.size, buffer.data), QStringLiteral("mdl"), {}, 0); + }); +}