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); |