korganizer Library API Documentation

kowhatsnextview.cpp

00001 /*
00002     This file is part of KOrganizer.
00003 
00004     Copyright (c) 2001 Cornelius Schumacher <schumacher@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., 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 <qlayout.h>
00026 #include <qtextbrowser.h>
00027 #include <qtextcodec.h>
00028 #include <qfileinfo.h>
00029 #include <qlabel.h>
00030 
00031 #include <kglobal.h>
00032 #include <klocale.h>
00033 #include <kdebug.h>
00034 #include <kiconloader.h>
00035 #include <kmessagebox.h>
00036 
00037 #include <libkcal/calendar.h>
00038 
00039 #ifndef KORG_NOPRINTER
00040 #include "calprinter.h"
00041 #endif
00042 #include "koglobals.h"
00043 #include "koprefs.h"
00044 #include "koeventviewerdialog.h"
00045 
00046 #include "kowhatsnextview.h"
00047 
00048 using namespace KOrg;
00049 
00050 void WhatsNextTextBrowser::setSource(const QString& n)
00051 {
00052   kdDebug(5850) << "WhatsNextTextBrowser::setSource(): " << n << endl;
00053 
00054   if (n.startsWith("event:")) {
00055     emit showIncidence(n);
00056     return;
00057   } else if (n.startsWith("todo:")) {
00058     emit showIncidence(n);
00059     return;
00060   } else {
00061     QTextBrowser::setSource(n);
00062   }
00063 }
00064 
00065 KOWhatsNextView::KOWhatsNextView(Calendar *calendar, QWidget *parent,
00066                                  const char *name)
00067   : KOrg::BaseView(calendar, parent, name)
00068 {
00069   QLabel *dateLabel =
00070       new QLabel(KGlobal::locale()->formatDate(QDate::currentDate()),this);
00071   dateLabel->setMargin(2);
00072   dateLabel->setAlignment(AlignCenter);
00073 
00074   mView = new WhatsNextTextBrowser(this);
00075   connect(mView,SIGNAL(showIncidence(const QString &)),SLOT(showIncidence(const QString &)));
00076 
00077   QBoxLayout *topLayout = new QVBoxLayout(this);
00078   topLayout->addWidget(dateLabel);
00079   topLayout->addWidget(mView);
00080 }
00081 
00082 KOWhatsNextView::~KOWhatsNextView()
00083 {
00084 }
00085 
00086 int KOWhatsNextView::maxDatesHint()
00087 {
00088   return 0;
00089 }
00090 
00091 int KOWhatsNextView::currentDateCount()
00092 {
00093   return 0;
00094 }
00095 
00096 Incidence::List KOWhatsNextView::selectedIncidences()
00097 {
00098   Incidence::List eventList;
00099 
00100   return eventList;
00101 }
00102 
00103 
00104 void KOWhatsNextView::printPreview(CalPrinter *calPrinter, const QDate &fd,
00105                                const QDate &td)
00106 {
00107 #ifndef KORG_NOPRINTER
00108   calPrinter->preview(CalPrinter::Day, fd, td);
00109 #endif
00110 }
00111 
00112 void KOWhatsNextView::updateView()
00113 {
00114   KIconLoader kil("korganizer");
00115   QString *ipath = new QString();
00116   kil.loadIcon("korganizer",KIcon::NoGroup,32,KIcon::DefaultState,ipath);
00117 
00118   mText = "<table width=\"100%\">\n";
00119   mText += "<tr bgcolor=\"#3679AD\"><td><h1>";
00120   mText += "<img src=\"";
00121   mText += *ipath;
00122   mText += "\">";
00123   mText += "<font color=\"white\"> " + i18n("What's next?") + "</font></h1>";
00124   mText += "</td></tr>\n<tr><td>";
00125 
00126   Event::List events = calendar()->events( QDate::currentDate(), true );
00127   if (events.count() > 0) {
00128     mText += "<p></p>";
00129     kil.loadIcon("appointment",KIcon::NoGroup,22,KIcon::DefaultState,ipath);
00130     mText += "<h2><img src=\"";
00131     mText += *ipath;
00132     mText += "\">";
00133     mText += i18n("Events:") + "</h2>\n";
00134     mText += "<table>\n";
00135     Event::List::ConstIterator it;
00136     for( it = events.begin(); it != events.end(); ++it ) {
00137       Event *ev = *it;
00138       if (!ev->doesRecur() || ev->recursOn( QDate::currentDate())) {
00139         appendEvent(ev);
00140       }
00141     }
00142     mText += "</table>\n";
00143   }
00144 
00145   mTodos.clear();
00146   Todo::List todos = calendar()->todos();
00147   if ( todos.count() > 0 ) {
00148     kil.loadIcon("todo",KIcon::NoGroup,22,KIcon::DefaultState,ipath);
00149     mText += "<h2><img src=\"";
00150     mText += *ipath;
00151     mText += "\">";
00152     mText += i18n("To-Do:") + "</h2>\n";
00153     mText += "<ul>\n";
00154     Todo::List::ConstIterator it;
00155     for( it = todos.begin(); it != todos.end(); ++it ) {
00156       Todo *todo = *it;
00157       if ( !todo->isCompleted() && todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() )
00158                   appendTodo(todo);
00159     }
00160     bool gotone = false;
00161     int priority = 1;
00162     while (!gotone && priority<6) {
00163       for( it = todos.begin(); it != todos.end(); ++it ) {
00164         Todo *todo = *it;
00165         if (!todo->isCompleted() && (todo->priority() == priority) ) {
00166           appendTodo(todo);
00167           gotone = true;
00168         }
00169       }
00170       priority++;
00171       kdDebug(5850) << "adding the todos..." << endl;
00172     }
00173     mText += "</ul>\n";
00174   }
00175 
00176   int replies = 0;
00177   events = calendar()->events(QDate::currentDate(), QDate(2975,12,6));
00178   Event::List::ConstIterator it2;
00179   for( it2 = events.begin(); it2 != events.end(); ++it2 ) {
00180     Event *ev = *it2;
00181     Attendee *me = ev->attendeeByMails( KOPrefs::instance()->allEmails() );
00182     if (me!=0) {
00183       if (me->status()==Attendee::NeedsAction && me->RSVP()) {
00184         if (replies == 0) {
00185           mText += "<p></p>";
00186           kil.loadIcon("reply",KIcon::NoGroup,22,KIcon::DefaultState,ipath);
00187           mText += "<h2><img src=\"";
00188           mText += *ipath;
00189           mText += "\">";
00190           mText += i18n("Events and To-Dos that need a reply:") + "</h2>\n";
00191           mText += "<table>\n";
00192         }
00193         replies++;
00194         appendEvent(ev,true);
00195       }
00196     }
00197   }
00198   todos = calendar()->todos();
00199   Todo::List::ConstIterator it3;
00200   for( it3 = todos.begin(); it3 != todos.end(); ++it3 ) {
00201     Todo *to = *it3;
00202     Attendee *me = to->attendeeByMails( KOPrefs::instance()->allEmails() );
00203     if (me!=0) {
00204       if (me->status()==Attendee::NeedsAction && me->RSVP()) {
00205         if (replies == 0) {
00206           mText += "<p></p>";
00207           kil.loadIcon("reply",KIcon::NoGroup,22,KIcon::DefaultState,ipath);
00208           mText += "<h2><img src=\"";
00209           mText += *ipath;
00210           mText += "\">";
00211           mText += i18n("Events and To-Dos that need a reply:") + "</h2>\n";
00212           mText += "<table>\n";
00213         }
00214         replies++;
00215         appendEvent(to);
00216       }
00217     }
00218     kdDebug () << "check for todo-replies..." << endl;
00219   }
00220   if (replies > 0 ) mText += "</table>\n";
00221 
00222 
00223   mText += "</td></tr>\n</table>\n";
00224 
00225   kdDebug(5850) << "KOWhatsNextView::updateView: text: " << mText << endl;
00226   mView->setText(mText);
00227 }
00228 
00229 void KOWhatsNextView::showDates(const QDate &, const QDate &)
00230 {
00231   updateView();
00232 }
00233 
00234 void KOWhatsNextView::showIncidences( const Incidence::List & )
00235 {
00236 }
00237 
00238 void KOWhatsNextView::changeIncidenceDisplay(Incidence *, int action)
00239 {
00240   switch(action) {
00241     case KOGlobals::INCIDENCEADDED:
00242       break;
00243     case KOGlobals::INCIDENCEEDITED:
00244       break;
00245     case KOGlobals::INCIDENCEDELETED:
00246       break;
00247     default:
00248       kdDebug(5850) << "KOWhatsNextView::changeIncidenceDisplay(): Illegal action " << action << endl;
00249   }
00250 }
00251 
00252 void KOWhatsNextView::appendEvent(Incidence *ev, bool reply)
00253 {
00254   kdDebug(5850) << "KOWhatsNextView::appendEvent(): " << ev->uid() << endl;
00255 
00256   mText += "<tr><td><b>";
00257   if (!ev->doesFloat()) {
00258     if (ev->type()=="Event") {
00259       Event *event = static_cast<Event *>(ev);
00260       if (reply) mText += "on " + event->dtStartDateStr() + ": ";
00261       mText += event->dtStartTimeStr() + " - " + event->dtEndTimeStr();
00262     }
00263   }
00264   mText += "</b></td><td><a ";
00265   if (ev->type()=="Event") mText += "href=\"event:";
00266   if (ev->type()=="Todo") mText += "href=\"todo:";
00267   mText += ev->uid() + "\">";
00268   mText += ev->summary();
00269   mText += "</a></td></tr>\n";
00270 }
00271 
00272 void KOWhatsNextView::appendTodo(Incidence *ev)
00273 {
00274   if ( mTodos.find( ev ) != mTodos.end() ) return;
00275 
00276   mTodos.append( ev );
00277 
00278   mText += "<li><a href=\"todo:" + ev->uid() + "\">";
00279   mText += ev->summary();
00280   mText += "</a></li>\n";
00281 }
00282 
00283 void KOWhatsNextView::showIncidence( const QString &uid )
00284 {
00285   kdDebug(5850) << "KOWhatsNextView::showIncidence(): " << uid << endl;
00286   Incidence *incidence = 0;
00287 
00288   if ( uid.startsWith( "event://" ) ) {
00289     incidence = calendar()->incidence( uid.mid( 8 ) );
00290   } else if ( uid.startsWith( "todo://" ) ) {
00291     incidence = calendar()->incidence( uid.mid( 7 ) );
00292   }
00293   if ( incidence ) emit showIncidenceSignal( incidence );
00294 }
00295 
00296 #include "kowhatsnextview.moc"
KDE Logo
This file is part of the documentation for korganizer Library Version 3.3.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 22:45:26 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003