summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Capriotti <p.capriotti@gmail.com>2011-07-17 23:00:36 (GMT)
committerPaolo Capriotti <p.capriotti@gmail.com>2011-07-18 18:13:26 (GMT)
commit6478703e74c54baf8e7fddb4cdfdbf8ca6f8af06 (patch)
tree2366c4aada4377d09343ba772153f4c9ec52d9a7
parent6715622dedc5e886c861ff5e78b382ca5a780e10 (diff)
downloadkde-telepathy-contact-list-6478703e74c54baf8e7fddb4cdfdbf8ca6f8af06.tar.gz
kde-telepathy-contact-list-6478703e74c54baf8e7fddb4cdfdbf8ca6f8af06.tar.xz
Refactor presence handling in AccountButton.
* Factored out a function to get the correct action corresponding to the current presence. * Use status first for matching, then type if status fails. * Use 'away' icon for the BRB action. * Remove unused code. REVIEW: 101992 Reviewed-by: Martin Klapetek
-rw-r--r--account-button.cpp79
-rw-r--r--account-button.h11
2 files changed, 47 insertions, 43 deletions
diff --git a/account-button.cpp b/account-button.cpp
index 7763858..5c9e135 100644
--- a/account-button.cpp
+++ b/account-button.cpp
@@ -35,7 +35,9 @@
#include <TelepathyQt4/PendingOperation>
AccountButton::AccountButton(const Tp::AccountPtr &account, QWidget* parent)
- : QToolButton(parent), m_busyOverlay(0)
+ : QToolButton(parent),
+ m_busyOverlay(0),
+ m_offlineAction(0)
{
m_account = account;
@@ -43,23 +45,15 @@ AccountButton::AccountButton(const Tp::AccountPtr &account, QWidget* parent)
m_busyOverlay->setWidget(this);
m_busyOverlay->setSequence(KPixmapSequence(QString("process-working")));
- m_errorPixmap = KIconLoader::global()->loadIcon("dialog-error", KIconLoader::NoGroup, 16);
- m_onlinePixmap = KIconLoader::global()->loadIcon("user-online", KIconLoader::NoGroup, 16);
- m_awayPixmap = KIconLoader::global()->loadIcon("user-away", KIconLoader::NoGroup, 16);
- m_awayExPixmap = KIconLoader::global()->loadIcon("user-away-extended", KIconLoader::NoGroup, 16);
- m_busyPixmap = KIconLoader::global()->loadIcon("user-busy", KIconLoader::NoGroup, 16);
- m_hiddenPixmap = KIconLoader::global()->loadIcon("user-invisible", KIconLoader::NoGroup, 16);
- m_offlinePixmap = KIconLoader::global()->loadIcon("user-offline", KIconLoader::NoGroup, 16);
-
QString iconPath = account->iconName();
setIcon(KIcon(iconPath));
-
if (!account->isValid()) {
//we paint a warning symbol in the right-bottom corner
+ QPixmap errorPixmap = KIconLoader::global()->loadIcon("dialog-error", KIconLoader::NoGroup, 16);
QPixmap pixmap = icon().pixmap(32, 32);
QPainter painter(&pixmap);
- painter.drawPixmap(15, 15, 16, 16, m_errorPixmap);
+ painter.drawPixmap(15, 15, 16, 16, errorPixmap);
setIcon(KIcon(pixmap));
}
@@ -75,12 +69,12 @@ AccountButton::AccountButton(const Tp::AccountPtr &account, QWidget* parent)
KAction *onlineAction = new KAction(KIcon("user-online"), i18nc("@action:inmenu This is an IM user status", "Available"), this);
KAction *awayAction = new KAction(KIcon("user-away"), i18nc("@action:inmenu This is an IM user status", "Away"), this);
- KAction *brbAction = new KAction(KIcon("user-busy"), i18nc("@action:inmenu This is an IM user status", "Be right back"), this);
+ KAction *brbAction = new KAction(KIcon("user-away"), i18nc("@action:inmenu This is an IM user status", "Be right back"), this);
KAction *busyAction = new KAction(KIcon("user-busy"), i18nc("@action:inmenu This is an IM user status", "Busy"), this);
KAction *dndAction = new KAction(KIcon("user-busy"), i18nc("@action:inmenu This is an IM user status", "Do not disturb"), this);
KAction *xaAction = new KAction(KIcon("user-away-extended"), i18nc("@action:inmenu This is an IM user status", "Extended Away"), this);
KAction *invisibleAction = new KAction(KIcon("user-invisible"), i18nc("@action:inmenu This is an IM user status", "Invisible"), this);
- KAction *offlineAction = new KAction(KIcon("user-offline"), i18nc("@action:inmenu This is an IM user status", "Offline"), this);
+ m_offlineAction = new KAction(KIcon("user-offline"), i18nc("@action:inmenu This is an IM user status", "Offline"), this);
m_presenceMessageWidget = new KLineEdit(this);
m_presenceMessageWidget->setClearButtonShown(true);
@@ -102,10 +96,13 @@ AccountButton::AccountButton(const Tp::AccountPtr &account, QWidget* parent)
awayAction->setData(qVariantFromValue(Tp::Presence::away()));
brbAction->setData(qVariantFromValue(Tp::Presence::brb()));
busyAction->setData(qVariantFromValue(Tp::Presence::busy()));
- dndAction->setData(qVariantFromValue(Tp::Presence::busy()));
+ dndAction->setData(qVariantFromValue(Tp::Presence(
+ Tp::ConnectionPresenceTypeBusy,
+ QLatin1String("dnd"),
+ QLatin1String(""))));
xaAction->setData(qVariantFromValue(Tp::Presence::xa()));
invisibleAction->setData(qVariantFromValue(Tp::Presence::hidden()));
- offlineAction->setData(qVariantFromValue(Tp::Presence::offline()));
+ m_offlineAction->setData(qVariantFromValue(Tp::Presence::offline()));
presenceActions->addAction(onlineAction);
presenceActions->addAction(awayAction);
@@ -114,7 +111,7 @@ AccountButton::AccountButton(const Tp::AccountPtr &account, QWidget* parent)
presenceActions->addAction(dndAction);
presenceActions->addAction(xaAction);
presenceActions->addAction(invisibleAction);
- presenceActions->addAction(offlineAction);
+ presenceActions->addAction(m_offlineAction);
presenceActions->addAction(presenceMessageAction);
addActions(presenceActions->actions());
@@ -203,28 +200,39 @@ void AccountButton::presenceChanged(const Tp::Presence &presence)
return;
}
- bool accountPresenceFound = false;
+ QAction *action = actionForPresence(presence);
+ if (!action) {
+ action = m_offlineAction;
+ }
- foreach (QAction *a, actions()) {
- if (presence.type() == qVariantValue<Tp::Presence>(a->data()).type()) {
- a->setChecked(true);
- updateToolTip();
+ action->setChecked(true);
+ updateToolTip();
- accountPresenceFound = true;
+ QPixmap pixmap = icon().pixmap(32, 32);
+ QPainter painter(&pixmap);
+ KIcon(action->icon()).paint(&painter, 15, 15, 16, 16);
- QPixmap pixmap = icon().pixmap(32, 32);
- QPainter painter(&pixmap);
- KIcon(a->icon()).paint(&painter, 15, 15, 16, 16);
+ setIcon(KIcon(pixmap));
+}
- setIcon(KIcon(pixmap));
+QAction *AccountButton::actionForPresence(const Tp::Presence &presence) const
+{
+ QAction *match = 0;
- break;
+ foreach (QAction *a, actions()) {
+ Tp::Presence actionPresence = qVariantValue<Tp::Presence>(a->data());
+ if (presence.status() == actionPresence.status()) {
+ // if a matching status is found, return it immediately
+ return a;
+ } else if (!match && presence.type() == actionPresence.type()) {
+ // if no matching status is found, the first action with matching
+ // type will be returned, so save it for later
+ match = a;
}
}
- if (!accountPresenceFound) {
- presenceChanged(Tp::Presence::offline());
- }
+ // return the best match, which could be a null pointer
+ return match;
}
/* since there is no easy way to get this string by Tp::Presence,
@@ -232,13 +240,12 @@ void AccountButton::presenceChanged(const Tp::Presence &presence)
This will also get us i18n strings for free. */
QString AccountButton::presenceDisplayString(const Tp::Presence &presence)
{
- foreach (QAction *a, actions()) {
- if (presence.status() == qVariantValue<Tp::Presence>(a->data()).status()) {
- return KGlobal::locale()->removeAcceleratorMarker(a->text());
- }
+ QAction *action = actionForPresence(presence);
+ if (action) {
+ return KGlobal::locale()->removeAcceleratorMarker(action->text());
+ } else {
+ return QString();
}
-
- return QString();
}
void AccountButton::setCustomPresenceMessage(const QString& message)
diff --git a/account-button.h b/account-button.h
index fb98a0d..8dbf315 100644
--- a/account-button.h
+++ b/account-button.h
@@ -66,6 +66,9 @@ public Q_SLOTS:
void setCustomPresenceMessage(const QString &message);
private:
+
+ QAction *actionForPresence(const Tp::Presence &presence) const;
+
///Holds the account it controls
Tp::AccountPtr m_account;
@@ -77,13 +80,7 @@ private:
KLineEdit *m_presenceMessageWidget;
- QPixmap m_errorPixmap;
- QPixmap m_onlinePixmap;
- QPixmap m_awayPixmap;
- QPixmap m_busyPixmap;
- QPixmap m_awayExPixmap;
- QPixmap m_hiddenPixmap;
- QPixmap m_offlinePixmap;
+ QAction *m_offlineAction;
};
#endif // TELEPATHY_ACCOUNTBUTTON_H