kontact Library API Documentation

korganizer/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 
00024 #include <qlabel.h>
00025 #include <qlayout.h>
00026 
00027 #include <kdialog.h>
00028 #include <kglobal.h>
00029 #include <kiconloader.h>
00030 #include <klocale.h>
00031 #include <kparts/part.h>
00032 #include <kstandarddirs.h>
00033 #include <kurllabel.h>
00034 #include <qtooltip.h>
00035 #include <libkcal/event.h>
00036 #include <libkcal/resourcecalendar.h>
00037 #include <libkcal/resourcelocal.h>
00038 #include <libkdepim/kpimprefs.h>
00039 
00040 #include "core.h"
00041 #include "plugin.h"
00042 #include "korganizerplugin.h"
00043 
00044 #include "korganizer/stdcalendar.h"
00045 
00046 #include "summarywidget.h"
00047 
00048 SummaryWidget::SummaryWidget( KOrganizerPlugin *plugin, QWidget *parent,
00049                               const char *name )
00050   : Kontact::Summary( parent, name ), mPlugin( plugin ), mCalendar( 0 )
00051 {
00052   QVBoxLayout *mainLayout = new QVBoxLayout( this, 3, 3 );
00053 
00054   QPixmap icon = KGlobal::iconLoader()->loadIcon( "kontact_date",
00055                    KIcon::Desktop, KIcon::SizeMedium );
00056   QWidget *header = createHeader( this, icon, i18n( "Appointments" ) );
00057   mainLayout->addWidget( header );
00058 
00059   mLayout = new QGridLayout( mainLayout, 7, 5, 3 );
00060   mLayout->setRowStretch( 6, 1 );
00061 
00062   mCalendar = KOrg::StdCalendar::self();
00063   mCalendar->load();
00064 
00065   connect( mCalendar, SIGNAL( calendarChanged() ), SLOT( updateView() ) );
00066   connect( mPlugin->core(), SIGNAL( dayChanged( const QDate& ) ),
00067            SLOT( updateView() ) );
00068 
00069   updateView();
00070 }
00071 
00072 SummaryWidget::~SummaryWidget()
00073 {
00074 }
00075 
00076 void SummaryWidget::updateView()
00077 {
00078   mLabels.setAutoDelete( true );
00079   mLabels.clear();
00080   mLabels.setAutoDelete( false );
00081 
00082   KIconLoader loader( "korganizer" );
00083 
00084   KConfig config( "kcmkorgsummaryrc" );
00085 
00086   config.setGroup( "Calendar" );
00087   int days = config.readNumEntry( "DaysToShow", 1 );
00088 
00089   QLabel *label = 0;
00090   int counter = 0;
00091   QPixmap pm = loader.loadIcon( "appointment", KIcon::Small );
00092 
00093   QDate dt;
00094   for ( dt=QDate::currentDate();
00095         dt<=QDate::currentDate().addDays( days - 1 );
00096         dt=dt.addDays(1) ) {
00097     KCal::Event::List events = mCalendar->events( dt, true );
00098     KCal::Event *ev;
00099     KCal::Event::List::ConstIterator it;
00100     for ( it=events.begin(); it!=events.end(); ++it ) {
00101       ev = *it;
00102 
00103       // Count number of days in multiday event
00104       int span=1; int dayof=1;
00105       if ( ev->isMultiDay() ) {
00106         QDate d = ev->dtStart().date();
00107         while ( d < ev->dtEnd().date() ) {
00108           if ( d < dt ) {
00109             dayof++;
00110           }
00111           span++;
00112           d=d.addDays( 1 );
00113         }
00114       }
00115 
00116       // Fill Appointment Pixmap Field
00117       label = new QLabel( this );
00118       label->setPixmap( pm );
00119       label->setMaximumSize( label->minimumSizeHint() );
00120       mLayout->addWidget( label, counter, 0 );
00121       mLabels.append( label );
00122 
00123       // Fill Event Date Field
00124       bool makeBold = false;
00125       QString datestr;
00126 
00127       // Modify event date for printing
00128       QDate sD = QDate::QDate( dt.year(), dt.month(), dt.day() );
00129       if ( ev->isMultiDay() ) {
00130         sD.setYMD( dt.year(), dt.month(), dt.day() );
00131       }
00132       if ( ( sD.month() == QDate::currentDate().month() ) &&
00133            ( sD.day()   == QDate::currentDate().day() ) ) {
00134         datestr = i18n( "Today" );
00135         makeBold = true;
00136       } else if ( ( sD.month() == QDate::currentDate().addDays( 1 ).month() ) &&
00137                   ( sD.day()   == QDate::currentDate().addDays( 1 ).day() ) ) {
00138         datestr = i18n( "Tomorrow" );
00139       } else {
00140         datestr = KGlobal::locale()->formatDate( sD );
00141       }
00142       label = new QLabel( datestr, this );
00143       label->setAlignment( AlignLeft | AlignVCenter );
00144       if ( makeBold ) {
00145         QFont font = label->font();
00146         font.setBold( true );
00147         label->setFont( font );
00148       }
00149       mLayout->addWidget( label, counter, 1 );
00150       mLabels.append( label );
00151 
00152       // Fill Event Summary Field
00153       QString newtext = ev->summary();
00154       if ( ev->isMultiDay() ) {
00155         newtext.append( QString(" (%1/%2)").arg( dayof ).arg( span ) );
00156       }
00157 
00158       KURLLabel *urlLabel = new KURLLabel( ev->uid(), newtext, this );
00159       mLayout->addWidget( urlLabel, counter, 2 );
00160       mLabels.append( urlLabel );
00161 
00162       if ( !ev->description().isEmpty() ) {
00163         QToolTip::add( urlLabel, ev->description() );
00164       }
00165 
00166       // Fill Event Time Range Field (only for non-floating Events)
00167       if ( !ev->doesFloat() ) {
00168         QTime sST = ev->dtStart().time();
00169         QTime sET = ev->dtEnd().time();
00170         if ( ev->isMultiDay() ) {
00171           if ( ev->dtStart().date() < dt ) {
00172             sST = QTime::QTime( 0, 0 );
00173           }
00174           if ( ev->dtEnd().date() > dt ) {
00175             sET = QTime::QTime( 23, 59 );
00176           }
00177         }
00178         datestr = i18n( "Time from - to", "%1 - %2" )
00179                   .arg( KGlobal::locale()->formatTime( sST ) )
00180                   .arg( KGlobal::locale()->formatTime( sET ) );
00181         label = new QLabel( datestr, this );
00182         label->setAlignment( AlignLeft | AlignVCenter );
00183         mLayout->addWidget( label, counter, 3 );
00184         mLabels.append( label );
00185       }
00186 
00187       connect( urlLabel, SIGNAL( leftClickedURL( const QString& ) ),
00188                this, SLOT( selectEvent( const QString& ) ) );
00189 
00190       counter++;
00191     }
00192   }
00193 
00194   if ( !counter ) {
00195     QLabel *noEvents = new QLabel( i18n( "No appointments pending" ), this );
00196     noEvents->setAlignment( AlignRight | AlignVCenter );
00197     mLayout->addWidget( noEvents, 0, 2 );
00198     mLabels.append( noEvents );
00199   }
00200 
00201   for ( label = mLabels.first(); label; label = mLabels.next() )
00202     label->show();
00203 }
00204 
00205 void SummaryWidget::selectEvent( const QString & )
00206 {
00207   mPlugin->core()->selectPlugin( "kontact_korganizerplugin" );
00208   mPlugin->interface()->showEventView();
00209 }
00210 
00211 QStringList SummaryWidget::configModules() const
00212 {
00213   return QStringList( "kcmkorgsummary.desktop" );
00214 }
00215 
00216 #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 Oct 17 09:56:56 2007 by doxygen 1.4.2 written by Dimitri van Heesch, © 1997-2003