logsui/logsengine/src/logsdetailsmodel.cpp
changeset 20 6a40edd41841
parent 19 e4c884866116
equal deleted inserted replaced
19:e4c884866116 20:6a40edd41841
    34 // 
    34 // 
    35 // -----------------------------------------------------------------------------
    35 // -----------------------------------------------------------------------------
    36 //
    36 //
    37 LogsDetailsModel::LogsDetailsModel( LogsDbConnector& dbConnector, LogsEvent& event ) 
    37 LogsDetailsModel::LogsDetailsModel( LogsDbConnector& dbConnector, LogsEvent& event ) 
    38     : LogsAbstractModel(),
    38     : LogsAbstractModel(),
    39       mEvent( 0 )
    39       mEvent( 0 ),
       
    40       mSeparatorIndex(-1),
       
    41       mSeparatorCollapsed(true)
    40 {
    42 {
    41     LOGS_QDEBUG( "logs [ENG] -> LogsDetailsModel::LogsDetailsModel()" )
    43     LOGS_QDEBUG( "logs [ENG] -> LogsDetailsModel::LogsDetailsModel()" )
    42     
    44     
    43     mDbConnector = &dbConnector;
    45     mDbConnector = &dbConnector;
    44     
    46     
    88 // From QAbstractItemModel
    90 // From QAbstractItemModel
    89 // -----------------------------------------------------------------------------
    91 // -----------------------------------------------------------------------------
    90 //
    92 //
    91 int LogsDetailsModel::rowCount(const QModelIndex & /* parent */) const
    93 int LogsDetailsModel::rowCount(const QModelIndex & /* parent */) const
    92 {
    94 {
    93     return mDetailTexts.count();
    95     if (mSeparatorIndex >= 0 && mSeparatorCollapsed) {
       
    96         return mSeparatorIndex + 1;
       
    97     } else {
       
    98         return mDetailTexts.count();
       
    99     }
    94 }
   100 }
    95 
   101 
    96 // -----------------------------------------------------------------------------
   102 // -----------------------------------------------------------------------------
    97 // From QAbstractItemModel
   103 // From QAbstractItemModel
    98 // -----------------------------------------------------------------------------
   104 // -----------------------------------------------------------------------------
   100 QVariant LogsDetailsModel::data(const QModelIndex &index, int role) const
   106 QVariant LogsDetailsModel::data(const QModelIndex &index, int role) const
   101 {
   107 {
   102     if (!index.isValid() || index.row() >= mDetailTexts.count() || index.row() < 0 ) {
   108     if (!index.isValid() || index.row() >= mDetailTexts.count() || index.row() < 0 ) {
   103         return QVariant();
   109         return QVariant();
   104     }
   110     }
   105 
       
   106     if (role == Qt::DisplayRole){
   111     if (role == Qt::DisplayRole){
   107         QStringList text;
   112         QStringList text;
   108         getDisplayData(index.row(), text);
   113         getDisplayData(index.row(), text);
   109         return QVariant(text);
   114         return QVariant(text);
   110     } else if (role == Qt::DecorationRole) {
   115     } else if (role == Qt::DecorationRole) {
   111         QList<QVariant> icons;
   116         QList<QVariant> icons;
   112         getDecorationData(index.row(), icons);
   117         getDecorationData(index.row(), icons);
   113         return QVariant(icons);
   118         return QVariant(icons);
   114     } 
   119     } 
       
   120     else if (role == RoleDuplicatesSeparator) {
       
   121         bool separator  = index.row() == mSeparatorIndex;
       
   122         return QVariant(separator);
       
   123     }
   115     LogsModelItemContainer item(mEvent);
   124     LogsModelItemContainer item(mEvent);
   116     return doGetData(role, item);
   125     return doGetData(role, item);
   117 }
   126 }
   118 
   127 
   119 // -----------------------------------------------------------------------------
   128 // -----------------------------------------------------------------------------
   129     if (role == Qt::DisplayRole){
   138     if (role == Qt::DisplayRole){
   130         return QVariant(getHeaderData(*mEvent));
   139         return QVariant(getHeaderData(*mEvent));
   131     }
   140     }
   132   
   141   
   133     return QVariant();
   142     return QVariant();
       
   143 }
       
   144 
       
   145 // -----------------------------------------------------------------------------
       
   146 // From QAbstractItemModel
       
   147 // -----------------------------------------------------------------------------
       
   148 //
       
   149 bool LogsDetailsModel::setData(const QModelIndex &index, const QVariant &value, 
       
   150                                int role)
       
   151 {
       
   152     Q_UNUSED(role);
       
   153     LOGS_QDEBUG( "logs [ENG] -> LogsDetailsModel::setData()" )
       
   154     bool dataSet( false );
       
   155     if (index.row() == mSeparatorIndex 
       
   156         && value.isValid()
       
   157         && value.toBool() != mSeparatorCollapsed
       
   158         && mSeparatorIndex < mDetailTexts.count()-1) {
       
   159       
       
   160         LOGS_QDEBUG( "logs [ENG]    separator state changed!" )
       
   161         mSeparatorCollapsed = !mSeparatorCollapsed;
       
   162         if (mSeparatorCollapsed) {
       
   163             LOGS_QDEBUG( "logs [ENG]    collapsing separator" )
       
   164             beginRemoveRows(QModelIndex(), mSeparatorIndex+1, mDetailTexts.count()-1);
       
   165             endRemoveRows();
       
   166         } else {
       
   167             LOGS_QDEBUG( "logs [ENG]    expanding separator" )
       
   168             beginInsertRows(QModelIndex(), mSeparatorIndex+1, mDetailTexts.count()-1);
       
   169             endInsertRows();
       
   170         }  
       
   171         dataSet = true;              
       
   172     }
       
   173     LOGS_QDEBUG( "logs [ENG] <- LogsDetailsModel::setData()" )
       
   174     return dataSet;
   134 }
   175 }
   135 
   176 
   136 // -----------------------------------------------------------------------------
   177 // -----------------------------------------------------------------------------
   137 // From LogsAbstractModel
   178 // From LogsAbstractModel
   138 // -----------------------------------------------------------------------------
   179 // -----------------------------------------------------------------------------
   398         QTime n(0, 0, 0);
   439         QTime n(0, 0, 0);
   399         QTime t = n.addSecs(mEvent->duration());                
   440         QTime t = n.addSecs(mEvent->duration());                
   400         callDurationRow << durationString(t);
   441         callDurationRow << durationString(t);
   401         mDetailTexts.append(callDurationRow);
   442         mDetailTexts.append(callDurationRow);
   402     }
   443     }
   403     
   444     if (mDuplicates.count() > 0) {
       
   445         QStringList separatorRow;
       
   446         separatorRow << hbTrId("txt_dialer_pri_previous_calls").arg(mDuplicates.count());
       
   447         mSeparatorIndex = mDetailTexts.count();
       
   448         mDetailTexts.append(separatorRow);
       
   449     }
       
   450         
   404     foreach ( LogsEvent* event, mDuplicates ){
   451     foreach ( LogsEvent* event, mDuplicates ){
   405         addDateAndTimeTextRow(*event);
   452         addDateAndTimeTextRow(*event);
   406     }
   453     }
   407 }
   454 }
   408 
   455 
   429     if ( mEvent->direction() != LogsEvent::DirMissed ){
   476     if ( mEvent->direction() != LogsEvent::DirMissed ){
   430         HbIcon* durationIcon = new HbIcon(logsCallDurationIconId);
   477         HbIcon* durationIcon = new HbIcon(logsCallDurationIconId);
   431         mDetailIcons.append(durationIcon);
   478         mDetailIcons.append(durationIcon);
   432     }
   479     }
   433     
   480     
       
   481     if (mDuplicates.count() > 0) { //put some dummy icon
       
   482         HbIcon* separatorIcon = new HbIcon();
       
   483         mDetailIcons.append(separatorIcon);
       
   484     }
       
   485 
   434     foreach ( LogsEvent* event, mDuplicates ){
   486     foreach ( LogsEvent* event, mDuplicates ){
   435         // Having multiple date and time icon instances has no performance
   487         // Having multiple date and time icon instances has no performance
   436         // penalty due resource sharing inside HbIcon impl
   488         // penalty due resource sharing inside HbIcon impl
   437         HbIcon* dateAndTimeIcon = new HbIcon(logsCallDateAndTimeIconId);
   489         HbIcon* dateAndTimeIcon = new HbIcon(logsCallDateAndTimeIconId);
   438         mDetailIcons.append(dateAndTimeIcon);
   490         mDetailIcons.append(dateAndTimeIcon);