DYTSrouce/src/ui/PropertyBrowser.cpp
2025-02-12 22:04:02 +08:00

216 lines
8.9 KiB
C++

#include "PropertyBrowser.h"
#include <QBoxLayout>
#include <QDebug>
#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<WorkSpace*>();
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<Entity*>();
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<SceneComponent*> 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(true);
//browser_->setResizeMode(QtTreePropertyBrowser::Stretch);
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);
QtModelFilePathFactory* modelFileFactory = new QtModelFilePathFactory(this);
QtEntityUUIDEditorFactory* entityUUIDFactory = new QtEntityUUIDEditorFactory(this);
QtMeshComponetManager* meshComponentManager = new QtMeshComponetManager(this);
browser_->setFactoryForManager(meshComponentManager->subModelFileProperyManager(), modelFileFactory);
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"));
}