From 9717a435aaae6def3dc3a2761375cb71ed148e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Wed, 19 Dec 2018 21:38:59 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@476 a8b55f48-bf90-11e4-a774-851b48703e85 --- qad/widgets/qvariantedit_custom.cpp | 43 +++++++++++++++++++++++++++++ qad/widgets/qvariantedit_custom.h | 36 ++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 qad/widgets/qvariantedit_custom.cpp create mode 100644 qad/widgets/qvariantedit_custom.h 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