diff --git a/apps/armoury/CMakeLists.txt b/apps/armoury/CMakeLists.txt index 069c555..5fcfbf6 100644 --- a/apps/armoury/CMakeLists.txt +++ b/apps/armoury/CMakeLists.txt @@ -49,6 +49,7 @@ target_link_libraries(novus-armoury Qt6::Network) install(TARGETS novus-armoury ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) +install(FILES geareditor.rc DESTINATION ${KDE_INSTALL_KXMLGUIDIR}/novus) ecm_add_app_icon(novus-armoury ICONS diff --git a/apps/armoury/geareditor.rc b/apps/armoury/geareditor.rc new file mode 100644 index 0000000..2eecf9e --- /dev/null +++ b/apps/armoury/geareditor.rc @@ -0,0 +1,23 @@ + + + + + Penumbra + + + + + Tools + + + + View + + + + diff --git a/apps/armoury/include/mainwindow.h b/apps/armoury/include/mainwindow.h index ac16e31..e25bbb5 100644 --- a/apps/armoury/include/mainwindow.h +++ b/apps/armoury/include/mainwindow.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include #include @@ -11,24 +12,25 @@ #include "gearview.h" #include "metadataview.h" #include "mtrlpart.h" -#include "novusmainwindow.h" #include "singlegearview.h" struct GameData; class FileCache; class PenumbraApi; -class MainWindow : public NovusMainWindow +class MainWindow : public KXmlGuiWindow { Q_OBJECT public: explicit MainWindow(GameData *data); -protected: - void setupAdditionalMenus(QMenuBar *menuBar) override; +public Q_SLOTS: + void configure(); private: + void setupActions(); + SingleGearView *gearView = nullptr; FullModelViewer *fullModelViewer = nullptr; QTabWidget *materialsView = nullptr; diff --git a/apps/armoury/src/main.cpp b/apps/armoury/src/main.cpp index aa35ffd..6aaad0e 100644 --- a/apps/armoury/src/main.cpp +++ b/apps/armoury/src/main.cpp @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) KLocalizedString::setApplicationDomain(QByteArrayLiteral("novus")); - customizeAboutData(QStringLiteral("armoury"), QStringLiteral("zone.xiv.armoury"), QStringLiteral("Gear Editor"), i18n("Program to view FFXIV gear.")); + customizeAboutData(QStringLiteral("novus"), QStringLiteral("zone.xiv.armoury"), QStringLiteral("Gear Editor"), i18n("Program to view FFXIV gear.")); // Default to a sensible message pattern if (qEnvironmentVariableIsEmpty("QT_MESSAGE_PATTERN")) { diff --git a/apps/armoury/src/mainwindow.cpp b/apps/armoury/src/mainwindow.cpp index aa07122..cfe0253 100644 --- a/apps/armoury/src/mainwindow.cpp +++ b/apps/armoury/src/mainwindow.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -24,13 +25,12 @@ #include "settingswindow.h" MainWindow::MainWindow(GameData *in_data) - : NovusMainWindow() + : KXmlGuiWindow() , data(*in_data) , cache(FileCache{*in_data}) , m_api(new PenumbraApi(this)) { setMinimumSize(QSize(800, 600)); - setupMenubar(); auto dummyWidget = new QSplitter(); dummyWidget->setChildrenCollapsible(false); @@ -78,55 +78,63 @@ MainWindow::MainWindow(GameData *in_data) i++; } }); + + setupActions(); + setupGUI(Keys | Save | Create, QStringLiteral("geareditor.rc")); + + // We don't provide help (yet) + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))); + // This isn't KDE software + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))); } -void MainWindow::setupAdditionalMenus(QMenuBar *menuBar) +void MainWindow::configure() { - auto toolsMenu = menuBar->addMenu(i18nc("@title:menu", "Tools")); + auto settingsWindow = new SettingsWindow(); + settingsWindow->show(); +} - auto cmpEditorMenu = toolsMenu->addAction(i18nc("@action:inmenu CMP is an abbreviation", "CMP Editor")); - cmpEditorMenu->setIcon(QIcon::fromTheme(QStringLiteral("document-edit"))); - connect(cmpEditorMenu, &QAction::triggered, [this] { - auto cmpEditor = new CmpEditor(&data); - cmpEditor->show(); - }); +void MainWindow::setupActions() +{ + KStandardAction::preferences(this, &MainWindow::configure, actionCollection()); + KStandardAction::quit(qApp, &QCoreApplication::quit, actionCollection()); - auto windowMenu = menuBar->addMenu(i18nc("@title:menu", "Window")); - - auto fmvMenu = windowMenu->addAction(i18nc("@action:inmenu", "Full Model Viewer")); - fmvMenu->setCheckable(true); - fmvMenu->setIcon(QIcon::fromTheme(QStringLiteral("user-symbolic"))); - connect(fmvMenu, &QAction::toggled, [this](bool toggled) { + auto showFMVAction = new QAction(this); + showFMVAction->setText(i18n("&Full Model Viewer")); + showFMVAction->setCheckable(true); + showFMVAction->setIcon(QIcon::fromTheme(QStringLiteral("user-symbolic"))); + connect(showFMVAction, &QAction::toggled, [this](bool toggled) { if (toggled) { fullModelViewer->show(); } else { fullModelViewer->hide(); } }); - connect(fullModelViewer, &FullModelViewer::visibleChanged, this, [this, fmvMenu] { - fmvMenu->setChecked(fullModelViewer->isVisible()); + connect(fullModelViewer, &FullModelViewer::visibleChanged, this, [this, showFMVAction] { + showFMVAction->setChecked(fullModelViewer->isVisible()); }); + actionCollection()->addAction(QStringLiteral("show_fmv"), showFMVAction); - auto penumbraMenu = menuBar->addMenu(i18nc("@title:menu", "Penumbra")); + auto cmpEditorAction = new QAction(this); + cmpEditorAction->setText(i18n("&CMP Editor")); + cmpEditorAction->setIcon(QIcon::fromTheme(QStringLiteral("document-edit"))); + connect(cmpEditorAction, &QAction::triggered, [this] { + auto cmpEditor = new CmpEditor(&data); + cmpEditor->show(); + }); + actionCollection()->addAction(QStringLiteral("cmp_editor"), cmpEditorAction); - auto redrawAction = penumbraMenu->addAction(i18nc("@action:inmenu", "Redraw All")); + auto redrawAction = new QAction(i18nc("@action:inmenu", "Redraw All")); connect(redrawAction, &QAction::triggered, [this] { m_api->redrawAll(); }); + actionCollection()->addAction(QStringLiteral("redraw_all"), redrawAction); - auto openWindowAction = penumbraMenu->addAction(i18nc("@action:inmenu", "Open Window")); + auto openWindowAction = new QAction(i18nc("@action:inmenu", "Open Window")); connect(openWindowAction, &QAction::triggered, [this] { m_api->openWindow(); }); - - auto settingsMenu = menuBar->addMenu(i18nc("@title:menu", "Settings")); - - auto settingsAction = settingsMenu->addAction(i18nc("@action:inmenu", "Configure Armoury…")); - settingsAction->setIcon(QIcon::fromTheme(QStringLiteral("configure-symbolic"))); - connect(settingsAction, &QAction::triggered, [this] { - auto settingsWindow = new SettingsWindow(); - settingsWindow->show(); - }); + actionCollection()->addAction(QStringLiteral("open_window"), openWindowAction); } #include "moc_mainwindow.cpp" diff --git a/apps/gamelauncher/include/mainwindow.h b/apps/gamelauncher/include/mainwindow.h index 1bf7f0e..a749d7f 100644 --- a/apps/gamelauncher/include/mainwindow.h +++ b/apps/gamelauncher/include/mainwindow.h @@ -3,13 +3,13 @@ #pragma once -#include +#include -#include "novusmainwindow.h" +#include struct GameData; -class MainWindow : public NovusMainWindow +class MainWindow : public KXmlGuiWindow { Q_OBJECT diff --git a/apps/gamelauncher/src/main.cpp b/apps/gamelauncher/src/main.cpp index 373e3df..54032b5 100644 --- a/apps/gamelauncher/src/main.cpp +++ b/apps/gamelauncher/src/main.cpp @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) KLocalizedString::setApplicationDomain(QByteArrayLiteral("novus")); - customizeAboutData(QStringLiteral("gamelauncher"), + customizeAboutData(QStringLiteral("novus"), QStringLiteral("zone.xiv.gamelauncher"), QStringLiteral("Game Launcher"), i18n("Program to launch the game for debug purposes.")); diff --git a/apps/gamelauncher/src/mainwindow.cpp b/apps/gamelauncher/src/mainwindow.cpp index 1db3ce8..2548f1a 100644 --- a/apps/gamelauncher/src/mainwindow.cpp +++ b/apps/gamelauncher/src/mainwindow.cpp @@ -4,19 +4,20 @@ #include "mainwindow.h" #include "settings.h" +#include #include #include +#include +#include #include #include -#include -#include #include -#include +#include -MainWindow::MainWindow() : NovusMainWindow() +MainWindow::MainWindow() + : KXmlGuiWindow() { setMinimumSize(1280, 720); - setupMenubar(); process = new QProcess(); process->setWorkingDirectory(getGameDirectory()); @@ -38,6 +39,13 @@ MainWindow::MainWindow() : NovusMainWindow() process->start(); }); layout->addWidget(launchGameButton); + + setupGUI(Keys | Save | Create); + + // We don't provide help (yet) + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))); + // This isn't KDE software + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))); } #include "moc_mainwindow.cpp" \ No newline at end of file diff --git a/apps/karuku/CMakeLists.txt b/apps/karuku/CMakeLists.txt index ab87cb0..d9e864a 100644 --- a/apps/karuku/CMakeLists.txt +++ b/apps/karuku/CMakeLists.txt @@ -25,6 +25,7 @@ target_link_libraries(novus-karuku Qt6::Network) install(TARGETS novus-karuku ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) +install(FILES exceleditor.rc DESTINATION ${KDE_INSTALL_KXMLGUIDIR}/novus) ecm_add_app_icon(novus-karuku ICONS diff --git a/apps/karuku/exceleditor.rc b/apps/karuku/exceleditor.rc new file mode 100644 index 0000000..8a7e98d --- /dev/null +++ b/apps/karuku/exceleditor.rc @@ -0,0 +1,15 @@ + + + + + File + + + + + diff --git a/apps/karuku/include/mainwindow.h b/apps/karuku/include/mainwindow.h index 9e215c0..ae8e8cf 100644 --- a/apps/karuku/include/mainwindow.h +++ b/apps/karuku/include/mainwindow.h @@ -3,23 +3,21 @@ #pragma once +#include #include -#include "novusmainwindow.h" - struct GameData; -class MainWindow : public NovusMainWindow +class MainWindow : public KXmlGuiWindow { Q_OBJECT public: explicit MainWindow(GameData *data); -protected: - void setupFileMenu(QMenu *menu) override; - private: + void setupActions(); + GameData *data = nullptr; QNetworkAccessManager *mgr = nullptr; }; \ No newline at end of file diff --git a/apps/karuku/src/main.cpp b/apps/karuku/src/main.cpp index fd39053..c77de9c 100644 --- a/apps/karuku/src/main.cpp +++ b/apps/karuku/src/main.cpp @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) KLocalizedString::setApplicationDomain(QByteArrayLiteral("novus")); - customizeAboutData(QStringLiteral("karuku"), QStringLiteral("zone.xiv.karaku"), QStringLiteral("Excel Editor"), i18n("Program to view FFXIV Excel files.")); + customizeAboutData(QStringLiteral("novus"), QStringLiteral("zone.xiv.karaku"), QStringLiteral("Excel Editor"), i18n("Program to view FFXIV Excel files.")); // Default to a sensible message pattern if (qEnvironmentVariableIsEmpty("QT_MESSAGE_PATTERN")) { diff --git a/apps/karuku/src/mainwindow.cpp b/apps/karuku/src/mainwindow.cpp index 9934f42..ab58517 100644 --- a/apps/karuku/src/mainwindow.cpp +++ b/apps/karuku/src/mainwindow.cpp @@ -3,6 +3,7 @@ #include "mainwindow.h" +#include #include #include #include @@ -23,11 +24,10 @@ #include "sheetlistwidget.h" MainWindow::MainWindow(GameData *data) - : NovusMainWindow() + : KXmlGuiWindow() , data(data) { setMinimumSize(1280, 720); - setupMenubar(); mgr = new QNetworkAccessManager(this); @@ -55,6 +55,14 @@ MainWindow::MainWindow(GameData *data) exdPart->loadSheet(name, file, definitionsDir.absoluteFilePath(QStringLiteral("%1.json").arg(name))); }); + + setupActions(); + setupGUI(Keys | Save | Create, QStringLiteral("exceleditor.rc")); + + // We don't provide help (yet) + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))); + // This isn't KDE software + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))); } static bool copyDirectory(const QString &srcFilePath, const QString &tgtFilePath) @@ -79,9 +87,9 @@ static bool copyDirectory(const QString &srcFilePath, const QString &tgtFilePath return false; } -void MainWindow::setupFileMenu(QMenu *menu) +void MainWindow::setupActions() { - auto openList = menu->addAction(i18nc("@action:inmenu", "Import Definitions…")); + auto openList = new QAction(i18nc("@action:inmenu", "Import Definitions…")); openList->setIcon(QIcon::fromTheme(QStringLiteral("document-open"))); connect(openList, &QAction::triggered, [this] { auto fileName = QFileDialog::getExistingDirectory(nullptr, i18nc("@title:window", "Open Defintions Directory"), QStringLiteral("~")); @@ -100,8 +108,9 @@ void MainWindow::setupFileMenu(QMenu *menu) QMessageBox::information(this, i18nc("@title:window", "Definitions"), i18n("Successfully imported definitions!")); }); + actionCollection()->addAction(QStringLiteral("import_list"), openList); - auto downloadList = menu->addAction(i18nc("@action:inmenu", "Download Definitions…")); + auto downloadList = new QAction(i18nc("@action:inmenu", "Download Definitions…")); downloadList->setIcon(QIcon::fromTheme(QStringLiteral("download-symbolic"))); connect(downloadList, &QAction::triggered, [this] { const int ret = QMessageBox::information( @@ -159,6 +168,7 @@ void MainWindow::setupFileMenu(QMenu *menu) QMessageBox::information(this, i18nc("@title:window", "Definitions"), i18n("Successfully downloaded and imported definitions!")); }); }); + actionCollection()->addAction(QStringLiteral("download_list"), downloadList); } #include "moc_mainwindow.cpp" \ No newline at end of file diff --git a/apps/mapeditor/include/mainwindow.h b/apps/mapeditor/include/mainwindow.h index 541a9dc..0477212 100644 --- a/apps/mapeditor/include/mainwindow.h +++ b/apps/mapeditor/include/mainwindow.h @@ -3,12 +3,13 @@ #pragma once +#include + #include "filecache.h" -#include "novusmainwindow.h" struct GameData; -class MainWindow : public NovusMainWindow +class MainWindow : public KXmlGuiWindow { Q_OBJECT diff --git a/apps/mapeditor/src/main.cpp b/apps/mapeditor/src/main.cpp index 4f8fe3c..92f2f72 100644 --- a/apps/mapeditor/src/main.cpp +++ b/apps/mapeditor/src/main.cpp @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) KLocalizedString::setApplicationDomain(QByteArrayLiteral("novus")); - customizeAboutData(QStringLiteral("mapeditor"), QStringLiteral("zone.xiv.mapeditor"), QStringLiteral("Map Editor"), i18n("Program to view FFXIV maps.")); + customizeAboutData(QStringLiteral("novus"), QStringLiteral("zone.xiv.mapeditor"), QStringLiteral("Map Editor"), i18n("Program to view FFXIV maps.")); // Default to a sensible message pattern if (qEnvironmentVariableIsEmpty("QT_MESSAGE_PATTERN")) { diff --git a/apps/mapeditor/src/mainwindow.cpp b/apps/mapeditor/src/mainwindow.cpp index 840d779..03a3075 100644 --- a/apps/mapeditor/src/mainwindow.cpp +++ b/apps/mapeditor/src/mainwindow.cpp @@ -3,6 +3,7 @@ #include "mainwindow.h" +#include #include #include #include @@ -16,12 +17,11 @@ #include "mapview.h" MainWindow::MainWindow(GameData *data) - : NovusMainWindow() + : KXmlGuiWindow() , data(data) , cache(*data) { setMinimumSize(1280, 720); - setupMenubar(); auto dummyWidget = new QSplitter(); dummyWidget->setChildrenCollapsible(false); @@ -45,6 +45,13 @@ MainWindow::MainWindow(GameData *data) auto tera = physis_parse_tera(tera_buffer); mapView->addTerrain(bgPath, tera); }); + + setupGUI(Keys | Save | Create); + + // We don't provide help (yet) + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))); + // This isn't KDE software + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))); } #include "moc_mainwindow.cpp" \ No newline at end of file diff --git a/apps/mateditor/include/mainwindow.h b/apps/mateditor/include/mainwindow.h index b9777f6..2e08d49 100644 --- a/apps/mateditor/include/mainwindow.h +++ b/apps/mateditor/include/mainwindow.h @@ -3,12 +3,13 @@ #pragma once +#include + #include "filecache.h" -#include "novusmainwindow.h" struct GameData; -class MainWindow : public NovusMainWindow +class MainWindow : public KXmlGuiWindow { Q_OBJECT diff --git a/apps/mateditor/src/main.cpp b/apps/mateditor/src/main.cpp index 308a2ce..9f719bb 100644 --- a/apps/mateditor/src/main.cpp +++ b/apps/mateditor/src/main.cpp @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) KLocalizedString::setApplicationDomain(QByteArrayLiteral("novus")); - customizeAboutData(QStringLiteral("mateditor"), + customizeAboutData(QStringLiteral("novus"), QStringLiteral("zone.xiv.mateditor"), QStringLiteral("Material Editor"), i18n("Program to view FFXIV materials.")); diff --git a/apps/mateditor/src/mainwindow.cpp b/apps/mateditor/src/mainwindow.cpp index 0c7435d..a800db6 100644 --- a/apps/mateditor/src/mainwindow.cpp +++ b/apps/mateditor/src/mainwindow.cpp @@ -3,7 +3,7 @@ #include "mainwindow.h" -#include +#include #include #include #include @@ -14,12 +14,11 @@ #include "mtrlpart.h" MainWindow::MainWindow(GameData *data) - : NovusMainWindow() + : KXmlGuiWindow() , data(data) , cache(*data) { setMinimumSize(1280, 720); - setupMenubar(); auto matFile = physis_gamedata_extract_file(data, "chara/equipment/e0028/material/v0001/mt_c0101e0028_top_a.mtrl"); m_material = physis_material_parse(matFile); @@ -36,6 +35,13 @@ MainWindow::MainWindow(GameData *data) auto matView = new MaterialView(data, cache); matView->addSphere(m_material); dummyWidget->addWidget(matView); + + setupGUI(Keys | Save | Create); + + // We don't provide help (yet) + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))); + // This isn't KDE software + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))); } #include "moc_mainwindow.cpp" \ No newline at end of file diff --git a/apps/mdlviewer/CMakeLists.txt b/apps/mdlviewer/CMakeLists.txt index 039fd75..7195b37 100644 --- a/apps/mdlviewer/CMakeLists.txt +++ b/apps/mdlviewer/CMakeLists.txt @@ -22,6 +22,7 @@ target_link_libraries(novus-mdlviewer Qt6::Widgets) install(TARGETS novus-mdlviewer ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) +install(FILES mdlviewer.rc DESTINATION ${KDE_INSTALL_KXMLGUIDIR}/novus) ecm_add_app_icon(novus-mdlviewer ICONS diff --git a/apps/mdlviewer/include/mainwindow.h b/apps/mdlviewer/include/mainwindow.h index 210c48c..03c1e42 100644 --- a/apps/mdlviewer/include/mainwindow.h +++ b/apps/mdlviewer/include/mainwindow.h @@ -4,22 +4,22 @@ #pragma once #include "filecache.h" -#include "novusmainwindow.h" +#include #include struct GameData; class MDLPart; -class MainWindow : public NovusMainWindow +class MainWindow : public KXmlGuiWindow { Q_OBJECT public: explicit MainWindow(GameData *data); -protected: - void setupFileMenu(QMenu *menu) override; +private: + void setupActions(); GameData *data = nullptr; MDLPart *part = nullptr; diff --git a/apps/mdlviewer/mdlviewer.rc b/apps/mdlviewer/mdlviewer.rc new file mode 100644 index 0000000..2595e39 --- /dev/null +++ b/apps/mdlviewer/mdlviewer.rc @@ -0,0 +1,14 @@ + + + + + File + + + + diff --git a/apps/mdlviewer/src/main.cpp b/apps/mdlviewer/src/main.cpp index 42ed644..dd1aef2 100644 --- a/apps/mdlviewer/src/main.cpp +++ b/apps/mdlviewer/src/main.cpp @@ -16,10 +16,7 @@ int main(int argc, char *argv[]) KLocalizedString::setApplicationDomain(QByteArrayLiteral("novus")); - customizeAboutData(QStringLiteral("mdlviewer"), - QStringLiteral("zone.xiv.mdlviewer"), - QStringLiteral("MDLViewer"), - i18n("Program to view FFXIV MDL files.")); + customizeAboutData(QStringLiteral("novus"), QStringLiteral("zone.xiv.mdlviewer"), QStringLiteral("MDLViewer"), i18n("Program to view FFXIV MDL files.")); // Default to a sensible message pattern if (qEnvironmentVariableIsEmpty("QT_MESSAGE_PATTERN")) { diff --git a/apps/mdlviewer/src/mainwindow.cpp b/apps/mdlviewer/src/mainwindow.cpp index d492f57..fb16762 100644 --- a/apps/mdlviewer/src/mainwindow.cpp +++ b/apps/mdlviewer/src/mainwindow.cpp @@ -3,6 +3,7 @@ #include "mainwindow.h" +#include #include #include #include @@ -18,12 +19,11 @@ #include "mdlpart.h" MainWindow::MainWindow(GameData *data) - : NovusMainWindow() + : KXmlGuiWindow() , data(data) , cache(FileCache{*data}) { setMinimumSize(640, 480); - setupMenubar(); auto dummyWidget = new QWidget(); setCentralWidget(dummyWidget); @@ -68,11 +68,19 @@ MainWindow::MainWindow(GameData *data) tabWidget->tabBar()->setExpanding(true); layout->addWidget(tabWidget); + + setupActions(); + setupGUI(Keys | Save | Create, QStringLiteral("mdlviewer.rc")); + + // We don't provide help (yet) + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))); + // This isn't KDE software + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))); } -void MainWindow::setupFileMenu(QMenu *menu) +void MainWindow::setupActions() { - auto openMDLFile = menu->addAction(i18nc("@action:inmenu MDL is an abbreviation for a file type", "Open MDL…")); + auto openMDLFile = new QAction(i18nc("@action:inmenu MDL is an abbreviation for a file type", "Open MDL…")); openMDLFile->setIcon(QIcon::fromTheme(QStringLiteral("document-open"))); connect(openMDLFile, &QAction::triggered, [this] { auto fileName = QFileDialog::getOpenFileName(nullptr, i18nc("@title:window", "Open MDL File"), QStringLiteral("~"), i18n("FFXIV Model File (*.mdl)")); @@ -110,6 +118,7 @@ void MainWindow::setupFileMenu(QMenu *menu) m_detailsLayout->addRow(i18n("Triangle #:"), new QLabel(QString::number(triangleCount))); } }); + actionCollection()->addAction(QStringLiteral("open_mdl"), openMDLFile); } #include "moc_mainwindow.cpp" diff --git a/apps/sagasu/CMakeLists.txt b/apps/sagasu/CMakeLists.txt index 1dbfc21..31015d7 100644 --- a/apps/sagasu/CMakeLists.txt +++ b/apps/sagasu/CMakeLists.txt @@ -50,6 +50,7 @@ target_link_libraries(novus-sagasu Qt6::Network) install(TARGETS novus-sagasu ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) +install(FILES dataexplorer.rc DESTINATION ${KDE_INSTALL_KXMLGUIDIR}/novus) ecm_add_app_icon(novus-sagasu ICONS diff --git a/apps/sagasu/dataexplorer.rc b/apps/sagasu/dataexplorer.rc new file mode 100644 index 0000000..8a7e98d --- /dev/null +++ b/apps/sagasu/dataexplorer.rc @@ -0,0 +1,15 @@ + + + + + File + + + + + diff --git a/apps/sagasu/include/mainwindow.h b/apps/sagasu/include/mainwindow.h index b6f6c8b..71f2546 100644 --- a/apps/sagasu/include/mainwindow.h +++ b/apps/sagasu/include/mainwindow.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include #include @@ -11,21 +12,19 @@ #include "filecache.h" #include "filetreewindow.h" #include "hashdatabase.h" -#include "novusmainwindow.h" #include struct GameData; -class MainWindow : public NovusMainWindow +class MainWindow : public KXmlGuiWindow { public: MainWindow(const QString &gamePath, GameData *data); -protected: - void setupFileMenu(QMenu *menu) override; - private: + void setupActions(); + GameData *data = nullptr; QTabWidget *partHolder = nullptr; FileCache fileCache; diff --git a/apps/sagasu/src/main.cpp b/apps/sagasu/src/main.cpp index 5205031..7793866 100644 --- a/apps/sagasu/src/main.cpp +++ b/apps/sagasu/src/main.cpp @@ -17,7 +17,7 @@ int main(int argc, char *argv[]) KLocalizedString::setApplicationDomain(QByteArrayLiteral("novus")); - customizeAboutData(QStringLiteral("sagasu"), + customizeAboutData(QStringLiteral("novus"), QStringLiteral("zone.xiv.sagasu"), QStringLiteral("Data Explorer"), i18n("Program to explore FFXIV data archives.")); diff --git a/apps/sagasu/src/mainwindow.cpp b/apps/sagasu/src/mainwindow.cpp index cab872c..60b7acf 100644 --- a/apps/sagasu/src/mainwindow.cpp +++ b/apps/sagasu/src/mainwindow.cpp @@ -3,6 +3,7 @@ #include "mainwindow.h" +#include #include #include #include @@ -31,11 +32,11 @@ #include "texpart.h" MainWindow::MainWindow(const QString &gamePath, GameData *data) - : NovusMainWindow() + : KXmlGuiWindow() , data(data) , fileCache(*data) { - setupMenubar(); + // setupMenubar(); setMinimumSize(1280, 720); m_mgr = new QNetworkAccessManager(this); @@ -86,6 +87,14 @@ MainWindow::MainWindow(const QString &gamePath, GameData *data) dummyWidget->addWidget(partHolder); refreshParts({}); + + setupActions(); + setupGUI(Keys | Save | Create, QStringLiteral("dataexplorer.rc")); + + // We don't provide help (yet) + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))); + // This isn't KDE software + actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))); } void MainWindow::refreshParts(const QString &path) @@ -177,9 +186,9 @@ void MainWindow::refreshParts(const QString &path) partHolder->tabBar()->setExpanding(true); } -void MainWindow::setupFileMenu(QMenu *menu) +void MainWindow::setupActions() { - auto openList = menu->addAction(i18nc("@action:inmenu", "Import Path List…")); + auto openList = new QAction(i18nc("@action:inmenu", "Import Path List…")); openList->setIcon(QIcon::fromTheme(QStringLiteral("document-open"))); connect(openList, &QAction::triggered, [this] { auto fileName = QFileDialog::getOpenFileName(nullptr, i18nc("@title:window", "Open Path List"), QStringLiteral("~")); @@ -199,8 +208,9 @@ void MainWindow::setupFileMenu(QMenu *menu) QMessageBox::information(this, i18nc("@title:window", "Import Complete"), i18n("Successfully imported path list!"), QMessageBox::Ok, QMessageBox::Ok); }); + actionCollection()->addAction(QStringLiteral("import_list"), openList); - auto downloadList = menu->addAction(i18nc("@action:inmenu", "Download Path List…")); + auto downloadList = new QAction(i18nc("@action:inmenu", "Download Path List…")); downloadList->setIcon(QIcon::fromTheme(QStringLiteral("download-symbolic"))); connect(downloadList, &QAction::triggered, [this] { const int ret = @@ -253,4 +263,5 @@ void MainWindow::setupFileMenu(QMenu *menu) QMessageBox::Ok); }); }); + actionCollection()->addAction(QStringLiteral("download_list"), downloadList); } diff --git a/apps/sdklauncher/include/mainwindow.h b/apps/sdklauncher/include/mainwindow.h index ded9f20..146a5f4 100644 --- a/apps/sdklauncher/include/mainwindow.h +++ b/apps/sdklauncher/include/mainwindow.h @@ -3,9 +3,9 @@ #pragma once -#include "novusmainwindow.h" +#include -class MainWindow : public NovusMainWindow +class MainWindow : public KXmlGuiWindow { Q_OBJECT diff --git a/apps/sdklauncher/src/main.cpp b/apps/sdklauncher/src/main.cpp index 5f4ac9f..9058310 100644 --- a/apps/sdklauncher/src/main.cpp +++ b/apps/sdklauncher/src/main.cpp @@ -18,7 +18,7 @@ int main(int argc, char *argv[]) KLocalizedString::setApplicationDomain(QByteArrayLiteral("novus")); - customizeAboutData(QStringLiteral("launcher"), + customizeAboutData(QStringLiteral("novus"), QStringLiteral("zone.xiv.novus"), QStringLiteral("Novus SDK"), i18n("Handles setting up and launching various Novus SDK components.")); diff --git a/apps/sdklauncher/src/mainwindow.cpp b/apps/sdklauncher/src/mainwindow.cpp index 3e7eb93..411a34a 100644 --- a/apps/sdklauncher/src/mainwindow.cpp +++ b/apps/sdklauncher/src/mainwindow.cpp @@ -30,10 +30,8 @@ static QMap links = {{QStringLiteral("XIV Dev Wiki"), QStringL {QStringLiteral("XIV Docs"), QStringLiteral("https://docs.xiv.zone")}}; MainWindow::MainWindow() - : NovusMainWindow() + : KXmlGuiWindow() { - setupMenubar(); - auto appList = new QListWidget(); auto applicationHeader = new QListWidgetItem(); @@ -102,6 +100,9 @@ MainWindow::MainWindow() centralWidget->setLayout(mainLayout); setCentralWidget(centralWidget); + + // setupGUI(StandardWindowOption::ToolBar | StandardWindowOption::Keys | StandardWindowOption::StatusBar | StandardWindowOption::Save); + createGUI(); } #include "moc_mainwindow.cpp" \ No newline at end of file diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 1ba271d..d3201a9 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -11,7 +11,6 @@ target_sources(novus-common include/aboutdata.h include/filecache.h include/filetypes.h - include/novusmainwindow.h include/quaternionedit.h include/settings.h include/vec3edit.h @@ -19,7 +18,6 @@ target_sources(novus-common src/aboutdata.cpp src/filecache.cpp src/filetypes.cpp - src/novusmainwindow.cpp src/quaternionedit.cpp src/settings.cpp src/vec3edit.cpp) diff --git a/common/include/novusmainwindow.h b/common/include/novusmainwindow.h deleted file mode 100644 index 39892d0..0000000 --- a/common/include/novusmainwindow.h +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Joshua Goins -// SPDX-License-Identifier: GPL-3.0-or-later - -#pragma once - -#include - -#include "novuscommon_export.h" - -class NOVUSCOMMON_EXPORT NovusMainWindow : public QMainWindow -{ -public: - explicit NovusMainWindow(); - -protected: - void setupMenubar(); - - virtual void setupFileMenu(QMenu *menu) - { - Q_UNUSED(menu) - } - - virtual void setupAdditionalMenus(QMenuBar *menuBar) - { - Q_UNUSED(menuBar) - } -}; \ No newline at end of file diff --git a/common/src/aboutdata.cpp b/common/src/aboutdata.cpp index 52daf43..9552b6a 100644 --- a/common/src/aboutdata.cpp +++ b/common/src/aboutdata.cpp @@ -88,7 +88,7 @@ void customizeAboutData(const QString &componentName, const QString &desktopFile {}, QStringLiteral("https://github.com/Neargye/magic_enum"), KAboutLicense::MIT); - about.setBugAddress(QByteArrayLiteral("https://lists.sr.ht/~redstrate/public-inbox")); + about.setBugAddress(QByteArrayLiteral("https://github.com/redstrate/Novus/issues")); about.setComponentName(componentName); about.setProgramLogo(desktopFilename); about.setDesktopFileName(desktopFilename); diff --git a/common/src/novusmainwindow.cpp b/common/src/novusmainwindow.cpp deleted file mode 100644 index 17f9209..0000000 --- a/common/src/novusmainwindow.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Joshua Goins -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "novusmainwindow.h" - -#include -#include -#include -#include -#include -#include - -NovusMainWindow::NovusMainWindow() -{ - setWindowTitle(KAboutData::applicationData().displayName()); -} - -void NovusMainWindow::setupMenubar() -{ - auto fileMenu = menuBar()->addMenu(i18nc("@title:menu", "File")); - - setupFileMenu(fileMenu); - if (!fileMenu->isEmpty()) { - fileMenu->addSeparator(); - } - - auto quitAction = fileMenu->addAction(i18nc("@action:inmenu", "Quit")); - quitAction->setIcon(QIcon::fromTheme(QStringLiteral("gtk-quit"))); - connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit); - - setupAdditionalMenus(menuBar()); - - auto helpMenu = menuBar()->addMenu(i18nc("@title:menu", "Help")); - - auto donateAction = helpMenu->addAction(i18nc("@action:inmenu", "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(i18nc("@action:inmenu About application", "About %1", KAboutData::applicationData().displayName())); - 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(i18nc("@action:inmenu", "About Qt")); - aboutQtAction->setIcon(QIcon(QStringLiteral(":/qt-project.org/qmessagebox/images/qtlogo-64.png"))); - connect(aboutQtAction, &QAction::triggered, QApplication::instance(), &QApplication::aboutQt); -}