#include "PropertyBrowser.h" #include #include #include "PropertyBrowser/qttreepropertybrowser.h" #include "PropertyBrowser/qtpropertymanager.h" #include "PropertyBrowser/qteditorfactory.h" #include "DockTitleBar.h" #include "DockWidget.h" #include "workspace/WorkSpace.h" #include "entities/Entity.h" #include "entities/MeshComponent.h" #include "common/SpdLogger.h" PropertyBrowser::PropertyBrowser(QWidget *parent) : QWidget(parent) { InitUI(); //Test(); } PropertyBrowser::~PropertyBrowser() { } void PropertyBrowser::AttachDock(DockWidget* dockWidget) { if (nullptr == dockWidget) { LOG_WARN("dockwidget is nullptr"); return; } dockWidget->SetDockWidgetTitleBar(nullptr); dockWidget->setWidget(this); DockTitleBar* dockTitleBar = new DockTitleBar; dockTitleBar->SetTitle(tr("attribute")); dockWidget->SetDockWidgetTitleBar(dockTitleBar); } void PropertyBrowser::OnWorkSpaceChange(const QVariant& value) { WorkSpace* workspace = value.value(); if (nullptr == workspace) { LOG_WARN("workspace is nullptr"); return; } browser_->clear(); QtProperty* property; property = workSpaceManager_->addProperty(tr("WorkSpace")); QWorkspaceAttribute worksapceAttribute(workspace); workSpaceManager_->setValue(property, worksapceAttribute); addProperty(property, tr("WorkSpace")); } void PropertyBrowser::OnEntityChange(const QVariant& value) { Entity* entity = value.value(); if (nullptr == entity) { LOG_WARN("engity is nullptr"); return; } browser_->clear(); QtProperty* property; property = entityManager_->addProperty(tr("Entity")); QEntityAttribute entityAttribute(entity); entityManager_->setValue(property, entityAttribute); addProperty(property, tr("Entity")); SceneComponent* component = entity->GetRootComponent(); if (nullptr == component) { LOG_WARN("component is nullptr"); return; } QtComponentPropertyManager* componentManager = GetCompononetPropertyManager(component->GetSelfTypeName().c_str()); if (nullptr == componentManager) { LOG_WARN("component is nullptr"); return; } property = componentManager->AddProperty(); componentManager->SetPropertyValue(property, component); addProperty(property, componentManager->GetPropertyId()); std::vector children = component->GetChildren(); for (auto child : children) { componentManager = GetCompononetPropertyManager(child->GetSelfTypeName().c_str()); if (nullptr == child) { LOG_WARN("component is nullptr id {}", child->GetSelfTypeName()); return; } property = componentManager->AddProperty(); componentManager->SetPropertyValue(property, child); addProperty(property, componentManager->GetPropertyId()); } } void PropertyBrowser::InitUI() { QBoxLayout* layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); browser_ = new QtTreePropertyBrowser; layout->addWidget(browser_); browser_->setHeaderVisible(false); InitPropertyManager(); InitComponentPropertyManager(); } void PropertyBrowser::InitPropertyManager() { doubleManager_ = new QtDoublePropertyManager(this); stringManager_ = new QtStringPropertyManager(this); colorManager_ = new QtColorPropertyManager(this); fontManager_ = new QtFontPropertyManager(this); pointManager_ = new QtPointPropertyManager(this); sizeManager_ = new QtSizePropertyManager(this); modelBaseManager_ = new QtModelBasePropertyManager(this); workSpaceManager_ = new QtWorkspacePropertyManager(this); entityManager_ = new QtEntityPropertyManager(this); QtDoubleSpinBoxFactory* doubleSpinBoxFactory = new QtDoubleSpinBoxFactory(this); QtCheckBoxFactory* checkBoxFactory = new QtCheckBoxFactory(this); QtSpinBoxFactory* spinBoxFactory = new QtSpinBoxFactory(this); QtLineEditFactory* lineEditFactory = new QtLineEditFactory(this); QtEnumEditorFactory* comboBoxFactory = new QtEnumEditorFactory(this); QtFilePathFactory* filePathFactory = new QtFilePathFactory(this); //QtTransfromEditorFactory* transformFactory = new QtTransfromEditorFactory(this); browser_->setFactoryForManager(doubleManager_, doubleSpinBoxFactory); browser_->setFactoryForManager(stringManager_, lineEditFactory); browser_->setFactoryForManager(colorManager_->subIntPropertyManager(), spinBoxFactory); browser_->setFactoryForManager(fontManager_->subIntPropertyManager(), spinBoxFactory); browser_->setFactoryForManager(fontManager_->subBoolPropertyManager(), checkBoxFactory); browser_->setFactoryForManager(fontManager_->subEnumPropertyManager(), comboBoxFactory); browser_->setFactoryForManager(pointManager_->subIntPropertyManager(), spinBoxFactory); browser_->setFactoryForManager(sizeManager_->subIntPropertyManager(), spinBoxFactory); browser_->setFactoryForManager(workSpaceManager_->subStringProperyManager(), lineEditFactory); browser_->setFactoryForManager(workSpaceManager_->subFilesProperyManager(), filePathFactory); browser_->setFactoryForManager(entityManager_->subStringProperyManager(), lineEditFactory); browser_->setFactoryForManager( entityManager_->subTransfromProperyManager()->subVec3TPropertyManager()->subDoublePropertyManager(), doubleSpinBoxFactory); browser_->setFactoryForManager( entityManager_->subTransfromProperyManager()->subVec3RPropertyManager()->subDoublePropertyManager(), doubleSpinBoxFactory); browser_->setFactoryForManager( entityManager_->subTransfromProperyManager()->subVec3SPropertyManager()->subDoublePropertyManager(), doubleSpinBoxFactory); } void PropertyBrowser::InitComponentPropertyManager() { QtDoubleSpinBoxFactory* doubleSpinBoxFactory = new QtDoubleSpinBoxFactory(this); QtCheckBoxFactory* checkBoxFactory = new QtCheckBoxFactory(this); QtSpinBoxFactory* spinBoxFactory = new QtSpinBoxFactory(this); QtLineEditFactory* lineEditFactory = new QtLineEditFactory(this); QtColorEditorFactory* colorFactory = new QtColorEditorFactory(this); QtFilePathFactory* filePathFactory = new QtFilePathFactory(this); QtEntityUUIDEditorFactory* entityUUIDFactory = new QtEntityUUIDEditorFactory(this); QtMeshComponetManager* meshComponentManager = new QtMeshComponetManager(this); browser_->setFactoryForManager(meshComponentManager->subStringProperyManager(), lineEditFactory); componetManager_[meshComponentManager->GetPropertyId()] = meshComponentManager; QtPathComponentManager* pathComponentManager = new QtPathComponentManager(this); browser_->setFactoryForManager(pathComponentManager->subFilesProperyManager(), filePathFactory); componetManager_[pathComponentManager->GetPropertyId()] = pathComponentManager; QtConeWaveComponentManager* coneWaveComponentManager = new QtConeWaveComponentManager(this); browser_->setFactoryForManager(coneWaveComponentManager->subDoubleProperyManager(), doubleSpinBoxFactory); browser_->setFactoryForManager(coneWaveComponentManager->subIntProperyManager(), spinBoxFactory); browser_->setFactoryForManager(coneWaveComponentManager->subColorProperyManager(), colorFactory); componetManager_[coneWaveComponentManager->GetPropertyId()] = coneWaveComponentManager; QtDashedLineComponentManager* dashedLineComponentManager = new QtDashedLineComponentManager(this); browser_->setFactoryForManager(dashedLineComponentManager->subEntityProperyManager(), entityUUIDFactory); browser_->setFactoryForManager(dashedLineComponentManager->subDoubleProperyManager(), doubleSpinBoxFactory); browser_->setFactoryForManager(dashedLineComponentManager->subColorProperyManager(), colorFactory); componetManager_[dashedLineComponentManager->GetPropertyId()] = dashedLineComponentManager; } void PropertyBrowser::addProperty(QtProperty* property, const QString& id) { propertyToId_[property] = id; idToProperty_[id] = property; QtBrowserItem* item = browser_->addProperty(property); if (idToExpanded_.contains(id)) browser_->setExpanded(item, idToExpanded_[id]); } QtComponentPropertyManager* PropertyBrowser::GetCompononetPropertyManager(const QString& id) { if (!componetManager_.contains(id)) { return nullptr; } return componetManager_[id]; } void PropertyBrowser::Test() { QtProperty* property; property = modelBaseManager_->addProperty(tr("ModelBase")); QModelAttbute modelAttr(QString("test"), QString("test222"), true, 1.0 ); modelBaseManager_->setValue(property, modelAttr); addProperty(property, QLatin1String("brush")); property = colorManager_->addProperty(tr("color base")); colorManager_->setValue(property, QColor(255, 12, 231, 252)); addProperty(property, QLatin1String("bda")); }