/* * 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 ApplicationMenu::ApplicationMenu(Browser *app, QWidget *parent) : QMenu(parent) { setTitle(qApp->applicationName()); Configuration conf; const auto sessionPath = conf.value("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(*actionSaveSession, "shortcuts.session.save"); auto *actionOpenSession = addAction(tr("Open Session"), this, []() { auto *sessionDialog = new SessionDialog(nullptr); sessionDialog->exec(); }); conf.shortcut(*actionOpenSession, "shortcuts.session.open"); bottom_pluginSeparator = addSeparator(); auto *actionAbout = addAction(tr("About"), app, &Browser::about); conf.shortcut(*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(*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(plugin->instance())) { interface->createWidget(this->parentWidget())->exec(); } } }); insertAction(bottom_pluginSeparator, action); }