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 @@
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
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);
-}