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