summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/oprocess.h2
-rw-r--r--libopie/tododb.cpp8
-rw-r--r--libopie/todoevent.cpp21
-rw-r--r--libopie/todoevent.h11
4 files changed, 37 insertions, 5 deletions
diff --git a/libopie/oprocess.h b/libopie/oprocess.h
index ce3c87d..fd726b4 100644
--- a/libopie/oprocess.h
+++ b/libopie/oprocess.h
@@ -1,75 +1,75 @@
/* This file is part of the KDE libraries
Copyright (C) 1997 Christian Czezakte (e9025461@student.tuwien.ac.at)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
//
// KPROCESS -- A class for handling child processes in KDE without
// having to take care of Un*x specific implementation details
//
// version 0.3.1, Jan 8th 1998
//
// (C) Christian Czezatke
// e9025461@student.tuwien.ac.at
-// Ported by Holger Freyther
+// Ported by Holger Freyther to the Open Palmtop Integrated Environment
//
#ifndef __kprocess_h__
#define __kprocess_h__
#include <sys/types.h> // for pid_t
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
#include <qvaluelist.h>
#include <qcstring.h>
#include <qobject.h>
class QSocketNotifier;
class OProcessPrivate;
/**
* Child process invocation, monitoring and control.
*
* @sect General usage and features
*
*This class allows a KDE application to start child processes without having
*to worry about UN*X signal handling issues and zombie process reaping.
*
*@see KProcIO
*
*Basically, this class distinguishes three different ways of running
*child processes:
*
*@li OProcess::DontCare -- The child process is invoked and both the child
*process and the parent process continue concurrently.
*
*Starting a DontCare child process means that the application is
*not interested in any notification to determine whether the
*child process has already exited or not.
*
*@li OProcess::NotifyOnExit -- The child process is invoked and both the
*child and the parent process run concurrently.
*
*When the child process exits, the OProcess instance
*corresponding to it emits the Qt signal @ref processExited().
*
*Since this signal is @em not emitted from within a UN*X
*signal handler, arbitrary function calls can be made.
*
*Be aware: When the OProcess objects gets destructed, the child
*process will be killed if it is still running!
*This means in particular, that you cannot use a OProcess on the stack
diff --git a/libopie/tododb.cpp b/libopie/tododb.cpp
index 6b10ec2..1e40c40 100644
--- a/libopie/tododb.cpp
+++ b/libopie/tododb.cpp
@@ -1,132 +1,140 @@
#include <qdir.h>
#include <opie/tododb.h>
#include <opie/xmltree.h>
#include <opie/todoresource.h>
#include <qpe/palmtoprecord.h>
#include <qpe/global.h>
using namespace Opie;
namespace {
class FileToDoResource : public ToDoResource {
public:
FileToDoResource() {};
// FIXME better parsing
bool save(const QString &name, const QValueList<ToDoEvent> &m_todos ){
// prepare the XML
XMLElement *tasks = new XMLElement( );
tasks->setTagName("Tasks" );
for( QValueList<ToDoEvent>::ConstIterator it = m_todos.begin(); it != m_todos.end(); ++it ){
XMLElement::AttributeMap map;
XMLElement *task = new XMLElement();
map.insert( "Completed", QString::number((int)(*it).isCompleted() ) );
map.insert( "HasDate", QString::number((int)(*it).hasDate() ) );
map.insert( "Priority", QString::number( (*it).priority() ) );
+ map.insert( "Progress", QString::number( (*it).progress() ) );
map.insert( "Summary", (*it).summary() );
QArray<int> arrat = (*it).categories();
QString attr;
for(uint i=0; i < arrat.count(); i++ ){
attr.append(QString::number(arrat[i])+";" );
}
if(!attr.isEmpty() ) // remove the last ;
attr.remove(attr.length()-1, 1 );
map.insert( "Categories", attr );
//else
//map.insert( "Categories", QString::null );
map.insert( "Description", (*it).description() );
if( (*it).hasDate() ){
map.insert("DateYear", QString::number( (*it).date().year() ) );
map.insert("DateMonth", QString::number( (*it).date().month() ) );
map.insert("DateDay", QString::number( (*it).date().day() ) );
}
map.insert("Uid", QString::number( (*it).uid() ) );
task->setTagName("Task" );
task->setAttributes( map );
tasks->appendChild(task);
}
QFile file( name);
if( file.open(IO_WriteOnly ) ){
QTextStream stream(&file );
stream.setEncoding( QTextStream::UnicodeUTF8 );
stream << "<!DOCTYPE Tasks>" << endl;
tasks->save(stream );
delete tasks;
stream << "</Tasks>" << endl;
file.close();
return true;
}
return false;
}
QValueList<ToDoEvent> load( const QString &name ){
qWarning("loading tododb" );
QValueList<ToDoEvent> m_todos;
XMLElement *root = XMLElement::load( name );
if(root != 0l ){ // start parsing
qWarning("ToDoDB::load tagName(): %s", root->tagName().latin1() );
//if( root->tagName() == QString::fromLatin1("Tasks" ) ){// Start
XMLElement *element = root->firstChild();
element = element->firstChild();
while( element ){
if( element->tagName() != QString::fromLatin1("Task") ){
element = element->nextChild();
continue;
}
qWarning("ToDoDB::load element tagName() : %s", element->tagName().latin1() );
QString dummy;
ToDoEvent event;
bool ok;
int dumInt;
// completed
dummy = element->attribute("Completed" );
dumInt = dummy.toInt(&ok );
if(ok ) event.setCompleted( dumInt == 0 ? false : true );
+ // progress
+ dummy = element->attribute("Progress" );
+ {
+ ushort dumShort = dummy.toUShort(&ok);
+ event.setProgress( dumShort );
+
+ }
// hasDate
dummy = element->attribute("HasDate" );
dumInt = dummy.toInt(&ok );
if(ok ) event.setHasDate( dumInt == 0 ? false: true );
// set the date
bool hasDa = dumInt;
if ( hasDa ) { //parse the date
int year, day, month = 0;
year = day = month;
// year
dummy = element->attribute("DateYear" );
dumInt = dummy.toInt(&ok );
if( ok ) year = dumInt;
// month
dummy = element->attribute("DateMonth" );
dumInt = dummy.toInt(&ok );
if(ok ) month = dumInt;
dummy = element->attribute("DateDay" );
dumInt = dummy.toInt(&ok );
if(ok ) day = dumInt;
// set the date
QDate date( year, month, day );
event.setDate( date);
}
dummy = element->attribute("Priority" );
dumInt = dummy.toInt(&ok );
if(!ok ) dumInt = ToDoEvent::NORMAL;
event.setPriority( dumInt );
//description
dummy = element->attribute("Description" );
event.setDescription( dummy );
dummy = element->attribute("Summary" );
event.setSummary( dummy );
// category
dummy = element->attribute("Categories" );
QStringList ids = QStringList::split(";", dummy );
event.setCategories( ids );
//uid
dummy = element->attribute("Uid" );
dumInt = dummy.toInt(&ok );
if(ok ) event.setUid( dumInt );
m_todos.append( event );
element = element->nextChild(); // next element
}
//}
}else {
qWarning("could not load" );
diff --git a/libopie/todoevent.cpp b/libopie/todoevent.cpp
index fb7073c..b35ac9d 100644
--- a/libopie/todoevent.cpp
+++ b/libopie/todoevent.cpp
@@ -1,269 +1,282 @@
#include <opie/todoevent.h>
#include <qpe/palmtopuidgen.h>
#include <qpe/stringutil.h>
#include <qpe/palmtoprecord.h>
#include <qpe/stringutil.h>
#include <qpe/categories.h>
#include <qpe/categoryselect.h>
#include <qobject.h>
ToDoEvent::ToDoEvent(const ToDoEvent &event )
{
*this = event;
}
ToDoEvent::ToDoEvent(bool completed, int priority,
const QStringList &category,
const QString& summary,
const QString &description,
+ ushort progress,
bool hasDate, QDate date, int uid )
{
m_date = date;
m_isCompleted = completed;
m_hasDate = hasDate;
m_priority = priority;
m_category = category;
m_sum = summary;
+ m_prog = progress;
m_desc = Qtopia::simplifyMultiLineSpace(description );
if (uid == -1 ) {
Qtopia::UidGen *uidgen = new Qtopia::UidGen();
uid = uidgen->generate();
delete uidgen;
}// generate the ids
m_uid = uid;
}
QArray<int> ToDoEvent::categories()const
{
QArray<int> array(m_category.count() ); // currently the datebook can be only in one category
array = Qtopia::Record::idsFromString( m_category.join(";") );
return array;
}
bool ToDoEvent::match( const QRegExp &regExp )const
{
if( QString::number( m_priority ).find( regExp ) != -1 ){
return true;
}else if( m_hasDate && m_date.toString().find( regExp) != -1 ){
return true;
}else if(m_desc.find( regExp ) != -1 ){
return true;
}
return false;
}
bool ToDoEvent::isCompleted() const
{
return m_isCompleted;
}
bool ToDoEvent::hasDate() const
{
return m_hasDate;
}
int ToDoEvent::priority()const
{
return m_priority;
}
QStringList ToDoEvent::allCategories()const
{
return m_category;
}
QString ToDoEvent::extra(const QString& )const
{
return QString::null;
}
QString ToDoEvent::summary() const
{
return m_sum;
}
+ushort ToDoEvent::progress() const
+{
+ return m_prog;
+}
void ToDoEvent::insertCategory(const QString &str )
{
m_category.append( str );
}
void ToDoEvent::clearCategories()
{
m_category.clear();
}
void ToDoEvent::setCategories(const QStringList &list )
{
m_category = list;
}
QDate ToDoEvent::date()const
{
return m_date;
}
QString ToDoEvent::description()const
{
return m_desc;
}
void ToDoEvent::setCompleted( bool completed )
{
m_isCompleted = completed;
}
void ToDoEvent::setHasDate( bool hasDate )
{
m_hasDate = hasDate;
}
void ToDoEvent::setDescription(const QString &desc )
{
m_desc = Qtopia::simplifyMultiLineSpace(desc );
}
void ToDoEvent::setExtra( const QString&, const QString& )
{
}
void ToDoEvent::setSummary( const QString& sum )
{
m_sum = sum;
}
void ToDoEvent::setCategory( const QString &cat )
{
qWarning("setCategory %s", cat.latin1() );
m_category.clear();
m_category << cat;
}
void ToDoEvent::setPriority(int prio )
{
m_priority = prio;
}
void ToDoEvent::setDate( QDate date )
{
m_date = date;
}
bool ToDoEvent::isOverdue( )
{
if( m_hasDate )
return QDate::currentDate() > m_date;
return false;
}
-
+void ToDoEvent::setProgress(ushort progress )
+{
+ m_prog = progress;
+}
/*!
Returns a richt text string
*/
QString ToDoEvent::richText() const
{
QString text;
QStringList catlist;
// Description of the todo
if ( !description().isEmpty() ){
text += "<b>" + QObject::tr( "Summary:") + "</b><br>";
text += Qtopia::escapeString(summary() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
text += "<b>" + QObject::tr( "Description:" ) + "</b><br>";
- text += Qtopia::escapeString(description() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
+ text += Qtopia::escapeString(description() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br><br><br>";
}
text += "<b>" + QObject::tr( "Priority:") +" </b>"
- + QString::number( priority() ) + "<br>";
+ + QString::number( priority() ) + " <br>";
+ text += "<b>" + QObject::tr( "Progress:") + " </b>"
+ + QString::number( progress() ) + " %<br>";
if (hasDate() ){
text += "<b>" + QObject::tr( "Deadline:") + " </b>";
text += date().toString();
text += "<br>";
}
// Open database of all categories and get the list of
// the categories this todoevent belongs to.
// Then print them...
// I am not sure whether there is no better way doing this !?
Categories catdb;
bool firstloop = true;
catdb.load( categoryFileName() );
catlist = allCategories();
text += "<b>" + QObject::tr( "Category:") + "</b> ";
for ( QStringList::Iterator it = catlist.begin(); it != catlist.end(); ++it ) {
if (!firstloop){
text += ", ";
}
firstloop = false;
text += catdb.label ("todo", (*it).toInt());
}
text += "<br>";
return text;
}
bool ToDoEvent::operator<( const ToDoEvent &toDoEvent )const{
if( !hasDate() && !toDoEvent.hasDate() ) return true;
- if( !hasDate() && toDoEvent.hasDate() ) return true;
+ if( !hasDate() && toDoEvent.hasDate() ) return false;
if( hasDate() && toDoEvent.hasDate() ){
if( date() == toDoEvent.date() ){ // let's the priority decide
return priority() < toDoEvent.priority();
}else{
return date() < toDoEvent.date();
}
}
return false;
}
bool ToDoEvent::operator<=(const ToDoEvent &toDoEvent )const
{
if( !hasDate() && !toDoEvent.hasDate() ) return true;
if( !hasDate() && toDoEvent.hasDate() ) return true;
if( hasDate() && toDoEvent.hasDate() ){
if( date() == toDoEvent.date() ){ // let's the priority decide
return priority() <= toDoEvent.priority();
}else{
return date() <= toDoEvent.date();
}
}
return true;
}
bool ToDoEvent::operator>(const ToDoEvent &toDoEvent )const
{
if( !hasDate() && !toDoEvent.hasDate() ) return false;
if( !hasDate() && toDoEvent.hasDate() ) return false;
if( hasDate() && toDoEvent.hasDate() ){
if( date() == toDoEvent.date() ){ // let's the priority decide
return priority() > toDoEvent.priority();
}else{
return date() > toDoEvent.date();
}
}
return false;
}
bool ToDoEvent::operator>=(const ToDoEvent &toDoEvent )const
{
if( !hasDate() && !toDoEvent.hasDate() ) return true;
if( !hasDate() && toDoEvent.hasDate() ) return false;
if( hasDate() && toDoEvent.hasDate() ){
if( date() == toDoEvent.date() ){ // let's the priority decide
return priority() > toDoEvent.priority();
}else{
return date() > toDoEvent.date();
}
}
return true;
}
bool ToDoEvent::operator==(const ToDoEvent &toDoEvent )const
{
if( m_priority == toDoEvent.m_priority &&
+ m_priority == toDoEvent.m_prog &&
m_isCompleted == toDoEvent.m_isCompleted &&
m_hasDate == toDoEvent.m_hasDate &&
m_date == toDoEvent.m_date &&
m_category == toDoEvent.m_category &&
m_sum == toDoEvent.m_sum &&
m_desc == toDoEvent.m_desc )
return true;
return false;
}
ToDoEvent &ToDoEvent::operator=(const ToDoEvent &item )
{
m_date = item.m_date;
m_isCompleted = item.m_isCompleted;
m_hasDate = item.m_hasDate;
m_priority = item.m_priority;
m_category = item.m_category;
m_desc = item.m_desc;
m_uid = item.m_uid;
m_sum = item.m_sum;
+ m_prog = item.m_prog;
return *this;
}
diff --git a/libopie/todoevent.h b/libopie/todoevent.h
index 7454241..de4623f 100644
--- a/libopie/todoevent.h
+++ b/libopie/todoevent.h
@@ -1,151 +1,162 @@
#ifndef todoevent_h
#define todoevent_h
#include <qmap.h>
#include <qregexp.h>
#include <qstringlist.h>
#include <qdatetime.h>
class ToDoEvent {
friend class ToDoDB;
public:
// priorities from Very low to very high
enum Priority { VERYHIGH=1, HIGH, NORMAL, LOW, VERYLOW };
/* Constructs a new ToDoEvent
@param completed Is the TodoEvent completed
@param priority What is the priority of this ToDoEvent
@param category Which category does it belong( uid )
@param summary A small summary of the todo
@param description What is this ToDoEvent about
@param hasDate Does this Event got a deadline
@param date what is the deadline?
@param uid what is the UUID of this Event
**/
ToDoEvent( bool completed = false, int priority = NORMAL,
const QStringList &category = QStringList(),
const QString &summary = QString::null ,
const QString &description = QString::null,
+ ushort progress = 0,
bool hasDate = false, QDate date = QDate::currentDate(), int uid = -1 );
/* Copy c'tor
**/
ToDoEvent(const ToDoEvent & );
/*
Is this event completed?
**/
bool isCompleted() const;
/*
Does this Event have a deadline
**/
bool hasDate() const;
/*
What is the priority?
**/
int priority()const ;
+ /**
+ * progress as ushort 0, 20, 40, 60, 80 or 100%
+ */
+ ushort progress() const;
/*
All category numbers as QString in a List
**/
QStringList allCategories()const;
/*
* Same as above but with QArray<int>
*/
QArray<int> categories() const;
/**
* The end Date
*/
QDate date()const;
/**
* The description of the todo
*/
QString description()const;
/**
* A small summary of the todo
*/
QString summary() const;
/**
* Return this todoevent in a RichText formatted QString
*/
QString richText() const;
/**
* Returns the UID of the Todo
*/
int uid()const { return m_uid;};
QString extra(const QString& )const;
/**
* Set if this Todo is completed
*/
void setCompleted(bool completed );
/**
* set if this todo got an end data
*/
void setHasDate( bool hasDate );
// if the category doesn't exist we will create it
// this sets the the Category after this call category will be the only category
void setCategory( const QString &category );
// adds a category to the Categories of this event
void insertCategory(const QString &category );
/**
* Removes this event from all categories
*/
void clearCategories();
/**
* This todo belongs to xxx categories
*/
void setCategories(const QStringList& );
/**
* Set the priority of the Todo
*/
void setPriority(int priority );
/**
+ * Set the progress.
+ */
+ void setProgress( ushort progress );
+
+ /**
* set the end date
*/
void setDate( QDate date );
void setDescription(const QString& );
void setSummary(const QString& );
void setExtra( const QString&, const QString& );
bool isOverdue();
bool match( const QRegExp &r )const;
void setUid(int id) {m_uid = id; };
bool operator<(const ToDoEvent &toDoEvent )const;
bool operator<=(const ToDoEvent &toDoEvent )const;
bool operator!=(const ToDoEvent &toDoEvent )const { return !(*this == toDoEvent); };
bool operator>(const ToDoEvent &toDoEvent )const;
bool operator>=(const ToDoEvent &toDoEvent)const;
bool operator==(const ToDoEvent &toDoEvent )const;
ToDoEvent &operator=(const ToDoEvent &toDoEvent );
private:
class ToDoEventPrivate;
ToDoEventPrivate *d;
QDate m_date;
bool m_isCompleted:1;
bool m_hasDate:1;
int m_priority;
QStringList m_category;
QString m_desc;
QString m_sum;
QMap<QString, QString> m_extra;
int m_uid;
+ ushort m_prog;
};
#endif