214 lines
8.8 KiB
C++
214 lines
8.8 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(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"));
|
|
}
|