Core: Fix Action setters

In some cases the data needs to be forwarded to the command's action.

Change-Id: I3ae066cbac393d78808d697beb3df29cbdee3315
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2023-11-09 12:56:19 +01:00
parent 08546615f2
commit c26521aeb3
2 changed files with 58 additions and 3 deletions

View File

@@ -78,14 +78,13 @@ public:
{
if (!command) {
QTC_ASSERT(actionId.isValid(), return);
QTC_ASSERT(!context.isEmpty(), return);
command = ActionManager::registerAction(&action, actionId, context);
}
}
QAction action;
Id actionId;
Context context;
Context context{Constants::C_GLOBAL};
Command *command = nullptr;
};
@@ -102,6 +101,8 @@ Action::~Action()
void Action::setText(const QString &text)
{
d->action.setText(text);
if (d->command)
d->command->action()->setText(text);
}
void Action::setCommandAttribute(Command::CommandAttribute attr)
@@ -131,6 +132,11 @@ void Action::setOnTriggered(QObject *guard, const std::function<void ()> &func)
QObject::connect(&d->action, &QAction::triggered, guard, func);
}
void Action::setOnTriggered(QObject *guard, const std::function<void(bool)> &func)
{
QObject::connect(&d->action, &QAction::triggered, guard, func);
}
void Action::setDefaultKeySequence(const QKeySequence &seq)
{
d->ensureCommand();
@@ -148,11 +154,15 @@ void Action::setDefaultKeySequence(const QString &mac, const QString &nonMac)
void Action::setIcon(const QIcon &icon)
{
d->action.setIcon(icon);
if (d->command)
d->command->action()->setIcon(icon);
}
void Action::setIconVisibleInMenu(bool on)
{
d->action.setIconVisibleInMenu(on);
if (d->command)
d->command->action()->setIconVisibleInMenu(on);
}
void Action::setTouchBarIcon(const QIcon &icon)
@@ -165,6 +175,32 @@ void Action::setTouchBarIcon(const QIcon &icon)
void Action::setEnabled(bool on)
{
d->action.setEnabled(on);
// Explicitly not needed, done via context update:
// if (d->command)
// d->command->action()->...
}
void Action::setChecked(bool on)
{
d->action.setChecked(on);
// Explicitly not needed, done via context update:
// if (d->command)
// d->command->action()->...
}
void Action::setVisible(bool on)
{
d->action.setVisible(on);
// Explicitly not needed, done via context update:
// if (d->command)
// d->command->action()->....
}
void Action::setCheckable(bool on)
{
d->action.setCheckable(on);
if (d->command)
d->command->action()->setCheckable(on);
}
Command *Action::command() const
@@ -174,6 +210,18 @@ Command *Action::command() const
return d->command;
}
QAction *Action::commandAction() const
{
d->ensureCommand();
QTC_ASSERT(d->command, return nullptr);
return d->command->action();
}
QAction *Action::contextAction() const
{
return &d->action;
}
void Action::setId(Id id)
{
d->actionId = id;
@@ -186,6 +234,7 @@ void Action::setContext(Id id)
void Action::setContext(const Context &context)
{
QTC_ASSERT(!context.isEmpty(), return);
d->context = context;
}

View File

@@ -45,14 +45,20 @@ public:
void setContainer(Utils::Id containerId, Utils::Id groupId = {});
void setOnTriggered(const std::function<void()> &func);
void setOnTriggered(QObject *guard, const std::function<void()> &func);
void setOnTriggered(QObject *guard, const std::function<void(bool)> &func);
void setDefaultKeySequence(const QKeySequence &seq);
void setDefaultKeySequence(const QString &mac, const QString &nonMac);
void setIcon(const QIcon &icon);
void setIconVisibleInMenu(bool on);
void setTouchBarIcon(const QIcon &icon);
void setEnabled(bool on);
void setChecked(bool on);
void setVisible(bool on);
void setCheckable(bool on);
Command *command() const;
QAction *commandAction() const;
QAction *contextAction() const;
private:
class ActionPrivate *d = nullptr;