Skip to content

Commit 5bf7e29

Browse files
committed
Begin adding "Open In" widget that will allow switching game installs
It doesn't do anything but relaunch the current application right now, I plan on finishing the functionality later.
1 parent 2d0e922 commit 5bf7e29

9 files changed

Lines changed: 77 additions & 0 deletions

File tree

apps/armoury/src/mainwindow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "cmpeditor.h"
2222
#include "filecache.h"
2323
#include "gearlistwidget.h"
24+
#include "openinwidget.h"
2425
#include "penumbraapi.h"
2526
#include "settingswindow.h"
2627

@@ -82,6 +83,9 @@ MainWindow::MainWindow(physis_SqPackResource in_data)
8283
actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents)));
8384
// This isn't KDE software
8485
actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE)));
86+
87+
auto openInWidget = new OpenInWidget();
88+
menuBar()->setCornerWidget(openInWidget);
8589
}
8690

8791
void MainWindow::configure()

apps/karuku/src/mainwindow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <physis.hpp>
2525

2626
#include "exdpart.h"
27+
#include "openinwidget.h"
2728
#include "sheetlistwidget.h"
2829

2930
#include <QLineEdit>
@@ -67,6 +68,9 @@ MainWindow::MainWindow(physis_SqPackResource data)
6768
actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents)));
6869
// This isn't KDE software
6970
actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE)));
71+
72+
auto openInWidget = new OpenInWidget();
73+
menuBar()->setCornerWidget(openInWidget);
7074
}
7175

7276
static bool copyDirectory(const QString &srcFilePath, const QString &tgtFilePath)

apps/mapeditor/src/mainwindow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "maplistwidget.h"
1919
#include "mapview.h"
20+
#include "openinwidget.h"
2021
#include "scenepart.h"
2122
#include "scenestate.h"
2223
#include "settings.h"
@@ -48,6 +49,9 @@ MainWindow::MainWindow(physis_SqPackResource data)
4849
connect(m_part->sceneState(), &SceneState::selectionChanged, this, &MainWindow::updateActionState);
4950

5051
updateActionState();
52+
53+
auto openInWidget = new OpenInWidget();
54+
menuBar()->setCornerWidget(openInWidget);
5155
}
5256

5357
void MainWindow::configure()

apps/mateditor/src/mainwindow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "materialview.h"
1414
#include "mtrlpart.h"
15+
#include "openinwidget.h"
1516

1617
MainWindow::MainWindow(physis_SqPackResource data)
1718
: m_data(data)
@@ -42,6 +43,9 @@ MainWindow::MainWindow(physis_SqPackResource data)
4243
actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents)));
4344
// This isn't KDE software
4445
actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE)));
46+
47+
auto openInWidget = new OpenInWidget();
48+
menuBar()->setCornerWidget(openInWidget);
4549
}
4650

4751
void MainWindow::setupActions()

apps/mdlviewer/src/mainwindow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <physis.hpp>
1818

1919
#include "mdlpart.h"
20+
#include "openinwidget.h"
2021

2122
MainWindow::MainWindow(physis_SqPackResource data)
2223
: m_data(data)
@@ -75,6 +76,9 @@ MainWindow::MainWindow(physis_SqPackResource data)
7576
actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents)));
7677
// This isn't KDE software
7778
actionCollection()->removeAction(actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE)));
79+
80+
auto openInWidget = new OpenInWidget();
81+
menuBar()->setCornerWidget(openInWidget);
7882
}
7983

8084
void MainWindow::setupActions()

apps/sagasu/src/mainwindow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
#endif
4848

4949
#include "mdlimport.h"
50+
#include "openinwidget.h"
5051
#include "scenepart.h"
5152
#include "tmbpart.h"
5253

@@ -123,6 +124,9 @@ MainWindow::MainWindow(const QString &gamePath, physis_SqPackResource data)
123124
connect(PathEdit::handler(), &OpenPathHandler::pathOpened, this, [this](const QString &path) {
124125
m_tree->selectPath(path);
125126
});
127+
128+
auto openInWidget = new OpenInWidget();
129+
menuBar()->setCornerWidget(openInWidget);
126130
}
127131

128132
bool MainWindow::selectPath(const QString &path)

common/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ target_sources(novus-common
4545
include/editwidget.h
4646
include/uintedit.h
4747
include/booledit.h
48+
include/openinwidget.h
4849

4950
src/aboutdata.cpp
5051
src/filecache.cpp
@@ -57,6 +58,7 @@ target_sources(novus-common
5758
src/editwidget.cpp
5859
src/uintedit.cpp
5960
src/booledit.cpp
61+
src/openinwidget.cpp
6062

6163
launcherconfig.h)
6264
target_include_directories(novus-common

common/include/openinwidget.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// SPDX-FileCopyrightText: 2026 Joshua Goins <josh@redstrate.com>
2+
// SPDX-License-Identifier: GPL-3.0-or-later
3+
4+
#pragma once
5+
6+
#include <QMenuBar>
7+
8+
#include "novuscommon_export.h"
9+
10+
class NOVUSCOMMON_EXPORT OpenInWidget : public QMenuBar
11+
{
12+
Q_OBJECT
13+
public:
14+
OpenInWidget();
15+
};

common/src/openinwidget.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// SPDX-FileCopyrightText: 2026 Joshua Goins <josh@redstrate.com>
2+
// SPDX-License-Identifier: GPL-3.0-or-later
3+
4+
#include "openinwidget.h"
5+
6+
#include "settings.h"
7+
8+
#include <KConfig>
9+
#include <KConfigGroup>
10+
#include <KLocalizedString>
11+
#include <QCoreApplication>
12+
#include <QProcess>
13+
14+
OpenInWidget::OpenInWidget()
15+
{
16+
QMenu *menu = addMenu(i18n("Open In"));
17+
18+
const KConfig config(QStringLiteral("novusrc"));
19+
const KConfigGroup game = config.group(QStringLiteral("Game"));
20+
21+
const auto installs = getGameInstalls();
22+
for (const auto &install : installs) {
23+
if (install.uuid.toString() == game.readEntry(QStringLiteral("CurrentInstall"))) {
24+
menu->setTitle(install.label);
25+
} else {
26+
QAction *action = menu->addAction(install.label);
27+
connect(action, &QAction::triggered, this, [] {
28+
// TODO: pass arguments
29+
// TODO: pass install
30+
QProcess::startDetached(QCoreApplication::applicationFilePath(), {});
31+
});
32+
}
33+
}
34+
}
35+
36+
#include "moc_openinwidget.cpp"

0 commit comments

Comments
 (0)