/* * 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 #include ApplicationMenu::ApplicationMenu(Browser *app, QWidget *parent) : QMenu(parent) { m_app = app; 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, plugin]() { if(plugin->isLoaded()) { const auto *interface = qobject_cast(plugin->instance()); auto *dlg = interface->createWidget(this->parentWidget()); if(auto *profileDlg = dynamic_cast(dlg)) { WebProfileManager mgr; mgr.walk([profileDlg](const QString &id, WebProfile *profile, QSettings *settings) { profileDlg->addProfile(id, profile->name(), profile, settings); }); } dlg->exec(); } else { spdlog::warn("Trying to run unloaded plugin!"); } }); insertAction(bottom_pluginSeparator, action); }