aboutsummaryrefslogtreecommitdiff
path: root/src/applicationmenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/applicationmenu.cpp')
-rw-r--r--src/applicationmenu.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/applicationmenu.cpp b/src/applicationmenu.cpp
new file mode 100644
index 0000000..b7acd57
--- /dev/null
+++ b/src/applicationmenu.cpp
@@ -0,0 +1,68 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: https://neueland.iserlohn-fortress.net/cgit/smolbote
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#include "applicationmenu.h"
+#include "browser.h"
+#include "configuration.h"
+#include "session/savesessiondialog.h"
+#include "session/sessiondialog.h"
+#include "smolbote/plugininterface.hpp"
+#include <QPluginLoader>
+
+ApplicationMenu::ApplicationMenu(Browser *app, QWidget *parent)
+ : QMenu(parent)
+{
+ setTitle(qApp->applicationName());
+ Configuration conf;
+
+ const auto sessionPath = conf.value<QString>("session.path").value();
+ auto *actionSaveSession = addAction(tr("Save Session"), this, [sessionPath]() {
+ auto *sessionDialog = new SaveSessionDialog(nullptr);
+ if(sessionDialog->exec() == QDialog::Accepted) {
+ sessionDialog->save(sessionPath);
+ }
+ });
+ conf.shortcut<QAction>(*actionSaveSession, "shortcuts.session.save");
+
+ auto *actionOpenSession = addAction(tr("Open Session"), this, []() {
+ auto *sessionDialog = new SessionDialog(nullptr);
+ sessionDialog->exec();
+ });
+ conf.shortcut<QAction>(*actionOpenSession, "shortcuts.session.open");
+
+ bottom_pluginSeparator = addSeparator();
+
+ auto *actionAbout = addAction(tr("About"), app, &Browser::about);
+ conf.shortcut<QAction>(*actionAbout, "shortcuts.window.about");
+
+ auto *action_aboutPlugins = addAction(tr("About Plugins"), app, &Browser::aboutPlugins);
+ conf.shortcut(*action_aboutPlugins, "app.shortcuts.about.plugins");
+
+ auto *actionQuit = addAction(tr("Quit"), app, &Browser::quit);
+ conf.shortcut<QAction>(*actionQuit, "shortcuts.window.quit");
+}
+
+void ApplicationMenu::addPlugin(QPluginLoader *plugin)
+{
+ if(top_pluginSeparator == nullptr) {
+ top_pluginSeparator = insertSeparator(bottom_pluginSeparator);
+ }
+
+ const auto metadata = plugin->metaData().value("MetaData").toObject();
+ auto *action = addAction(metadata.value("name").toString());
+ action->setShortcut(QKeySequence::fromString(metadata.value("shortcut").toString()));
+
+ connect(action, &QAction::triggered, this, [this, plugin]() {
+ if(plugin->isLoaded()) {
+ if(const auto *interface = qobject_cast<PluginInterface *>(plugin->instance())) {
+ interface->createWidget(this->parentWidget())->exec();
+ }
+ }
+ });
+ insertAction(bottom_pluginSeparator, action);
+}