kontact Library API Documentation

kpilot/summarywidget.cpp

00001 /*
00002     This file is part of Kontact.
00003     Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
00004      Copyright (C) 2004 Reinhold Kainhofer <reinhold@kainhofer.com>
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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00019 
00020     As a special exception, permission is given to link this program
00021     with any edition of Qt, and distribute the resulting executable,
00022     without including the source code for Qt in the source distribution.
00023 */
00024 
00025 #include <qimage.h>
00026 #include <qlabel.h>
00027 #include <qlayout.h>
00028 #include <qtooltip.h>
00029 #include <qfile.h>
00030 #include <qlabel.h>
00031 #include <qtextedit.h>
00032 #include <qvbox.h>
00033 
00034 #include <dcopclient.h>
00035 #include <dcopref.h>
00036 #include <kapplication.h>
00037 #include <kdebug.h>
00038 #include <kglobal.h>
00039 #include <kglobalsettings.h>
00040 #include <kiconloader.h>
00041 #include <klocale.h>
00042 #include <kurllabel.h>
00043 #include <kdialogbase.h>
00044 #include <kmessagebox.h>
00045 
00046 #include "pilotDaemonDCOP_stub.h"
00047 
00048 #include <ktextedit.h>
00049 
00050 //#include "pilotDaemonDCOP_stub.h"
00051 #include "summarywidget.h"
00052 
00053 SummaryWidget::SummaryWidget( QWidget *parent, const char *name )
00054   : Kontact::Summary( parent, name ),
00055     DCOPObject( "KPilotSummaryWidget" ),
00056     mDCOPSuccess(false),
00057     mStartedDaemon(false),
00058     mShouldStopDaemon(true)
00059 {
00060   mLayout = new QGridLayout( this );
00061 
00062   int row=0;
00063   QPixmap icon = KGlobal::iconLoader()->loadIcon( "kpilot", KIcon::Desktop, KIcon::SizeMedium );
00064   QWidget *header = createHeader( this, icon, i18n( "KPilot Information" ) );
00065   mLayout->addMultiCellWidget( header, row,row, 0,3 );
00066 
00067   // Last sync information
00068   row++;
00069   mLayout->addWidget( new QLabel( i18n("<i>Last sync:</i>"), this), row, 0 );
00070   mSyncTimeLabel = new QLabel( i18n("No information available" ), this );
00071   mLayout->addWidget( mSyncTimeLabel, row, 1 );
00072   mShowSyncLogLabel = new KURLLabel( "", i18n("[log]"), this );
00073   mLayout->addWidget( mShowSyncLogLabel, row, 3 );
00074   connect( mShowSyncLogLabel, SIGNAL( leftClickedURL( const QString& ) ),
00075     this, SLOT( showSyncLog( const QString& ) ) );
00076 
00077   // User
00078   row++;
00079   mLayout->addWidget( new QLabel( i18n("<i>User:</i>"), this), row, 0);
00080   mPilotUserLabel = new QLabel( i18n("Unknown"), this );
00081   mLayout->addMultiCellWidget( mPilotUserLabel, row, row, 1,3 );
00082 
00083   // Device information
00084   row++;
00085   mLayout->addWidget( new QLabel( i18n("<i>Device:</i>"), this), row, 0 );
00086   mPilotDeviceLabel = new QLabel( i18n("Unknown"), this );
00087   mLayout->addMultiCellWidget( mPilotDeviceLabel, row, row, 1,3 );
00088 
00089   // Status
00090   row++;
00091   mLayout->addWidget( new QLabel( i18n("<i>Status:</i>"), this), row, 0);
00092   mDaemonStatusLabel = new QLabel( i18n("No communication with the daemon possible"), this );
00093   mLayout->addMultiCellWidget( mDaemonStatusLabel, row, row, 1,3 );
00094 
00095   // Conduits:
00096   row++;
00097   QLabel *l = new QLabel( i18n("<i>Conduits:</i>"), this );
00098   l->setAlignment(AlignAuto | AlignTop | ExpandTabs);
00099   mLayout->addWidget( l, row, 0 );
00100   mConduitsLabel = new QLabel( i18n("No information available"), this );
00101   mConduitsLabel->setAlignment( mConduitsLabel->alignment()|Qt::WordBreak );
00102   mLayout->addMultiCellWidget( mConduitsLabel, row,row, 1,3 );
00103 
00104 //  mLayout->addStretch( 1 );
00105 //  mLayout->addWidget( new QSpacerItem( 1, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ) );
00106 
00107   QString error;
00108   QCString appID;
00109 
00110   if ( !kapp->dcopClient()->isApplicationRegistered( "kpilotDaemon" ) ) {
00111     if ( !KApplication::startServiceByDesktopName( "kpilotDaemon", QString( "--fail-silently" ),
00112                                                    &error, &appID ) ) {
00113       kdDebug(5602) << "No service available..." << endl;
00114       mStartedDaemon = true;
00115     }
00116   }
00117 
00118   connectDCOPSignal( 0, 0, "kpilotDaemonStatusChanged()", "refresh()", false );
00119   refresh();
00120 }
00121 
00122 SummaryWidget::~SummaryWidget()
00123 {
00124   if (mStartedDaemon && mShouldStopDaemon)
00125   {
00126     PilotDaemonDCOP_stub dcopToDaemon( "kpilotDaemon", "KPilotDaemonIface" );
00127     dcopToDaemon.quitNow(); // ASYNC, always succeeds.
00128   }
00129 }
00130 
00131 QStringList SummaryWidget::configModules() const
00132 {
00133   QStringList modules;
00134   modules << "kpilot_config.desktop";
00135   return modules;
00136 }
00137 
00138 void SummaryWidget::refresh( )
00139 {
00140   PilotDaemonDCOP_stub dcopToDaemon( "kpilotDaemon", "KPilotDaemonIface" );
00141   mDCOPSuccess = true;
00142 
00143   mLastSyncTime = dcopToDaemon.lastSyncDate();
00144   // check if that dcop call was successful
00145   mDCOPSuccess = mDCOPSuccess && dcopToDaemon.ok();
00146 
00147   mDaemonStatus = dcopToDaemon.shortStatusString();
00148   mDCOPSuccess = mDCOPSuccess && dcopToDaemon.ok();
00149 
00150   mConduits = dcopToDaemon.configuredConduitList();
00151   mDCOPSuccess = mDCOPSuccess && dcopToDaemon.ok();
00152 
00153   mSyncLog = dcopToDaemon.logFileName();
00154   mDCOPSuccess = mDCOPSuccess && dcopToDaemon.ok();
00155 
00156   mUserName = dcopToDaemon.userName();
00157   mDCOPSuccess = mDCOPSuccess && dcopToDaemon.ok();
00158 
00159   mPilotDevice = dcopToDaemon.pilotDevice();
00160   mDCOPSuccess = mDCOPSuccess && dcopToDaemon.ok();
00161 
00162   mShouldStopDaemon = dcopToDaemon.killDaemonOnExit();
00163   mDCOPSuccess = mDCOPSuccess && dcopToDaemon.ok();
00164 
00165   updateView();
00166 }
00167 
00168 
00169 void SummaryWidget::updateView()
00170 {
00171   if (mDCOPSuccess)
00172   {
00173     if ( mLastSyncTime.isValid() ) {
00174       mSyncTimeLabel->setText( mLastSyncTime.toString(Qt::LocalDate) );
00175     } else {
00176       mSyncTimeLabel->setText( i18n("No information available") );
00177     }
00178     if (!mSyncLog.isEmpty()) {
00179       mShowSyncLogLabel->setEnabled(true);
00180       mShowSyncLogLabel->setURL( mSyncLog );
00181     } else {
00182       mShowSyncLogLabel->setEnabled(false);
00183     }
00184     mPilotUserLabel->setText( (mUserName.isEmpty())?i18n("unknown"):mUserName );
00185     mPilotDeviceLabel->setText( (mPilotDevice.isEmpty())?i18n("unknown"):mPilotDevice );
00186     mDaemonStatusLabel->setText( mDaemonStatus );
00187     mConduitsLabel->setText( mConduits.join(", ") );
00188   }
00189   else
00190   {
00191     mSyncTimeLabel->setText( i18n("No information available (Daemon not running?)" ) );
00192     mShowSyncLogLabel->setEnabled(false);
00193     mPilotUserLabel->setText( i18n("unknown" ) );
00194     mPilotDeviceLabel->setText( i18n("unknown" ) );
00195     mDaemonStatusLabel->setText( i18n("No communication with the daemon possible") );
00196     mConduitsLabel->setText( i18n("No information available") );
00197   }
00198 }
00199 
00200 void SummaryWidget::showSyncLog( const QString &filename )
00201 {
00202     KDialogBase dlg( this, 0, true, QString::null, KDialogBase::Ok, KDialogBase::Ok );
00203     dlg.setCaption( i18n("KPilot HotSync Log") );
00204     QTextEdit *edit = new QTextEdit( dlg.makeVBoxMainWidget() );
00205     edit->setReadOnly(TRUE);
00206 
00207 
00208     QFile f(filename);
00209     if (!f.open(IO_ReadOnly))
00210     {
00211         KMessageBox::error( this, i18n("Unable to open Hotsync log %1.").arg(filename) );
00212         return;
00213     }
00214 
00215     QTextStream s(&f);
00216     while (!s.eof()) edit->append(s.readLine());
00217 
00218     edit->moveCursor(QTextEdit::MoveHome, false);
00219 
00220     f.close();
00221 
00222     dlg.setInitialSize( QSize( 400, 350) );
00223     dlg.exec();
00224 }
00225 #include "summarywidget.moc"
KDE Logo
This file is part of the documentation for kontact Library Version 3.3.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Jan 31 15:56:21 2007 by doxygen 1.4.2 written by Dimitri van Heesch, © 1997-2003