diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/uiloader.h')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/uiloader.h | 33 |
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 |
