aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/uiloader.h
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/uiloader.h')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/uiloader.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/uiloader.h b/SQLiteStudio3/guiSQLiteStudio/uiloader.h
new file mode 100644
index 0000000..5d16bcb
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/uiloader.h
@@ -0,0 +1,33 @@
+#ifndef UILOADER_H
+#define UILOADER_H
+
+#include "guiSQLiteStudio_global.h"
+#include <QUiLoader>
+#include <QHash>
+#include <QStack>
+#include <QXmlDefaultHandler>
+
+class UiLoaderPropertyHandler;
+
+class GUI_API_EXPORT UiLoader : public QUiLoader
+{
+ Q_OBJECT
+ public:
+ typedef std::function<QWidget*(QWidget*, const QString&)> FactoryFunction;
+
+ explicit UiLoader(QObject *parent = 0);
+
+ QWidget* createWidget(const QString & className, QWidget * parent = 0, const QString & name = QString());
+ void registerWidgetClass(const QString& className, FactoryFunction factoryFunction);
+ void registerPropertyHandler(UiLoaderPropertyHandler* handler);
+ QWidget* load(const QString& path);
+
+ private:
+ void handlePropertiesRecursively(QWidget* widget);
+ void handleProperties(QWidget* widget);
+
+ QHash<QString, FactoryFunction> registeredClasses;
+ QList<UiLoaderPropertyHandler*> propertyHandlers;
+};
+
+#endif // UILOADER_H