00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "./kshowmailview.h"
00019
00020
00021 KShowmailView::KShowmailView( AccountViewModel* accountModel, MailViewModel* mailModel, QItemSelectionModel* mailSelectModel, QItemSelectionModel* accountSelectModel, QWidget* parent ) : QSplitter( Qt::Vertical, parent )
00022 {
00023
00024
00025 splitter = new QSplitter( Qt::Vertical, this );
00026
00027
00028 viewAccounts = new QTreeView( splitter );
00029 viewAccounts->setModel( accountModel );
00030 viewAccounts->setIndentation( 0 );
00031 viewAccounts->setContextMenuPolicy( Qt::ActionsContextMenu );
00032 AccountViewDelegate* delegateAccounts = new AccountViewDelegate( this );
00033 viewAccounts->setItemDelegate( delegateAccounts );
00034 viewAccounts->setContextMenuPolicy( Qt::ActionsContextMenu );
00035 viewAccounts->setSelectionModel( accountSelectModel );
00036 viewAccounts->setSortingEnabled( true );
00037
00038
00039 viewMails = new QTreeView( splitter );
00040 viewMails->setModel( mailModel );
00041 viewMails->setIndentation( 0 );
00042 viewMails->setSelectionMode( QAbstractItemView::ExtendedSelection );
00043 viewMails->setSelectionModel( mailSelectModel );
00044 viewMails->setSortingEnabled( true );
00045 viewMails->setContextMenuPolicy( Qt::ActionsContextMenu );
00046
00047
00048 connect( viewMails, SIGNAL( doubleClicked(QModelIndex) ), this, SLOT( slotMailDoubleClicked(QModelIndex) ) );
00049
00050
00051 this->mailModel = mailModel;
00052 this->accountModel = accountModel;
00053
00054 loadSetup();
00055
00056
00057 }
00058
00059 KShowmailView::~KShowmailView(){}
00060
00061 void KShowmailView::refreshViews( QItemSelectionModel* mailSelectModel )
00062 {
00063 AccountViewModel* accountModel = dynamic_cast<AccountViewModel*>( viewAccounts->model() );
00064 accountModel->refresh();
00065
00066 MailViewModel* mailModel = dynamic_cast<MailViewModel*>( viewMails->model() );
00067 mailModel->refresh();
00068
00069
00070 QModelIndexList markedMails = mailModel->getMarkedMails();
00071 QListIterator<QModelIndex> itMark( markedMails );
00072 while( itMark.hasNext() )
00073 {
00074 QModelIndex index = itMark.next();
00075 mailSelectModel->select( index, QItemSelectionModel::Select | QItemSelectionModel::Rows );
00076 }
00077 }
00078
00079 void KShowmailView::saveSetup() {
00080
00081
00082 KConfigGroup* configAcc = new KConfigGroup( KGlobal::config(), CONFIG_GROUP_ACCOUNT_LIST );
00083 KConfigGroup* configMail = new KConfigGroup( KGlobal::config(), CONFIG_GROUP_MESSAGE_LIST );
00084 KConfigGroup* configView = new KConfigGroup( KGlobal::config(), CONFIG_GROUP_VIEW );
00085
00086
00087 if( !viewAccounts->isColumnHidden( 0 ) )
00088 configAcc->writeEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_ACTIVE, viewAccounts->columnWidth( 0 ) );
00089
00090 if( !viewAccounts->isColumnHidden( 1 ) )
00091 configAcc->writeEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_ACCOUNT, viewAccounts->columnWidth( 1 ) );
00092
00093 if( !viewAccounts->isColumnHidden( 2 ) )
00094 configAcc->writeEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_SERVER, viewAccounts->columnWidth( 2 ) );
00095
00096 if( !viewAccounts->isColumnHidden( 3 ) )
00097 configAcc->writeEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_USER, viewAccounts->columnWidth( 3 ) );
00098
00099 if( !viewAccounts->isColumnHidden( 4 ) )
00100 configAcc->writeEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_MESSAGES, viewAccounts->columnWidth( 4 ) );
00101
00102 if( !viewAccounts->isColumnHidden( 5 ) )
00103 configAcc->writeEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_SIZE, viewAccounts->columnWidth( 5 ) );
00104
00105
00106 if( !viewMails->isColumnHidden( 0 ) )
00107 configMail->writeEntry( CONFIG_ENTRY_WIDTH_MESSAGE_STATE, viewMails->columnWidth( 0 ) );
00108
00109 if( !viewMails->isColumnHidden( 1 ) )
00110 configMail->writeEntry( CONFIG_ENTRY_WIDTH_MESSAGE_NUMBER, viewMails->columnWidth( 1 ) );
00111
00112 if( !viewMails->isColumnHidden( 2 ) )
00113 configMail->writeEntry( CONFIG_ENTRY_WIDTH_MESSAGE_ACCOUNT, viewMails->columnWidth( 2 ) );
00114
00115 if( !viewMails->isColumnHidden( 3 ) )
00116 configMail->writeEntry( CONFIG_ENTRY_WIDTH_MESSAGE_FROM, viewMails->columnWidth( 3 ) );
00117
00118 if( !viewMails->isColumnHidden( 4 ) )
00119 configMail->writeEntry( CONFIG_ENTRY_WIDTH_MESSAGE_TO, viewMails->columnWidth( 4 ) );
00120
00121 if( !viewMails->isColumnHidden( 5 ) )
00122 configMail->writeEntry( CONFIG_ENTRY_WIDTH_MESSAGE_SUBJECT, viewMails->columnWidth( 5 ) );
00123
00124 if( !viewMails->isColumnHidden( 6 ) )
00125 configMail->writeEntry( CONFIG_ENTRY_WIDTH_MESSAGE_DATE, viewMails->columnWidth( 6 ) );
00126
00127 if( !viewMails->isColumnHidden( 7 ) )
00128 configMail->writeEntry( CONFIG_ENTRY_WIDTH_MESSAGE_SIZE, viewMails->columnWidth( 7 ) );
00129
00130 if( !viewMails->isColumnHidden( 8 ) )
00131 configMail->writeEntry( CONFIG_ENTRY_WIDTH_MESSAGE_CONTENT, viewMails->columnWidth( 8 ) );
00132
00133
00134 configAcc->writeEntry( CONFIG_ENTRY_STATE_ACCOUNTLIST, viewAccounts->header()->saveState() );
00135 configMail->writeEntry( CONFIG_ENTRY_STATE_MESSAGELIST, viewMails->header()->saveState() );
00136
00137
00138 configView->writeEntry( CONFIG_ENTRY_VIEW_MAIN_WINDOW_SPLITTER, splitter->saveState() );
00139
00140
00141 accountModel->saveSetup();
00142 mailModel->saveSetup();
00143
00144 configAcc->sync();
00145 configMail->sync();
00146 configView->sync();
00147
00148 delete configAcc;
00149 delete configMail;
00150 delete configView;
00151 }
00152
00153 void KShowmailView::loadSetup() {
00154
00155
00156 KConfigGroup* configAcc = new KConfigGroup( KGlobal::config(), CONFIG_GROUP_ACCOUNT_LIST );
00157 KConfigGroup* configMail = new KConfigGroup( KGlobal::config(), CONFIG_GROUP_MESSAGE_LIST );
00158 KConfigGroup* configView = new KConfigGroup( KGlobal::config(), CONFIG_GROUP_VIEW );
00159
00160
00161 QByteArray stateAccountView = configAcc->readEntry( CONFIG_ENTRY_STATE_ACCOUNTLIST, QByteArray() );
00162 if( !stateAccountView.isEmpty() ) {
00163 viewAccounts->header()->restoreState( stateAccountView );
00164 }
00165 QByteArray stateMailView = configMail->readEntry( CONFIG_ENTRY_STATE_MESSAGELIST, QByteArray() );
00166 if( !stateMailView.isEmpty() ) {
00167 viewMails->header()->restoreState( stateMailView );
00168 }
00169
00170 viewAccounts->setColumnWidth( 0, configAcc->readEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_ACTIVE, DEFAULT_WIDTH_ACCOUNT_ACTIVE ) );
00171 viewAccounts->setColumnWidth( 1, configAcc->readEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_ACCOUNT, DEFAULT_WIDTH_ACCOUNT_ACCOUNT ) );
00172 viewAccounts->setColumnWidth( 2, configAcc->readEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_SERVER, DEFAULT_WIDTH_ACCOUNT_SERVER ) );
00173 viewAccounts->setColumnWidth( 3, configAcc->readEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_USER, DEFAULT_WIDTH_ACCOUNT_USER ) );
00174 viewAccounts->setColumnWidth( 4, configAcc->readEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_MESSAGES, DEFAULT_WIDTH_ACCOUNT_MESSAGES ) );
00175 viewAccounts->setColumnWidth( 5, configAcc->readEntry( CONFIG_ENTRY_WIDTH_ACCOUNT_SIZE, DEFAULT_WIDTH_ACCOUNT_SIZE ) );
00176
00177 viewMails->setColumnWidth( 0, configMail->readEntry( CONFIG_ENTRY_WIDTH_MESSAGE_STATE, DEFAULT_WIDTH_MESSAGE_STATE ) );
00178 viewMails->setColumnWidth( 1, configMail->readEntry( CONFIG_ENTRY_WIDTH_MESSAGE_NUMBER, DEFAULT_WIDTH_MESSAGE_NUMBER ) );
00179 viewMails->setColumnWidth( 2, configMail->readEntry( CONFIG_ENTRY_WIDTH_MESSAGE_ACCOUNT, DEFAULT_WIDTH_MESSAGE_ACCOUNT ) );
00180 viewMails->setColumnWidth( 3, configMail->readEntry( CONFIG_ENTRY_WIDTH_MESSAGE_FROM, DEFAULT_WIDTH_MESSAGE_FROM ) );
00181 viewMails->setColumnWidth( 4, configMail->readEntry( CONFIG_ENTRY_WIDTH_MESSAGE_TO, DEFAULT_WIDTH_MESSAGE_TO ) );
00182 viewMails->setColumnWidth( 5, configMail->readEntry( CONFIG_ENTRY_WIDTH_MESSAGE_SUBJECT, DEFAULT_WIDTH_MESSAGE_SUBJECT ) );
00183 viewMails->setColumnWidth( 6, configMail->readEntry( CONFIG_ENTRY_WIDTH_MESSAGE_DATE, DEFAULT_WIDTH_MESSAGE_DATE ) );
00184 viewMails->setColumnWidth( 7, configMail->readEntry( CONFIG_ENTRY_WIDTH_MESSAGE_SIZE, DEFAULT_WIDTH_MESSAGE_SIZE ) );
00185 viewMails->setColumnWidth( 8, configMail->readEntry( CONFIG_ENTRY_WIDTH_MESSAGE_CONTENT, DEFAULT_WIDTH_MESSAGE_CONTENT ) );
00186
00187 viewAccounts->setColumnHidden( 0 , !configAcc->readEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_ACTIVE, DEFAULT_DISPLAY_ACCOUNT_ACTIVE ) );
00188 viewAccounts->setColumnHidden( 1 , !configAcc->readEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_ACCOUNT, DEFAULT_DISPLAY_ACCOUNT_ACCOUNT ) );
00189 viewAccounts->setColumnHidden( 2 , !configAcc->readEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_SERVER, DEFAULT_DISPLAY_ACCOUNT_SERVER ) );
00190 viewAccounts->setColumnHidden( 3 , !configAcc->readEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_USER, DEFAULT_DISPLAY_ACCOUNT_USER ) );
00191 viewAccounts->setColumnHidden( 4 , !configAcc->readEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_MESSAGES, DEFAULT_DISPLAY_ACCOUNT_MESSAGES ) );
00192 viewAccounts->setColumnHidden( 5 , !configAcc->readEntry( CONFIG_ENTRY_DISPLAY_ACCOUNT_SIZE, DEFAULT_DISPLAY_ACCOUNT_SIZE ) );
00193
00194 viewMails->setColumnHidden( 0 , !configMail->readEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_STATE, DEFAULT_DISPLAY_MESSAGE_STATE ) );
00195 viewMails->setColumnHidden( 1 , !configMail->readEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_NUMBER, DEFAULT_DISPLAY_MESSAGE_STATE ) );
00196 viewMails->setColumnHidden( 2 , !configMail->readEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_ACCOUNT, DEFAULT_DISPLAY_MESSAGE_STATE ) );
00197 viewMails->setColumnHidden( 3 , !configMail->readEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_FROM, DEFAULT_DISPLAY_MESSAGE_STATE ) );
00198 viewMails->setColumnHidden( 4 , !configMail->readEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_TO, DEFAULT_DISPLAY_MESSAGE_STATE ) );
00199 viewMails->setColumnHidden( 5 , !configMail->readEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_SUBJECT, DEFAULT_DISPLAY_MESSAGE_STATE ) );
00200 viewMails->setColumnHidden( 6 , !configMail->readEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_DATE, DEFAULT_DISPLAY_MESSAGE_STATE ) );
00201 viewMails->setColumnHidden( 7 , !configMail->readEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_SIZE, DEFAULT_DISPLAY_MESSAGE_STATE ) );
00202 viewMails->setColumnHidden( 8 , !configMail->readEntry( CONFIG_ENTRY_DISPLAY_MESSAGE_CONTENT, DEFAULT_DISPLAY_MESSAGE_STATE ) );
00203
00204
00205 KConfigGroup* confSort = new KConfigGroup( KGlobal::config(), CONFIG_GROUP_VIEW );
00206
00207 QString strSortOrderAcc = confSort->readEntry( CONFIG_ENTRY_SORT_ORDER_ACCOUNT, DEFAULT_SORT_ORDER );
00208 int sortColumnAcc = confSort->readEntry( CONFIG_ENTRY_SORT_COLUMN_ACCOUNT, DEFAULT_SORT_COLUMN_ACCOUNT );
00209 if( strSortOrderAcc == CONFIG_VALUE_SORT_ORDER_DESCENDING ) {
00210
00211 viewAccounts->sortByColumn( sortColumnAcc, Qt::DescendingOrder );
00212
00213 } else {
00214
00215 viewAccounts->sortByColumn( sortColumnAcc, Qt::AscendingOrder );
00216 }
00217
00218 QString strSortOderMail = confSort->readEntry( CONFIG_ENTRY_SORT_ORDER_MESSAGE, DEFAULT_SORT_ORDER );
00219 int sortColumnMail = confSort->readEntry( CONFIG_ENTRY_SORT_COLUMN_MESSAGE, DEFAULT_SORT_COLUMN_MESSAGE );
00220 if( strSortOderMail == CONFIG_VALUE_SORT_ORDER_DESCENDING ) {
00221
00222 viewMails->sortByColumn( sortColumnMail, Qt::DescendingOrder );
00223
00224 } else {
00225
00226 viewMails->sortByColumn( sortColumnMail, Qt::AscendingOrder );
00227 }
00228
00229
00230 splitter->restoreState( configView->readEntry( CONFIG_ENTRY_VIEW_MAIN_WINDOW_SPLITTER, QByteArray() ) );
00231
00232 delete confSort;
00233 delete configAcc;
00234 delete configMail;
00235 delete configView;
00236
00237
00238 mailModel->loadSetup();
00239
00240 }
00241
00242 void KShowmailView::addActionToAccountList( KAction* action ) {
00243
00244 viewAccounts->addAction( action );
00245
00246 }
00247
00248 void KShowmailView::addActionToMailList(KAction* action)
00249 {
00250 viewMails->addAction( action );
00251 }
00252
00253 void KShowmailView::slotMailDoubleClicked(const QModelIndex& )
00254 {
00255 emit sigMailDoubleClicked();
00256 }
00257