Skip to content

Commit 6fd7791

Browse files
committed
Update enum editor when enum data changes
Add enumDataChanged signal and update editor when enum data or names change. Adjust stagger axis labels based on map orientation.
1 parent a1ca927 commit 6fd7791

File tree

3 files changed

+61
-9
lines changed

3 files changed

+61
-9
lines changed

src/tiled/propertiesview.cpp

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -645,20 +645,31 @@ QWidget *BaseEnumProperty::createEnumEditor(QWidget *parent)
645645
{
646646
auto editor = new ComboBox(parent);
647647

648-
for (qsizetype i = 0; i < m_enumData.names.size(); ++i) {
649-
auto value = m_enumData.values.value(i, i);
650-
editor->addItem(m_enumData.icons[value],
651-
m_enumData.names[i],
652-
value);
653-
}
648+
auto setupEditor = [this, editor] {
649+
const QSignalBlocker blocker(editor);
650+
editor->clear();
651+
652+
for (qsizetype i = 0; i < m_enumData.names.size(); ++i) {
653+
auto value = m_enumData.values.value(i, i);
654+
editor->addItem(m_enumData.icons[value],
655+
m_enumData.names[i],
656+
value);
657+
}
658+
};
654659

655660
auto syncEditor = [this, editor] {
656661
const QSignalBlocker blocker(editor);
657662
editor->setCurrentIndex(editor->findData(value()));
658663
};
664+
665+
setupEditor();
659666
syncEditor();
660667

661668
QObject::connect(this, &Property::valueChanged, editor, syncEditor);
669+
QObject::connect(this, &BaseEnumProperty::enumDataChanged, editor, [=] {
670+
setupEditor();
671+
syncEditor();
672+
});
662673
QObject::connect(editor, &QComboBox::currentIndexChanged, this,
663674
[editor, this] {
664675
setValue(editor->currentData().toInt());
@@ -667,6 +678,21 @@ QWidget *BaseEnumProperty::createEnumEditor(QWidget *parent)
667678
return editor;
668679
}
669680

681+
void BaseEnumProperty::setEnumData(const EnumData &enumData)
682+
{
683+
m_enumData = enumData;
684+
emit enumDataChanged(m_enumData);
685+
}
686+
687+
void BaseEnumProperty::setEnumNames(const QStringList &names)
688+
{
689+
if (m_enumData.names == names)
690+
return;
691+
692+
m_enumData.names = names;
693+
emit enumDataChanged(m_enumData);
694+
}
695+
670696
QWidget *BaseEnumProperty::createFlagsEditor(QWidget *parent)
671697
{
672698
auto editor = new QWidget(parent);

src/tiled/propertiesview.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include <QHash>
2424
#include <QIcon>
25+
#include <QMap>
2526
#include <QPointer>
2627
#include <QScrollArea>
2728
#include <QString>
@@ -490,7 +491,8 @@ class BaseEnumProperty : public IntProperty
490491
public:
491492
using IntProperty::IntProperty;
492493

493-
void setEnumData(const EnumData &enumData) { m_enumData = enumData; }
494+
void setEnumData(const EnumData &enumData);
495+
void setEnumNames(const QStringList &names);
494496
void setFlags(bool flags) { m_flags = flags; }
495497

496498
QWidget *createEditor(QWidget *parent) override
@@ -499,6 +501,9 @@ class BaseEnumProperty : public IntProperty
499501
: createEnumEditor(parent);
500502
}
501503

504+
signals:
505+
void enumDataChanged(const EnumData &enumData);
506+
502507
protected:
503508
QWidget *createFlagsEditor(QWidget *parent);
504509
QWidget *createEnumEditor(QWidget *parent);

src/tiled/propertieswidget.cpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -865,9 +865,11 @@ class MapProperties : public ObjectProperties
865865
mMapProperties->addProperty(mRenderOrderProperty);
866866
mMapProperties->addProperty(mBackgroundColorProperty);
867867

868+
updateStaggerAxisLabels();
869+
updateEnabledState();
870+
868871
addProperty(mMapProperties);
869872

870-
updateEnabledState();
871873
connect(document, &Document::changed,
872874
this, &MapProperties::onChanged);
873875
}
@@ -899,6 +901,7 @@ class MapProperties : public ObjectProperties
899901
emit mParallaxOriginProperty->valueChanged();
900902
break;
901903
case Map::OrientationProperty:
904+
updateStaggerAxisLabels();
902905
emit mOrientationProperty->valueChanged();
903906
break;
904907
case Map::RenderOrderProperty:
@@ -946,6 +949,24 @@ class MapProperties : public ObjectProperties
946949
}
947950
}
948951

952+
void updateStaggerAxisLabels()
953+
{
954+
switch (map()->orientation()) {
955+
case Map::Hexagonal:
956+
mStaggerAxisProperty->setEnumNames({
957+
tr("X (Flat-top)"),
958+
tr("Y (Pointy-top)")
959+
});
960+
break;
961+
default:
962+
mStaggerAxisProperty->setEnumNames({
963+
tr("X"),
964+
tr("Y")
965+
});
966+
break;
967+
}
968+
}
969+
949970
MapDocument *mapDocument() const
950971
{
951972
return static_cast<MapDocument*>(mDocument);
@@ -962,7 +983,7 @@ class MapProperties : public ObjectProperties
962983
SizeProperty *mTileSizeProperty;
963984
BoolProperty *mInfiniteProperty;
964985
IntProperty *mHexSideLengthProperty;
965-
Property *mStaggerAxisProperty;
986+
BaseEnumProperty *mStaggerAxisProperty;
966987
Property *mStaggerIndexProperty;
967988
Property *mParallaxOriginProperty;
968989
Property *mLayerDataFormatProperty;

0 commit comments

Comments
 (0)