DiagramDesigner/PropertyEditor/source/include/QQuickDetailsViewMananger.h

59 lines
1.9 KiB
C
Raw Normal View History

2026-01-27 16:36:59 +08:00
#ifndef QQuickDetailsViewManager_h__
#define QQuickDetailsViewManager_h__
#include <QObject>
#include <QHash>
#include <functional>
#include <QMetaType>
#include <QQmlEngine>
#include <QQuickItem>
#include "IPropertyTypeCustomization.h"
#include "export.hpp"
class QPropertyHandle;
class DIAGRAM_DESIGNER_PUBLIC QQuickDetailsViewManager : public QObject{
public:
using PropertyTypeCustomizationCreator = std::function<QSharedPointer<IPropertyTypeCustomization>()>;
using TypeEditorCreator = std::function<QQuickItem* (QPropertyHandle*, QQuickItem*)>;
static QQuickDetailsViewManager* Get();
void initialize();
bool isInitialized() const;
template<typename MetaType, typename IPropertyTypeCustomizationType>
void registerPropertyTypeCustomization() {
QMetaType metaType = QMetaType::fromType<MetaType>();
if (metaType.metaObject()) {
mClassCustomizationMap.insert(metaType.metaObject(), []() {
return QSharedPointer<IPropertyTypeCustomizationType>::create();
});
}
else {
mMetaTypeCustomizationMap.insert(metaType, []() {
return QSharedPointer<IPropertyTypeCustomizationType>::create();
});
}
}
void unregisterPropertyTypeCustomization(const QMetaType& inMetaType);
void registerTypeEditor(const QMetaType& inMetaType, TypeEditorCreator Creator);
void unregisterTypeEditor(const QMetaType& inMetaType);
QQuickItem* createValueEditor(QPropertyHandle* inHandle, QQuickItem* parent);
QSharedPointer<IPropertyTypeCustomization> getCustomPropertyType(QPropertyHandle* inHandle);
protected:
QQuickDetailsViewManager();
void RegisterBasicTypeEditor();
private:
bool mInitialized = false;
QHash<const QMetaObject*, PropertyTypeCustomizationCreator> mClassCustomizationMap;
QHash<QMetaType, PropertyTypeCustomizationCreator> mMetaTypeCustomizationMap;
QHash<QMetaType, TypeEditorCreator> mTypeEditorCreatorMap;
};
#endif // QQuickDetailsViewManager_h__