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 QString folderPath;
00129 if ( showFullPath )
00130 folderRef.call( "displayPath()" ).get( folderPath );
00131 else
00132 folderRef.call( "displayName()" ).get( folderPath );
00133
00134 KURLLabel *urlLabel = new KURLLabel( *it, folderPath, this );
00135 urlLabel->setAlignment( AlignLeft );
00136 urlLabel->show();
00137 connect( urlLabel, SIGNAL( leftClickedURL( const QString& ) ),
00138 SLOT( selectFolder( const QString& ) ) );
00139 mLayout->addWidget( urlLabel, counter, 0 );
00140 mLabels.append( urlLabel );
00141
00142 QLabel *label =
00143 new QLabel( QString( i18n("%1: number of unread messages "
00144 "%2: total number of messages", "%1 / %2") )
00145 .arg( numUnreadMsg ).arg( numMsg ), this );
00146 label->setAlignment( AlignLeft );
00147 label->show();
00148 mLayout->addWidget( label, counter, 2 );
00149 mLabels.append( label );
00150
00151 counter++;
00152 }
00153 }
00154
00155 if ( counter == 0 ) {
00156 QLabel *label = new QLabel( i18n( "No unread messages" ), this );
00157 label->show();
00158 mLayout->addMultiCellWidget( label, 1, 1, 1, 2 );
00159 mLabels.append( label );
00160 }
00161 }
00162
00163 QStringList SummaryWidget::configModules() const
00164 {
00165 return QStringList( "kcmkmailsummary.desktop" );
00166 }
00167
00168 #include "summarywidget.moc"
This file is part of the documentation for kontact Library Version 3.3.2.