17 #include "actionrootstate.h"
19 #include <qdbusactiongroup.h>
22 ActionRootState::ActionRootState(QObject *parent)
23 : RootStateObject(parent)
24 , m_actionGroup(nullptr)
28 QDBusActionGroup *ActionRootState::actionGroup()
const
33 void ActionRootState::setActionGroup(QDBusActionGroup *actionGroup)
35 if (m_actionGroup != actionGroup) {
36 bool wasValid = valid();
39 disconnect(m_actionGroup, 0,
this, 0);
41 m_actionGroup = actionGroup;
44 connect(m_actionGroup, &QDBusActionGroup::statusChanged,
this, [&](
bool) { updateActionState(); });
45 connect(m_actionGroup, &QDBusActionGroup::actionAppear,
this, [&](
const QString&) { updateActionState(); });
46 connect(m_actionGroup, &QDBusActionGroup::actionVanish,
this, [&](
const QString&) { updateActionState(); });
47 connect(m_actionGroup, &QDBusActionGroup::actionStateChanged,
this, [&](QVariant) { updateActionState(); });
49 connect(m_actionGroup, &QObject::destroyed,
this, [&](QObject*) { updateActionState(); });
52 Q_EMIT actionGroupChanged();
54 if (wasValid != valid()) Q_EMIT validChanged();
58 QString ActionRootState::actionName()
const
63 void ActionRootState::setActionName(
const QString &actionName)
65 if (m_actionName != actionName) {
66 bool wasValid = valid();
68 m_actionName = actionName;
71 Q_EMIT actionNameChanged();
73 if (wasValid != valid()) Q_EMIT validChanged();
77 bool ActionRootState::valid()
const
79 return m_actionGroup && m_actionGroup->status() == DBusEnums::Connected &&
80 !m_actionName.isEmpty() && m_actionGroup->hasAction(m_actionName);
83 void ActionRootState::updateActionState()
86 ActionStateParser* oldParser = m_actionGroup->actionStateParser();
87 m_actionGroup->setActionStateParser(&m_parser);
89 QVariantMap state = m_actionGroup->actionState(m_actionName).toMap();
91 m_actionGroup->setActionStateParser(oldParser);
93 setCurrentState(state);
95 setCurrentState(QVariantMap());