diff --git a/qad/widgets/qvariantedit_custom.cpp b/qad/widgets/qvariantedit_custom.cpp new file mode 100644 index 0000000..29fecb5 --- /dev/null +++ b/qad/widgets/qvariantedit_custom.cpp @@ -0,0 +1,43 @@ +#include "qvariantedit_custom.h" + + +QVariantEditorFactories::QVariantEditorFactories() { + +} + + +QVariantEditorFactories * QVariantEditorFactories::instance() { + static QVariantEditorFactories * ret = new QVariantEditorFactories(); + return ret; +} + + +void QVariantEditorFactories::registerEditorFactory(int meta_id, QVariantEditorFactoryBase * f) { + QVariantEditorFactories * s = QVariantEditorFactories::instance(); + if (!f) { + unregisterEditorFactory(meta_id); + return; + } + if (s->factories.contains(meta_id)) + ;//qDebug() << "[QVariantEditorFactories] Warning: factory for metaTypeID" << meta_id << "already registered, override"; + s->factories[meta_id] = f; +} + + +void QVariantEditorFactories::unregisterEditorFactory(int meta_id) { + QVariantEditorFactories * s = QVariantEditorFactories::instance(); + s->factories.remove(meta_id); +} + + +bool QVariantEditorFactories::isRegisteredEditorFactory(int meta_id) { + QVariantEditorFactories * s = QVariantEditorFactories::instance(); + return s->factories.contains(meta_id); +} + + +QVariantEditorFactoryBase * QVariantEditorFactories::editorFactory(int meta_id) { + QVariantEditorFactories * s = QVariantEditorFactories::instance(); + return s->factories.value(meta_id, 0); +} + diff --git a/qad/widgets/qvariantedit_custom.h b/qad/widgets/qvariantedit_custom.h new file mode 100644 index 0000000..c2b1c3b --- /dev/null +++ b/qad/widgets/qvariantedit_custom.h @@ -0,0 +1,36 @@ +#ifndef QVARIANTEDIT_CUSTOM_H +#define QVARIANTEDIT_CUSTOM_H + +#include +#include +#include + +class QVariantEdit; + + +class QVariantEditorFactoryBase { + friend class QVariantEdit; +public: + QVariantEditorFactoryBase() {} + virtual QWidget * createEditor() = 0; +private: + +}; + + +class QVariantEditorFactories { +public: + static void registerEditorFactory(int meta_id, QVariantEditorFactoryBase * f); + static void unregisterEditorFactory(int meta_id); + static bool isRegisteredEditorFactory(int meta_id); + static QVariantEditorFactoryBase * editorFactory(int meta_id); + +private: + QVariantEditorFactories(); + static QVariantEditorFactories * instance(); + + QMap factories; +}; + + +#endif // QVARIANTEDIT_CUSTOM_H