13
13
* You should have received a copy of the GNU Lesser General Public License
14
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
* Nick Dedekind <nick.dedekind@canonical.com>
20
#include "rootactionstate.h"
21
#include "indicators.h"
23
#include <unitymenumodel.h>
17
#include "rootstateparser.h"
29
21
#include <gio/gio.h>
32
RootActionState::RootActionState(QObject *parent)
33
: ActionStateParser(parent),
38
RootActionState::~RootActionState()
42
UnityMenuModel* RootActionState::menu() const
47
void RootActionState::setMenu(UnityMenuModel* 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()));
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::indicatorVisible() const
161
if (!isValid()) return false;
163
return m_cachedState.value("visible", QVariant::fromValue(true)).toBool();
24
RootStateParser::RootStateParser(QObject* parent)
25
: ActionStateParser(parent)
166
29
static QString iconUri(GIcon *icon)
297
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::indicatorVisible() 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 oldIndicatorVisible = indicatorVisible();
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 (oldIndicatorVisible != indicatorVisible()) Q_EMIT indicatorVisibleChanged();