[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