@@ -38,13 +38,8 @@
3838
3939IndicatorClientCommon::IndicatorClientCommon(QObject *parent)
4040 : QObject(parent),
41− m_icon(""),
4241 m_visible(false),
43− m_priority(0),
44− m_model(0),
45− m_actionGroup(0),
46− m_action(0),
47− m_component(0)
42+ m_priority(0)
4843{
4944}
5045
@@ -59,107 +54,15 @@ void IndicatorClientCommon::init(const QSettings& settings)
5954 QString dbusService = settings.value("Indicator Service/DBusName").toString();
6055 QString objectPath = settings.value("Indicator Service/ObjectPath").toString();
6156
62− m_model = new QDBusMenuModel(this);
63− m_model->setBusName(dbusService);
64− m_model->setObjectPath(objectPath + "/" + TARGET_DEVICE);
65− m_model->setBusType(DBusEnums::SessionBus);
66−
67− //keep track of any change in the model
68− connect(m_model, SIGNAL(statusChanged(DBusEnums::ConnectionStatus)), SLOT(onModelChanged()));
69− connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(onModelChanged()));
70− connect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(onModelChanged()));
71− connect(m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(onModelChanged()));
72−
73− m_actionGroup = new QDBusActionGroup(this);
74− m_actionGroup->setBusType(m_model->busType());
75− m_actionGroup->setBusName(m_model->busName());
76− m_actionGroup->setObjectPath(objectPath);
77−
7857 m_initialProperties.clear();
7958 m_initialProperties.insert("title", m_title);
8059 m_initialProperties.insert("busType", 1);
8160 m_initialProperties.insert("busName", dbusService);
8261 m_initialProperties.insert("objectPath", objectPath);
83−
84− m_actionGroup->start();
85− m_model->start();
86−}
87−
88−void IndicatorClientCommon::onModelChanged()
89−{
90− DBusEnums::ConnectionStatus status = m_model->status();
91−
92− if (status == DBusEnums::Connected) {
93− QModelIndex index = m_model->index(0);
94− if (index.isValid()) {
95− QVariant extra = m_model->data(index, QDBusMenuModel::Extra);
96− QVariantMap extraMap = extra.toMap();
97− if (extraMap.contains("canonical_type")) {
98− QString type = extraMap["canonical_type"].toString();
99− parseRootElement(type, m_model->itemData(index));
100− }
101− }
102− } else {
103− parseRootElement("", QMap<int, QVariant>());
104− }
105−}
106−
107−bool IndicatorClientCommon::parseRootElement(const QString &type, QMap<int, QVariant> data)
108−{
109− if (type.isEmpty()) {
110− return false;
111− } else if (type != "com.canonical.indicator.root") {
112− if (!type.startsWith("com.canonical.indicator.root")) {
113− qWarning() << "indicator" << title() << "does not support root element";
114− }
115− return false;
116− } else {
117− if (m_action != 0) {
118− delete m_action;
119− }
120−
121− QVariant action = data[QDBusMenuModel::Action];
122− m_action = m_actionGroup->action(action.toString());
123−
124− if (m_action->isValid()) {
125− updateState(m_action->state());
126− }
127− QObject::connect(m_action, SIGNAL(stateChanged(QVariant)), this, SLOT(updateState(QVariant)));
128− return true;
129− }
130−}
131−
132−void IndicatorClientCommon::updateState(const QVariant &state)
133−{
134− if (state.isValid()) {
135− // (sssb) : the current label, icon name, accessible name, and visibility state of the indicator.
136− QVariantList states = state.toList();
137− if (states.size() == 4) {
138− setLabel(states[0].toString());
139− setIcon(QUrl(states[1].toString()));
140− setVisible(states[2].toBool());
141− return;
142− }
143− }
144−
145− setLabel("");
146− setIcon(QUrl());
147− setVisible(false);
14862}
14963
15064void IndicatorClientCommon::shutdown()
15165{
152− delete m_component;
153− m_component = 0;
154−
155− delete m_model;
156− m_model = 0;
157−
158− delete m_action;
159− m_action = 0;
160−
161− delete m_actionGroup;
162− m_actionGroup = 0;
16366}
16467
16568QString IndicatorClientCommon::identifier() const
@@ -175,23 +78,6 @@ void IndicatorClientCommon::setId(const QString &identifier)
17578 }
17679}
17780
178−QUrl IndicatorClientCommon::icon() const
179−{
180− if (!m_icon.isEmpty() && m_icon.scheme().isEmpty()) {
181− return QString("image://gicon/") + QUrl::toPercentEncoding(m_icon.toString());
182− } else {
183− return m_icon;
184− }
185−}
186−
187−void IndicatorClientCommon::setIcon(const QUrl &icon)
188−{
189− if (icon != m_icon) {
190− m_icon = icon;
191− Q_EMIT iconChanged(m_icon);
192− }
193−}
194−
19581QString IndicatorClientCommon::title() const
19682{
19783 return m_title;
@@ -257,14 +143,14 @@ void IndicatorClientCommon::setLabel(const QString &label)
257143 }
258144}
259145
260−QDBusActionGroup *IndicatorClientCommon::actionGroup() const
146+QUrl IndicatorClientCommon::iconComponentSource() const
261147{
262− return m_actionGroup;
148+ return QUrl("qrc:/indicatorsclient/qml/DefaultIndicatorIcon.qml");
263149}
264150
265−QUrl IndicatorClientCommon::componentSource() const
151+QUrl IndicatorClientCommon::pageComponentSource() const
266152{
267− return QUrl("qrc:/indicatorsclient/qml/CommonIndicator.qml");
153+ return QUrl("qrc:/indicatorsclient/qml/DefaultIndicatorPage.qml");
268154}
269155
270156IndicatorClientInterface::PropertiesMap IndicatorClientCommon::initialProperties()