00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <qprinter.h>
00022 #include <qpainter.h>
00023 #include <qmessagebox.h>
00024 #include <qkeycode.h>
00025 #include <qvaluelist.h>
00026
00027 #include <kstandarddirs.h>
00028 #include <klocale.h>
00029 #include <kdebug.h>
00030
00031
00032 #include "kshowmailview.h"
00033 #include "kshowmaildoc.h"
00034 #include "kshowmail.h"
00035
00036 KshowmailView::KshowmailView(QWidget *parent, const char *name):
00037 QSplitter(Vertical, parent, name)
00038 {
00039
00040 config = KApplication::kApplication()->config();
00041
00042 m_pixOk = new QPixmap (::locate ("data", "kshowmail/pics/ok.png"));
00043
00044 m_pListAccounts = new KListView (this, "accounts");
00045 m_pListMessages = new KListView (this, "messages");
00046 setBackgroundMode(PaletteBase);
00047
00048 m_pListAccounts->setSelectionMode (QListView::Extended);
00049 m_pListAccounts->setAllColumnsShowFocus (true);
00050
00051 m_pListAccounts->setSorting (1);
00052 m_pListAccounts->setShowSortIndicator (true);
00053 m_pListAccounts->addColumn (i18n("Active"), DEFAULT_WIDTH_ACCOUNT_ACTIVE );
00054 m_pListAccounts->addColumn (i18n("Account"), DEFAULT_WIDTH_ACCOUNT_ACCOUNT );
00055 m_pListAccounts->addColumn (i18n("Server"), DEFAULT_WIDTH_ACCOUNT_SERVER );
00056 m_pListAccounts->addColumn (i18n("User"), DEFAULT_WIDTH_ACCOUNT_USER );
00057 m_pListAccounts->addColumn (i18n("Messages"), DEFAULT_WIDTH_ACCOUNT_MESSAGES );
00058 m_pListAccounts->addColumn (i18n("Size"), DEFAULT_WIDTH_ACCOUNT_SIZE );
00059
00060 m_pListMessages->setSelectionMode (QListView::Extended);
00061 m_pListMessages->setAllColumnsShowFocus (true);
00062
00063 m_pListMessages->setSorting (ShowListViewItem::_colNumber);
00064 m_pListMessages->setShowSortIndicator (true);
00065 setFocusPolicy (QWidget::StrongFocus);
00066
00067 m_pListMessages->addColumn (i18n("Number"), DEFAULT_WIDTH_MESSAGE_NUMBER );
00068 m_pListMessages->addColumn (i18n("Account"), DEFAULT_WIDTH_MESSAGE_ACCOUNT );
00069 m_pListMessages->addColumn (i18n("From"), DEFAULT_WIDTH_MESSAGE_FROM );
00070 m_pListMessages->addColumn (i18n("To"), DEFAULT_WIDTH_MESSAGE_TO );
00071 m_pListMessages->addColumn (i18n("Subject"), DEFAULT_WIDTH_MESSAGE_SUBJECT );
00072 m_pListMessages->addColumn (i18n("Date"), DEFAULT_WIDTH_MESSAGE_DATE );
00073 m_pListMessages->addColumn (i18n("Size"), DEFAULT_WIDTH_MESSAGE_SIZE );
00074 m_pListMessages->addColumn (i18n("Content"), DEFAULT_WIDTH_MESSAGE_CONTENT );
00075 m_pListMessages->addColumn (i18n("State"), DEFAULT_WIDTH_MESSAGE_STATE );
00076
00077 connect (m_pListAccounts, SIGNAL (rightButtonClicked (QListViewItem*, const QPoint &, int)),
00078 SLOT (slotAccountContext(QListViewItem*, const QPoint &, int)));
00079 connect (m_pListAccounts, SIGNAL (clicked (QListViewItem*, const QPoint &, int)),
00080 SLOT (slotAccountClicked(QListViewItem*, const QPoint &, int)));
00081 connect (m_pListMessages, SIGNAL (rightButtonClicked (QListViewItem*, const QPoint &, int)),
00082 SLOT (slotMessageContext(QListViewItem*, const QPoint &, int)));
00083 connect (m_pListMessages, SIGNAL (doubleClicked (QListViewItem*)),
00084 SLOT (slotMessageDoubleClicked (QListViewItem*)));
00085 connect (m_pListMessages, SIGNAL (clicked (QListViewItem*)),
00086 SLOT (slotMessageClicked (QListViewItem*)));
00087
00088
00089 readOptions();
00090
00091
00092 }
00093
00094 KshowmailView::~KshowmailView()
00095 {
00096 delete m_pListAccounts;
00097 delete m_pListMessages;
00098 }
00099
00100 void KshowmailView::readOptions()
00101 {
00102
00103 config->setGroup ("Display Options");
00104 QValueList<int> size;
00105 size.append (config->readNumEntry ("sizeaccounts", 40));
00106 size.append (config->readNumEntry ("sizemessages", 50));
00107 setSizes (size);
00108
00109
00110 m_pListAccounts->restoreLayout( config, CONFIG_GROUP_ACCOUNT_LIST );
00111 m_pListMessages->restoreLayout( config, CONFIG_GROUP_MESSAGE_LIST );
00112 }
00113
00114 void KshowmailView::saveOptions (KConfig* config)
00115 {
00116
00117 config->setGroup("Display Options");
00118
00119 QValueList<int> size = sizes ();
00120 config->writeEntry ("sizeaccounts", size [0]);
00121 config->writeEntry ("sizemessages", size [1]);
00122
00123 m_pListAccounts->saveLayout ( config, CONFIG_GROUP_ACCOUNT_LIST );
00124 m_pListMessages->saveLayout (config, CONFIG_GROUP_MESSAGE_LIST );
00125 }
00126
00127
00128 void KshowmailView::slotMessageContext( QListViewItem* pItem, const QPoint&, int )
00129 {
00130 if( pItem != NULL )
00131 {
00132
00133 KShowMailApp* theApp = ( KShowMailApp * )parentWidget();
00134
00135
00136 QWidget* w = theApp->factory()->container( "mail_context_popup", theApp );
00137 QPopupMenu* popup = static_cast<QPopupMenu*>( w );
00138 popup->exec( QCursor::pos() );
00139
00140
00141 m_pListMessages->setSelected (pItem, true);
00142 }
00143 }
00144
00145 void KshowmailView::slotAccountContext( QListViewItem* pItem, const QPoint&, int )
00146 {
00147 if ( pItem != NULL )
00148 {
00149
00150 KShowMailApp* theApp = ( KShowMailApp * )parentWidget();
00151
00152
00153 QWidget* w = theApp->factory()->container( "account_context_popup", theApp );
00154 QPopupMenu* popup = static_cast<QPopupMenu*>( w );
00155 popup->exec( QCursor::pos() );
00156
00157
00158 m_pListAccounts->setSelected( pItem, true );
00159 }
00160 }
00161
00162 void KshowmailView::slotAccountClicked (QListViewItem* pItem, const QPoint&, int col)
00163 {
00164 if (col == 0)
00165 {
00166 KShowMailApp *theApp=(KShowMailApp *) parentWidget();
00167 ConfigElem* pElem = theApp->m_ConfigList.getSelectedAccount();
00168 if( pElem != NULL )
00169 {
00170 pElem->setActive( !pElem->isActive() );
00171 if (pElem->isActive() )
00172 pItem->setPixmap (0, *m_pixOk);
00173 else
00174 pItem->setPixmap (0, 0);
00175 emit signalActiveChanged ();
00176 }
00177 }
00178 }
00179
00180 void KshowmailView::slotMessageDoubleClicked (QListViewItem* pItem)
00181 {
00182 if (pItem)
00183 {
00184
00185
00186 KShowMailApp *theApp=(KShowMailApp *) parentWidget();
00187 theApp->slotShowHeader ();
00188 }
00189 }
00190
00191 void KshowmailView::slotMessageClicked (QListViewItem* pItem)
00192 {
00193 kdDebug () << "slotMessageClicked" << endl;
00194 if (pItem)
00195 {
00196
00197
00198 KShowMailApp *theApp=(KShowMailApp *) parentWidget();
00199 theApp->delayNextRefresh();
00200 }
00201 }
00202
00203 void KshowmailView::clearMailListView( )
00204 {
00205 m_pListMessages->clear();
00206 }
00207
00208 ShowListViewItem* KshowmailView::insertMail( QString& number, QString& account, QString& from, QString& to, QString& subject, QString& date, QString& size, QString& content, QString& state, QString& time )
00209 {
00210
00211 ShowListViewItem* item = new ShowListViewItem( m_pListMessages );
00212
00213
00214 item->setNumber( number );
00215 item->setAccount( account );
00216 item->setFrom( from );
00217 item->setTo( to );
00218 item->setSubject( subject );
00219 item->setDate( date );
00220 item->setSize( size );
00221 item->setContent( content );
00222 item->setState( state );
00223 item->setTime( time );
00224
00225 return item;
00226 }
00227
00228 void KshowmailView::refreshSetup( )
00229 {
00230 QString ConfigEntryDisplay;
00231 QString ConfigEntrySavedWidth;
00232 int DefaultWidth = 100;
00233 bool DefaultDisplay = true;
00234
00235
00236 config->setGroup( CONFIG_GROUP_ACCOUNT_LIST );
00237 for( int column = 0; column <= 5; column++ )
00238 {
00239
00240 switch( column )
00241 {
00242 case 0: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_ACTIVE;
00243 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACTIVE;
00244 DefaultWidth = DEFAULT_WIDTH_ACCOUNT_ACTIVE;
00245 DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_ACTIVE;
00246 break;
00247
00248 case 1: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_ACCOUNT;
00249 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACCOUNT;
00250 DefaultWidth = DEFAULT_WIDTH_ACCOUNT_ACCOUNT;
00251 DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_ACCOUNT;
00252 break;
00253
00254 case 2: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_SERVER;
00255 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SERVER;
00256 DefaultWidth = DEFAULT_WIDTH_ACCOUNT_SERVER;
00257 DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_SERVER;
00258 break;
00259
00260 case 3: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_USER;
00261 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_USER;
00262 DefaultWidth = DEFAULT_WIDTH_ACCOUNT_USER;
00263 DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_USER;
00264 break;
00265
00266 case 4: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_MESSAGES;
00267 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_MESSAGES;
00268 DefaultWidth = DEFAULT_WIDTH_ACCOUNT_MESSAGES;
00269 DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_MESSAGES;
00270 break;
00271
00272 case 5: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_SIZE;
00273 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SIZE;
00274 DefaultWidth = DEFAULT_WIDTH_ACCOUNT_SIZE;
00275 DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_SIZE;
00276 break;
00277 }
00278
00279
00280 bool showColumn = config->readBoolEntry( ConfigEntryDisplay, DefaultDisplay );
00281
00282
00283 bool curShowed = m_pListAccounts->columnWidth( column ) > 0;
00284
00285 if( showColumn )
00286 {
00287
00288
00289 if( !curShowed )
00290 {
00291
00292
00293
00294 int savedWidth = config->readNumEntry( ConfigEntrySavedWidth, DefaultWidth );
00295
00296
00297 m_pListAccounts->setColumnWidth( column, savedWidth );
00298 }
00299
00300 }
00301 else
00302 {
00303
00304
00305 if( curShowed )
00306 {
00307
00308
00309
00310 config->writeEntry( ConfigEntrySavedWidth, m_pListAccounts->columnWidth( column ) );
00311
00312
00313 m_pListAccounts->hideColumn( column );
00314 }
00315
00316 }
00317
00318 }
00319
00320
00321 config->setGroup( CONFIG_GROUP_MESSAGE_LIST );
00322 for( int column = 0; column <= 8; column++ )
00323 {
00324
00325 switch( column )
00326 {
00327 case 0: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_NUMBER;
00328 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_NUMBER;
00329 DefaultWidth = DEFAULT_WIDTH_MESSAGE_NUMBER;
00330 DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_NUMBER;
00331 break;
00332
00333 case 1: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_ACCOUNT;
00334 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_ACCOUNT;
00335 DefaultWidth = DEFAULT_WIDTH_MESSAGE_ACCOUNT;
00336 DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_ACCOUNT;
00337 break;
00338
00339 case 2: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_FROM;
00340 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_FROM;
00341 DefaultWidth = DEFAULT_WIDTH_MESSAGE_FROM;
00342 DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_FROM;
00343 break;
00344
00345 case 3: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_TO;
00346 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_TO;
00347 DefaultWidth = DEFAULT_WIDTH_MESSAGE_TO;
00348 DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_TO;
00349 break;
00350
00351 case 4: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_SUBJECT;
00352 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SUBJECT;
00353 DefaultWidth = DEFAULT_WIDTH_MESSAGE_SUBJECT;
00354 DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_SUBJECT;
00355 break;
00356
00357 case 5: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_DATE;
00358 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_DATE;
00359 DefaultWidth = DEFAULT_WIDTH_MESSAGE_DATE;
00360 DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_DATE;
00361 break;
00362
00363 case 6: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_SIZE;
00364 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SIZE;
00365 DefaultWidth = DEFAULT_WIDTH_MESSAGE_SIZE;
00366 DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_SIZE;
00367 break;
00368
00369 case 7: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_CONTENT;
00370 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_CONTENT;
00371 DefaultWidth = DEFAULT_WIDTH_MESSAGE_CONTENT;
00372 DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_CONTENT;
00373 break;
00374
00375 case 8: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_STATE;
00376 ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_STATE;
00377 DefaultWidth = DEFAULT_WIDTH_MESSAGE_STATE;
00378 DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_STATE;
00379 break;
00380
00381 }
00382
00383
00384 bool showColumn = config->readBoolEntry( ConfigEntryDisplay, DefaultDisplay );
00385
00386
00387 bool curShowed = m_pListMessages->columnWidth( column ) > 0;
00388
00389 if( showColumn )
00390 {
00391
00392
00393 if( !curShowed )
00394 {
00395
00396
00397
00398 int savedWidth = config->readNumEntry( ConfigEntrySavedWidth, DefaultWidth );
00399
00400
00401 m_pListMessages->setColumnWidth( column, savedWidth );
00402 }
00403
00404 }
00405 else
00406 {
00407
00408
00409 if( curShowed )
00410 {
00411
00412
00413
00414 config->writeEntry( ConfigEntrySavedWidth, m_pListMessages->columnWidth( column ) );
00415
00416
00417 m_pListMessages->hideColumn( column );
00418 }
00419
00420 }
00421
00422 }
00423
00424
00425 m_pListAccounts->saveLayout( config, CONFIG_GROUP_ACCOUNT_LIST );
00426 m_pListMessages->saveLayout( config, CONFIG_GROUP_MESSAGE_LIST );
00427 config->sync();
00428 }