Changeset View
Changeset View
Standalone View
Standalone View
applets/systemtray/systemtraymodel.cpp
Show All 24 Lines | |||||
25 | #include <Plasma/Applet> | 25 | #include <Plasma/Applet> | ||
26 | #include <Plasma/DataContainer> | 26 | #include <Plasma/DataContainer> | ||
27 | #include <Plasma/Service> | 27 | #include <Plasma/Service> | ||
28 | #include <PluginLoader> | 28 | #include <PluginLoader> | ||
29 | 29 | | |||
30 | #include <KLocalizedString> | 30 | #include <KLocalizedString> | ||
31 | 31 | | |||
32 | BaseModel::BaseModel(QObject *parent) | 32 | BaseModel::BaseModel(QObject *parent) | ||
33 | : QStandardItemModel(parent) | 33 | : QStandardItemModel(parent), | ||
34 | m_showAllItems(false) | ||||
34 | { | 35 | { | ||
36 | connect(this, &BaseModel::dataChanged, this, &BaseModel::onDataChanged); | ||||
35 | } | 37 | } | ||
36 | 38 | | |||
37 | QHash<int, QByteArray> BaseModel::roleNames() const | 39 | QHash<int, QByteArray> BaseModel::roleNames() const | ||
38 | { | 40 | { | ||
39 | QHash<int, QByteArray> roles = QStandardItemModel::roleNames(); | 41 | QHash<int, QByteArray> roles = QStandardItemModel::roleNames(); | ||
40 | 42 | | |||
41 | roles.insert(static_cast<int>(BaseRole::ItemType), QByteArrayLiteral("itemType")); | 43 | roles.insert(static_cast<int>(BaseRole::ItemType), QByteArrayLiteral("itemType")); | ||
42 | roles.insert(static_cast<int>(BaseRole::ItemId), QByteArrayLiteral("itemId")); | 44 | roles.insert(static_cast<int>(BaseRole::ItemId), QByteArrayLiteral("itemId")); | ||
43 | roles.insert(static_cast<int>(BaseRole::CanRender), QByteArrayLiteral("canRender")); | 45 | roles.insert(static_cast<int>(BaseRole::CanRender), QByteArrayLiteral("canRender")); | ||
44 | roles.insert(static_cast<int>(BaseRole::Category), QByteArrayLiteral("category")); | 46 | roles.insert(static_cast<int>(BaseRole::Category), QByteArrayLiteral("category")); | ||
47 | roles.insert(static_cast<int>(BaseRole::Status), QByteArrayLiteral("status")); | ||||
48 | roles.insert(static_cast<int>(BaseRole::EffectiveStatus), QByteArrayLiteral("effectiveStatus")); | ||||
45 | 49 | | |||
46 | return roles; | 50 | return roles; | ||
47 | } | 51 | } | ||
48 | 52 | | |||
53 | void BaseModel::onConfigurationChanged(const KConfigGroup &config) | ||||
54 | { | ||||
55 | if (!config.isValid()) { | ||||
56 | return; | ||||
57 | } | ||||
58 | | ||||
59 | const KConfigGroup generalGroup = config.group("General"); | ||||
60 | | ||||
61 | m_showAllItems = generalGroup.readEntry("showAllItems", false); | ||||
62 | m_shownItems = generalGroup.readEntry("shownItems", QStringList()); | ||||
63 | m_hiddenItems = generalGroup.readEntry("hiddenItems", QStringList()); | ||||
64 | | ||||
65 | for (int i = 0; i < rowCount(); i++) { | ||||
66 | QStandardItem *dataItem = item(i); | ||||
67 | updateEffectiveStatus(dataItem); | ||||
68 | } | ||||
69 | } | ||||
70 | | ||||
71 | void BaseModel::onDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles) | ||||
72 | { | ||||
73 | if (roles.contains(static_cast<int>(BaseRole::Status)) || roles.contains(static_cast<int>(BaseRole::CanRender))) { | ||||
74 | for (int i = topLeft.row(); i <= bottomRight.row(); i++) { | ||||
75 | QStandardItem *dataItem = item(i); | ||||
76 | updateEffectiveStatus(dataItem); | ||||
77 | } | ||||
78 | } | ||||
79 | } | ||||
80 | | ||||
81 | void BaseModel::updateEffectiveStatus(QStandardItem *dataItem) | ||||
82 | { | ||||
83 | Plasma::Types::ItemStatus status = calculateEffectiveStatus(dataItem); | ||||
84 | dataItem->setData(status, static_cast<int>(BaseModel::BaseRole::EffectiveStatus)); | ||||
85 | } | ||||
86 | | ||||
87 | Plasma::Types::ItemStatus BaseModel::calculateEffectiveStatus(QStandardItem *dataItem) | ||||
88 | { | ||||
89 | bool canRender = dataItem->data(static_cast<int>(BaseRole::CanRender)).toBool(); | ||||
90 | if (!canRender) { | ||||
91 | return Plasma::Types::ItemStatus::HiddenStatus; | ||||
92 | } | ||||
93 | | ||||
94 | Plasma::Types::ItemStatus status = readStatus(dataItem); | ||||
95 | if (status == Plasma::Types::ItemStatus::HiddenStatus) { | ||||
96 | return Plasma::Types::ItemStatus::HiddenStatus; | ||||
97 | } | ||||
98 | | ||||
99 | QString itemId = dataItem->data(static_cast<int>(BaseRole::ItemId)).toString(); | ||||
100 | | ||||
101 | bool forcedShown = m_showAllItems || m_shownItems.contains(itemId); | ||||
102 | bool forcedHidden = m_hiddenItems.contains(itemId); | ||||
103 | | ||||
104 | if (forcedShown || (!forcedHidden && status != Plasma::Types::ItemStatus::PassiveStatus)) { | ||||
105 | return Plasma::Types::ItemStatus::ActiveStatus; | ||||
106 | } else { | ||||
107 | return Plasma::Types::ItemStatus::PassiveStatus; | ||||
108 | } | ||||
109 | } | ||||
110 | | ||||
111 | Plasma::Types::ItemStatus BaseModel::readStatus(QStandardItem *dataItem) const | ||||
112 | { | ||||
113 | QVariant statusData = dataItem->data(static_cast<int>(BaseRole::Status)); | ||||
114 | if (statusData.isValid()) { | ||||
115 | return statusData.value<Plasma::Types::ItemStatus>(); | ||||
116 | } else { | ||||
117 | return Plasma::Types::ItemStatus::UnknownStatus; | ||||
118 | } | ||||
119 | } | ||||
120 | | ||||
49 | static QString plasmoidCategoryForMetadata(const KPluginMetaData &metadata) | 121 | static QString plasmoidCategoryForMetadata(const KPluginMetaData &metadata) | ||
50 | { | 122 | { | ||
51 | QString category = QStringLiteral("UnknownCategory"); | 123 | QString category = QStringLiteral("UnknownCategory"); | ||
52 | 124 | | |||
53 | if (metadata.isValid()) { | 125 | if (metadata.isValid()) { | ||
54 | const QString notificationAreaCategory = metadata.value(QStringLiteral("X-Plasma-NotificationAreaCategory")); | 126 | const QString notificationAreaCategory = metadata.value(QStringLiteral("X-Plasma-NotificationAreaCategory")); | ||
55 | if (!notificationAreaCategory.isEmpty()) { | 127 | if (!notificationAreaCategory.isEmpty()) { | ||
56 | category = notificationAreaCategory; | 128 | category = notificationAreaCategory; | ||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Line(s) | 170 | { | |||
118 | dataItem->setData(QIcon::fromTheme(applet->icon()), Qt::DecorationRole); | 190 | dataItem->setData(QIcon::fromTheme(applet->icon()), Qt::DecorationRole); | ||
119 | connect(applet, &Plasma::Applet::iconChanged, this, [dataItem] (const QString &icon) { | 191 | connect(applet, &Plasma::Applet::iconChanged, this, [dataItem] (const QString &icon) { | ||
120 | dataItem->setData(QIcon::fromTheme(icon), Qt::DecorationRole); | 192 | dataItem->setData(QIcon::fromTheme(icon), Qt::DecorationRole); | ||
121 | }); | 193 | }); | ||
122 | 194 | | |||
123 | dataItem->setData(pluginMetaData.pluginId(), static_cast<int>(BaseModel::BaseRole::ItemId)); | 195 | dataItem->setData(pluginMetaData.pluginId(), static_cast<int>(BaseModel::BaseRole::ItemId)); | ||
124 | dataItem->setData(true, static_cast<int>(BaseModel::BaseRole::CanRender)); | 196 | dataItem->setData(true, static_cast<int>(BaseModel::BaseRole::CanRender)); | ||
125 | dataItem->setData(plasmoidCategoryForMetadata(pluginMetaData), static_cast<int>(BaseModel::BaseRole::Category)); | 197 | dataItem->setData(plasmoidCategoryForMetadata(pluginMetaData), static_cast<int>(BaseModel::BaseRole::Category)); | ||
198 | dataItem->setData(applet->status(), static_cast<int>(BaseModel::BaseRole::Status)); | ||||
199 | connect(applet, &Plasma::Applet::statusChanged, this, [dataItem] (Plasma::Types::ItemStatus status) { | ||||
200 | dataItem->setData(status, static_cast<int>(BaseModel::BaseRole::Status)); | ||||
201 | }); | ||||
126 | 202 | | |||
127 | dataItem->setData(applet->property("_plasma_graphicObject"), static_cast<int>(Role::Applet)); | 203 | dataItem->setData(applet->property("_plasma_graphicObject"), static_cast<int>(Role::Applet)); | ||
128 | dataItem->setData(true, static_cast<int>(Role::HasApplet)); | 204 | dataItem->setData(true, static_cast<int>(Role::HasApplet)); | ||
129 | } | 205 | } | ||
130 | 206 | | |||
131 | void PlasmoidModel::removeApplet(Plasma::Applet *applet) | 207 | void PlasmoidModel::removeApplet(Plasma::Applet *applet) | ||
132 | { | 208 | { | ||
133 | int rows = rowCount(); | 209 | int rows = rowCount(); | ||
▲ Show 20 Lines • Show All 101 Lines • ▼ Show 20 Line(s) | 297 | { | |||
235 | } else { | 311 | } else { | ||
236 | dataItem->setData(data.value("IconName"), Qt::DecorationRole); | 312 | dataItem->setData(data.value("IconName"), Qt::DecorationRole); | ||
237 | } | 313 | } | ||
238 | 314 | | |||
239 | dataItem->setData(data.value("Id"), static_cast<int>(BaseModel::BaseRole::ItemId)); | 315 | dataItem->setData(data.value("Id"), static_cast<int>(BaseModel::BaseRole::ItemId)); | ||
240 | QVariant category = data.value("Category"); | 316 | QVariant category = data.value("Category"); | ||
241 | dataItem->setData(category.isNull() ? QStringLiteral("UnknownCategory") : data.value("Category"), static_cast<int>(BaseModel::BaseRole::Category)); | 317 | dataItem->setData(category.isNull() ? QStringLiteral("UnknownCategory") : data.value("Category"), static_cast<int>(BaseModel::BaseRole::Category)); | ||
242 | 318 | | |||
319 | QString status = data.value("Status").toString(); | ||||
320 | if (status == QLatin1String("Active")) { | ||||
321 | dataItem->setData(Plasma::Types::ItemStatus::ActiveStatus, static_cast<int>(BaseModel::BaseRole::Status)); | ||||
322 | } else if (status == QLatin1String("NeedsAttention")) { | ||||
323 | dataItem->setData(Plasma::Types::ItemStatus::NeedsAttentionStatus, static_cast<int>(BaseModel::BaseRole::Status)); | ||||
324 | } else { | ||||
325 | dataItem->setData(Plasma::Types::ItemStatus::PassiveStatus, static_cast<int>(BaseModel::BaseRole::Status)); | ||||
326 | } | ||||
327 | | ||||
243 | dataItem->setData(sourceName, static_cast<int>(Role::DataEngineSource)); | 328 | dataItem->setData(sourceName, static_cast<int>(Role::DataEngineSource)); | ||
244 | updateItemData(dataItem, data, Role::AttentionIcon); | 329 | updateItemData(dataItem, data, Role::AttentionIcon); | ||
245 | updateItemData(dataItem, data, Role::AttentionIconName); | 330 | updateItemData(dataItem, data, Role::AttentionIconName); | ||
246 | updateItemData(dataItem, data, Role::AttentionMovieName); | 331 | updateItemData(dataItem, data, Role::AttentionMovieName); | ||
247 | updateItemData(dataItem, data, Role::Category); | 332 | updateItemData(dataItem, data, Role::Category); | ||
248 | updateItemData(dataItem, data, Role::Icon); | 333 | updateItemData(dataItem, data, Role::Icon); | ||
249 | updateItemData(dataItem, data, Role::IconName); | 334 | updateItemData(dataItem, data, Role::IconName); | ||
250 | updateItemData(dataItem, data, Role::IconThemePath); | 335 | updateItemData(dataItem, data, Role::IconThemePath); | ||
▲ Show 20 Lines • Show All 50 Lines • Show Last 20 Lines |