00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "./mailviewmodel.h"
00019
00020 MailViewModel::MailViewModel( AccountList* accounts, QObject* parent ) : QAbstractItemModel( parent )
00021 {
00022 this->accounts = accounts;
00023
00024
00025 picNewMail = KIcon( KStandardDirs::locate( "data", "kshowmail/pics/mail-unread-new.png" ) );
00026
00027 }
00028
00029 MailViewModel::~MailViewModel(){}
00030
00031 QModelIndex MailViewModel::index( int row, int column, const QModelIndex& parent ) const
00032 {
00033
00034
00035 if( parent.isValid() ) return QModelIndex();
00036
00037 return createIndex( row, column );
00038 }
00039
00040 QModelIndex MailViewModel::parent( const QModelIndex& ) const
00041 {
00042 return QModelIndex();
00043 }
00044
00045 int MailViewModel::rowCount ( const QModelIndex & parent ) const
00046 {
00047
00048 if( parent.isValid() ) return 0;
00049
00050 return viewMailList.size();
00051 }
00052
00053 int MailViewModel::columnCount ( const QModelIndex& ) const
00054 {
00055 return NUMBER_MAILVIEW_COLUMNS;
00056 }
00057
00058 QVariant MailViewModel::data ( const QModelIndex & index, int role ) const
00059 {
00060
00061 if( !index.isValid() ) return QVariant();
00062
00063 if( index.row() >= rowCount() || index.column() > NUMBER_MAILVIEW_COLUMNS - 1 ) return QVariant();
00064
00065 if( index.row() > viewMailList.size() - 1 ) return QVariant();
00066
00067
00068 Mail mail = viewMailList.at( index.row() );
00069
00070
00071 switch( role )
00072 {
00073 case( Qt::DisplayRole ) :
00074
00075 switch( index.column() )
00076 {
00077 case 0 : return QVariant(); break;
00078 case 1 : return QVariant( (int)mail.getNumber() ); break;
00079 case 2 : return QVariant( mail.getAccountName() ); break;
00080 case 3 : return QVariant( mail.getFrom() ); break;
00081 case 4 : return QVariant( mail.getTo() ); break;
00082 case 5 : return QVariant( mail.getSubject() ); break;
00083 case 6 : return QVariant( mail.getDateTime().toString( KDateTime::LocalDate ) ); break;
00084 case 7 : return QVariant( mail.getSizeSuffix() ); break;
00085 case 8 : return QVariant( mail.getContent() ); break;
00086 default : return QVariant();
00087 }
00088 break;
00089
00090 case( Qt::DecorationRole ):
00091
00092 switch( index.column() )
00093 {
00094 case 0 :
00095 if( mail.isNew() )
00096 {
00097 return QVariant( picNewMail );
00098 }
00099 else
00100 {
00101 return QVariant();
00102 }
00103 break;
00104
00105 default : return QVariant();
00106 }
00107 break;
00108
00109 }
00110
00111 return QVariant();
00112 }
00113
00114 bool MailViewModel::hasChildren ( const QModelIndex & parent ) const
00115 {
00116
00117 if( !parent.isValid() ) return true;
00118
00119
00120 return false;
00121 }
00122
00123 QVariant MailViewModel::headerData( int section, Qt::Orientation orientation, int role ) const
00124 {
00125
00126 if( role != Qt::DisplayRole || orientation != Qt::Horizontal )
00127 return QVariant();
00128
00129 switch( section )
00130 {
00131 case 0 : return QVariant( i18nc( "@title:column state of the mail", "State" ) ); break;
00132 case 1 : return QVariant( i18nc( "@title:column mail number on the server", "Number" ) ); break;
00133 case 2 : return QVariant( i18nc( "@title:column name of the account", "Account" ) ); break;
00134 case 3 : return QVariant( i18nc( "@title:column sender", "From" ) ); break;
00135 case 4 : return QVariant( i18nc( "@title:column addressee", "To" ) ); break;
00136 case 5 : return QVariant( i18nc( "@title:column mail subject", "Subject" ) ); break;
00137 case 6 : return QVariant( i18nc( "@title:column send date", "Date" ) ); break;
00138 case 7 : return QVariant( i18nc( "@title:column mail size", "Size" ) ); break;
00139 case 8 : return QVariant( i18nc( "@title:column content type", "Content" ) ); break;
00140 default : return QVariant();
00141 }
00142 }
00143
00144 Qt::ItemFlags MailViewModel::flags ( const QModelIndex& ) const
00145 {
00146 return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
00147 }
00148
00149 void MailViewModel::refresh()
00150 {
00151 viewMailList.clear();
00152 viewMailList.append( accounts->getAllMails() );
00153 sort();
00154 reset();
00155 }
00156
00157 void MailViewModel::sort( int column, Qt::SortOrder order ) {
00158
00159
00160 lastSortOrder = order;
00161 lastSortColumn = column;
00162
00163 if( viewMailList.empty() ) return;
00164
00165
00166 MailSort_Type prop;
00167 switch( column ) {
00168
00169 case 0 : prop = MailSortState; break;
00170 case 1 : prop = MailSortNumber; break;
00171 case 2 : prop = MailSortAccount; break;
00172 case 3 : prop = MailSortFrom; break;
00173 case 4 : prop = MailSortTo; break;
00174 case 5 : prop = MailSortSubject; break;
00175 case 6 : prop = MailSortDate; break;
00176 case 7 : prop = MailSortSize; break;
00177 case 8 : prop = MailSortContent; break;
00178 default : prop = MailSortAccount;
00179 }
00180
00181
00182 QList<Mail> sortedList;
00183
00184 QListIterator<Mail> itUnsort( viewMailList );
00185 while( itUnsort.hasNext() ) {
00186
00187
00188 Mail mailUnsorted = itUnsort.next();
00189
00190
00191 if( sortedList.size() == 0 ) {
00192
00193 sortedList.append( mailUnsorted );
00194
00195 } else {
00196
00197 int sizeSortedList = sortedList.size();
00198 int indexSort = 0;
00199 bool placed = false;
00200 while( indexSort < sizeSortedList && !placed ) {
00201
00202
00203 Mail mailSorted = sortedList.at( indexSort );
00204
00205
00206
00207 if( order == Qt::AscendingOrder ) {
00208
00209 if( mailUnsorted.compare( mailSorted, prop ) <= 0 ) {
00210
00211 sortedList.insert( indexSort, mailUnsorted );
00212 placed = true;
00213 }
00214
00215 } else {
00216
00217 if( mailUnsorted.compare( mailSorted, prop ) > 0 ) {
00218
00219 sortedList.insert( indexSort, mailUnsorted );
00220 placed = true;
00221 }
00222 }
00223
00224 indexSort++;
00225 }
00226
00227
00228 if( !placed )
00229 sortedList.append( mailUnsorted );
00230 }
00231 }
00232
00233
00234 viewMailList.clear();
00235 viewMailList.append( sortedList );
00236
00237 reset();
00238 }
00239
00240 void MailViewModel::sort()
00241 {
00242 sort( lastSortColumn, lastSortOrder );
00243 }
00244
00245 Mail MailViewModel::getMail(const QModelIndex index) const
00246 {
00247 return viewMailList.at( index.row() );
00248 }
00249
00250 QStringList MailViewModel::getSelectedSubjects( QItemSelectionModel* selectModel ) const
00251 {
00252 QStringList subjects;
00253
00254 if( !selectModel->hasSelection() ) return subjects;
00255
00256
00257 QModelIndexList indexList = selectModel->selectedRows();
00258
00259
00260 QListIterator<QModelIndex> it( indexList );
00261 while( it.hasNext() )
00262 {
00263
00264 QModelIndex index = it.next();
00265
00266
00267 Mail mail = getMail( index );
00268
00269
00270 subjects.append( mail.getSubject() );
00271 }
00272
00273 return subjects;
00274 }
00275
00276 QStringList MailViewModel::getSelectedSenders( QItemSelectionModel* selectModel ) const
00277 {
00278 QStringList senders;
00279
00280 if( !selectModel->hasSelection() ) return senders;
00281
00282
00283 QModelIndexList indexList = selectModel->selectedRows();
00284
00285
00286 QListIterator<QModelIndex> it( indexList );
00287 while( it.hasNext() )
00288 {
00289
00290 QModelIndex index = it.next();
00291
00292
00293 Mail mail = getMail( index );
00294
00295
00296 senders.append( mail.getFrom() );
00297 }
00298
00299 return senders;
00300 }
00301
00302 QList<Mail> MailViewModel::getSelectedMails( QItemSelectionModel* mailSelectModel ) const
00303 {
00304 QList<Mail> list;
00305
00306
00307 QModelIndexList indexList = mailSelectModel->selectedRows();
00308
00309
00310 QListIterator<QModelIndex> it( indexList );
00311 while( it.hasNext() )
00312 {
00313
00314 QModelIndex index = it.next();
00315
00316
00317 Mail mail = getMail( index );
00318
00319
00320 list.append( mail );
00321 }
00322
00323 return list;
00324 }
00325
00326 QModelIndexList MailViewModel::getMarkedMails() const
00327 {
00328 QModelIndexList indexList;
00329
00330 for( int i = 0; i < rowCount(); i++ ) {
00331
00332
00333 QModelIndex ix = index( i, 0 );
00334
00335
00336 Mail mail = getMail( ix );
00337
00338
00339 if( mail.isMarkedByFilter() ) {
00340
00341 indexList.append( ix );
00342 }
00343 }
00344
00345 return indexList;
00346 }
00347
00348 void MailViewModel::saveSetup()
00349 {
00350 KConfigGroup* conf = new KConfigGroup( KGlobal::config(), CONFIG_GROUP_VIEW );
00351
00352 conf->writeEntry( CONFIG_ENTRY_SORT_COLUMN_MESSAGE, lastSortColumn );
00353
00354 if( lastSortOrder == Qt::AscendingOrder ) {
00355
00356 conf->writeEntry( CONFIG_ENTRY_SORT_ORDER_MESSAGE, CONFIG_VALUE_SORT_ORDER_ASCENDING );
00357
00358 } else {
00359
00360 conf->writeEntry( CONFIG_ENTRY_SORT_ORDER_MESSAGE, CONFIG_VALUE_SORT_ORDER_DESCENDING );
00361 }
00362
00363 conf->sync();
00364 }
00365