diff --git a/src/plugins/coreplugin/actionmanager/actionmanager.cpp b/src/plugins/coreplugin/actionmanager/actionmanager.cpp index f791e9e22e2..0462c4de658 100644 --- a/src/plugins/coreplugin/actionmanager/actionmanager.cpp +++ b/src/plugins/coreplugin/actionmanager/actionmanager.cpp @@ -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) @@ -126,7 +127,12 @@ void Action::setOnTriggered(const std::function &func) QObject::connect(&d->action, &QAction::triggered, &d->action, func); } -void Action::setOnTriggered(QObject *guard, const std::function &func) +void Action::setOnTriggered(QObject *guard, const std::function &func) +{ + QObject::connect(&d->action, &QAction::triggered, guard, func); +} + +void Action::setOnTriggered(QObject *guard, const std::function &func) { QObject::connect(&d->action, &QAction::triggered, guard, func); } @@ -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; } diff --git a/src/plugins/coreplugin/actionmanager/actionmanager.h b/src/plugins/coreplugin/actionmanager/actionmanager.h index ba2eb4b0e06..7a735737d99 100644 --- a/src/plugins/coreplugin/actionmanager/actionmanager.h +++ b/src/plugins/coreplugin/actionmanager/actionmanager.h @@ -45,14 +45,20 @@ public: void setContainer(Utils::Id containerId, Utils::Id groupId = {}); void setOnTriggered(const std::function &func); void setOnTriggered(QObject *guard, const std::function &func); + void setOnTriggered(QObject *guard, const std::function &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;