📄 task.cpp
字号:
// check this key/value for a CHARSET field. VObjectIterator tnit; initPropIterator( &tnit, o ); QTextCodec *tc = 0; while( moreIteration( &tnit ) ) { VObject *otc = nextVObject( &tnit ); if ( qstrcmp(vObjectName(otc), VCCharSetProp ) == 0) { tc = QTextCodec::codecForName(vObjectStringZValue(otc)); break; } } QString value; if (tc) value = tc->toUnicode( vObjectStringZValue( o ) ); else value = vObjectStringZValue( o ); if ( name == VCDueProp ) { t.setDueDate( TimeConversion::fromISO8601( QCString(value) ).date() ); } else if ( name == VCSummaryProp ) { summary = value; } else if ( name == VCDescriptionProp ) { description = value; } else if (name == VCAttachProp ) { attach = value; } else if ( name == VCStatusProp ) { if ( value == "COMPLETED" ) t.setCompleted( TRUE ); } else if ( name == VCCompletedProp ) { t.setCompletedDate( TimeConversion::fromISO8601( QCString(value) ).date() ); } else if ( name == VCPriorityProp ) { t.setPriority( (PimTask::PriorityValue) value.toInt() ); } else if (name == "X-Qtopia-STATUS" ) { t.setStatus( (PimTask::TaskStatus) value.toInt() ); } else if (name == "X-Qtopia-PERCOMP" ) { t.setPercentCompleted( value.toInt() ); } else if (name == "X-Qtopia-STARTED" ) { t.setStartedDate( TimeConversion::fromISO8601( QCString(value) ).date() ); } else { qpe_setVObjectProperty(name,value,"Todo List",&t); // No tr } } // Find best mapping from (Summary,Description,Attach) to our (Description,Notes) // Similar code in event.cpp if ( !!summary && !!description && summary != description ) { t.setDescription( summary ); t.setNotes( description ); // all 3 - drop attach } else if ( !!summary ) { t.setDescription( summary ); t.setNotes( attach ); } else { t.setDescription( description ); t.setNotes( attach ); } return t;}/*! Write the list of \a tasks as vCalendar objects to the file specified by \a filename. \sa readVCalendar()*/void PimTask::writeVCalendar( const QString &filename, const QValueList<PimTask> &tasks){ QFileDirect f( filename.utf8().data() ); if ( !f.open( IO_WriteOnly ) ) { qWarning("Unable to open vcard write"); return; } QValueList<PimTask>::ConstIterator it; for( it = tasks.begin(); it != tasks.end(); ++it ) { VObject *obj = createVObject( *it ); writeVObject(f.directHandle() , obj ); cleanVObject( obj ); } cleanStrTbl();}/*! Write the \a task as a vCalendar to the file specified by \a filename. \sa readVCalendar()*/void PimTask::writeVCalendar( const QString &filename, const PimTask &task){ QFileDirect f( filename.utf8().data() ); if ( !f.open( IO_WriteOnly ) ) { qWarning("Unable to open vcard write"); return; } VObject *obj = createVObject( task ); writeVObject(f.directHandle() , obj ); cleanVObject( obj ); cleanStrTbl();}/*! Reads the file specified by \a filename as a list of vCalendar objects and returns the list of near equivalent tasks. \sa writeVCalendar()*/QValueList<PimTask> PimTask::readVCalendar( const QString &filename ){ VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() ); QValueList<PimTask> tasks; qpe_startVObjectInput(); while ( obj ) { QCString name = vObjectName( obj ); if ( name == VCCalProp ) { VObjectIterator nit; initPropIterator( &nit, obj ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectName( o ); if ( name == VCTodoProp ) tasks.append( parseVObject( o ) ); } } else if ( name == VCTodoProp ) { // shouldn't happen, but just to be sure tasks.append( parseVObject( obj ) ); } VObject *t = obj; obj = nextVObjectInList(obj); cleanVObject( t ); } qpe_endVObjectInput(); return tasks;}/*! Returns a rich text formatted QString of the PimTask.*/QString PimTask::toRichText() const{ QString text; text = "<center><b>" + Qtopia::escapeString(mDesc) + "</b></center><br>"; // No tr if ( mDue ) text += "<b>" + qApp->translate("QtopiaPim", "Due:") + "</b> " + mDueDate.toString() + "<br>"; if ( !mStartedDate.isNull() && mStatus != NotStarted) text += "<b>" + qApp->translate("QtopiaPim", "Started:") + "</b> " + mStartedDate.toString() + "<br>"; if ( !mCompletedDate.isNull() && isCompleted() ) text += "<b>" + qApp->translate("QtopiaPim", "Completed:") + "</b> " + mCompletedDate.toString() + "<br>"; //if ( !isCompleted() ) { //We remember old status and treat completed separately // such remembering is already done by, status(); QString statusString = statusToTrString( status() ); text += "<b>" + qApp->translate("QtopiaPim", "Status:") + "</b> " + statusString + "<br>"; text +="<b>" + qApp->translate("QtopiaPim", "Priority:") + "</b> " + QString::number( mPriority ) + "<br>"; if ( (mStatus != NotStarted && !isCompleted() ) ) text += "<b>" + qApp->translate("QtopiaPim", "Completed:") + "</b> " + QString::number(mPercentCompleted) + " " + qApp->translate("QtopiaPim", "percent", "Word or symbol after numbers for percentage") + "<br>"; if ( !mNotes.isEmpty() ) text += "<br> <b> " + qApp->translate("QtopiaPim", "Notes:") + "</b> " + Qtopia::escapeMultiLineString(mNotes); return text;}static int dueDateYear = -1;static int dueDateMonth = -1;static int dueDateDay = -1;/*! \internal // Reimplemenmted to handle post processing of reading a task*/void PimTask::setFields(const QMap<int,QString> &m){ dueDateYear = -1; dueDateMonth = -1; dueDateDay = -1; PimRecord::setFields( m ); if ( dueDateYear != -1 && dueDateMonth != -1 && dueDateDay != -1 ) { mDueDate.setYMD(dueDateYear, dueDateMonth, dueDateDay); }}/*! \internal*/void PimTask::setField(int key,const QString &s){ switch( key ) { case HasDate: if ( s == "1" ) mDue = TRUE; break; case Description: setDescription( s ); break; case Priority: setPriority( (PriorityValue) (s).toInt() ); break; case CompletedField: setCompleted( s == "1" ); break; case PercentCompleted: setPercentCompleted( s.toInt() ); break; case DueDateYear: dueDateYear = s.toInt(); break; case DueDateMonth: dueDateMonth = s.toInt(); break; case DueDateDay: dueDateDay = s.toInt(); break; case Status: setStatus( xmlToStatus(s) ); break; case StartedDate: setStartedDate( PimXmlIO::xmlToDate( s ) ); break; case CompletedDate: setCompletedDate( PimXmlIO::xmlToDate(s) ); break; case Notes: setNotes( s ); break; default: PimRecord::setField(key, s); }}/*! \internal*/QString PimTask::field(int key) const{ switch( key ) { case HasDate: return QString::number( mDue ); case Description: return mDesc; case Priority: return QString::number( mPriority ); case PercentCompleted: return QString::number( mPercentCompleted ); case CompletedField: return QString::number( mCompleted ); case DueDateYear: return QString::number( mDueDate.year() ); case DueDateMonth: return QString::number( mDueDate.month() ); case DueDateDay: return QString::number( mDueDate.day() ); case Status: return statusToXml( mStatus ); case StartedDate: return PimXmlIO::dateToXml( mStartedDate ); case CompletedDate: return PimXmlIO::dateToXml( mCompletedDate ); case Notes: return mNotes; default: return PimRecord::field(key); }}static QMap<int, int> *uniquenessMapPtr = 0;static QMap<QCString, int> *identifierToKeyMapPtr = 0;static QMap<int, QCString> *keyToIdentifierMapPtr = 0;static QMap<int, QString> * trFieldsMapPtr = 0;QMap<int, QString> PimTask::fields() const{ QMap<int, QString> m = PimRecord::fields(); if (!keyToIdentifierMapPtr) initMaps(); QMap<int, QCString>::Iterator it; for (it = keyToIdentifierMapPtr->begin(); it != keyToIdentifierMapPtr->end(); ++it) { int i = it.key(); QString str = field(i); if (!str.isEmpty()) m.insert(i, str); } return m;}PimTask::TaskStatus PimTask::xmlToStatus(const QString &s){ if ( s == "InProgress" ) return InProgress; else if ( s == "Completed" ) // No tr return Completed; else if ( s == "Waiting" ) // No tr return Waiting; else if ( s == "Deferred" ) // No tr return Deferred; else return NotStarted;}QString PimTask::statusToXml(TaskStatus status){ switch( status ) { default: return "NotStarted"; case InProgress: return "InProgress"; case Completed: return "Completed"; // No tr case Waiting: return "Waiting"; // No tr case Deferred: return "Deferred"; // No tr }}#ifndef QT_NO_DATASTREAMQDataStream &operator>>( QDataStream &s, PimTask &c ){ s >> (PimRecord&)c; uchar val; s >> val; c.mDue = val == 0 ? FALSE : TRUE; s >> c.mDueDate; s >> val; c.mCompleted = val == 0 ? FALSE : TRUE; int p; s >> p; c.mPriority = (PimTask::PriorityValue) p; s >> c.mDesc; s >> c.mStartedDate; s >> c.mCompletedDate; int i; s >> i; c.mStatus = (PimTask::TaskStatus)i; s >> c.mNotes; return s;}QDataStream &operator<<( QDataStream &s, const PimTask &c ){ s << (const PimRecord&)c; s << (c.mDue ? (uchar)1 : (uchar)0); s << c.mDueDate; s << (c.mCompleted ? (uchar)1 : (uchar)0); s << c.mPriority; s << c.mDesc; s << c.mStartedDate; s << c.mCompletedDate; int i = (int) c.mStatus; s << i; s << c.mNotes; return s;}static const QtopiaPimMapEntry todolistentries[] = { { "HasDate", NULL, PimTask::HasDate, 0 }, { "Description", // No tr QT_TRANSLATE_NOOP("PimTask", "Description"), PimTask::Description, 50 }, { "Priority", QT_TRANSLATE_NOOP("PimTask", "Priority"), PimTask::Priority, 0 }, { "Completed", QT_TRANSLATE_NOOP("PimTask", "Completed"), PimTask::CompletedField, 0}, { "PercentCompleted", QT_TRANSLATE_NOOP("PimTask", "Percent Completed"), PimTask::PercentCompleted, 0}, { "DateYear", NULL, PimTask::DueDateYear, 0 }, { "DateMonth", NULL, PimTask::DueDateMonth, 0 }, { "DateDay", NULL, PimTask::DueDateDay, 0 }, { "Status", QT_TRANSLATE_NOOP("PimTask", "Status"), PimTask::Status, 0 }, { "StartedDate", QT_TRANSLATE_NOOP("PimTask", "Started Date"), PimTask::StartedDate, 50 }, { "CompletedDate", QT_TRANSLATE_NOOP("PimTask", "Completed Date"), PimTask::CompletedDate, 0 }, { "Notes", QT_TRANSLATE_NOOP("PimTask", "Notes"), PimTask::Notes, 0 }, { 0, 0, 0, 0 }};static const QtopiaPimMapEntry todolistentries_opie[] = { { "HasDate", NULL, PimTask::HasDate, 0 }, { "Summary", // No tr QT_TRANSLATE_NOOP("PimTask", "Description"), PimTask::Description, 50 }, { "Priority", QT_TRANSLATE_NOOP("PimTask", "Priority"), PimTask::Priority, 0 }, { "Completed", QT_TRANSLATE_NOOP("PimTask", "Completed"), PimTask::CompletedField, 0}, { "PercentCompleted", QT_TRANSLATE_NOOP("PimTask", "Percent Completed"), PimTask::PercentCompleted, 0}, { "DateYear", NULL, PimTask::DueDateYear, 0 }, { "DateMonth", NULL, PimTask::DueDateMonth, 0 }, { "DateDay", NULL, PimTask::DueDateDay, 0 }, { "Status", QT_TRANSLATE_NOOP("PimTask", "Status"), PimTask::Status, 0 }, { "StartedDate", QT_TRANSLATE_NOOP("PimTask", "Started Date"), PimTask::StartedDate, 50 }, { "CompletedDate", QT_TRANSLATE_NOOP("PimTask", "Completed Date"), PimTask::CompletedDate, 0 }, { "Description", QT_TRANSLATE_NOOP("PimTask", "Notes"), PimTask::Notes, 0 }, { 0, 0, 0, 0 }};void PimTask::initMaps(){ PimTask::initMaps( FALSE );}void PimTask::initMaps( bool isOpieDevice ){ delete keyToIdentifierMapPtr; keyToIdentifierMapPtr = new QMap<int, QCString>; delete identifierToKeyMapPtr; identifierToKeyMapPtr = new QMap<QCString, int>; delete trFieldsMapPtr; trFieldsMapPtr = new QMap<int,QString>; delete uniquenessMapPtr; uniquenessMapPtr = new QMap<int, int>; PimRecord::initMaps("PimTask", (isOpieDevice?todolistentries_opie:todolistentries), *uniquenessMapPtr, *identifierToKeyMapPtr, *keyToIdentifierMapPtr, *trFieldsMapPtr );}/*! \internal*/const QMap<int, QCString> &PimTask::keyToIdentifierMap(){ if ( !keyToIdentifierMapPtr ) initMaps(); return *keyToIdentifierMapPtr;}/*! \internal*/const QMap<QCString,int> &PimTask::identifierToKeyMap(){ if ( !identifierToKeyMapPtr ) initMaps(); return *identifierToKeyMapPtr;}/*! \internal*/const QMap<int, QString> & PimTask::trFieldsMap(){ if ( !trFieldsMapPtr ) initMaps(); return *trFieldsMapPtr;}/*! \internal*/const QMap<int,int> & PimTask::uniquenessMap(){ if ( !uniquenessMapPtr ) initMaps(); return *uniquenessMapPtr;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -