emailuis/nmhswidget/src/nmhswidget.cpp
changeset 18 578830873419
child 20 ecc8def7944a
equal deleted inserted replaced
4:e7aa27f58ae1 18:578830873419
       
     1 /*
       
     2  * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors:
       
    13  *
       
    14  * Description: 
       
    15  *
       
    16  */
       
    17 #include <QDebug>
       
    18 #include <QtGui>
       
    19 #include <QGraphicsLinearLayout>
       
    20 #include <hbcolorscheme.h>
       
    21 #include "nmhswidget.h"
       
    22 #include "nmhswidgetemailengine.h"
       
    23 #include "nmmessageenvelope.h"
       
    24 #include "nmhswidgettitlerow.h"
       
    25 #include "nmhswidgetemailrow.h"
       
    26 #include "nmhswidgetconsts.h"
       
    27 
       
    28 NmHsWidget::NmHsWidget(QGraphicsItem *parent, Qt::WindowFlags flags)
       
    29     : HbWidget(parent, flags), 
       
    30       mEngine( new NmHsWidgetEmailEngine() ),
       
    31       mRowLayout(0),
       
    32       mTitleRow( new NmHsWidgetTitleRow() )
       
    33 {
       
    34     qDebug() << "NmHsWidget::NmHsWidget IN -->>";
       
    35    
       
    36     this->setContentsMargins( KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin,
       
    37             KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin);
       
    38     
       
    39     //Setup layout
       
    40     mRowLayout = new QGraphicsLinearLayout(Qt::Vertical);
       
    41     mRowLayout->setContentsMargins(KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin,
       
    42             KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin);
       
    43     mRowLayout->setSpacing(KNmHsWidgetContentsMargin);
       
    44     mRowLayout->addItem(mTitleRow);
       
    45     setLayout(mRowLayout);
       
    46     
       
    47     //Do the initial data setting
       
    48     updateAccountName( mEngine->accountName() );
       
    49     updateMailData();
       
    50     updateUnreadCount( mEngine->unreadCount() );
       
    51     
       
    52     //Get signals about changes in mail data
       
    53     connect(mEngine, SIGNAL( mailDataChanged() )
       
    54             ,this, SLOT( updateMailData() ) );
       
    55     
       
    56     //Get Signals about changes in unread count
       
    57     connect(mEngine, SIGNAL( unreadCountChanged(const int&) )
       
    58             ,this, SLOT( updateUnreadCount(const int&) ) );
       
    59     
       
    60     //Get signals about account name changes
       
    61     connect(mEngine, SIGNAL( accountNameChanged(const QString&) )
       
    62             ,this, SLOT( updateAccountName(const QString&) ) );
       
    63     
       
    64     qDebug() << "NmHsWidget::NmHsWidget OUT <<--";
       
    65 }
       
    66 
       
    67 /*!
       
    68     Destructor
       
    69 */
       
    70 NmHsWidget::~NmHsWidget()
       
    71 {
       
    72     qDebug() << "NmHsWidget::~NmHsWidget IN -->>";
       
    73     if(mEngine)
       
    74         {
       
    75         delete mEngine;
       
    76         mEngine = NULL;
       
    77         }
       
    78     qDebug() << "NmHsWidget::~NmHsWidget OUT <<--";
       
    79 }
       
    80 
       
    81 /*!
       
    82     Initializes the widget.
       
    83 */
       
    84 void NmHsWidget::onInitialize()
       
    85 {
       
    86     qDebug() << "NmHsWidget::onInitialize IN -->>";
       
    87     
       
    88     qDebug() << "NmHsWidget::onInitialize OUT <<--";  
       
    89 }
       
    90 
       
    91 /*!
       
    92     Uninitializes the widget.
       
    93 */
       
    94 void NmHsWidget::onUninitialize()
       
    95 {
       
    96     qDebug() << "NmHsWidget::onUninitialize IN -->>";
       
    97     
       
    98     qDebug() << "NmHsWidget::onUninitialize OUT <<--";
       
    99 }
       
   100 
       
   101 /*!
       
   102     Paints widget
       
   103 */
       
   104 void NmHsWidget::paint(QPainter *painter, 
       
   105                           const QStyleOptionGraphicsItem *option, 
       
   106                           QWidget *widget)
       
   107 {
       
   108     Q_UNUSED(option);
       
   109     Q_UNUSED(widget);
       
   110     //----- backgroud ----------------
       
   111     painter->setOpacity(KNmHsWidgetBackgroundOpacity);
       
   112     QColor backgroundColor(HbColorScheme::color(KBackgroundColorAttribute));
       
   113     // frame is not wanted to be drawn, thus pen color is same as backround color
       
   114     painter->setPen(QPen(backgroundColor, 0));
       
   115     painter->setBrush(backgroundColor);
       
   116     painter->drawRoundedRect(rect(), KNmHsWidgetShoulderRadius, 
       
   117             KNmHsWidgetShoulderRadius);
       
   118     painter->setOpacity(1); //set opacity back to default
       
   119 }
       
   120 
       
   121 /*!
       
   122     updateAccountName slot 
       
   123 */
       
   124 void NmHsWidget::updateAccountName(const QString& accountName)
       
   125 {
       
   126     qDebug() << "NmHsWidget::updateAccountName IN -->>";
       
   127     qDebug() << "New account name is: " << accountName;
       
   128     
       
   129     mTitleRow->updateAccountName(accountName);
       
   130         
       
   131     qDebug() << "NmHsWidget::updateAccountName OUT <<--"; 
       
   132 }
       
   133 
       
   134 /*!
       
   135     updateUnreadCount slot
       
   136 */
       
   137 void NmHsWidget::updateUnreadCount(const int& unreadCount )
       
   138 {
       
   139     qDebug() << "NmHsWidget::updateUnreadCount IN -->>";
       
   140     qDebug() << "New unread count is: " << QString::number(unreadCount);
       
   141    
       
   142     mTitleRow->updateUnreadCount(unreadCount);
       
   143     
       
   144     qDebug() << "NmHsWidget::updateUnreadCount OUT <<--"; 
       
   145 }
       
   146 
       
   147 /*!
       
   148     updateMailData slot
       
   149 */
       
   150 void NmHsWidget::updateMailData()
       
   151 {
       
   152     qDebug() << "NmHsWidget::updateData IN -->>";
       
   153     QList<NmMessageEnvelope> envelopes;
       
   154     int count = mEngine->getEnvelopes(envelopes, 2);
       
   155     //TODO: needs error check for -1 ?
       
   156     updateMailRowsList(count);
       
   157     
       
   158     for(int i=0; i<envelopes.count(); i++)
       
   159         {
       
   160         qDebug() << "env:" << QString::number(i) << "dispName: " << envelopes[i].sender().displayName();
       
   161         qDebug() << "env:" << QString::number(i) << "dispName: " << envelopes[i].sender().address();
       
   162         qDebug() << "env:" << QString::number(i) << "subject:" << envelopes[i].subject();
       
   163         qDebug() << "env:" << QString::number(i) << "isRead: " << envelopes[i].isRead();
       
   164         qDebug() << "env:" << QString::number(i) << "date: " << envelopes[i].sentTime();
       
   165         qDebug() << "env:" << QString::number(i) << "priority: " << envelopes[i].priority();
       
   166         qDebug() << "env:" << QString::number(i) << "attachments: " << envelopes[i].hasAttachments();
       
   167         mMailRows[i]->updateMailData( envelopes[i] );
       
   168         }
       
   169     qDebug() << "NmHsWidget::updateData OUT <<--"; 
       
   170 }
       
   171 
       
   172 /*!
       
   173     Updates list to include correct amount of mail row widgets
       
   174 */
       
   175 void NmHsWidget::updateMailRowsList(int mailCount)
       
   176 {
       
   177     qDebug() << "NmHsWidget::updateMailRowsList IN -->>";
       
   178     while (mMailRows.count() != mailCount)
       
   179         {
       
   180         //more mails to show than rows
       
   181         if (mMailRows.count() < mailCount)
       
   182             {
       
   183             NmHsWidgetEmailRow *row = new NmHsWidgetEmailRow();
       
   184             mMailRows.append(row);
       
   185             mRowLayout->addItem(row);            
       
   186             }
       
   187         //too many rows
       
   188         else if (mMailRows.count() > mailCount)
       
   189             {
       
   190             mRowLayout->removeItem(mMailRows.last());
       
   191             delete mMailRows.takeLast();
       
   192             }
       
   193         }
       
   194     __ASSERT_ALWAYS( mMailRows.count() == mailCount, User::Panic(_L("Invalid"), 500) );
       
   195     qDebug() << "NmHsWidget::updateMailRowsList OUT <<--";
       
   196 }