diff -r 6bb1b21d2484 -r 2f8f8080a020 phoneplugins/hsdialerwidgetplugin/src/hsdialerwidget.cpp --- 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 -#include -#include "hsdialerwidget.h" + +#include +#include +#include +#include #ifdef Q_OS_SYMBIAN +#include #include "qtphonelog.h" #include #include @@ -27,9 +30,12 @@ #include #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()); + } +}