diff options
-rw-r--r-- | plugins/ProfileEditor/CMakeLists.txt | 6 | ||||
-rw-r--r-- | plugins/ProfileEditor/forms/profilemanagerdialog.cpp | 45 | ||||
-rw-r--r-- | plugins/ProfileEditor/forms/profilemanagerdialog.h | 31 | ||||
-rw-r--r-- | plugins/ProfileEditor/forms/profilemanagerdialog.ui | 89 | ||||
-rw-r--r-- | plugins/ProfileEditor/profileeditorplugin.cpp | 8 | ||||
-rw-r--r-- | plugins/ProfileEditor/profileeditorplugin.h | 2 | ||||
-rw-r--r-- | plugins/interfaces.h | 2 | ||||
-rw-r--r-- | src/browser.cpp | 20 |
8 files changed, 192 insertions, 11 deletions
diff --git a/plugins/ProfileEditor/CMakeLists.txt b/plugins/ProfileEditor/CMakeLists.txt index ad4c457..2fa3ba8 100644 --- a/plugins/ProfileEditor/CMakeLists.txt +++ b/plugins/ProfileEditor/CMakeLists.txt @@ -10,7 +10,11 @@ add_library(ProfileEditorPlugin SHARED profileeditorplugin.h forms/profileview.cpp forms/profileview.h - forms/profileview.ui) + forms/profileview.ui + forms/profilemanagerdialog.cpp + forms/profilemanagerdialog.h + forms/profilemanagerdialog.ui +) target_include_directories(ProfileEditorPlugin PRIVATE ..) diff --git a/plugins/ProfileEditor/forms/profilemanagerdialog.cpp b/plugins/ProfileEditor/forms/profilemanagerdialog.cpp new file mode 100644 index 0000000..c5fec2b --- /dev/null +++ b/plugins/ProfileEditor/forms/profilemanagerdialog.cpp @@ -0,0 +1,45 @@ +#include "profilemanagerdialog.h" +#include "ui_profilemanagerdialog.h" +#include <QWebEngineProfile> +#include <QLabel> +#include "profileview.h" + +ProfileManagerDialog::ProfileManagerDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::ProfileManagerDialog) +{ + ui->setupUi(this); + + connect(ui->listWidget, &QListWidget::itemPressed, this, &ProfileManagerDialog::showProfile); + showProfile(nullptr); +} + +ProfileManagerDialog::~ProfileManagerDialog() +{ + delete ui; +} + +void ProfileManagerDialog::addProfile(const QString &name, QWebEngineProfile *profile) +{ + profiles.insert(name, profile); + ui->listWidget->addItem(name); +} + +void ProfileManagerDialog::showProfile(QListWidgetItem *item) +{ + // clear out groupbox layout + QLayoutItem *i; + while((i = ui->groupBox->layout()->takeAt(0)) != nullptr) { + delete i->widget(); + delete i; + } + + if(item == nullptr) { + ui->groupBox->setVisible(false); + return; + } + ui->groupBox->setVisible(true); + + auto *v = new ProfileView(profiles.value(item->text()), this); + ui->groupBox->layout()->addWidget(v); +} diff --git a/plugins/ProfileEditor/forms/profilemanagerdialog.h b/plugins/ProfileEditor/forms/profilemanagerdialog.h new file mode 100644 index 0000000..ed79824 --- /dev/null +++ b/plugins/ProfileEditor/forms/profilemanagerdialog.h @@ -0,0 +1,31 @@ +#ifndef PROFILEMANAGERDIALOG_H +#define PROFILEMANAGERDIALOG_H + +#include <QDialog> +#include <QHash> + +namespace Ui { +class ProfileManagerDialog; +} + +class QWebEngineProfile; +class QListWidgetItem; +class ProfileManagerDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ProfileManagerDialog(QWidget *parent = 0); + ~ProfileManagerDialog(); + + void addProfile(const QString &name, QWebEngineProfile *profile); + +private slots: + void showProfile(QListWidgetItem *item); + +private: + Ui::ProfileManagerDialog *ui; + QHash<QString, QWebEngineProfile *> profiles; +}; + +#endif // PROFILEMANAGERDIALOG_H diff --git a/plugins/ProfileEditor/forms/profilemanagerdialog.ui b/plugins/ProfileEditor/forms/profilemanagerdialog.ui new file mode 100644 index 0000000..ae3829a --- /dev/null +++ b/plugins/ProfileEditor/forms/profilemanagerdialog.ui @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ProfileManagerDialog</class> + <widget class="QDialog" name="ProfileManagerDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Profile Manager</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QListWidget" name="listWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"/> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>ProfileManagerDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>ProfileManagerDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/plugins/ProfileEditor/profileeditorplugin.cpp b/plugins/ProfileEditor/profileeditorplugin.cpp index b5e772f..041dbe7 100644 --- a/plugins/ProfileEditor/profileeditorplugin.cpp +++ b/plugins/ProfileEditor/profileeditorplugin.cpp @@ -8,6 +8,7 @@ #include "profileeditorplugin.h" #include "forms/profileview.h" +#include "forms/profilemanagerdialog.h" #include <QHash> QHash<QString, std::function<int ()> > ProfileEditorPlugin::commands() @@ -20,9 +21,12 @@ QHash<QString, std::function<int ()> > ProfileEditorPlugin::commands() return hash; } -QDialog *ProfileEditorPlugin::createWidget(QWebEngineProfile *profile, QWidget *parent) +QDialog *ProfileEditorPlugin::createWidget(QHash<QString, QWebEngineProfile *> profiles, QWidget *parent) { - auto *widget = new ProfileView(profile, parent); + auto *widget = new ProfileManagerDialog(parent); + for(const QString &name : profiles.keys()) { + widget->addProfile(name, profiles.value(name)); + } widget->setAttribute(Qt::WA_DeleteOnClose, true); return widget; } diff --git a/plugins/ProfileEditor/profileeditorplugin.h b/plugins/ProfileEditor/profileeditorplugin.h index 4f88e1b..e026bbe 100644 --- a/plugins/ProfileEditor/profileeditorplugin.h +++ b/plugins/ProfileEditor/profileeditorplugin.h @@ -24,7 +24,7 @@ public: QHash<QString, std::function<int()>> commands() override; // ProfileInterface - QDialog *createWidget(QWebEngineProfile *profile, QWidget *parent) override; + QDialog *createWidget(QHash<QString, QWebEngineProfile *> profiles, QWidget *parent) override; }; #endif //PROFILEEDITOR_PLUGIN_H diff --git a/plugins/interfaces.h b/plugins/interfaces.h index 196da0b..4e361ab 100644 --- a/plugins/interfaces.h +++ b/plugins/interfaces.h @@ -34,7 +34,7 @@ class ProfileInterface { public: virtual ~ProfileInterface() = default; - virtual QDialog *createWidget(QWebEngineProfile *profile, QWidget *parent) = 0; + virtual QDialog *createWidget(QHash<QString, QWebEngineProfile *> profiles, QWidget *parent) = 0; }; #define PluginInterfaceIid "net.iserlohn-fortress.smolbote.PluginInterface" diff --git a/src/browser.cpp b/src/browser.cpp index b10ff6a..be9d6b5 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -35,7 +35,7 @@ inline QVector<Plugin> loadPlugins(const QString &location) if(loader.load()) { #ifdef QT_DEBUG - qDebug("Loading plugin: %s [ok]", qUtf8Printable(name)); + qDebug("Loading plugin: %s [ok]", qUtf8Printable(pluginsDir.absoluteFilePath(name))); #endif Plugin p; p.instance = std::shared_ptr<QObject>(loader.instance()); @@ -125,8 +125,12 @@ void Browser::setup(const QString &defaultProfile) if(p.instance->inherits("ProfileInterface")) { auto *profileEditor = qobject_cast<ProfileInterface *>(p.instance.get()); Q_ASSERT_X(profileEditor != nullptr, "Browser::setup", "profile interface cast failed"); - m_commands.insert("profileEditor:editDefaultProfile", [profileEditor]() -> int { - return profileEditor->createWidget(WebProfile::defaultProfile(), nullptr)->exec(); + m_commands.insert("profileEditor:edit", [this, profileEditor]() -> int { + QHash<QString,QWebEngineProfile *> p; + for(const QString &key : m_profiles.keys()) { + p.insert(key, m_profiles.value(key)); + } + return profileEditor->createWidget(p, nullptr)->exec(); }); } } @@ -229,9 +233,13 @@ MainWindow *Browser::createWindow() auto *profileEditor = qobject_cast<ProfileInterface *>(p.instance.get()); if(profileEditor) { auto *profileAction = new QAction(tr("Profile"), window); - connect(profileAction, &QAction::triggered, window, [profileEditor]() { - //window->currentSubWindow() - profileEditor->createWidget(WebProfile::defaultProfile(), nullptr)->show(); + connect(profileAction, &QAction::triggered, window, [this, profileEditor]() { + QHash<QString,QWebEngineProfile *> p; + for(const QString &key : m_profiles.keys()) { + p.insert(key, m_profiles.value(key)); + } + profileEditor->createWidget(p, nullptr)->show(); + //profileEditor->createWidget(WebProfile::defaultProfile(), nullptr)->show(); }); window->addAction(MainWindow::ToolsMenu, profileAction); } |