summaryrefslogtreecommitdiffstats
path: root/kontact/plugins/kmail/summarywidget.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch)
tree67208f7c145782a7e90b123b982ca78d88cc2c87 /kontact/plugins/kmail/summarywidget.cpp
downloadtdepim-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.cpp182
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"