Plugins can now have their own settings in the SettingsDialog #64

This commit is contained in:
0xFEEDC0DE
2018-03-11 14:07:50 +01:00
parent 7cea7aed9c
commit cf3b5f4660
6 changed files with 27 additions and 15 deletions

View File

@@ -8,6 +8,7 @@ WeatherSettings::WeatherSettings(QWidget *parent) :
SettingsWidget(parent) SettingsWidget(parent)
{ {
auto layout = new QFormLayout(this); auto layout = new QFormLayout(this);
layout->setMargin(0);
layout->addRow(tr("Weather API:"), new QLineEdit(this)); layout->addRow(tr("Weather API:"), new QLineEdit(this));

View File

@@ -34,7 +34,6 @@ struct {
QTranslator zeiterfassungguilibTranslator; QTranslator zeiterfassungguilibTranslator;
} translators; } translators;
QSet<std::shared_ptr<QPluginLoader> > pluginLoaders;
QSet<ZeiterfassungPlugin*> plugins; QSet<ZeiterfassungPlugin*> plugins;
bool loadAndInstallTranslator(QTranslator &translator, const QString &filename) bool loadAndInstallTranslator(QTranslator &translator, const QString &filename)
@@ -281,25 +280,22 @@ bool loadPlugins(QSplashScreen &splashScreen)
continue; // to skip windows junk files continue; // to skip windows junk files
} }
auto pluginLoader = std::make_shared<QPluginLoader>(fileInfo.filePath()); QPluginLoader pluginLoader(fileInfo.filePath());
if(!pluginLoader->load()) if(!pluginLoader.load())
{ {
QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Could not load plugin %0!"), QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Could not load plugin %0!"),
QCoreApplication::translate("main", "Could not load plugin %0!").arg(fileInfo.fileName()) % QCoreApplication::translate("main", "Could not load plugin %0!").arg(fileInfo.fileName()) %
"\n\n" % pluginLoader->errorString()); "\n\n" % pluginLoader.errorString());
ok = false; ok = false;
continue; continue;
} }
if(auto plugin = qobject_cast<ZeiterfassungPlugin*>(pluginLoader->instance())) if(auto plugin = qobject_cast<ZeiterfassungPlugin*>(pluginLoader.instance()))
{
pluginLoaders.insert(pluginLoader);
plugins.insert(plugin); plugins.insert(plugin);
}
else else
QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Plugin not valid %0!"), QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Plugin not valid %0!"),
QCoreApplication::translate("main", "Plugin not valid %0!").arg(pluginLoader->fileName()) % QCoreApplication::translate("main", "Plugin not valid %0!").arg(pluginLoader.fileName()) %
"\n\n" % pluginLoader->errorString()); "\n\n" % pluginLoader.errorString());
} }

View File

@@ -5,12 +5,15 @@
#include <QStringBuilder> #include <QStringBuilder>
#include <QDir> #include <QDir>
#include <QApplication> #include <QApplication>
#include <QSet>
#include <QFile> #include <QFile>
#include <QTextStream> #include <QTextStream>
#include "zeiterfassungsettings.h" #include "zeiterfassungsettings.h"
#include "zeiterfassungplugin.h"
#include "settingswidget.h"
SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent) : SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, const QSet<ZeiterfassungPlugin*> &plugins, QWidget *parent) :
ZeiterfassungDialog(parent), ZeiterfassungDialog(parent),
ui(new Ui::SettingsDialog), ui(new Ui::SettingsDialog),
m_settings(settings) m_settings(settings)
@@ -40,6 +43,16 @@ SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent)
ui->comboBoxTheme->setCurrentIndex(index); ui->comboBoxTheme->setCurrentIndex(index);
} }
for(const auto plugin : plugins)
{
auto widget = plugin->settingsWidget(this);
if(!widget)
continue;
ui->verticalLayout->addWidget(widget);
m_settingsWidgets.append(widget);
}
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &SettingsDialog::submit); connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &SettingsDialog::submit);
} }

View File

@@ -3,15 +3,17 @@
#include "zeiterfassungguilib_global.h" #include "zeiterfassungguilib_global.h"
#include "zeiterfassungdialog.h" #include "zeiterfassungdialog.h"
class ZeiterfassungSettings;
namespace Ui { class SettingsDialog; } namespace Ui { class SettingsDialog; }
class ZeiterfassungSettings;
class ZeiterfassungPlugin;
class SettingsWidget;
class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsDialog : public ZeiterfassungDialog class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsDialog : public ZeiterfassungDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); explicit SettingsDialog(ZeiterfassungSettings &settings, const QSet<ZeiterfassungPlugin*> &plugins, QWidget *parent = Q_NULLPTR);
~SettingsDialog(); ~SettingsDialog();
private Q_SLOTS: private Q_SLOTS:
@@ -20,4 +22,5 @@ private Q_SLOTS:
private: private:
Ui::SettingsDialog *ui; Ui::SettingsDialog *ui;
ZeiterfassungSettings &m_settings; ZeiterfassungSettings &m_settings;
QVector<SettingsWidget*> m_settingsWidgets;
}; };

View File

@@ -50,7 +50,7 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass
ui->actionRefresh->setShortcut(QKeySequence::Refresh); ui->actionRefresh->setShortcut(QKeySequence::Refresh);
connect(ui->actionRefresh, &QAction::triggered, this, &MainWindow::refreshEverything); connect(ui->actionRefresh, &QAction::triggered, this, &MainWindow::refreshEverything);
connect(ui->actionSettings, &QAction::triggered, this, [this](){ SettingsDialog(m_settings, this).exec(); }); connect(ui->actionSettings, &QAction::triggered, this, [this](){ SettingsDialog(m_settings, m_plugins, this).exec(); });
ui->actionHelp->setShortcut(QKeySequence::HelpContents); ui->actionHelp->setShortcut(QKeySequence::HelpContents);

View File

@@ -3,5 +3,4 @@
SettingsWidget::SettingsWidget(QWidget *parent) : SettingsWidget::SettingsWidget(QWidget *parent) :
QWidget(parent) QWidget(parent)
{ {
} }