summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/otodo.cpp
Side-by-side diff
Diffstat (limited to 'libopie2/opiepim/otodo.cpp') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiepim/otodo.cpp294
1 files changed, 228 insertions, 66 deletions
diff --git a/libopie2/opiepim/otodo.cpp b/libopie2/opiepim/otodo.cpp
index 3eb0026..f534067 100644
--- a/libopie2/opiepim/otodo.cpp
+++ b/libopie2/opiepim/otodo.cpp
@@ -23,43 +23,46 @@
-_. . . )=. = 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.
*/
-#include <qobject.h>
-#include <qshared.h>
-
+#include "otodo.h"
+/* OPIE */
+#include <opie2/opimstate.h>
+#include <opie2/orecur.h>
+#include <opie2/opimmaintainer.h>
+#include <opie2/opimnotifymanager.h>
+#include <opie2/opimresolver.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>
+/* QT */
+#include <qobject.h>
+#include <qshared.h>
-#include <opie2/opimstate.h>
-#include <opie2/orecur.h>
-#include <opie2/opimmaintainer.h>
-#include <opie2/opimnotifymanager.h>
-#include <opie2/opimresolver.h>
-
-#include <opie2/otodo.h>
-
-namespace Opie {
+namespace Opie
+{
-struct OTodo::OTodoData : public QShared {
- OTodoData() : QShared() {
+struct OTodo::OTodoData : public QShared
+{
+ OTodoData() : QShared()
+ {
recur = 0;
state = 0;
maintainer = 0;
notifiers = 0;
};
- ~OTodoData() {
+ ~OTodoData()
+ {
delete recur;
delete maintainer;
delete notifiers;
}
QDate date;
@@ -75,27 +78,34 @@ struct OTodo::OTodoData : public QShared {
OPimMaintainer *maintainer;
QDate start;
QDate completed;
OPimNotifyManager *notifiers;
};
+
OTodo::OTodo(const OTodo &event )
: OPimRecord( event ), data( event.data )
{
data->ref();
// qWarning("ref up");
}
-OTodo::~OTodo() {
+
+
+OTodo::~OTodo()
+{
// qWarning("~OTodo " );
- if ( data->deref() ) {
+ if ( data->deref() )
+ {
// qWarning("OTodo::dereffing");
delete data;
data = 0l;
}
}
+
+
OTodo::OTodo(bool completed, int priority,
const QArray<int> &category,
const QString& summary,
const QString &description,
ushort progress,
bool hasDate, QDate date, int uid )
@@ -111,12 +121,14 @@ OTodo::OTodo(bool completed, int priority,
data->hasDate = hasDate;
data->priority = priority;
data->sum = summary;
data->prog = progress;
data->desc = Qtopia::simplifyMultiLineSpace(description );
}
+
+
OTodo::OTodo(bool completed, int priority,
const QStringList &category,
const QString& summary,
const QString &description,
ushort progress,
bool hasDate, QDate date, int uid )
@@ -132,192 +144,284 @@ OTodo::OTodo(bool completed, int priority,
data->hasDate = hasDate;
data->priority = priority;
data->sum = summary;
data->prog = progress;
data->desc = Qtopia::simplifyMultiLineSpace(description );
}
+
+
bool OTodo::match( const QRegExp &regExp )const
{
- if( QString::number( data->priority ).find( regExp ) != -1 ){
+ if ( QString::number( data->priority ).find( regExp ) != -1 )
+ {
setLastHitField( Priority );
return true;
- }else if( data->hasDate && data->date.toString().find( regExp) != -1 ){
+ }
+ else if ( data->hasDate && data->date.toString().find( regExp ) != -1 )
+ {
setLastHitField( HasDate );
return true;
- }else if(data->desc.find( regExp ) != -1 ){
+ }
+ else if ( data->desc.find( regExp ) != -1 )
+ {
setLastHitField( Description );
return true;
- }else if(data->sum.find( regExp ) != -1 ) {
+ }
+ else if ( data->sum.find( regExp ) != -1 )
+ {
setLastHitField( Summary );
return true;
}
return false;
}
+
+
bool OTodo::isCompleted() const
{
return data->isCompleted;
}
+
+
bool OTodo::hasDueDate() const
{
return data->hasDate;
}
-bool OTodo::hasStartDate()const {
+
+
+bool OTodo::hasStartDate() const
+{
return data->start.isValid();
}
-bool OTodo::hasCompletedDate()const {
+
+
+bool OTodo::hasCompletedDate() const
+{
return data->completed.isValid();
}
+
+
int OTodo::priority()const
{
return data->priority;
}
+
+
QString OTodo::summary() const
{
return data->sum;
}
+
+
ushort OTodo::progress() const
{
return data->prog;
}
+
+
QDate OTodo::dueDate()const
{
return data->date;
}
-QDate OTodo::startDate()const {
+
+
+QDate OTodo::startDate() const
+{
return data->start;
}
-QDate OTodo::completedDate()const {
+
+
+QDate OTodo::completedDate() const
+{
return data->completed;
}
+
+
QString OTodo::description()const
{
return data->desc;
}
-bool OTodo::hasState() const{
+
+
+bool OTodo::hasState() const
+{
if (!data->state ) return false;
return ( data->state->state() != OPimState::Undefined );
}
-OPimState OTodo::state()const {
- if (!data->state ) {
+
+
+OPimState OTodo::state() const
+{
+ if ( !data->state )
+ {
OPimState state;
return state;
}
return (*data->state);
}
-bool OTodo::hasRecurrence()const {
+
+
+bool OTodo::hasRecurrence() const
+{
if (!data->recur) return false;
return data->recur->doesRecur();
}
-ORecur OTodo::recurrence()const {
+
+
+ORecur OTodo::recurrence() const
+{
if (!data->recur) return ORecur();
return (*data->recur);
}
-bool OTodo::hasMaintainer()const {
+
+
+bool OTodo::hasMaintainer() const
+{
if (!data->maintainer) return false;
return (data->maintainer->mode() != OPimMaintainer::Undefined );
}
-OPimMaintainer OTodo::maintainer()const {
+
+
+OPimMaintainer OTodo::maintainer() const
+{
if (!data->maintainer) return OPimMaintainer();
return (*data->maintainer);
}
+
+
void OTodo::setCompleted( bool completed )
{
changeOrModify();
data->isCompleted = completed;
}
+
+
void OTodo::setHasDueDate( bool hasDate )
{
changeOrModify();
data->hasDate = hasDate;
}
+
+
void OTodo::setDescription(const QString &desc )
{
// qWarning( "desc " + desc );
changeOrModify();
data->desc = Qtopia::simplifyMultiLineSpace(desc );
}
+
+
void OTodo::setSummary( const QString& sum )
{
changeOrModify();
data->sum = sum;
}
+
+
void OTodo::setPriority(int prio )
{
changeOrModify();
data->priority = prio;
}
+
+
void OTodo::setDueDate( const QDate& date )
{
changeOrModify();
data->date = date;
}
-void OTodo::setStartDate( const QDate& date ) {
+
+
+void OTodo::setStartDate( const QDate& date )
+{
changeOrModify();
data->start = date;
}
-void OTodo::setCompletedDate( const QDate& date ) {
+
+
+void OTodo::setCompletedDate( const QDate& date )
+{
changeOrModify();
data->completed = date;
}
-void OTodo::setState( const OPimState& state ) {
+
+
+void OTodo::setState( const OPimState& state )
+{
changeOrModify();
if (data->state )
(*data->state) = state;
else
data->state = new OPimState( state );
}
-void OTodo::setRecurrence( const ORecur& rec) {
+
+
+void OTodo::setRecurrence( const ORecur& rec )
+{
changeOrModify();
if (data->recur )
(*data->recur) = rec;
else
data->recur = new ORecur( rec );
}
-void OTodo::setMaintainer( const OPimMaintainer& pim ) {
+
+
+void OTodo::setMaintainer( const OPimMaintainer& pim )
+{
changeOrModify();
if (data->maintainer )
(*data->maintainer) = pim;
else
data->maintainer = new OPimMaintainer( pim );
}
+
+
bool OTodo::isOverdue( )
{
if( data->hasDate && !data->isCompleted)
return QDate::currentDate() > data->date;
return false;
}
+
+
void OTodo::setProgress(ushort progress )
{
changeOrModify();
data->prog = progress;
}
-QString OTodo::toShortText() const {
+
+
+QString OTodo::toShortText() const
+{
return summary();
}
+
+
/*!
Returns a richt text string
*/
QString OTodo::toRichText() const
{
QString text;
QStringList catlist;
// summary
text += "<b><h3><img src=\"todo/TodoList\"> ";
- if ( !summary().isEmpty() ) {
+ if ( !summary().isEmpty() )
+ {
text += Qtopia::escapeString(summary() ).replace(QRegExp( "[\n]"), "" );
}
text += "</h3></b><br><hr><br>";
// description
- if( !description().isEmpty() ){
+ if ( !description().isEmpty() )
+ {
text += "<b>" + QObject::tr( "Description:" ) + "</b><br>";
text += Qtopia::escapeString(description() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
}
// priority
int priorityval = priority();
@@ -341,13 +445,14 @@ QString OTodo::toRichText() const
// progress
text += "<b>" + QObject::tr( "Progress:") + " </b>"
+ QString::number( progress() ) + " %<br>";
// due date
- if (hasDueDate() ){
+ if ( hasDueDate() )
+ {
QDate dd = dueDate();
int off = QDate::currentDate().daysTo( dd );
text += "<b>" + QObject::tr( "Deadline:" ) + " </b><font color=\"";
if ( off < 0 )
text += "#FF0000";
@@ -363,79 +468,114 @@ QString OTodo::toRichText() const
text += "<b>" + QObject::tr( "Category:") + "</b> ";
text += categoryNames( "Todo List" ).join(", ");
text += "<br>";
return text;
}
-bool OTodo::hasNotifiers()const {
+
+
+bool OTodo::hasNotifiers() const
+{
if (!data->notifiers) return false;
return !data->notifiers->isEmpty();
}
-OPimNotifyManager& OTodo::notifiers() {
+
+
+OPimNotifyManager& OTodo::notifiers()
+{
if (!data->notifiers )
data->notifiers = new OPimNotifyManager;
return (*data->notifiers);
}
-const OPimNotifyManager& OTodo::notifiers()const{
+
+
+const OPimNotifyManager& OTodo::notifiers() const
+{
if (!data->notifiers )
data->notifiers = new OPimNotifyManager;
return (*data->notifiers);
}
-bool OTodo::operator<( const OTodo &toDoEvent )const{
+
+bool OTodo::operator<( const OTodo &toDoEvent ) const
+{
if( !hasDueDate() && !toDoEvent.hasDueDate() ) return true;
if( !hasDueDate() && toDoEvent.hasDueDate() ) return false;
- if( hasDueDate() && toDoEvent.hasDueDate() ){
- if( dueDate() == toDoEvent.dueDate() ){ // let's the priority decide
+ if ( hasDueDate() && toDoEvent.hasDueDate() )
+ {
+ if ( dueDate() == toDoEvent.dueDate() )
+ { // let's the priority decide
return priority() < toDoEvent.priority();
- }else{
+ }
+ else
+ {
return dueDate() < toDoEvent.dueDate();
}
}
return false;
}
+
+
bool OTodo::operator<=(const OTodo &toDoEvent )const
{
if( !hasDueDate() && !toDoEvent.hasDueDate() ) return true;
if( !hasDueDate() && toDoEvent.hasDueDate() ) return true;
- if( hasDueDate() && toDoEvent.hasDueDate() ){
- if( dueDate() == toDoEvent.dueDate() ){ // let's the priority decide
+ if ( hasDueDate() && toDoEvent.hasDueDate() )
+ {
+ if ( dueDate() == toDoEvent.dueDate() )
+ { // let's the priority decide
return priority() <= toDoEvent.priority();
- }else{
+ }
+ else
+ {
return dueDate() <= toDoEvent.dueDate();
}
}
return true;
}
+
+
bool OTodo::operator>(const OTodo &toDoEvent )const
{
if( !hasDueDate() && !toDoEvent.hasDueDate() ) return false;
if( !hasDueDate() && toDoEvent.hasDueDate() ) return false;
- if( hasDueDate() && toDoEvent.hasDueDate() ){
- if( dueDate() == toDoEvent.dueDate() ){ // let's the priority decide
+ if ( hasDueDate() && toDoEvent.hasDueDate() )
+ {
+ if ( dueDate() == toDoEvent.dueDate() )
+ { // let's the priority decide
return priority() > toDoEvent.priority();
- }else{
+ }
+ else
+ {
return dueDate() > toDoEvent.dueDate();
}
}
return false;
}
+
+
bool OTodo::operator>=(const OTodo &toDoEvent )const
{
if( !hasDueDate() && !toDoEvent.hasDueDate() ) return true;
if( !hasDueDate() && toDoEvent.hasDueDate() ) return false;
- if( hasDueDate() && toDoEvent.hasDueDate() ){
- if( dueDate() == toDoEvent.dueDate() ){ // let's the priority decide
+ if ( hasDueDate() && toDoEvent.hasDueDate() )
+ {
+ if ( dueDate() == toDoEvent.dueDate() )
+ { // let's the priority decide
return priority() > toDoEvent.priority();
- }else{
+ }
+ else
+ {
return dueDate() > toDoEvent.dueDate();
}
}
return true;
}
+
+
bool OTodo::operator==(const OTodo &toDoEvent )const
{
if ( data->priority != toDoEvent.data->priority ) return false;
if ( data->priority != toDoEvent.data->prog ) return false;
if ( data->isCompleted != toDoEvent.data->isCompleted ) return false;
if ( data->hasDate != toDoEvent.data->hasDate ) return false;
@@ -444,21 +584,27 @@ bool OTodo::operator==(const OTodo &toDoEvent )const
if ( data->desc != toDoEvent.data->desc ) return false;
if ( data->maintainer != toDoEvent.data->maintainer )
return false;
return OPimRecord::operator==( toDoEvent );
}
-void OTodo::deref() {
+
+
+void OTodo::deref()
+{
// qWarning("deref in ToDoEvent");
- if ( data->deref() ) {
+ if ( data->deref() )
+ {
// qWarning("deleting");
delete data;
data= 0;
}
}
+
+
OTodo &OTodo::operator=(const OTodo &item )
{
if ( this == &item ) return *this;
OPimRecord::operator=( item );
//qWarning("operator= ref ");
@@ -466,13 +612,15 @@ OTodo &OTodo::operator=(const OTodo &item )
deref();
data = item.data;
return *this;
}
-QMap<int, QString> OTodo::toMap() const {
+
+QMap<int, QString> OTodo::toMap() const
+{
QMap<int, QString> map;
map.insert( Uid, QString::number( uid() ) );
map.insert( Category, idsToString( categories() ) );
map.insert( HasDate, QString::number( data->hasDate ) );
map.insert( Completed, QString::number( data->isCompleted ) );
@@ -489,32 +637,38 @@ QMap<int, QString> OTodo::toMap() const {
map.insert( Reminders, );
map.
*/
return map;
}
+
/**
* change or modify looks at the ref count and either
* creates a new QShared Object or it can modify it
* right in place
*/
-void OTodo::changeOrModify() {
- if ( data->count != 1 ) {
+void OTodo::changeOrModify()
+{
+ if ( data->count != 1 )
+ {
qWarning("changeOrModify");
data->deref();
OTodoData* d2 = new OTodoData();
copy(data, d2 );
data = d2;
}
}
+
+
// WATCHOUT
/*
* if you add something to the Data struct
* be sure to copy it here
*/
-void OTodo::copy( OTodoData* src, OTodoData* dest ) {
+void OTodo::copy( OTodoData* src, OTodoData* dest )
+{
dest->date = src->date;
dest->isCompleted = src->isCompleted;
dest->hasDate = src->hasDate;
dest->priority = src->priority;
dest->desc = src->desc;
dest->sum = src->sum;
@@ -533,18 +687,26 @@ void OTodo::copy( OTodoData* src, OTodoData* dest ) {
dest->start = src->start;
dest->completed = src->completed;
if (src->notifiers )
dest->notifiers = new OPimNotifyManager( *src->notifiers );
}
-QString OTodo::type() const {
+
+
+QString OTodo::type() const
+{
return QString::fromLatin1("OTodo");
}
-QString OTodo::recordField(int /*id*/ )const {
+
+
+QString OTodo::recordField( int /*id*/ ) const
+{
return QString::null;
}
-int OTodo::rtti(){
+
+int OTodo::rtti()
+{
return OPimResolver::TodoList;
}
}