From 6a58aa7fbdd0e26cdf139c4471e46c559a59e959 Mon Sep 17 00:00:00 2001 From: maelstrom Date: Thu, 5 Jun 2025 00:46:31 +0200 Subject: [PATCH] feat(editor): enum support in properties pane --- editor/panes/propertiesview.cpp | 34 ++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/editor/panes/propertiesview.cpp b/editor/panes/propertiesview.cpp index e8def62..cb516b5 100644 --- a/editor/panes/propertiesview.cpp +++ b/editor/panes/propertiesview.cpp @@ -7,12 +7,14 @@ #include "objects/base/member.h" #include +#include #include #include #include #include #include #include +#include #include #include @@ -95,6 +97,18 @@ public: colorDialog->setCurrentColor(QColor::fromRgbF(color.R(), color.G(), color.B())); return colorDialog; + } else if (meta.type.descriptor == &EnumItem::TYPE) { + QComboBox* comboBox = new QComboBox(parent); + + EnumItem enumItem = currentValue.get(); + std::vector siblingItems = meta.type.enum_->GetEnumItems(); + for (int i = 0; i < siblingItems.size(); i++) { + comboBox->addItem(QString::fromStdString(siblingItems[i].Name())); + if (siblingItems[i].Value() == enumItem.Value()) + comboBox->setCurrentIndex(i); + } + + return comboBox; } else if (meta.type.descriptor->fromString) { QLineEdit* lineEdit = new QLineEdit(parent); lineEdit->setText(QString::fromStdString(currentValue.ToString())); @@ -150,6 +164,15 @@ public: Color3 color = currentValue.get(); colorDialog->setCurrentColor(QColor::fromRgbF(color.R(), color.G(), color.B())); + } else if (meta.type.descriptor == &EnumItem::TYPE) { + QComboBox* comboBox = dynamic_cast(editor); + + EnumItem enumItem = currentValue.get(); + std::vector siblingItems = meta.type.enum_->GetEnumItems(); + for (int i = 0; i < siblingItems.size(); i++) { + if (siblingItems[i].Value() == enumItem.Value()) + comboBox->setCurrentIndex(i); + } } else if (meta.type.descriptor->fromString) { QLineEdit* lineEdit = dynamic_cast(editor); @@ -211,6 +234,13 @@ public: inst->SetPropertyValue(propertyName, color3).expect(); model->setData(index, QString::fromStdString(color3.ToString()), Qt::DisplayRole); model->setData(index, color, Qt::DecorationRole); + } else if (meta.type.descriptor == &EnumItem::TYPE) { + QComboBox* comboBox = dynamic_cast(editor); + + std::vector siblingItems = meta.type.enum_->GetEnumItems(); + EnumItem newItem = siblingItems[comboBox->currentIndex()]; + inst->SetPropertyValue(propertyName, newItem).expect("Failed to set enum value in properties pane"); + model->setData(index, QString::fromStdString(newItem.Name()), Qt::DisplayRole); } else if (meta.type.descriptor->fromString) { QLineEdit* lineEdit = dynamic_cast(editor); @@ -319,7 +349,9 @@ void PropertiesView::setSelected(std::optional> instan // } else if (meta.type.descriptor == &CFrame::TYPE) { // Vector3 vector = currentValue.get().Position(); // item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString())); - } else { + } else if (meta.type.descriptor == &EnumItem::TYPE) { + item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.get().Name())); + } else { item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString())); }