kontact Library API Documentation

summarywidget.cpp

00001 /* 00002 This file is part of Kontact. 00003 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 00019 As a special exception, permission is given to link this program 00020 with any edition of Qt, and distribute the resulting executable, 00021 without including the source code for Qt in the source distribution. 00022 */ 00023 #include <qimage.h> 00024 #include <qlabel.h> 00025 #include <qlayout.h> 00026 #include <qtooltip.h> 00027 00028 #include <dcopclient.h> 00029 #include <dcopref.h> 00030 #include <kapplication.h> 00031 #include <kdebug.h> 00032 #include <kglobal.h> 00033 #include <kglobalsettings.h> 00034 #include <kiconloader.h> 00035 #include <klocale.h> 00036 #include <kurllabel.h> 00037 00038 #include "summarywidget.h" 00039 00040 SummaryWidget::SummaryWidget( QWidget *parent, const char *name ) 00041 : Kontact::Summary( parent, name ), 00042 DCOPObject( "WeatherSummaryWidget" ), mProc( 0 ) 00043 { 00044 mLayout = new QVBoxLayout( this ); 00045 mLayout->setAlignment( Qt::AlignTop ); 00046 00047 QPixmap icon = KGlobal::iconLoader()->loadIcon( "kweather", KIcon::Desktop, KIcon::SizeMedium ); 00048 QWidget *header = createHeader( this, icon, i18n( "Weather Information" ) ); 00049 mLayout->addWidget( header ); 00050 00051 QString error; 00052 QCString appID; 00053 bool serviceAvailable = true; 00054 if ( !kapp->dcopClient()->isApplicationRegistered( "KWeatherService" ) ) { 00055 if ( KApplication::startServiceByDesktopName( "kweatherservice", QStringList(), &error, &appID ) ) { 00056 QLabel *label = new QLabel( i18n( "No weather dcop service available;\nyou need KWeather to use this plugin." ), this ); 00057 mLayout->addWidget( label, Qt::AlignHCenter ); 00058 serviceAvailable = false; 00059 } 00060 } 00061 00062 if ( serviceAvailable ) { 00063 connectDCOPSignal( 0, 0, "fileUpdate(QString)", "refresh(QString)", false ); 00064 connectDCOPSignal( 0, 0, "stationRemoved(QString)", "stationRemoved(QString)", false ); 00065 00066 DCOPRef dcopCall( "KWeatherService", "WeatherService" ); 00067 DCOPReply reply = dcopCall.call( "listStations()", true ); 00068 if ( reply.isValid() ) { 00069 mStations = reply; 00070 00071 connect( &mTimer, SIGNAL( timeout() ), this, SLOT( timeout() ) ); 00072 mTimer.start( 0 ); 00073 } else { 00074 kdDebug(5602) << "ERROR: dcop reply not valid..." << endl; 00075 } 00076 } 00077 } 00078 00079 00080 void SummaryWidget::updateView() 00081 { 00082 mLayouts.setAutoDelete( true ); 00083 mLayouts.clear(); 00084 mLayouts.setAutoDelete( false ); 00085 00086 mLabels.setAutoDelete( true ); 00087 mLabels.clear(); 00088 mLabels.setAutoDelete( false ); 00089 00090 if ( mStations.count() == 0 ) { 00091 kdDebug(5602) << "No weather stations defined..." << endl; 00092 return; 00093 } 00094 00095 00096 QValueList<WeatherData> dataList = mWeatherMap.values(); 00097 qHeapSort( dataList ); 00098 00099 QValueList<WeatherData>::Iterator it; 00100 for ( it = dataList.begin(); it != dataList.end(); ++it ) { 00101 QString cover; 00102 for ( uint i = 0; i < (*it).cover().count(); ++i ) 00103 cover += QString( "- %1\n" ).arg( (*it).cover()[ i ] ); 00104 00105 QImage img; 00106 img = (*it).icon(); 00107 00108 QGridLayout *layout = new QGridLayout( mLayout, 3, 3, 3 ); 00109 mLayouts.append( layout ); 00110 00111 KURLLabel* urlLabel = new KURLLabel(this); 00112 urlLabel->installEventFilter(this); 00113 urlLabel->setURL((*it).stationID()); 00114 urlLabel->setPixmap( img.smoothScale( 32, 32 ) ); 00115 urlLabel->setMaximumSize(urlLabel->sizeHint()); 00116 urlLabel->setAlignment(/* AlignRight |*/ AlignTop ); 00117 layout->addMultiCellWidget( urlLabel, 0, 1, 0, 0 ); 00118 mLabels.append( urlLabel ); 00119 connect (urlLabel, SIGNAL(leftClickedURL( const QString&) ), 00120 this, SLOT(slotShowReport(const QString& ))); 00121 00122 QLabel* label = new QLabel( this ); 00123 label->setText( QString( "%1 (%2)" ).arg( (*it).name() ).arg( (*it).temperature() ) ); 00124 QFont font = label->font(); 00125 font.setBold( true ); 00126 label->setFont( font ); 00127 label->setAlignment( AlignLeft ); 00128 layout->addMultiCellWidget( label, 0, 0, 1, 2 ); 00129 mLabels.append( label ); 00130 00131 QString labelText; 00132 labelText = QString( "<b>%1:</b> %2<br>" 00133 "<b>%3:</b> %4" ) 00134 .arg( i18n( "Wind Speed" ) ) 00135 .arg( (*it).windSpeed() ) 00136 .arg( i18n( "Rel. Humidity" ) ) 00137 .arg( (*it).relativeHumidity() ); 00138 00139 QToolTip::add( label, labelText.replace( " ", "&nbsp;" ) ); 00140 00141 label = new QLabel( cover, this ); 00142 label->setAlignment( AlignLeft ); 00143 layout->addMultiCellWidget( label, 1, 1, 1, 2 ); 00144 mLabels.append( label ); 00145 } 00146 00147 for ( QLabel *label = mLabels.first(); label; label = mLabels.next() ) 00148 label->show(); 00149 00150 mLayout->addStretch( 1 ); 00151 } 00152 00153 void SummaryWidget::timeout() 00154 { 00155 mTimer.stop(); 00156 00157 DCOPRef dcopCall( "KWeatherService", "WeatherService" ); 00158 dcopCall.send( "updateAll()" ); 00159 00160 mTimer.start( 15 * 60000 ); 00161 } 00162 00163 void SummaryWidget::refresh( QString station ) 00164 { 00165 DCOPRef dcopCall( "KWeatherService", "WeatherService" ); 00166 00167 mWeatherMap[ station ].setIcon( dcopCall.call( "currentIcon(QString)", station, true ) ); 00168 mWeatherMap[ station ].setName( dcopCall.call( "stationName(QString)", station, true ) ); 00169 mWeatherMap[ station ].setCover( dcopCall.call( "cover(QString)", station, true ) ); 00170 mWeatherMap[ station ].setTemperature( dcopCall.call( "temperature(QString)", station, true ) ); 00171 mWeatherMap[ station ].setWindSpeed( dcopCall.call( "wind(QString)", station, true ) ); 00172 mWeatherMap[ station ].setRelativeHumidity( dcopCall.call( "relativeHumidity(QString)", station, true ) ); 00173 mWeatherMap[ station ].setStationID(station); 00174 00175 updateView(); 00176 } 00177 00178 void SummaryWidget::stationRemoved( QString station ) 00179 { 00180 mWeatherMap.remove( station ); 00181 updateView(); 00182 } 00183 00184 QStringList SummaryWidget::configModules() const 00185 { 00186 return QStringList( "kcmweatherservice.desktop" ); 00187 } 00188 00189 void SummaryWidget::slotShowReport(const QString &stationID) 00190 { 00191 mProc = new KProcess; 00192 QApplication::connect(mProc, SIGNAL(processExited(KProcess *)), 00193 this, SLOT(slotReportFinished(KProcess* ))); 00194 *mProc << "kweatherreport"; 00195 *mProc << stationID; 00196 if ( !mProc->start() ) 00197 { 00198 delete mProc; 00199 mProc=0; 00200 } 00201 } 00202 00203 void SummaryWidget::slotReportFinished(KProcess* /*proc*/){ 00204 delete mProc; 00205 mProc = 0; 00206 } 00207 00208 #include "summarywidget.moc"
KDE Logo
This file is part of the documentation for kontact Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Oct 1 15:19:36 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003