summarywidget.cpp
00001 /* -*- mode: C++; c-file-style: "gnu" -*- 00002 00003 This file is part of Kontact. 00004 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 00005 00006 This program is free software; you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 2 of the License, or 00009 (at your option) any later version. 00010 00011 This program is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this program; if not, write to the Free Software 00018 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00019 00020 As a special exception, permission is given to link this program 00021 with any edition of TQt, and distribute the resulting executable, 00022 without including the source code for TQt in the source distribution. 00023 */ 00024 00025 #include <tqlabel.h> 00026 #include <tqlayout.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, TQWidget *parent, const char *name ) 00045 : Kontact::Summary( parent, name ), 00046 DCOPObject( TQCString("MailSummary") ), 00047 mPlugin( plugin ) 00048 { 00049 TQVBoxLayout *mainLayout = new TQVBoxLayout( this, 3, 3 ); 00050 00051 TQPixmap icon = KGlobal::iconLoader()->loadIcon( "kontact_mail", KIcon::Desktop, 00052 KIcon::SizeMedium ); 00053 TQWidget *header = createHeader(this, icon, i18n("E-Mail")); 00054 mLayout = new TQGridLayout( 1, 3, 3 ); 00055 00056 mainLayout->addWidget(header); 00057 mainLayout->addLayout(mLayout); 00058 00059 slotUnreadCountChanged(); 00060 connectDCOPSignal( 0, 0, "unreadCountChanged()", "slotUnreadCountChanged()", 00061 false ); 00062 } 00063 00064 void SummaryWidget::selectFolder( const TQString& folder ) 00065 { 00066 if ( mPlugin->isRunningStandalone() ) 00067 mPlugin->bringToForeground(); 00068 else 00069 mPlugin->core()->selectPlugin( mPlugin ); 00070 TQByteArray data; 00071 TQDataStream arg( data, IO_WriteOnly ); 00072 arg << folder; 00073 emitDCOPSignal( "kmailSelectFolder(TQString)", data ); 00074 } 00075 00076 void SummaryWidget::updateSummary( bool ) 00077 { 00078 // check whether we need to update the message counts 00079 DCOPRef kmail( "kmail", "KMailIface" ); 00080 const int timeOfLastMessageCountChange = 00081 kmail.call( "timeOfLastMessageCountChange()" ); 00082 if ( timeOfLastMessageCountChange > mTimeOfLastMessageCountUpdate ) 00083 slotUnreadCountChanged(); 00084 } 00085 00086 void SummaryWidget::slotUnreadCountChanged() 00087 { 00088 DCOPRef kmail( "kmail", "KMailIface" ); 00089 DCOPReply reply = kmail.call( "folderList" ); 00090 if ( reply.isValid() ) { 00091 TQStringList folderList = reply; 00092 updateFolderList( folderList ); 00093 } 00094 else { 00095 kdDebug(5602) << "Calling kmail->KMailIface->folderList() via DCOP failed." 00096 << endl; 00097 } 00098 mTimeOfLastMessageCountUpdate = ::time( 0 ); 00099 } 00100 00101 void SummaryWidget::updateFolderList( const TQStringList& folders ) 00102 { 00103 mLabels.setAutoDelete( true ); 00104 mLabels.clear(); 00105 mLabels.setAutoDelete( false ); 00106 00107 KConfig config( "kcmkmailsummaryrc" ); 00108 config.setGroup( "General" ); 00109 00110 TQStringList activeFolders; 00111 if ( !config.hasKey( "ActiveFolders" ) ) 00112 activeFolders << "/Local/inbox"; 00113 else 00114 activeFolders = config.readListEntry( "ActiveFolders" ); 00115 00116 int counter = 0; 00117 TQStringList::ConstIterator it; 00118 DCOPRef kmail( "kmail", "KMailIface" ); 00119 for ( it = folders.begin(); it != folders.end(); ++it ) { 00120 if ( activeFolders.contains( *it ) ) { 00121 DCOPRef folderRef = kmail.call( "getFolder(TQString)", *it ); 00122 const int numMsg = folderRef.call( "messages()" ); 00123 const int numUnreadMsg = folderRef.call( "unreadMessages()" ); 00124 00125 if ( numUnreadMsg == 0 ) continue; 00126 00127 TQString folderPath; 00128 if ( config.readBoolEntry( "ShowFullPath", true ) ) 00129 folderRef.call( "displayPath()" ).get( folderPath ); 00130 else 00131 folderRef.call( "displayName()" ).get( folderPath ); 00132 00133 KURLLabel *urlLabel = new KURLLabel( *it, folderPath, this ); 00134 urlLabel->installEventFilter( this ); 00135 urlLabel->setAlignment( AlignLeft ); 00136 urlLabel->show(); 00137 connect( urlLabel, TQT_SIGNAL( leftClickedURL( const TQString& ) ), 00138 TQT_SLOT( selectFolder( const TQString& ) ) ); 00139 mLayout->addWidget( urlLabel, counter, 0 ); 00140 mLabels.append( urlLabel ); 00141 00142 TQLabel *label = 00143 new TQLabel( TQString( 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 TQLabel *label = new TQLabel( i18n( "No unread messages in your monitored folders" ), this ); 00157 label->setAlignment( AlignHCenter | AlignVCenter ); 00158 mLayout->addMultiCellWidget( label, 0, 0, 0, 2 ); 00159 label->show(); 00160 mLabels.append( label ); 00161 } 00162 } 00163 00164 bool SummaryWidget::eventFilter( TQObject *obj, TQEvent* e ) 00165 { 00166 if ( obj->inherits( "KURLLabel" ) ) { 00167 KURLLabel* label = static_cast<KURLLabel*>( TQT_TQWIDGET(obj) ); 00168 if ( e->type() == TQEvent::Enter ) 00169 emit message( i18n( "Open Folder: \"%1\"" ).arg( label->text() ) ); 00170 if ( e->type() == TQEvent::Leave ) 00171 emit message( TQString() ); 00172 } 00173 00174 return Kontact::Summary::eventFilter( obj, e ); 00175 } 00176 00177 TQStringList SummaryWidget::configModules() const 00178 { 00179 return TQStringList( "kcmkmailsummary.desktop" ); 00180 } 00181 00182 #include "summarywidget.moc"