Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/tiled/propertiesview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1420,7 +1420,8 @@ PropertiesView::PropertyWidgets PropertiesView::createPropertyWidgets(Property *
widgets.addButton->setFocusPolicy(Qt::StrongFocus); // needed for AddValueProperty
Utils::setThemeIcon(widgets.addButton, "add");
editorLayout->addWidget(widgets.addButton, 0, Qt::AlignTop);
connect(widgets.addButton, &QAbstractButton::clicked, property, &Property::addRequested);
connect(widgets.addButton, &QAbstractButton::clicked,
property, [property] { emit property->addRequested(); });

if (auto groupProperty = qobject_cast<GroupProperty *>(property)) {
auto containerWidget = new QWidget(parent);
Expand Down
2 changes: 1 addition & 1 deletion src/tiled/propertiesview.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ class Property : public QObject

void resetRequested();
void removeRequested();
void addRequested();
void addRequested(bool focus = true);

void contextMenuRequested(const QPoint &globalPos);

Expand Down
17 changes: 10 additions & 7 deletions src/tiled/propertieswidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2323,10 +2323,11 @@ GroupProperty *PropertiesWidget::customPropertiesGroup() const
return mCustomProperties;
}

void PropertiesWidget::selectCustomProperty(const QString &name)
void PropertiesWidget::selectCustomProperty(const QString &name, bool focus)
{
if (auto property = mCustomProperties->property(name)) {
mPropertiesView->focusProperty(property);
if (focus)
mPropertiesView->focusProperty(property);
mPropertiesView->setSelectedProperties({ property });
}
}
Expand Down Expand Up @@ -2715,8 +2716,10 @@ void PropertiesWidget::showAddValueProperty()
if (!mAddValueProperty) {
mAddValueProperty = new AddValueProperty(mCustomProperties);

connect(mAddValueProperty, &Property::addRequested, this, [this] {
addProperty(mAddValueProperty->name(), mAddValueProperty->value());
connect(mAddValueProperty, &Property::addRequested, this, [this] (bool focus) {
const auto &name = mAddValueProperty->name();
addProperty(name, mAddValueProperty->value());
selectCustomProperty(name, focus);
mCustomProperties->deleteProperty(mAddValueProperty);
});
connect(mAddValueProperty, &Property::removeRequested, this, [this] {
Expand All @@ -2743,8 +2746,6 @@ void PropertiesWidget::addProperty(const QString &name, const QVariant &value)
mDocument->currentObjects(),
name, value));
}

selectCustomProperty(name);
}

void PropertiesWidget::removeImpl(const SelectionState &state)
Expand Down Expand Up @@ -2883,7 +2884,9 @@ void PropertiesWidget::showContextMenu(const QPoint &pos)

if (actions.testFlag(Property::Action::Add)) {
QAction *add = contextMenu.addAction(mAddIcon, tr("Add"),
focusedProperty, &Property::addRequested);
focusedProperty, [focusedProperty] {
emit focusedProperty->addRequested();
});
add->setEnabled(!actions.testFlag(Property::Action::AddDisabled));
Utils::setThemeIcon(add, "add");
}
Expand Down
2 changes: 1 addition & 1 deletion src/tiled/propertieswidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class PropertiesWidget : public QWidget
void bringToFront();

public slots:
void selectCustomProperty(const QString &name);
void selectCustomProperty(const QString &name, bool focus = true);

protected:
bool event(QEvent *event) override;
Expand Down
17 changes: 10 additions & 7 deletions src/tiled/propertytypeseditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -570,8 +570,16 @@ void PropertyTypesEditor::openAddMemberDialog()
mAddValueProperty = new AddValueProperty(mMembersProperty);
mAddValueProperty->setPlaceholderText(tr("Member name"));

connect(mAddValueProperty, &Property::addRequested, this, [this] {
addMember(mAddValueProperty->name(), mAddValueProperty->value());
connect(mAddValueProperty, &Property::addRequested, this, [this] (bool focus) {
const auto &name = mAddValueProperty->name();
addMember(name, mAddValueProperty->value());

if (auto property = mMembersProperty->property(name)) {
if (focus)
mMembersView->focusProperty(property);
mMembersView->setSelectedProperties({ property });
}

mMembersProperty->deleteProperty(mAddValueProperty);
});
connect(mAddValueProperty, &Property::removeRequested, this, [this] {
Expand Down Expand Up @@ -603,11 +611,6 @@ void PropertyTypesEditor::addMember(const QString &name, const QVariant &value)

applyMemberToSelectedType(name, value);
updateDetails();

if (auto property = mMembersProperty->property(name)) {
mMembersView->focusProperty(property);
mMembersView->setSelectedProperties({ property });
}
}

void PropertyTypesEditor::removeMember()
Expand Down
10 changes: 7 additions & 3 deletions src/tiled/variantmapproperty.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -772,9 +772,13 @@ QWidget *AddValueProperty::createLabel(int level, QWidget *parent)
if (!focusWidget || focusWidget->window() != parent->window())
return;

// Request removal if focus moved elsewhere
if (!parent->isAncestorOf(focusWidget))
emit removeRequested();
// Request add or removal if focus moved elsewhere
if (!parent->isAncestorOf(focusWidget)) {
if (!name().isEmpty())
emit addRequested(false); // add without focusing, in response to focus out
else
emit removeRequested();
}
});

return nameEdit;
Expand Down
Loading