From 9847b3a997f504e82ff391efe6304d3bb110b617 Mon Sep 17 00:00:00 2001 From: harlekin Date: Fri, 15 Feb 2002 16:25:32 +0000 Subject: initial import --- (limited to 'core/pim/today/today.cpp') diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp new file mode 100644 index 0000000..381ae6b --- a/dev/null +++ b/core/pim/today/today.cpp @@ -0,0 +1,335 @@ +/* + * today.cpp : main class + * + * --------------------- + * + * begin : Sun 10 17:20:00 CEST 2002 + * copyright : (c) 2002 by Maximilian Reiß + * email : max.reiss@gmx.de + * + */ +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "today.h" +#include "minidom.h" +#include "TodoItem.h" + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +//#include +//#include +#include + +int MAX_LINES_TASK; +int MAX_CHAR_CLIP; +int MAX_LINES_MEET; +int SHOW_LOCATION; +int SHOW_NOTES; +// show only later dates +int ONLY_LATER = 1; +/* + * Constructs a Example which is a child of 'parent', with the + * name 'name' and widget flags set to 'f' + */ +Today::Today( QWidget* parent, const char* name, WFlags fl ) + : TodayBase( parent, name, fl ) +{ + QObject::connect( (QObject*)PushButton1, SIGNAL( clicked() ), this, SLOT(startConfig() ) ); + QObject::connect( (QObject*)TodoButton, SIGNAL( clicked() ), this, SLOT(startTodo() ) ); + QObject::connect( (QObject*)DatesButton, SIGNAL( clicked() ), this, SLOT(startDatebook() ) ); + + QDate date = QDate::currentDate(); + QString time = (date.toString()); + TextLabel1->setText(time); + db = new DateBookDB; + + init(); + getDates(); + getTodo(); +} + + +void Today::init() +{ + // read config + Config cfg("today"); + cfg.setGroup("BaseConfig"); + + // how many lines should be showed in the task section + MAX_LINES_TASK = cfg.readNumEntry("maxlinestask",5); + // after how many chars should the be cut off on tasks and notes + MAX_CHAR_CLIP = cfg.readNumEntry("maxcharclip",30); + // how many lines should be showed in the datebook section + MAX_LINES_MEET = cfg.readNumEntry("maxlinesmeet",5); + // If location is to be showed too, 1 to activate it. + SHOW_LOCATION = cfg.readNumEntry("showlocation",1); + // if notes should be shown + SHOW_NOTES = cfg.readNumEntry("shownotes",0); +} + +void Today::startConfig() +{ + conf = new todayconfig ( this, "", true ); + + + //Config cfg = new Config("today"); + + // read the config + Config cfg("today"); + cfg.setGroup("BaseConfig"); + + //init(); + + conf->SpinBox1->setValue(MAX_LINES_MEET); + // location show box + conf->CheckBox1->setChecked(SHOW_LOCATION); + // notes show box + conf->CheckBox2->setChecked(SHOW_NOTES); + // task lines + conf->SpinBox2->setValue(MAX_LINES_TASK); + // clip when? + conf->SpinBox7->setValue(MAX_CHAR_CLIP); + + conf->exec(); + + int maxlinestask = conf->SpinBox2->value(); + int maxmeet = conf->SpinBox1->value(); + int location = conf->CheckBox1->isChecked(); + int notes = conf->CheckBox2->isChecked(); + int maxcharclip = conf->SpinBox7->value(); + + cfg.writeEntry("maxlinestask",maxlinestask); + cfg.writeEntry("maxcharclip", maxcharclip); + cfg.writeEntry("maxlinesmeet",maxmeet); + cfg.writeEntry("showlocation",location); + cfg.writeEntry("shownotes", notes); + // sync it to "disk" + cfg.write(); + + init(); + getDates(); + getTodo(); + //cout << location << endl; +} + + +/* + * Get all events that are in the datebook xml file for today + */ +void Today::getDates() +{ + QDate date = QDate::currentDate(); + QTime time = QTime::currentTime(); + QValueList list = db->getEffectiveEvents(date, date); + + Config config( "qpe" ); + // if 24 h format + // bool ampm = config.readBoolEntry( "AMPM", TRUE ); + + int count=0; + + if ( list.count() > 0 ) { + QString msg; + + for ( QValueList::ConstIterator it=list.begin(); + it!=list.end(); ++it ) { + + count++; + + if ( count <= MAX_LINES_MEET ) + { + //only get events past current time (start or end??) + //cout << time.toString() << endl; + //cout << TimeString::dateString((*it).event().end()) << endl; + // still some bug in here, 1 h off + if ((time.toString() <= TimeString::dateString((*it).event().end())) && ONLY_LATER ) + { + msg += "" + (*it).description() + ""; + // include location or not + if (SHOW_LOCATION == 1) + { + msg+= "
" + (*it).location(); + } + msg += "
" + // start time of event + + TimeString::timeString(QTime((*it).event().start().time()) ) + // end time of event + + " - " + TimeString::timeString(QTime((*it).event().end().time()) ) + + "
"; + // include possible note or not + if (SHOW_NOTES == 1) + { + msg += " note:" +((*it).notes()).mid(0, MAX_CHAR_CLIP) + "
"; + } + } + } + } + DatesField->setText(msg); + } +} + +/* + * + * + */ +QList Today::loadTodo(const char *filename) +{ + DOM *todo; + ELE *tasks; + ELE **tasklist; + ATT **attlist; + int i, j; + char *description; + int completed; + int priority; + TodoItem *tmp; + QList loadtodolist; + + todo = minidom_load(filename); + + tasks = todo->el; + tasks = tasks->el[0]; /*!DOCTYPE-quickhack*/ + if(tasks) + { + tasklist = tasks->el; + i = 0; + while((tasklist) && (tasklist[i])) + { + attlist = tasklist[i]->at; + j = 0; + description = NULL; + priority = -1; + completed = -1; + while((attlist) && (attlist[j])) + { + if(!attlist[i]->name) continue; + if(!strcmp(attlist[j]->name, "Description")) + { + description = attlist[j]->value; + } + // get Completed tag (0 or 1) + if(!strcmp(attlist[j]->name, "Completed")) + { + QString s = attlist[j]->name; + if(s == "Completed") + { + completed = QString(attlist[j]->value).toInt(); + } + } + // get Priority (1 to 5) + if(!strcmp(attlist[j]->name, "Priority")) + { + QString s = attlist[j]->name; + if(s == "Priority") + { + priority = QString(attlist[j]->value).toInt(); + } + } + j++; + } + if(description) + { + tmp = new TodoItem(description, completed, priority); + loadtodolist.append(tmp); + } + i++; + } + } + + minidom_free(todo); + + return loadtodolist; +} + + +/* + * Get the todos + * + */ +void Today::getTodo() +{ + QString output; + QString tmpout; + int count = 0; + + QDir dir; + QString homedir = dir.homeDirPath (); + // see if todolist.xml does exist. + QFile f(homedir +"/Applications/todolist/todolist.xml"); + if ( f.exists() ) + { + QList todolist = loadTodo(homedir +"/Applications/todolist/todolist.xml"); + + TodoItem *item; + for( item = todolist.first(); item; item = todolist.next()) + { + if (!(item->getCompleted() == 1) ) + { + count++; + if (count <= MAX_LINES_TASK) + { + tmpout += "- " + QString(((item)->getDescription().mid(0, MAX_CHAR_CLIP) + ("
"))); + } + } + } + } + + if (count > 0) + { + output = QString("There are %1 active tasks:
").arg(count); + output += tmpout; + } + else + { + output = ("No active tasks"); + } + + TodoField->setText(output); +} + +/* + * lanches datebook + */ +void Today::startDatebook() +{ + //ugly but working + system("/opt/QtPalmtop/bin/datebook"); +} + +/* + * lanches todolist + */ +void Today::startTodo() +{ + // QProcess *datelanch = new QProcess( this, "datebook"); + //datelanch->start(); + system("/opt/QtPalmtop/bin/todolist"); +} + +/* + * Destroys the object and frees any allocated resources + */ +Today::~Today() +{ + // no need to delete child widgets, Qt does it all for us +} -- cgit v0.9.0.2