diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp index 946ac68..da6f31b 100644 --- a/plugins/weatherplugin/weathersettings.cpp +++ b/plugins/weatherplugin/weathersettings.cpp @@ -8,6 +8,7 @@ WeatherSettings::WeatherSettings(QWidget *parent) : SettingsWidget(parent) { auto layout = new QFormLayout(this); + layout->setMargin(0); layout->addRow(tr("Weather API:"), new QLineEdit(this)); diff --git a/zeiterfassung/main.cpp b/zeiterfassung/main.cpp index 7dbc081..48676f2 100755 --- a/zeiterfassung/main.cpp +++ b/zeiterfassung/main.cpp @@ -34,7 +34,6 @@ struct { QTranslator zeiterfassungguilibTranslator; } translators; -QSet > pluginLoaders; QSet plugins; bool loadAndInstallTranslator(QTranslator &translator, const QString &filename) @@ -281,25 +280,22 @@ bool loadPlugins(QSplashScreen &splashScreen) continue; // to skip windows junk files } - auto pluginLoader = std::make_shared(fileInfo.filePath()); - if(!pluginLoader->load()) + QPluginLoader pluginLoader(fileInfo.filePath()); + if(!pluginLoader.load()) { QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Could not load plugin %0!"), QCoreApplication::translate("main", "Could not load plugin %0!").arg(fileInfo.fileName()) % - "\n\n" % pluginLoader->errorString()); + "\n\n" % pluginLoader.errorString()); ok = false; continue; } - if(auto plugin = qobject_cast(pluginLoader->instance())) - { - pluginLoaders.insert(pluginLoader); + if(auto plugin = qobject_cast(pluginLoader.instance())) plugins.insert(plugin); - } else QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Plugin not valid %0!"), - QCoreApplication::translate("main", "Plugin not valid %0!").arg(pluginLoader->fileName()) % - "\n\n" % pluginLoader->errorString()); + QCoreApplication::translate("main", "Plugin not valid %0!").arg(pluginLoader.fileName()) % + "\n\n" % pluginLoader.errorString()); } diff --git a/zeiterfassungguilib/dialogs/settingsdialog.cpp b/zeiterfassungguilib/dialogs/settingsdialog.cpp index ea84650..7df0f0d 100644 --- a/zeiterfassungguilib/dialogs/settingsdialog.cpp +++ b/zeiterfassungguilib/dialogs/settingsdialog.cpp @@ -5,12 +5,15 @@ #include #include #include +#include #include #include #include "zeiterfassungsettings.h" +#include "zeiterfassungplugin.h" +#include "settingswidget.h" -SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent) : +SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, const QSet &plugins, QWidget *parent) : ZeiterfassungDialog(parent), ui(new Ui::SettingsDialog), m_settings(settings) @@ -40,6 +43,16 @@ SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent) 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); } diff --git a/zeiterfassungguilib/dialogs/settingsdialog.h b/zeiterfassungguilib/dialogs/settingsdialog.h index 3315276..149869d 100644 --- a/zeiterfassungguilib/dialogs/settingsdialog.h +++ b/zeiterfassungguilib/dialogs/settingsdialog.h @@ -3,15 +3,17 @@ #include "zeiterfassungguilib_global.h" #include "zeiterfassungdialog.h" -class ZeiterfassungSettings; namespace Ui { class SettingsDialog; } +class ZeiterfassungSettings; +class ZeiterfassungPlugin; +class SettingsWidget; class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsDialog : public ZeiterfassungDialog { Q_OBJECT public: - explicit SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); + explicit SettingsDialog(ZeiterfassungSettings &settings, const QSet &plugins, QWidget *parent = Q_NULLPTR); ~SettingsDialog(); private Q_SLOTS: @@ -20,4 +22,5 @@ private Q_SLOTS: private: Ui::SettingsDialog *ui; ZeiterfassungSettings &m_settings; + QVector m_settingsWidgets; }; diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index a456487..df471f6 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -50,7 +50,7 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass ui->actionRefresh->setShortcut(QKeySequence::Refresh); 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); diff --git a/zeiterfassungguilib/settingswidget.cpp b/zeiterfassungguilib/settingswidget.cpp index d4c4878..1a0fa90 100644 --- a/zeiterfassungguilib/settingswidget.cpp +++ b/zeiterfassungguilib/settingswidget.cpp @@ -3,5 +3,4 @@ SettingsWidget::SettingsWidget(QWidget *parent) : QWidget(parent) { - }