Plugins can now have their own settings in the SettingsDialog #64
This commit is contained in:
@@ -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));
|
||||||
|
|
||||||
|
@@ -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());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
};
|
};
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -3,5 +3,4 @@
|
|||||||
SettingsWidget::SettingsWidget(QWidget *parent) :
|
SettingsWidget::SettingsWidget(QWidget *parent) :
|
||||||
QWidget(parent)
|
QWidget(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user