Plugins now get stored in a QSet

This commit is contained in:
0xFEEDC0DE
2018-03-11 13:54:21 +01:00
parent 942be5a42e
commit 7cea7aed9c
7 changed files with 69 additions and 44 deletions

View File

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

View File

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

View File

@@ -34,7 +34,8 @@ struct {
QTranslator zeiterfassungguilibTranslator;
} translators;
QVector<std::shared_ptr<QPluginLoader> > pluginLoaders;
QSet<std::shared_ptr<QPluginLoader> > pluginLoaders;
QSet<ZeiterfassungPlugin*> 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<ZeiterfassungPlugin*>(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<ZeiterfassungPlugin*>(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();

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>647</width>
<height>162</height>
<width>340</width>
<height>164</height>
</rect>
</property>
<property name="maximumSize">
@@ -19,7 +19,7 @@
<property name="windowTitle">
<string>Settings</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,0">
<layout class="QVBoxLayout" stretch="0,0,0,0">
<item>
<widget class="QLabel" name="labelTitle">
<property name="font">
@@ -33,35 +33,52 @@
</widget>
</item>
<item>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="labelLanguage">
<property name="text">
<string>Language:</string>
</property>
<property name="buddy">
<cstring>comboBoxLanguage</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelTheme">
<property name="text">
<string>Theme:</string>
</property>
<property name="buddy">
<cstring>comboBoxTheme</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBoxTheme"/>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QFormLayout">
<item row="0" column="0">
<widget class="QLabel" name="labelLanguage">
<property name="text">
<string>Language:</string>
</property>
<property name="buddy">
<cstring>comboBoxLanguage</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelTheme">
<property name="text">
<string>Theme:</string>
</property>
<property name="buddy">
<cstring>comboBoxTheme</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBoxTheme"/>
</item>
</layout>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">

View File

@@ -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<ZeiterfassungPlugin*> &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)
{

View File

@@ -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<ZeiterfassungPlugin*> &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<ZeiterfassungPlugin*> &m_plugins;
std::unique_ptr<GetProjectsReply> m_getProjectsReply;

View File

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