kmail/summarywidget.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <qlabel.h>
00026 #include <qlayout.h>
00027
00028 #include <dcopref.h>
00029 #include <kapplication.h>
00030 #include <kconfig.h>
00031 #include <kdebug.h>
00032 #include <kdialog.h>
00033 #include <kglobal.h>
00034 #include <kiconloader.h>
00035 #include <klocale.h>
00036 #include <kparts/part.h>
00037
00038 #include "core.h"
00039 #include "summary.h"
00040 #include "summarywidget.h"
00041
00042 #include <time.h>
00043
00044 SummaryWidget::SummaryWidget( Kontact::Plugin *plugin, QWidget *parent, const char *name )
00045 : Kontact::Summary( parent, name ),
00046 DCOPObject( QCString("MailSummary") ),
00047 mPlugin( plugin )
00048 {
00049 QVBoxLayout *mainLayout = new QVBoxLayout( this, 3, 3 );
00050
00051 QPixmap icon = KGlobal::iconLoader()->loadIcon( "kontact_mail", KIcon::Desktop,
00052 KIcon::SizeMedium );
00053 QWidget *header = createHeader(this, icon, i18n("New Messages"));
00054 mLayout = new QGridLayout( 1, 3, 3 );
00055
00056 mainLayout->addWidget(header);
00057 mainLayout->addLayout(mLayout);
00058 mainLayout->addStretch();
00059
00060 slotUnreadCountChanged();
00061 connectDCOPSignal( 0, 0, "unreadCountChanged()", "slotUnreadCountChanged()",
00062 false );
00063 }
00064
00065 void SummaryWidget::selectFolder( const QString& folder )
00066 {
00067 if ( mPlugin->isRunningStandalone() )
00068 mPlugin->bringToForeground();
00069 else
00070 mPlugin->core()->selectPlugin( mPlugin );
00071 QByteArray data;
00072 QDataStream arg( data, IO_WriteOnly );
00073 arg << folder;
00074 emitDCOPSignal( "kmailSelectFolder(QString)", data );
00075 }
00076
00077 void SummaryWidget::updateSummary( bool )
00078 {
00079
00080 DCOPRef kmail( "kmail", "KMailIface" );
00081 const int timeOfLastMessageCountChange =
00082 kmail.call( "timeOfLastMessageCountChange()" );
00083 if ( timeOfLastMessageCountChange > mTimeOfLastMessageCountUpdate )
00084 slotUnreadCountChanged();
00085 }
00086
00087 void SummaryWidget::slotUnreadCountChanged()
00088 {
00089 DCOPRef kmail( "kmail", "KMailIface" );
00090 DCOPReply reply = kmail.call( "folderList" );
00091 if ( reply.isValid() ) {
00092 QStringList folderList = reply;
00093 updateFolderList( folderList );
00094 }
00095 else {
00096 kdDebug(5602) << "Calling kmail->KMailIface->folderList() via DCOP failed."
00097 << endl;
00098 }
00099 mTimeOfLastMessageCountUpdate = ::time( 0 );
00100 }
00101
00102 void SummaryWidget::updateFolderList( const QStringList& folders )
00103 {
00104 mLabels.setAutoDelete( true );
00105 mLabels.clear();
00106 mLabels.setAutoDelete( false );
00107
00108 KConfig config( "kcmkmailsummaryrc" );
00109 config.setGroup( "General" );
00110
00111 QStringList activeFolders;
00112 if ( !config.hasKey( "ActiveFolders" ) )
00113 activeFolders << "/Local/inbox";
00114 else
00115 activeFolders = config.readListEntry( "ActiveFolders" );
00116
00117 bool showFullPath = config.readBoolEntry( "ShowFullPath", false );
00118
00119 int counter = 0;
00120 QStringList::ConstIterator it;
00121 DCOPRef kmail( "kmail", "KMailIface" );
00122 for ( it = folders.begin(); it != folders.end() && counter < 9; ++it ) {
00123 if ( activeFolders.contains( *it ) ) {
00124 DCOPRef folderRef = kmail.call( "getFolder(QString)", *it );
00125 const int numMsg = folderRef.call( "messages()" );
00126 const int numUnreadMsg = folderRef.call( "unreadMessages()" );
00127
00128 if ( numUnreadMsg == 0 ) continue;
00129
00130 QString folderPath;
00131 if ( showFullPath )
00132 folderRef.call( "displayPath()" ).get( folderPath );
00133 else
00134 folderRef.call( "displayName()" ).get( folderPath );
00135
00136 KURLLabel *urlLabel = new KURLLabel( *it, folderPath, this );
00137 urlLabel->setAlignment( AlignLeft );
00138 urlLabel->show();
00139 connect( urlLabel, SIGNAL( leftClickedURL( const QString& ) ),
00140 SLOT( selectFolder( const QString& ) ) );
00141 mLayout->addWidget( urlLabel, counter, 0 );
00142 mLabels.append( urlLabel );
00143
00144 QLabel *label =
00145 new QLabel( QString( i18n("%1: number of unread messages "
00146 "%2: total number of messages", "%1 / %2") )
00147 .arg( numUnreadMsg ).arg( numMsg ), this );
00148 label->setAlignment( AlignLeft );
00149 label->show();
00150 mLayout->addWidget( label, counter, 2 );
00151 mLabels.append( label );
00152
00153 counter++;
00154 }
00155 }
00156
00157 if ( counter == 0 ) {
00158 QLabel *label = new QLabel( i18n( "No unread messages" ), this );
00159 label->show();
00160 mLayout->addMultiCellWidget( label, 1, 1, 1, 2 );
00161 mLabels.append( label );
00162 }
00163 }
00164
00165 QStringList SummaryWidget::configModules() const
00166 {
00167 return QStringList( "kcmkmailsummary.desktop" );
00168 }
00169
00170 #include "summarywidget.moc"
This file is part of the documentation for kontact Library Version 3.3.2.