@@ -12,155 +12,18 @@
13 * You should have received a copy of the GNU Lesser General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17− * Nick Dedekind <nick.dedekind@canonical.com>
20−#include "rootactionstate.h"
17+#include "rootstateparser.h"
21−#include "indicators.h"
23−#include <unitymenumodel.h>
27extern "C" {
19extern "C" {
28#include <glib.h>
20#include <glib.h>
29#include <gio/gio.h>
21#include <gio/gio.h>
32−RootActionState::RootActionState(QObject *parent)
24+RootStateParser::RootStateParser(QObject* parent)
33− : ActionStateParser(parent),
25+ : ActionStateParser(parent)
38−RootActionState::~RootActionState()
42−UnityMenuModel* RootActionState::menu() const
47−void RootActionState::setMenu(UnityMenuModel* menu)
49− if (m_menu != menu) {
51− m_menu->disconnect(this);
56− connect(m_menu, SIGNAL(rowsInserted(const QModelIndex&, int, int)), SLOT(onModelRowsAdded(const QModelIndex&, int, int)));
57− connect(m_menu, SIGNAL(rowsRemoved(const QModelIndex&, int, int)), SLOT(onModelRowsRemoved(const QModelIndex&, int, int)));
58− connect(m_menu, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)), SLOT(onModelDataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)));
60− connect(m_menu, SIGNAL(destroyed()), SLOT(reset()));
63− Q_EMIT menuChanged();
67−void RootActionState::onModelRowsAdded(const QModelIndex& parent, int start, int end)
70− if (start == 0 && end >= 0) {
75−void RootActionState::onModelRowsRemoved(const QModelIndex& parent, int start, int end)
78− if (start == 0 && end >= 0) {
83−void RootActionState::onModelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight, const QVector<int>& roles)
86− if (!topLeft.isValid() || !bottomRight.isValid()) {
90− if (topLeft.row() <= 0 && bottomRight.row() >= 0) {
95−void RootActionState::reset()
97− m_cachedState.clear();
100− Q_EMIT menuChanged();
104−void RootActionState::updateActionState()
106− if (m_menu && m_menu->rowCount() > 0) {
107− ActionStateParser* oldParser = m_menu->actionStateParser();
108− m_menu->setActionStateParser(this);
110− m_cachedState = m_menu->get(0, "actionState").toMap();
112− m_menu->setActionStateParser(oldParser);
114− m_cachedState.clear();
119−bool RootActionState::isValid() const
121− return m_menu && m_menu->rowCount() > 0;
124−QString RootActionState::title() const
126− if (!isValid()) return QString();
128− return m_cachedState.value("title", QVariant::fromValue(QString())).toString();
131−QString RootActionState::leftLabel() const
133− if (!isValid()) return QString();
135− return m_cachedState.value("pre-label", QVariant::fromValue(QString())).toString();
138−QString RootActionState::rightLabel() const
140− if (!isValid()) return QString();
142− return m_cachedState.value("label", QVariant::fromValue(QString())).toString();
145−QStringList RootActionState::icons() const
147− if (!isValid()) return QStringList();
149− return m_cachedState.value("icons", QVariant::fromValue(QStringList())).toStringList();
152−QString RootActionState::accessibleName() const
154− if (!isValid()) return QString();
156− return m_cachedState.value("accessible-desc", QVariant::fromValue(QString())).toString();
159−bool RootActionState::isVisible() const
161− if (!isValid()) return false;
163− return m_cachedState.value("visible", QVariant::fromValue(true)).toBool();
166static QString iconUri(GIcon *icon)
29static QString iconUri(GIcon *icon)
@@ -209,7 +72,7 @@ static QString iconUri(GIcon *icon)
209 return uri;
72 return uri;
212−QVariant RootActionState::toQVariant(GVariant* state) const
75+QVariant RootStateParser::toQVariant(GVariant* state) const
214 if (!state) {
77 if (!state) {
215 return QVariant();
78 return QVariant();
@@ -296,3 +159,73 @@ QVariant RootActionState::toQVariant(GVariant* state) const
297 return ActionStateParser::toQVariant(state);
160 return ActionStateParser::toQVariant(state);
164+RootStateObject::RootStateObject(QObject* parent)
169+QString RootStateObject::title() const
171+ if (!valid()) return QString();
173+ return m_currentState.value("title", QVariant::fromValue(QString())).toString();
176+QString RootStateObject::leftLabel() const
178+ if (!valid()) return QString();
180+ return m_currentState.value("pre-label", QVariant::fromValue(QString())).toString();
183+QString RootStateObject::rightLabel() const
185+ if (!valid()) return QString();
187+ return m_currentState.value("label", QVariant::fromValue(QString())).toString();
190+QStringList RootStateObject::icons() const
192+ if (!valid()) return QStringList();
194+ return m_currentState.value("icons", QVariant::fromValue(QStringList())).toStringList();
197+QString RootStateObject::accessibleName() const
199+ if (!valid()) return QString();
201+ return m_currentState.value("accessible-desc", QVariant::fromValue(QString())).toString();
204+bool RootStateObject::isVisible() const
206+ if (!valid()) return false;
208+ return m_currentState.value("visible", QVariant::fromValue(true)).toBool();
211+void RootStateObject::setCurrentState(const QVariantMap& newState)
213+ QString oldTitle = title();
214+ QString oldLeftLabel = leftLabel();
215+ QString oldRightLabel = rightLabel();
216+ QStringList oldIcons = icons();
217+ QString oldAccessibleName = accessibleName();
218+ bool oldVisible = isVisible();
220+ if (m_currentState != newState) {
221+ m_currentState = newState;
224+ if (oldTitle != title()) Q_EMIT titleChanged();
225+ if (oldLeftLabel != leftLabel()) Q_EMIT leftLabelChanged();
226+ if (oldRightLabel != rightLabel()) Q_EMIT rightLabelChanged();
227+ if (oldIcons != icons()) Q_EMIT iconsChanged();
228+ if (oldAccessibleName != accessibleName()) Q_EMIT accessibleNameChanged();
229+ if (oldVisible != isVisible()) Q_EMIT visibleChanged();