phoneplugins/hsdialerwidgetplugin/src/hsdialerwidget.cpp
changeset 27 2f8f8080a020
parent 22 6bb1b21d2484
child 30 ebdbd102c78a
--- a/phoneplugins/hsdialerwidgetplugin/src/hsdialerwidget.cpp	Fri Apr 16 14:58:25 2010 +0300
+++ b/phoneplugins/hsdialerwidgetplugin/src/hsdialerwidget.cpp	Mon May 03 12:31:11 2010 +0300
@@ -15,10 +15,13 @@
 *
 */
 
-#include <QGraphicsLinearLayout>
-#include <HbIconItem>
-#include "hsdialerwidget.h"
+
+#include <QPainter>
+#include <hbframedrawer.h>
+#include <hbframeitem.h>
+#include <hbtextitem.h>
 #ifdef Q_OS_SYMBIAN
+#include <logsdomaincrkeys.h>
 #include "qtphonelog.h"
 #include <xqservicerequest.h>
 #include <xqcallinfo.h>
@@ -27,9 +30,12 @@
 #include <logsservices.h>
 #endif
 
+#include "hsdialerwidget.h"
+
 namespace
 {
     const char KDialerWidgetIcon[] = "qtg_graf_hs_dialer";
+    const char KMissedCallShortcutBadge[] = ":/icons/resource/qtg_fr_shortcut_badge_bg";
 }
 
 /*!
@@ -47,15 +53,36 @@
   : HbWidget(parent, flags),
     mXQCallInfo(0)
 {
-    HbIconItem *iconItem = new HbIconItem;
-    HbIcon icon(KDialerWidgetIcon);
-    iconItem->setIcon(icon);
+#ifdef Q_OS_SYMBIAN
+    m_setManager = new XQSettingsManager(this);
+
+    XQSettingsKey settingsKey( XQSettingsKey::TargetCentralRepository,
+            KCRUidLogs.iUid, KLogsNewMissedCalls );
+
+    bool ok = connect( m_setManager,
+            SIGNAL( valueChanged(const XQSettingsKey & ,const QVariant &)),
+                this, SLOT(updateMissedCallBadge(XQSettingsKey,
+                        QVariant)));
+    ASSERT( ok );
+    ok = false;
+    ok = m_setManager->startMonitoring( settingsKey );
+    ASSERT(ok);
 
-    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout;
-    layout->addItem(iconItem);
-    setLayout(layout);
+#endif
+
+    HbFrameDrawer *drawer = new HbFrameDrawer(
+            KDialerWidgetIcon, HbFrameDrawer::OnePiece);
+    m_backgroud = new HbFrameItem(drawer, this);
+    m_backgroud->setZValue(1);
 
-    setPreferredSize(icon.size());
+    drawer = new HbFrameDrawer(KMissedCallShortcutBadge,
+            HbFrameDrawer::ThreePiecesHorizontal );
+
+    m_shortcutBadge = new HbFrameItem(drawer, this);
+    m_shortcutBadge->setZValue(2);
+    m_shortcutBadge->setVisible(true);
+    m_missedCalls=2;
+    setItemPositions();
     resize(preferredSize());
 }
 
@@ -66,6 +93,48 @@
 {
 }
 
+void HsDialerWidget::paint(
+        QPainter *painter,
+        const QStyleOptionGraphicsItem *option,
+        QWidget *widget)
+{
+    Q_UNUSED(option);
+    Q_UNUSED(widget);
+    painter->setPen(QPen( Qt::transparent ) );
+
+    QRectF rect(m_backgroud->boundingRect());
+    painter->drawRect((int)m_backgroud->pos().x(),
+                      (int)m_backgroud->pos().y(),
+                      rect.toRect().width(),
+                      rect.toRect().height());
+
+    if ( m_shortcutBadge->isVisible())
+        {
+        rect = m_shortcutBadge->boundingRect();
+        HbTextItem *text = new HbTextItem( m_shortcutBadge->graphicsItem());
+        
+        QFont badgefont = font();
+#ifdef Q_OS_SYMBIAN
+        badgefont.setPointSize( 4 );
+#else
+        badgefont.setPointSize( 8 );
+#endif
+        text->setFont(badgefont);
+        text->setText(QString::number(m_missedCalls));
+        text->setZValue(3);
+        text->setTextColor(Qt::white);
+       // text->font().setPointSizeF(2);
+
+        text->setX( ( rect.toRect().width() / 2 ) - 2);
+        text->setY( ( rect.toRect().height() / 5 ) - 1);
+
+        painter->drawRect( (int)m_shortcutBadge->pos().x(),
+                           (int)m_shortcutBadge->pos().y(),
+                           rect.toRect().width(),
+                           rect.toRect().height() );
+    }
+}
+
 /*!
     \fn void HsDialerWidget::startDialer()
 
@@ -108,6 +177,22 @@
 #endif
 }
 
+void HsDialerWidget::updateMissedCallBadge(
+        const XQSettingsKey &key, const QVariant &value)
+{
+#ifdef Q_OS_SYMBIAN
+    if ( key.key() == (quint32)KLogsNewMissedCalls ){
+        m_missedCalls = value.toInt();
+        m_shortcutBadge->setVisible(value.toBool());
+        setItemPositions();
+        m_backgroud->update();
+    }
+#else
+   Q_UNUSED(key);
+   Q_UNUSED(value);
+#endif
+}
+
 /*!
     \fn void HsDialerWidget::onShow()
 
@@ -137,3 +222,22 @@
     Q_UNUSED(event);
     startDialer();
 }
+
+void HsDialerWidget::setItemPositions()
+{
+    HbIcon icon(KDialerWidgetIcon);
+    setPreferredWidth( icon.width());
+    int badgeSize = 20;
+    if ( m_shortcutBadge->isVisible()){
+        m_backgroud->setGeometry(QRectF(QPointF(0,badgeSize / 2 ), 
+                QSizeF(icon.width(),icon.height())));
+        m_shortcutBadge->setGeometry(QRectF(
+                QPointF(m_backgroud->boundingRect().width() - (badgeSize / 2),0 ),
+                QSizeF(badgeSize, badgeSize)));
+        setPreferredHeight(icon.height()+(badgeSize / 2));
+    } else {
+        m_backgroud->setGeometry(QRectF(QPointF(0,0), 
+                QSizeF(icon.width(),icon.height())));
+        setPreferredHeight(icon.height());
+    }
+}