diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /kontact/plugins/kmail/summarywidget.cpp | |
download | tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kontact/plugins/kmail/summarywidget.cpp')
-rw-r--r-- | kontact/plugins/kmail/summarywidget.cpp | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/kontact/plugins/kmail/summarywidget.cpp b/kontact/plugins/kmail/summarywidget.cpp new file mode 100644 index 000000000..79f2f4657 --- /dev/null +++ b/kontact/plugins/kmail/summarywidget.cpp @@ -0,0 +1,182 @@ +/* -*- mode: C++; c-file-style: "gnu" -*- + + This file is part of Kontact. + Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include <qlabel.h> +#include <qlayout.h> + +#include <dcopref.h> +#include <kapplication.h> +#include <kconfig.h> +#include <kdebug.h> +#include <kdialog.h> +#include <kglobal.h> +#include <kiconloader.h> +#include <klocale.h> +#include <kparts/part.h> + +#include "core.h" +#include "summary.h" +#include "summarywidget.h" + +#include <time.h> + +SummaryWidget::SummaryWidget( Kontact::Plugin *plugin, QWidget *parent, const char *name ) + : Kontact::Summary( parent, name ), + DCOPObject( QCString("MailSummary") ), + mPlugin( plugin ) +{ + QVBoxLayout *mainLayout = new QVBoxLayout( this, 3, 3 ); + + QPixmap icon = KGlobal::iconLoader()->loadIcon( "kontact_mail", KIcon::Desktop, + KIcon::SizeMedium ); + QWidget *header = createHeader(this, icon, i18n("E-Mail")); + mLayout = new QGridLayout( 1, 3, 3 ); + + mainLayout->addWidget(header); + mainLayout->addLayout(mLayout); + + slotUnreadCountChanged(); + connectDCOPSignal( 0, 0, "unreadCountChanged()", "slotUnreadCountChanged()", + false ); +} + +void SummaryWidget::selectFolder( const QString& folder ) +{ + if ( mPlugin->isRunningStandalone() ) + mPlugin->bringToForeground(); + else + mPlugin->core()->selectPlugin( mPlugin ); + QByteArray data; + QDataStream arg( data, IO_WriteOnly ); + arg << folder; + emitDCOPSignal( "kmailSelectFolder(QString)", data ); +} + +void SummaryWidget::updateSummary( bool ) +{ + // check whether we need to update the message counts + DCOPRef kmail( "kmail", "KMailIface" ); + const int timeOfLastMessageCountChange = + kmail.call( "timeOfLastMessageCountChange()" ); + if ( timeOfLastMessageCountChange > mTimeOfLastMessageCountUpdate ) + slotUnreadCountChanged(); +} + +void SummaryWidget::slotUnreadCountChanged() +{ + DCOPRef kmail( "kmail", "KMailIface" ); + DCOPReply reply = kmail.call( "folderList" ); + if ( reply.isValid() ) { + QStringList folderList = reply; + updateFolderList( folderList ); + } + else { + kdDebug(5602) << "Calling kmail->KMailIface->folderList() via DCOP failed." + << endl; + } + mTimeOfLastMessageCountUpdate = ::time( 0 ); +} + +void SummaryWidget::updateFolderList( const QStringList& folders ) +{ + mLabels.setAutoDelete( true ); + mLabels.clear(); + mLabels.setAutoDelete( false ); + + KConfig config( "kcmkmailsummaryrc" ); + config.setGroup( "General" ); + + QStringList activeFolders; + if ( !config.hasKey( "ActiveFolders" ) ) + activeFolders << "/Local/inbox"; + else + activeFolders = config.readListEntry( "ActiveFolders" ); + + int counter = 0; + QStringList::ConstIterator it; + DCOPRef kmail( "kmail", "KMailIface" ); + for ( it = folders.begin(); it != folders.end(); ++it ) { + if ( activeFolders.contains( *it ) ) { + DCOPRef folderRef = kmail.call( "getFolder(QString)", *it ); + const int numMsg = folderRef.call( "messages()" ); + const int numUnreadMsg = folderRef.call( "unreadMessages()" ); + + if ( numUnreadMsg == 0 ) continue; + + QString folderPath; + if ( config.readBoolEntry( "ShowFullPath", true ) ) + folderRef.call( "displayPath()" ).get( folderPath ); + else + folderRef.call( "displayName()" ).get( folderPath ); + + KURLLabel *urlLabel = new KURLLabel( *it, folderPath, this ); + urlLabel->installEventFilter( this ); + urlLabel->setAlignment( AlignLeft ); + urlLabel->show(); + connect( urlLabel, SIGNAL( leftClickedURL( const QString& ) ), + SLOT( selectFolder( const QString& ) ) ); + mLayout->addWidget( urlLabel, counter, 0 ); + mLabels.append( urlLabel ); + + QLabel *label = + new QLabel( QString( i18n("%1: number of unread messages " + "%2: total number of messages", "%1 / %2") ) + .arg( numUnreadMsg ).arg( numMsg ), this ); + label->setAlignment( AlignLeft ); + label->show(); + mLayout->addWidget( label, counter, 2 ); + mLabels.append( label ); + + counter++; + } + } + + if ( counter == 0 ) { + QLabel *label = new QLabel( i18n( "No unread messages in your monitored folders" ), this ); + label->setAlignment( AlignHCenter | AlignVCenter ); + mLayout->addMultiCellWidget( label, 0, 0, 0, 2 ); + label->show(); + mLabels.append( label ); + } +} + +bool SummaryWidget::eventFilter( QObject *obj, QEvent* e ) +{ + if ( obj->inherits( "KURLLabel" ) ) { + KURLLabel* label = static_cast<KURLLabel*>( obj ); + if ( e->type() == QEvent::Enter ) + emit message( i18n( "Open Folder: \"%1\"" ).arg( label->text() ) ); + if ( e->type() == QEvent::Leave ) + emit message( QString::null ); + } + + return Kontact::Summary::eventFilter( obj, e ); +} + +QStringList SummaryWidget::configModules() const +{ + return QStringList( "kcmkmailsummary.desktop" ); +} + +#include "summarywidget.moc" |