[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/base/plasma/applets/presence
From: Abner Silva <abner.silva () kdemail ! net>
Date: 2009-07-28 18:33:44
Message-ID: 1248806024.476300.4434.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1003751 by abnerf:
Setting and Getting presence status and presence msg implemented.
M +71 -24 presencewidget.cpp
M +25 -4 presencewidget.h
--- trunk/playground/base/plasma/applets/presence/presencewidget.cpp #1003750:1003751
@@ -34,6 +34,8 @@
#include <KIconLoader>
#include <KLineEdit>
+const QString DEFAULT_MSG = "Set presence message here";
+
using namespace Plasma;
PresenceWidget::PresenceWidget(QGraphicsWidget *parent)
@@ -41,7 +43,7 @@
m_layout(0),
m_iconsLayout(0),
m_iconsWidget(0),
- m_currentStatus(0),
+ m_currentStatusIcon(0),
m_currentStatusLayout(0),
m_currentStatusWidget(0),
m_presenceMessage(0),
@@ -84,6 +86,7 @@
connect(icon, SIGNAL(clicked()),
this, SLOT(onCurrentStatusClicked()));
+ m_status[PresenceWidget::Online] = icon;
m_iconsLayout->addItem(icon);
icon = new IconWidget(this);
@@ -97,6 +100,7 @@
connect(icon, SIGNAL(clicked()),
this, SLOT(onCurrentStatusClicked()));
+ m_status[PresenceWidget::Away] = icon;
m_iconsLayout->addItem(icon);
icon = new IconWidget(this);
@@ -110,6 +114,7 @@
connect(icon, SIGNAL(clicked()),
this, SLOT(onCurrentStatusClicked()));
+ m_status[PresenceWidget::Busy] = icon;
m_iconsLayout->addItem(icon);
icon = new IconWidget(this);
@@ -123,6 +128,7 @@
connect(icon, SIGNAL(clicked()),
this, SLOT(onCurrentStatusClicked()));
+ m_status[PresenceWidget::Invisible] = icon;
m_iconsLayout->addItem(icon);
icon = new IconWidget(this);
@@ -136,6 +142,7 @@
connect(icon, SIGNAL(clicked()),
this, SLOT(onCurrentStatusClicked()));
+ m_status[PresenceWidget::Offline] = icon;
m_iconsLayout->addItem(icon);
m_iconsWidget->setLayout(m_iconsLayout);
m_iconsWidget->setVisible(false);
@@ -150,26 +157,26 @@
m_currentStatusLayout->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Expanding);
- m_currentStatus = new IconWidget(this);
- m_currentStatus->setIcon("user-online");
- m_currentStatus->setText(i18n("Available"));
- m_currentStatus->setToolTip(i18n("Click to change the status"));
- m_currentStatus->setOrientation(Qt::Horizontal);
- m_currentStatus->setTextBackgroundColor(QColor());
- m_currentStatus->setMinimumHeight(s);
- m_currentStatus->setMaximumHeight(s);
- m_currentStatus->setMinimumWidth(s);
- m_currentStatus->setMaximumWidth(85);
+ m_currentStatusIcon = new IconWidget(this);
+ m_currentStatusIcon->setToolTip(i18n("Click to change the status"));
+ m_currentStatusIcon->setOrientation(Qt::Horizontal);
+ m_currentStatusIcon->setTextBackgroundColor(QColor());
+ m_currentStatusIcon->setMinimumHeight(s);
+ m_currentStatusIcon->setMaximumHeight(s);
+ m_currentStatusIcon->setMinimumWidth(s);
+ m_currentStatusIcon->setMaximumWidth(85);
- connect(m_currentStatus, SIGNAL(clicked()),
+ connect(m_currentStatusIcon, SIGNAL(clicked()),
this, SLOT(onCurrentStatusClicked()));
- m_currentStatusLayout->addItem(m_currentStatus);
+ m_currentStatusLayout->addItem(m_currentStatusIcon);
m_currentStatusWidget->setLayout(m_currentStatusLayout);
m_layout->addItem(m_currentStatusWidget);
m_layout->setAlignment(m_currentStatusWidget, Qt::AlignCenter);
+ setPresenceStatus(PresenceWidget::Offline);
+
// Create the presence msg label
m_presenceMessageLabel = new Label(this);
m_presenceMessageLabel->nativeWidget()->setWordWrap(false);
@@ -178,7 +185,7 @@
Qt::AlignCenter);
m_presenceMessageLabel->nativeWidget()->setSizePolicy(
QSizePolicy::Expanding, QSizePolicy::Fixed);
- setPresenceMessage("Set presence message here");
+ setPresenceMessage("");
// Create the presence msg lineedit
m_presenceMessage = new LineEdit(this);
@@ -208,28 +215,34 @@
void PresenceWidget::onCurrentStatusClicked()
{
- if (m_currentStatus->isVisible()) {
- m_currentStatus->hide();
- m_currentStatusLayout->removeItem(m_currentStatus);
+ if (m_currentStatusIcon->isVisible()) {
+ m_currentStatusIcon->hide();
+ m_currentStatusLayout->removeItem(m_currentStatusIcon);
m_currentStatusLayout->addItem(m_iconsWidget);
m_iconsWidget->show();
}
else {
+ PresenceStatus status = m_status.key(
+ static_cast<IconWidget *>(sender()));
+ setPresenceStatus(status);
+
m_iconsWidget->hide();
m_currentStatusLayout->removeItem(m_iconsWidget);
- m_currentStatusLayout->addItem(m_currentStatus);
- m_currentStatus->setIcon(static_cast<IconWidget *>(sender())->icon());
- m_currentStatus->setText(static_cast<IconWidget *>(sender())->toolTip());
- m_currentStatus->show();
+ m_currentStatusLayout->addItem(m_currentStatusIcon);
+ m_currentStatusIcon->show();
+
+ emit presenceStatusChanged(m_currentStatus, m_presenceMsg);
}
}
void PresenceWidget::onPresenceMsgReturn()
{
- if (m_presenceMsg != m_presenceMessage->nativeWidget()->text())
+ if (m_presenceMsg != m_presenceMessage->nativeWidget()->text()) {
setPresenceMessage(m_presenceMessage->nativeWidget()->text());
+ emit presenceStatusChanged(m_currentStatus, m_presenceMsg);
+ }
}
void PresenceWidget::onPresenceMsgSwitch()
@@ -259,12 +272,46 @@
void PresenceWidget::setPresenceMessage(const QString &msg)
{
+ if (m_presenceMsg == msg)
+ return;
+
+ QString realMsg = msg;
+
+ if (realMsg.isEmpty())
+ realMsg = DEFAULT_MSG;
+
+ m_presenceMessageLabel->nativeWidget()->setText(
+ QString("<a href=a>%1</a>").arg(realMsg));
+
m_presenceMsg = msg;
- m_presenceMessageLabel->nativeWidget()->setText(
- QString("<a href=a>%1</a>").arg(msg));
}
const QString PresenceWidget::presenceMessage() const
{
return m_presenceMsg;
}
+
+void PresenceWidget::setPresenceStatus(PresenceStatus status)
+{
+ if (m_currentStatus == status)
+ return;
+
+ IconWidget *icon = m_status[status];
+
+ m_currentStatusIcon->setIcon(icon->icon());
+ m_currentStatusIcon->setText(icon->toolTip());
+
+ m_currentStatus = status;
+}
+
+PresenceWidget::PresenceStatus PresenceWidget::presenceStatus() const
+{
+ return m_currentStatus;
+}
+
+void PresenceWidget::setPresenceStatusWithMsg(PresenceStatus status,
+ const QString &msg)
+{
+ setPresenceStatus(status);
+ setPresenceMessage(msg);
+}
--- trunk/playground/base/plasma/applets/presence/presencewidget.h #1003750:1003751
@@ -36,31 +36,52 @@
class PresenceWidget : public QGraphicsWidget
{
Q_OBJECT
+ Q_PROPERTY(PresenceStatus presenceStatus READ presenceStatus WRITE setPresenceStatus)
+ Q_PROPERTY(QString presenceMessage READ presenceMessage WRITE setPresenceMessage)
public:
+ enum PresenceStatus {
+ Online = 1,
+ Away = 2,
+ Busy = 3,
+ Invisible = 4,
+ Offline = 5
+ };
+
PresenceWidget(QGraphicsWidget *parent = 0);
~PresenceWidget();
void init();
+ void setPresenceStatus(PresenceStatus status);
+ PresenceStatus presenceStatus() const;
+
+ void setPresenceMessage(const QString &msg);
+ const QString presenceMessage() const;
+
+ void setPresenceStatusWithMsg(PresenceStatus status, const QString &msg);
+
+Q_SIGNALS:
+ void presenceStatusChanged(PresenceWidget::PresenceStatus status,
+ const QString &msg);
+
private Q_SLOTS:
void onCurrentStatusClicked();
void onPresenceMsgReturn();
void onPresenceMsgSwitch();
private:
- void setPresenceMessage(const QString &msg);
- const QString presenceMessage() const;
-
QGraphicsLinearLayout *m_layout;
QGraphicsLinearLayout *m_iconsLayout;
QGraphicsWidget *m_iconsWidget;
- Plasma::IconWidget *m_currentStatus;
+ Plasma::IconWidget *m_currentStatusIcon;
QGraphicsLinearLayout *m_currentStatusLayout;
QGraphicsWidget *m_currentStatusWidget;
Plasma::LineEdit *m_presenceMessage;
Plasma::Label *m_presenceMessageLabel;
QString m_presenceMsg;
+ QHash<PresenceStatus, Plasma::IconWidget *> m_status;
+ PresenceStatus m_currentStatus;
};
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic