phoneplugins/hsdialerwidgetplugin/src/hsdialerwidget.cpp
changeset 45 6b911d05207e
parent 37 ba76fc04e6c2
--- a/phoneplugins/hsdialerwidgetplugin/src/hsdialerwidget.cpp	Fri Jun 04 10:19:18 2010 +0100
+++ b/phoneplugins/hsdialerwidgetplugin/src/hsdialerwidget.cpp	Wed Jun 23 18:12:20 2010 +0300
@@ -15,28 +15,39 @@
 *
 */
 
+#include <HbStyle>
+#include <HbStyleLoader>
+#include <HbFrameItem>
+#include <HbFrameDrawer>
+#include <HbIconItem>
+#include <HbTextItem>
+#include <HbTouchArea>
+#include "dialerwidgetengine.h"
 
-#include <QPainter>
-#include <hbframedrawer.h>
-#include <hbframeitem.h>
-#include <hbtextitem.h>
-#include <QLocale>
 #ifdef Q_OS_SYMBIAN
-#include <logsdomaincrkeys.h>
 #include "qtphonelog.h"
 #include <xqservicerequest.h>
 #include <xqcallinfo.h>
 #include <xqpublishandsubscribeutils.h>
-#include <ctsydomainpskeys.h>
 #include <logsservices.h>
+#include <xqrequestinfo.h>
+#else
+#define PHONE_TRACE
+#define PHONE_TRACE1(A)
+#define PHONE_TRACE2(A, B)
+#define PHONE_TRACE3(A, B, C)
+#define PHONE_TRACE4(A, B, C, D)
 #endif
 
 #include "hsdialerwidget.h"
 
+
 namespace
 {
     const char KDialerWidgetIcon[] = ":/icons/resource/qtg_graf_hs_dialer";
     const char KMissedCallShortcutBadge[] = ":/icons/resource/qtg_fr_shortcut_badge_bg";
+    const char KDialerWidgetWidgetml[] = ":/data/resource/dialerwidget.widgetml";
+    const char KDialerWidgetCss[] = ":/data/resource/dialerwidget.css";
 }
 
 /*!
@@ -51,40 +62,10 @@
     Constructs dialer widget with given \a parent and given window \a flags.
 */
 HsDialerWidget::HsDialerWidget(QGraphicsItem *parent, Qt::WindowFlags flags)
-  : HbWidget(parent, flags),
-    mXQCallInfo(0)
-{
-#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);
-
-#endif
-
-    HbFrameDrawer *drawer = new HbFrameDrawer(
-            KDialerWidgetIcon, HbFrameDrawer::OnePiece);
-    m_backgroud = new HbFrameItem(drawer, this);
-    m_backgroud->setZValue(1);
-
-    drawer = new HbFrameDrawer(KMissedCallShortcutBadge,
-            HbFrameDrawer::ThreePiecesHorizontal );
-
-    m_shortcutBadge = new HbFrameItem(drawer, this);
-    m_shortcutBadge->setZValue(2);
-    m_shortcutBadge->setVisible(false);
-    m_missedCalls=0;
-    setItemPositions();
-    resize(preferredSize());
+  : HsWidget(parent, flags),
+    mXQCallInfo(0), m_background(0), m_badgeBackground(0), m_text(0), m_touchArea(0)
+{   
+    PHONE_TRACE 
 }
 
 /*!
@@ -92,47 +73,7 @@
 */
 HsDialerWidget::~HsDialerWidget()
 {
-}
-
-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(QLocale::system().toString(m_missedCalls));
-        text->setZValue(3);
-        text->setTextColor(Qt::white);
-       
-        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() );
-    }
+    PHONE_TRACE
 }
 
 /*!
@@ -142,14 +83,14 @@
 */
 void HsDialerWidget::startDialer()
 {
+    PHONE_TRACE
 #ifdef Q_OS_SYMBIAN
     PHONE_DEBUG("HsDialerWidget::startDialer");
     
     if (!mXQCallInfo) {
         mXQCallInfo = XQCallInfo::create();
         mXQCallInfo->setParent(this);
-    }
-    
+    }    
     QList<CallInfo> calls;
     mXQCallInfo->getCalls(calls);
         
@@ -167,6 +108,9 @@
         PHONE_DEBUG("no calls, open Dialer");
         XQServiceRequest snd("com.nokia.services.logsservices.starter",
             "start(int,bool)", false);
+        XQRequestInfo info;
+        info.setForeground(true);
+        snd.setInfo(info);
         snd << (int)LogsServices::ViewAll;
         snd << true;
         int retValue;
@@ -175,22 +119,34 @@
         //LogsServices::start(LogsServices::ViewAll, true);
     }
 #endif
+
 }
 
-void HsDialerWidget::updateMissedCallBadge(
-        const XQSettingsKey &key, const QVariant &value)
+void HsDialerWidget::onInitialize()
 {
-#ifdef Q_OS_SYMBIAN
-    if ( key.key() == (quint32)KLogsNewMissedCalls ){
-        m_missedCalls = value.toInt();
-        m_shortcutBadge->setVisible(value.toBool());
-        setItemPositions();
-        m_backgroud->update();
+    PHONE_TRACE
+    QT_TRY{
+        // basic ui
+        createPrimitives();
+        Q_ASSERT(HbStyleLoader::registerFilePath(KDialerWidgetWidgetml));
+        Q_ASSERT(HbStyleLoader::registerFilePath(KDialerWidgetCss));
+        // Engine construction is 2 phased 
+        m_engine = new DialerWidgetEngine();
+        connect(m_engine, SIGNAL( exceptionOccured(const int&) )
+                ,this, SLOT( onEngineException(const int&) ) );
+        
+        if(!m_engine->initialize()){
+            //engine construction failed. Give up.
+            emit error();
+            return;
+            }
+        connect( m_engine, SIGNAL(missedCallsCountChanged(const int&)),
+                this, SLOT(onMissedCallsCountChange(const int&)));
+        
     }
-#else
-   Q_UNUSED(key);
-   Q_UNUSED(value);
-#endif
+    QT_CATCH(...){
+        emit error();
+    }
 }
 
 /*!
@@ -200,6 +156,8 @@
 */
 void HsDialerWidget::onShow()
 {
+    PHONE_TRACE
+    updatePrimitives();
 }
 
 /*!
@@ -209,6 +167,32 @@
 */
 void HsDialerWidget::onHide()
 {
+    PHONE_TRACE
+}
+
+void HsDialerWidget::onUninitialize()
+{
+    PHONE_TRACE
+    HbStyleLoader::unregisterFilePath(KDialerWidgetWidgetml);
+    HbStyleLoader::unregisterFilePath(KDialerWidgetCss);
+}
+
+void HsDialerWidget::onEngineException(const int& exc)
+{
+    Q_UNUSED(exc);
+    emit error();
+}
+
+void HsDialerWidget::onMissedCallsCountChange(const int& count)
+{
+    m_text->setText( QLocale::system().toString(count));
+    if ( count ){
+        m_text->setVisible(true);
+        m_badgeBackground->setVisible(true);
+    } else {
+        m_text->setVisible(false);
+        m_badgeBackground->setVisible(false);
+    }
 }
 
 /*!
@@ -218,26 +202,73 @@
     \sa startDialer()
 */
 void HsDialerWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
-{
+{   
     Q_UNUSED(event);
     startDialer();
 }
 
-void HsDialerWidget::setItemPositions()
+HsWidget::StartResult HsDialerWidget::onStart()
+{
+    return StartResultRunning;
+}
+HsWidget::StopResult HsDialerWidget::onStop()
+{
+    return StopResultFinished;
+}
+HsWidget::SuspendResult HsDialerWidget::onSuspend()
+{
+    return SuspendResultSuspended;
+}
+HsWidget::ResumeResult HsDialerWidget::onResume()
 {
-    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());
+    return ResumeResultRunning;
+}
+
+void HsDialerWidget::createPrimitives()
+{   
+    setPreferredSize(100,100);
+    // Background
+    if (!m_background) {
+        HbFrameDrawer *drawer = new HbFrameDrawer(
+                KDialerWidgetIcon, HbFrameDrawer::OnePiece);
+        m_background = new HbFrameItem(drawer, this);
+        style()->setItemName(m_background, /*QLatin1String(*/"background"/*)*/);
+        m_background->moveBy(0,10);
+        m_background->resize(81,81);
+    }
+    
+    // Badge background
+    if (!m_badgeBackground) {
+        HbFrameDrawer *badgedrawer = new HbFrameDrawer(
+                KMissedCallShortcutBadge, HbFrameDrawer::ThreePiecesHorizontal);
+        m_badgeBackground = new HbFrameItem(badgedrawer, this);
+        style()->setItemName(m_background, QLatin1String("badgeBackground"));
+        m_badgeBackground->resize(20,20);
+        m_badgeBackground->moveBy(70,0);
+        m_badgeBackground->setVisible(true);
+        m_badgeBackground->setVisible( false );
+    }
+
+    // Text
+    if (!m_text) {
+        m_text = new HbTextItem(this);
+        style()->setItemName(m_text, QLatin1String("text"));
+        m_text->resize(20,20);
+        m_text->moveBy(76,0);
+        m_text->setVisible(true);
+        HbFontSpec *textFont = new HbFontSpec(HbFontSpec::Primary);
+        textFont->setTextHeight(3*HbDeviceProfile::current().unitValue());
+        m_text->setFontSpec(*textFont);
+        m_text->setText("0");
+        m_text->setVisible( false);
+    }
+
+    // Touch Area
+    if (!m_touchArea) {
+        m_touchArea = new HbTouchArea(this);
+        m_touchArea->installEventFilter(this);
+        style()->setItemName(m_touchArea, QLatin1String("touch_area"));
+        m_touchArea->moveBy(0,10);
+        m_touchArea->resize(81,81);
     }
 }