From 7cea7aed9ccc2776f006475eeed90fbdcb3dfb4c Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 13:54:21 +0100 Subject: [PATCH] Plugins now get stored in a QSet --- plugins/weatherplugin/weatherplugin.cpp | 2 +- plugins/weatherplugin/weatherplugin.h | 2 +- zeiterfassung/main.cpp | 25 ++++--- zeiterfassungguilib/dialogs/settingsdialog.ui | 75 ++++++++++++------- zeiterfassungguilib/mainwindow.cpp | 3 +- zeiterfassungguilib/mainwindow.h | 4 +- zeiterfassungguilib/zeiterfassungplugin.h | 2 +- 7 files changed, 69 insertions(+), 44 deletions(-) diff --git a/plugins/weatherplugin/weatherplugin.cpp b/plugins/weatherplugin/weatherplugin.cpp index 35842f3..04d6066 100644 --- a/plugins/weatherplugin/weatherplugin.cpp +++ b/plugins/weatherplugin/weatherplugin.cpp @@ -36,7 +36,7 @@ void WeatherPlugin::attachTo(MainWindow &mainWindow) mainWindow.statusBar()->addWidget(new WeatherWidget(mainWindow)); } -SettingsWidget *WeatherPlugin::settingsWidget(QWidget *parent) +SettingsWidget *WeatherPlugin::settingsWidget(QWidget *parent) const { return new WeatherSettings(parent); } diff --git a/plugins/weatherplugin/weatherplugin.h b/plugins/weatherplugin/weatherplugin.h index f9d7b79..9ad7646 100644 --- a/plugins/weatherplugin/weatherplugin.h +++ b/plugins/weatherplugin/weatherplugin.h @@ -17,7 +17,7 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; - SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) Q_DECL_OVERRIDE; + SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; private: QTranslator m_translator; diff --git a/zeiterfassung/main.cpp b/zeiterfassung/main.cpp index dc8fc86..7dbc081 100755 --- a/zeiterfassung/main.cpp +++ b/zeiterfassung/main.cpp @@ -34,7 +34,8 @@ struct { QTranslator zeiterfassungguilibTranslator; } translators; -QVector > pluginLoaders; +QSet > pluginLoaders; +QSet plugins; bool loadAndInstallTranslator(QTranslator &translator, const QString &filename) { @@ -290,7 +291,16 @@ bool loadPlugins(QSplashScreen &splashScreen) continue; } - pluginLoaders.append(pluginLoader); + if(auto plugin = qobject_cast(pluginLoader->instance())) + { + pluginLoaders.insert(pluginLoader); + 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 +360,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.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..a456487 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) { 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/zeiterfassungplugin.h b/zeiterfassungguilib/zeiterfassungplugin.h index df265f2..d691db1 100644 --- a/zeiterfassungguilib/zeiterfassungplugin.h +++ b/zeiterfassungguilib/zeiterfassungplugin.h @@ -17,7 +17,7 @@ public: virtual void attachTo(MainWindow &mainWindow) { Q_UNUSED(mainWindow) } - virtual SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) { Q_UNUSED(parent) return Q_NULLPTR; } + virtual SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) const { Q_UNUSED(parent) return Q_NULLPTR; } }; Q_DECLARE_INTERFACE(ZeiterfassungPlugin, "dbsoftware.zeiterfassung.plugin/1.0")