Plugin settings (weather & lunch) #74

Merged
0xFEEDC0DE64 merged 15 commits from plugin-settings into master 2018-03-13 08:35:57 +01:00
15 changed files with 164 additions and 48 deletions
Showing only changes of commit cf3b5f4660 - Show all commits

View File

@@ -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));

View File

@@ -34,7 +34,6 @@ struct {
QTranslator zeiterfassungguilibTranslator;
} translators;
QSet<std::shared_ptr<QPluginLoader> > pluginLoaders;
QSet<ZeiterfassungPlugin*> 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<QPluginLoader>(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<ZeiterfassungPlugin*>(pluginLoader->instance()))
{
pluginLoaders.insert(pluginLoader);
if(auto plugin = qobject_cast<ZeiterfassungPlugin*>(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());
}

View File

@@ -5,12 +5,15 @@
#include <QStringBuilder>
#include <QDir>
#include <QApplication>
#include <QSet>
#include <QFile>
#include <QTextStream>
#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),
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);
}

View File

@@ -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<ZeiterfassungPlugin*> &plugins, QWidget *parent = Q_NULLPTR);
~SettingsDialog();
private Q_SLOTS:
@@ -20,4 +22,5 @@ private Q_SLOTS:
private:
Ui::SettingsDialog *ui;
ZeiterfassungSettings &m_settings;
QVector<SettingsWidget*> m_settingsWidgets;
};

View File

@@ -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);

View File

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