diff --git a/plugins/lunchmealplugin/lunchmealplugin.cpp b/plugins/lunchmealplugin/lunchmealplugin.cpp index 0379d21..a7414d8 100644 --- a/plugins/lunchmealplugin/lunchmealplugin.cpp +++ b/plugins/lunchmealplugin/lunchmealplugin.cpp @@ -10,6 +10,7 @@ #include "stripswidget.h" #include "lunchmealwidget.h" +#include "lunchmealsettingswidget.h" LunchMealPlugin::LunchMealPlugin(QObject *parent) : ZeiterfassungPlugin(parent) @@ -36,3 +37,8 @@ void LunchMealPlugin::attachTo(MainWindow &mainWindow) for(auto stripsWidget : mainWindow.stripsWidgets()) stripsWidget->headerLayout()->addWidget(new LunchMealWidget(*stripsWidget)); } + +SettingsWidget *LunchMealPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const +{ + return new LunchMealSettingsWidget(settings, parent); +} diff --git a/plugins/lunchmealplugin/lunchmealplugin.h b/plugins/lunchmealplugin/lunchmealplugin.h index 8b14f85..d74a61a 100644 --- a/plugins/lunchmealplugin/lunchmealplugin.h +++ b/plugins/lunchmealplugin/lunchmealplugin.h @@ -19,6 +19,8 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; + virtual SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; + private: QTranslator m_translator; }; diff --git a/plugins/lunchmealplugin/lunchmealplugin.pro b/plugins/lunchmealplugin/lunchmealplugin.pro index daf797d..f2d730d 100644 --- a/plugins/lunchmealplugin/lunchmealplugin.pro +++ b/plugins/lunchmealplugin/lunchmealplugin.pro @@ -17,10 +17,14 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += lunchmealdialog.h \ + lunchmealsettings.h \ + lunchmealsettingswidget.h \ lunchmealplugin.h \ lunchmealwidget.h SOURCES += lunchmealdialog.cpp \ + lunchmealsettings.cpp \ + lunchmealsettingswidget.cpp \ lunchmealplugin.cpp \ lunchmealwidget.cpp diff --git a/plugins/lunchmealplugin/lunchmealsettings.cpp b/plugins/lunchmealplugin/lunchmealsettings.cpp new file mode 100644 index 0000000..f210fb6 --- /dev/null +++ b/plugins/lunchmealplugin/lunchmealsettings.cpp @@ -0,0 +1,31 @@ +#include "lunchmealsettings.h" + +#include "zeiterfassungsettings.h" + +LunchMealSettings::LunchMealSettings(ZeiterfassungSettings &settings) : + m_settings(settings) +{ + +} + +QUrl LunchMealSettings::url() const +{ + return m_settings.value(QStringLiteral("LunchMealPlugin/url"), + QUrl(QStringLiteral("https://brunner.ninja/lunch/%0.txt"))) + .toUrl(); +} + +void LunchMealSettings::setUrl(const QUrl &url) +{ + m_settings.setValue(QStringLiteral("LunchMealPlugin/url"), url); +} + +QString LunchMealSettings::dateFormat() const +{ + return m_settings.value(QStringLiteral("LunchMealPlugin/dateFormat"), QStringLiteral("yyyy-MM-dd")).toString(); +} + +void LunchMealSettings::setDateFormat(const QString &dateFormat) +{ + m_settings.setValue(QStringLiteral("LunchMealPlugin/dateFormat"), dateFormat); +} diff --git a/plugins/lunchmealplugin/lunchmealsettings.h b/plugins/lunchmealplugin/lunchmealsettings.h new file mode 100644 index 0000000..63d4c83 --- /dev/null +++ b/plugins/lunchmealplugin/lunchmealsettings.h @@ -0,0 +1,23 @@ +#ifndef LUNCHMEALSETTINGS_H +#define LUNCHMEALSETTINGS_H + +#include + +class ZeiterfassungSettings; + +class LunchMealSettings +{ +public: + LunchMealSettings(ZeiterfassungSettings &settings); + + QUrl url() const; + void setUrl(const QUrl &url); + + QString dateFormat() const; + void setDateFormat(const QString &dateFormat); + +private: + ZeiterfassungSettings &m_settings; +}; + +#endif // LUNCHMEALSETTINGS_H diff --git a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp new file mode 100644 index 0000000..0fff7b3 --- /dev/null +++ b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp @@ -0,0 +1,39 @@ +#include "lunchmealsettingswidget.h" + +#include +#include + +LunchMealSettingsWidget::LunchMealSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent) : + SettingsWidget(parent), + m_settings(settings) +{ + auto layout = new QFormLayout(this); + layout->setMargin(0); + + m_lineEditUrl = new QLineEdit(m_settings.url().toString(), this); + layout->addRow(tr("Lunch meal API:"), m_lineEditUrl); + + m_lineEditDateFormat = new QLineEdit(m_settings.dateFormat(), this); + layout->addRow(tr("Lunch meal date format:"), m_lineEditDateFormat); + + setLayout(layout); +} + +bool LunchMealSettingsWidget::isValid(QString &message) const +{ + auto valid = QUrl::fromUserInput(m_lineEditUrl->text()).isValid(); + + if(!valid) + message = tr("The lunch meal api url is invalid!"); + + return valid; +} + +void LunchMealSettingsWidget::apply() +{ + auto url = QUrl::fromUserInput(m_lineEditUrl->text()); + if(m_settings.url() != url) + m_settings.setUrl(url); + + m_settings.setDateFormat(m_lineEditDateFormat->text()); +} diff --git a/plugins/lunchmealplugin/lunchmealsettingswidget.h b/plugins/lunchmealplugin/lunchmealsettingswidget.h new file mode 100644 index 0000000..90f7ff0 --- /dev/null +++ b/plugins/lunchmealplugin/lunchmealsettingswidget.h @@ -0,0 +1,29 @@ +#ifndef LUNCHMEALSETTINGSWIDGET_H +#define LUNCHMEALSETTINGSWIDGET_H + +#include "settingswidget.h" + +#include "lunchmealsettings.h" + +class QLineEdit; + +class LunchMealSettingsWidget : public SettingsWidget +{ + Q_OBJECT + +public: + explicit LunchMealSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); + + virtual bool isValid(QString &message) const Q_DECL_OVERRIDE; + +public Q_SLOTS: + virtual void apply() Q_DECL_OVERRIDE; + +private: + LunchMealSettings m_settings; + + QLineEdit *m_lineEditUrl; + QLineEdit *m_lineEditDateFormat; +}; + +#endif // LUNCHMEALSETTINGSWIDGET_H diff --git a/plugins/lunchmealplugin/lunchmealwidget.cpp b/plugins/lunchmealplugin/lunchmealwidget.cpp index 47d6649..6083b3c 100644 --- a/plugins/lunchmealplugin/lunchmealwidget.cpp +++ b/plugins/lunchmealplugin/lunchmealwidget.cpp @@ -9,10 +9,10 @@ #include "stripswidget.h" #include "mainwindow.h" -#include "zeiterfassungsettings.h" #include "zeiterfassungapi.h" #include "lunchmealdialog.h" +#include "lunchmealsettings.h" LunchMealWidget::LunchMealWidget(StripsWidget &stripsWidget) : QToolButton(&stripsWidget), @@ -38,11 +38,9 @@ void LunchMealWidget::dateChanged(const QDate &date) setEnabled(false); setVisible(false); - const auto &settings = m_stripsWidget.mainWindow().settings(); + LunchMealSettings settings(m_stripsWidget.mainWindow().settings()); - auto url = settings.value(QStringLiteral("LunchMealPlugin/url"), - QStringLiteral("https://brunner.ninja/lunch/%0.txt")).toString() - .arg(date.toString(settings.value(QStringLiteral("LunchMealPlugin/dateFormat"), QStringLiteral("yyyy-MM-dd")).toString())); + auto url = settings.url().toString().arg(date.toString(settings.dateFormat())); m_reply = std::unique_ptr(m_stripsWidget.mainWindow().erfassung().manager()->get(QNetworkRequest(QUrl(url)))); connect(m_reply.get(), &QNetworkReply::finished, this, &LunchMealWidget::finished); } diff --git a/plugins/weatherplugin/weatherplugin.cpp b/plugins/weatherplugin/weatherplugin.cpp index b308b11..a09feee 100644 --- a/plugins/weatherplugin/weatherplugin.cpp +++ b/plugins/weatherplugin/weatherplugin.cpp @@ -9,6 +9,7 @@ #include "mainwindow.h" #include "weatherwidget.h" +#include "weathersettingswidget.h" WeatherPlugin::WeatherPlugin(QObject *parent) : ZeiterfassungPlugin(parent) @@ -34,3 +35,8 @@ void WeatherPlugin::attachTo(MainWindow &mainWindow) { mainWindow.statusBar()->addWidget(new WeatherWidget(mainWindow)); } + +SettingsWidget *WeatherPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const +{ + return new WeatherSettingsWidget(settings, parent); +} diff --git a/plugins/weatherplugin/weatherplugin.h b/plugins/weatherplugin/weatherplugin.h index 07f4f68..f4fd64c 100644 --- a/plugins/weatherplugin/weatherplugin.h +++ b/plugins/weatherplugin/weatherplugin.h @@ -5,6 +5,9 @@ #include "zeiterfassungplugin.h" +class SettingsWidget; +class ZeiterfassungSettings; + class Q_DECL_EXPORT WeatherPlugin : public ZeiterfassungPlugin { Q_OBJECT @@ -17,6 +20,8 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; + SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; + private: QTranslator m_translator; }; diff --git a/plugins/weatherplugin/weatherplugin.pro b/plugins/weatherplugin/weatherplugin.pro index 02016bc..ebed643 100644 --- a/plugins/weatherplugin/weatherplugin.pro +++ b/plugins/weatherplugin/weatherplugin.pro @@ -17,9 +17,13 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += weatherplugin.h \ + weathersettings.h \ + weathersettingswidget.h \ weatherwidget.h SOURCES += weatherplugin.cpp \ + weathersettings.cpp \ + weathersettingswidget.cpp \ weatherwidget.cpp FORMS += diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp new file mode 100644 index 0000000..52f4062 --- /dev/null +++ b/plugins/weatherplugin/weathersettings.cpp @@ -0,0 +1,21 @@ +#include "weathersettings.h" + +#include "zeiterfassungsettings.h" + +WeatherSettings::WeatherSettings(ZeiterfassungSettings &settings) : + m_settings(settings) +{ + +} + +QUrl WeatherSettings::url() const +{ + return m_settings.value(QStringLiteral("WeatherPlugin/url"), + QUrl(QStringLiteral("http://api.openweathermap.org/data/2.5/weather?q=Graz,AT&units=metric&APPID=40f6c892c6162680c6c9235169dc9f83"))) + .toUrl(); +} + +void WeatherSettings::setUrl(const QUrl &url) +{ + m_settings.setValue(QStringLiteral("WeatherPlugin/url"), url); +} diff --git a/plugins/weatherplugin/weathersettings.h b/plugins/weatherplugin/weathersettings.h new file mode 100644 index 0000000..eaa0ff4 --- /dev/null +++ b/plugins/weatherplugin/weathersettings.h @@ -0,0 +1,20 @@ +#ifndef WEATHERSETTINGS_H +#define WEATHERSETTINGS_H + +#include + +class ZeiterfassungSettings; + +class WeatherSettings +{ +public: + WeatherSettings(ZeiterfassungSettings &settings); + + QUrl url() const; + void setUrl(const QUrl &url); + +private: + ZeiterfassungSettings &m_settings; +}; + +#endif // WEATHERSETTINGS_H diff --git a/plugins/weatherplugin/weathersettingswidget.cpp b/plugins/weatherplugin/weathersettingswidget.cpp new file mode 100644 index 0000000..5be082a --- /dev/null +++ b/plugins/weatherplugin/weathersettingswidget.cpp @@ -0,0 +1,34 @@ +#include "weathersettingswidget.h" + +#include +#include + +WeatherSettingsWidget::WeatherSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent) : + SettingsWidget(parent), + m_settings(settings) +{ + auto layout = new QFormLayout(this); + layout->setMargin(0); + + m_lineEdit = new QLineEdit(m_settings.url().toString(), this); + layout->addRow(tr("Weather API:"), m_lineEdit); + + setLayout(layout); +} + +bool WeatherSettingsWidget::isValid(QString &message) const +{ + auto valid = QUrl::fromUserInput(m_lineEdit->text()).isValid(); + + if(!valid) + message = tr("The weather api url is invalid!"); + + return valid; +} + +void WeatherSettingsWidget::apply() +{ + auto url = QUrl::fromUserInput(m_lineEdit->text()); + if(m_settings.url() != url) + m_settings.setUrl(url); +} diff --git a/plugins/weatherplugin/weathersettingswidget.h b/plugins/weatherplugin/weathersettingswidget.h new file mode 100644 index 0000000..d962a33 --- /dev/null +++ b/plugins/weatherplugin/weathersettingswidget.h @@ -0,0 +1,31 @@ +#ifndef WEATHERSETTINGSWIDGET_H +#define WEATHERSETTINGSWIDGET_H + +#include + +#include "settingswidget.h" + +#include "weathersettings.h" + +class QLineEdit; + +class ZeiterfassungSettings; + +class WeatherSettingsWidget : public SettingsWidget +{ + Q_OBJECT +public: + explicit WeatherSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); + + bool isValid(QString &message) const Q_DECL_OVERRIDE; + +public Q_SLOTS: + void apply() Q_DECL_OVERRIDE; + +private: + WeatherSettings m_settings; + + QLineEdit *m_lineEdit; +}; + +#endif // WEATHERSETTINGSWIDGET_H diff --git a/plugins/weatherplugin/weatherwidget.cpp b/plugins/weatherplugin/weatherwidget.cpp index 764bf99..9d62b09 100644 --- a/plugins/weatherplugin/weatherwidget.cpp +++ b/plugins/weatherplugin/weatherwidget.cpp @@ -14,6 +14,8 @@ #include "zeiterfassungsettings.h" #include "zeiterfassungapi.h" +#include "weathersettings.h" + WeatherWidget::WeatherWidget(MainWindow &mainWindow) : QLabel(&mainWindow), m_mainWindow(mainWindow) @@ -30,10 +32,9 @@ void WeatherWidget::refresh() { setText(tr("Loading...")); - auto url = m_mainWindow.settings().value(QStringLiteral("WeatherPlugin/url"), - QStringLiteral("http://api.openweathermap.org/data/2.5/weather?q=Graz,AT&units=metric&APPID=40f6c892c6162680c6c9235169dc9f83")).toString(); + auto url = WeatherSettings(m_mainWindow.settings()).url(); - m_reply = std::unique_ptr(m_mainWindow.erfassung().manager()->get(QNetworkRequest(QUrl(url)))); + m_reply = std::unique_ptr(m_mainWindow.erfassung().manager()->get(QNetworkRequest(url))); connect(m_reply.get(), &QNetworkReply::finished, this, &WeatherWidget::finished); } diff --git a/zeiterfassung/main.cpp b/zeiterfassung/main.cpp index dc8fc86..48676f2 100755 --- a/zeiterfassung/main.cpp +++ b/zeiterfassung/main.cpp @@ -34,7 +34,7 @@ struct { QTranslator zeiterfassungguilibTranslator; } translators; -QVector > pluginLoaders; +QSet plugins; bool loadAndInstallTranslator(QTranslator &translator, const QString &filename) { @@ -280,17 +280,23 @@ 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; } - pluginLoaders.append(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()); + } return ok; @@ -350,16 +356,11 @@ int main(int argc, char *argv[]) loadPlugins(splashScreen); - MainWindow mainWindow(settings, erfassung, userInfo, stripFactory); + MainWindow mainWindow(settings, erfassung, userInfo, stripFactory, plugins); splashScreen.finish(&mainWindow); - for(auto &pluginLoader : pluginLoaders) - if(auto plugin = qobject_cast(pluginLoader->instance())) - plugin->attachTo(mainWindow); - 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()); + for(auto &plugin : plugins) + plugin->attachTo(mainWindow); mainWindow.show(); diff --git a/zeiterfassungguilib/dialogs/settingsdialog.cpp b/zeiterfassungguilib/dialogs/settingsdialog.cpp index ea84650..2e2c315 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) @@ -21,7 +24,7 @@ SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent) ui->comboBoxLanguage->addItem(tr("German"), QLocale::German); { - auto index = ui->comboBoxLanguage->findData(settings.language()); + auto index = ui->comboBoxLanguage->findData(m_settings.language()); if(index == -1) QMessageBox::warning(this, tr("Invalid settings!"), tr("Invalid settings!") % "\n\n" % tr("Unknown language!")); ui->comboBoxLanguage->setCurrentIndex(index); @@ -32,14 +35,24 @@ SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent) for(const auto &entry : QDir(QDir(QCoreApplication::applicationDirPath()).absoluteFilePath(QStringLiteral("themes"))).entryInfoList(QStringList { QStringLiteral("*.qss") }, QDir::Files)) ui->comboBoxTheme->addItem(entry.baseName(), entry.baseName()); - if(!settings.theme().isEmpty()) + if(!m_settings.theme().isEmpty()) { - auto index = ui->comboBoxTheme->findData(settings.theme()); + auto index = ui->comboBoxTheme->findData(m_settings.theme()); if(index == -1) QMessageBox::warning(this, tr("Invalid settings!"), tr("Invalid settings!") % "\n\n" % tr("Unknown theme!")); ui->comboBoxTheme->setCurrentIndex(index); } + for(const auto plugin : plugins) + { + auto widget = plugin->settingsWidget(m_settings, this); + if(!widget) + continue; + + ui->verticalLayout->addWidget(widget); + m_settingsWidgets.append(widget); + } + connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &SettingsDialog::submit); } @@ -50,8 +63,6 @@ SettingsDialog::~SettingsDialog() void SettingsDialog::submit() { - auto warning = false; - if(ui->comboBoxLanguage->currentIndex() == -1 || ui->comboBoxTheme->currentIndex() == -1) { @@ -59,10 +70,21 @@ void SettingsDialog::submit() return; } + for(const auto widget : m_settingsWidgets) + { + QString message; + if(!widget->isValid(message)) + { + QMessageBox::warning(this, tr("Invalid settings!"), tr("Invalid settings!") % "\n\n" % message); + return; + } + } + if(ui->comboBoxLanguage->currentData().value() != m_settings.language()) { m_settings.setLanguage(ui->comboBoxLanguage->currentData().value()); - warning = true; + //TODO #73 Allow changing of the language without restart + QMessageBox::information(this, tr("Restart required!"), tr("To apply the new settings a restart is required!")); } auto theme = ui->comboBoxTheme->currentData().toString(); @@ -95,8 +117,8 @@ void SettingsDialog::submit() m_settings.setTheme(theme); } - if(warning) - QMessageBox::information(this, tr("Restart required!"), tr("To apply the new settings a restart is required!")); + for(const auto widget : m_settingsWidgets) + widget->apply(); accept(); } 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/dialogs/settingsdialog.ui b/zeiterfassungguilib/dialogs/settingsdialog.ui index b43be14..f1eed28 100644 --- a/zeiterfassungguilib/dialogs/settingsdialog.ui +++ b/zeiterfassungguilib/dialogs/settingsdialog.ui @@ -6,8 +6,8 @@ 0 0 - 647 - 162 + 340 + 164 @@ -19,7 +19,7 @@ Settings - + @@ -33,35 +33,52 @@ - - - - - Language: - - - comboBoxLanguage - - - - - - - - - - Theme: - - - comboBoxTheme - - - - - + + + + + + + Language: + + + comboBoxLanguage + + + + + + + + + + Theme: + + + comboBoxTheme + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index dfd8689..df471f6 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -28,13 +28,14 @@ #include "replies/updatetimeassignmentreply.h" MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfassung, const GetUserInfoReply::UserInfo &userInfo, - StripFactory &stripFactory, QWidget *parent) : + StripFactory &stripFactory, const QSet &plugins, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), m_settings(settings), m_erfassung(erfassung), m_userInfo(userInfo), m_stripFactory(stripFactory), + m_plugins(plugins), m_currentStripWidget(Q_NULLPTR), m_timerId(-1) { @@ -49,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/mainwindow.h b/zeiterfassungguilib/mainwindow.h index 2f1666b..3b3d57c 100644 --- a/zeiterfassungguilib/mainwindow.h +++ b/zeiterfassungguilib/mainwindow.h @@ -18,6 +18,7 @@ class QBoxLayout; namespace Ui { class MainWindow; } class ZeiterfassungSettings; class StripFactory; +class ZeiterfassungPlugin; class StripsWidget; class ZEITERFASSUNGGUILIBSHARED_EXPORT MainWindow : public QMainWindow @@ -26,7 +27,7 @@ class ZEITERFASSUNGGUILIBSHARED_EXPORT MainWindow : public QMainWindow public: explicit MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfassung, const GetUserInfoReply::UserInfo &userInfo, - StripFactory &stripFactory, QWidget *parent = Q_NULLPTR); + StripFactory &stripFactory, const QSet &plugins, QWidget *parent = Q_NULLPTR); ~MainWindow(); QMenu *menuFile() const; @@ -73,6 +74,7 @@ private: ZeiterfassungApi &m_erfassung; const GetUserInfoReply::UserInfo &m_userInfo; StripFactory &m_stripFactory; + const QSet &m_plugins; std::unique_ptr m_getProjectsReply; diff --git a/zeiterfassungguilib/settingswidget.cpp b/zeiterfassungguilib/settingswidget.cpp new file mode 100644 index 0000000..1a0fa90 --- /dev/null +++ b/zeiterfassungguilib/settingswidget.cpp @@ -0,0 +1,6 @@ +#include "settingswidget.h" + +SettingsWidget::SettingsWidget(QWidget *parent) : + QWidget(parent) +{ +} diff --git a/zeiterfassungguilib/settingswidget.h b/zeiterfassungguilib/settingswidget.h new file mode 100644 index 0000000..56fee50 --- /dev/null +++ b/zeiterfassungguilib/settingswidget.h @@ -0,0 +1,21 @@ +#ifndef SETTINGSWIDGET_H +#define SETTINGSWIDGET_H + +#include +#include + +#include "zeiterfassungguilib_global.h" + +class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsWidget : public QWidget +{ + Q_OBJECT +public: + explicit SettingsWidget(QWidget *parent = Q_NULLPTR); + + virtual bool isValid(QString &message) const { Q_UNUSED(message) return true; } + +public Q_SLOTS: + virtual void apply() { } +}; + +#endif // SETTINGSWIDGET_H diff --git a/zeiterfassungguilib/zeiterfassungguilib.pro b/zeiterfassungguilib/zeiterfassungguilib.pro index a3e9a2d..30e4962 100644 --- a/zeiterfassungguilib/zeiterfassungguilib.pro +++ b/zeiterfassungguilib/zeiterfassungguilib.pro @@ -18,6 +18,7 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSA DEFINES += ZEITERFASSUNGGUILIB_LIBRARY SOURCES += mainwindow.cpp \ + settingswidget.cpp \ stripfactory.cpp \ stripswidget.cpp \ zeiterfassungdialog.cpp \ @@ -27,6 +28,7 @@ SOURCES += mainwindow.cpp \ dialogs/settingsdialog.cpp HEADERS += mainwindow.h \ + settingswidget.h \ stripfactory.h \ stripswidget.h \ zeiterfassungguilib_global.h \ diff --git a/zeiterfassungguilib/zeiterfassungplugin.cpp b/zeiterfassungguilib/zeiterfassungplugin.cpp index 4436d93..0f0913a 100644 --- a/zeiterfassungguilib/zeiterfassungplugin.cpp +++ b/zeiterfassungguilib/zeiterfassungplugin.cpp @@ -3,5 +3,11 @@ ZeiterfassungPlugin::ZeiterfassungPlugin(QObject *parent) : QObject(parent) { - +} + +SettingsWidget *ZeiterfassungPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const +{ + Q_UNUSED(settings) + Q_UNUSED(parent) + return Q_NULLPTR; } diff --git a/zeiterfassungguilib/zeiterfassungplugin.h b/zeiterfassungguilib/zeiterfassungplugin.h index ed50fb2..bcfc883 100644 --- a/zeiterfassungguilib/zeiterfassungplugin.h +++ b/zeiterfassungguilib/zeiterfassungplugin.h @@ -6,6 +6,8 @@ class MainWindow; class StripsWidget; +class SettingsWidget; +class ZeiterfassungSettings; class ZEITERFASSUNGGUILIBSHARED_EXPORT ZeiterfassungPlugin : public QObject { @@ -15,6 +17,8 @@ public: explicit ZeiterfassungPlugin(QObject *parent = Q_NULLPTR); virtual void attachTo(MainWindow &mainWindow) { Q_UNUSED(mainWindow) } + + virtual SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const; }; Q_DECLARE_INTERFACE(ZeiterfassungPlugin, "dbsoftware.zeiterfassung.plugin/1.0")