Skip to content

Commit 94eba47

Browse files
Editor: Enum properties support for Next Object #891 (#892)
1 parent 7326cc8 commit 94eba47

File tree

4 files changed

+63
-26
lines changed

4 files changed

+63
-26
lines changed

worldeditor/src/screens/propertyedit/custom/color/coloredit.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,11 @@ void ColorEdit::paintEvent(QPaintEvent *ev) {
3131
painter.setPen(Qt::NoPen);
3232
painter.setBrush(m_brush);
3333
painter.drawRect(r);
34+
painter.setBrush(m_color);
35+
painter.drawRect(r);
3436
r.setWidth(r.width() / 2);
3537
painter.setBrush(QColor(m_color.rgb()));
3638
painter.drawRect(r);
37-
r.translate(r.width(), 0);
38-
painter.setBrush(m_color);
39-
painter.drawRect(r);
4039
painter.end();
4140
}
4241

worldeditor/src/screens/propertyedit/editors/EnumEdit.cpp

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,28 @@ QVariant EnumEdit::data() const {
2323
void EnumEdit::setData(const QVariant &data) {
2424
const QMetaObject *meta = m_qObject->metaObject();
2525
int index = meta->indexOfProperty(qPrintable(m_propertyName));
26-
QMetaProperty prop = meta->property(index);
26+
if(index > -1) {
27+
QMetaProperty prop = meta->property(index);
28+
29+
QString key = prop.enumerator().valueToKey(data.toInt());
30+
index = ui->comboBox->findText(key);
31+
} else {
32+
QVariant variant = m_qObject->property(qPrintable(m_propertyName));
33+
if(variant.isValid()) {
34+
QMetaType type(variant.userType());
35+
36+
QByteArray typeName = type.name();
37+
for(auto i = 0; i < meta->enumeratorCount(); i++) {
38+
QMetaEnum qenum = meta->enumerator(i);
39+
if(typeName.contains(qenum.enumName())) {
40+
QString key = qenum.valueToKey(data.toInt());
41+
index = ui->comboBox->findText(key);
42+
break;
43+
}
44+
}
45+
}
46+
}
2747

28-
QString key = prop.enumerator().valueToKey(data.toInt());
29-
index = ui->comboBox->findText(key);
3048
if(index > -1) {
3149
ui->comboBox->blockSignals(true);
3250
ui->comboBox->setCurrentIndex(index);
@@ -40,14 +58,37 @@ void EnumEdit::setObject(QObject *object, const QString &name) {
4058
ui->comboBox->clear();
4159

4260
const QMetaObject *meta = m_qObject->metaObject();
43-
QMetaProperty prop = meta->property(meta->indexOfProperty(qPrintable(name)));
4461

45-
if(prop.isEnumType()) {
46-
QStringList enums;
47-
QMetaEnum qenum = prop.enumerator();
48-
for(int i = 0; i < qenum.keyCount(); i++) {
49-
enums << qenum.key(i);
62+
int index = meta->indexOfProperty(qPrintable(name));
63+
if(index > -1) {
64+
QMetaProperty prop = meta->property(index);
65+
66+
if(prop.isEnumType()) {
67+
QStringList enums;
68+
QMetaEnum qenum = prop.enumerator();
69+
for(int i = 0; i < qenum.keyCount(); i++) {
70+
enums << qenum.key(i);
71+
}
72+
ui->comboBox->addItems(enums);
73+
}
74+
} else {
75+
QVariant variant = m_qObject->property(qPrintable(name));
76+
if(variant.isValid()) {
77+
QMetaType type(variant.userType());
78+
79+
QByteArray typeName = type.name();
80+
for(auto i = 0; i < meta->enumeratorCount(); i++) {
81+
QMetaEnum qenum = meta->enumerator(i);
82+
if(typeName.contains(qenum.enumName())) {
83+
QStringList enums;
84+
for(int i = 0; i < qenum.keyCount(); i++) {
85+
enums << qenum.key(i);
86+
}
87+
ui->comboBox->addItems(enums);
88+
89+
break;
90+
}
91+
}
5092
}
51-
ui->comboBox->addItems(enums);
5293
}
5394
}

worldeditor/src/screens/propertyedit/property.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,9 @@ QWidget *Property::createEditor(QWidget *parent) const {
210210
if(index > -1) {
211211
QVariant data = m_propertyObject->property(qPrintable(objectName()));
212212
type = data.userType();
213+
if(QMetaType(type).flags() & QMetaType::IsEnumeration) {
214+
type = -1;
215+
}
213216
}
214217
}
215218
}

worldeditor/src/screens/propertyedit/propertymodel.cpp

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,11 @@ void PropertyModel::addItem(QObject *propertyObject) {
155155
propertyItem = new Property(name, static_cast<Property *>(m_rootItem), true);
156156
propertyItem->setPropertyObject(propertyObject);
157157

158-
bool empty = true;
159158
for(int i = 0; i < count; i++) {
160159
QMetaProperty property = metaObject->property(i);
161160

162161
if(property.isUser(propertyObject)) { // Hide Qt specific properties
163162
if(!QString(property.name()).toLower().contains("enable")) {
164-
empty = false;
165-
166163
Property *p = new Property(property.name(), (propertyItem) ? propertyItem : static_cast<Property *>(m_rootItem), false);
167164
p->setPropertyObject(propertyObject);
168165

@@ -173,17 +170,17 @@ void PropertyModel::addItem(QObject *propertyObject) {
173170
}
174171
}
175172
}
176-
177-
if(empty) {
178-
delete propertyItem;
179-
propertyItem = static_cast<Property *>(m_rootItem);
180-
}
181173
}
182174

183175
if(propertyItem) {
184176
updateDynamicProperties(propertyItem, propertyObject);
185177
}
186178

179+
if(propertyItem != m_rootItem && propertyItem->children().isEmpty()) {
180+
delete propertyItem;
181+
propertyItem = static_cast<Property *>(m_rootItem);
182+
}
183+
187184
emit layoutAboutToBeChanged();
188185
emit layoutChanged();
189186
}
@@ -209,12 +206,9 @@ void PropertyModel::updateDynamicProperties(Property *parent, QObject *propertyO
209206

210207
Property *it = parent;
211208

212-
// Add properties left in the list
213209
for(QByteArray &dynProp : dynamicProperties) {
214210
QByteArrayList list = dynProp.split('/');
215211

216-
Property *s = it;
217-
it = (list.size() > 1) ? static_cast<Property *>(m_rootItem) : it;
218212
for(int i = 0; i < list.size(); i++) {
219213
Property *p = nullptr;
220214

@@ -224,7 +218,7 @@ void PropertyModel::updateDynamicProperties(Property *parent, QObject *propertyO
224218
if(child) {
225219
it = child;
226220
} else {
227-
p = new Property(path, it, true);
221+
p = new Property(path, it, false);
228222
p->setPropertyObject(propertyObject);
229223
it = p;
230224
}
@@ -234,7 +228,7 @@ void PropertyModel::updateDynamicProperties(Property *parent, QObject *propertyO
234228
p->setProperty("__Dynamic", true);
235229
}
236230
}
237-
it = s;
231+
it = parent;
238232
}
239233
}
240234

0 commit comments

Comments
 (0)