diff -r ba76fc04e6c2 -r 6b911d05207e phoneplugins/hsdialerwidgetplugin/src/hsdialerwidget.cpp --- 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 +#include +#include +#include +#include +#include +#include +#include "dialerwidgetengine.h" -#include -#include -#include -#include -#include #ifdef Q_OS_SYMBIAN -#include #include "qtphonelog.h" #include #include #include -#include #include +#include +#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 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); } }