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"