void DndFactoryTest::testPasteTodo() { MemoryCalendar::Ptr calendar( new MemoryCalendar( QString() ) ); DndFactory factory( calendar ); Todo::Ptr todo( new Todo() ); todo->setSummary( QLatin1String( "Summary 1" ) ); todo->setDtDue( KDateTime( QDate( 2010, 8, 9 ) ) ); Incidence::List incidencesToPaste; incidencesToPaste.append( todo ); QVERIFY( factory.copyIncidences( incidencesToPaste ) ); const KDateTime newDateTime( QDate( 2011, 1, 1 ), QTime( 10, 10 ) ); Incidence::List pastedIncidences = factory.pasteIncidences( newDateTime ); QVERIFY( pastedIncidences.size() == 1 ); Incidence::Ptr incidence = pastedIncidences.first(); QVERIFY( incidence->type() == Incidence::TypeTodo ); // check if a new uid was generated. QVERIFY( incidence->uid() != todo->uid() ); Todo::Ptr pastedTodo = incidence.staticCast<Todo>(); QVERIFY( pastedTodo->dtDue() == newDateTime ); QVERIFY( pastedTodo->summary() == todo->summary() ); }
Incidence::Ptr pasteIncidence( const Incidence::Ptr &incidence, KDateTime newDateTime, const QFlags<PasteFlag> &pasteOptions ) { Incidence::Ptr inc( incidence ); if ( inc ) { inc = Incidence::Ptr( inc->clone() ); inc->recreate(); } if ( inc && newDateTime.isValid() ) { if ( inc->type() == Incidence::TypeEvent ) { Event::Ptr event = inc.staticCast<Event>(); if ( pasteOptions & FlagPasteAtOriginalTime ) { // Set date and preserve time and timezone stuff const QDate date = newDateTime.date(); newDateTime = event->dtStart(); newDateTime.setDate( date ); } // in seconds const int durationInSeconds = event->dtStart().secsTo( event->dtEnd() ); const int durationInDays = event->dtStart().daysTo( event->dtEnd() ); event->setDtStart( newDateTime ); if ( newDateTime.isDateOnly() ) { event->setDtEnd( newDateTime.addDays( durationInDays ) ); } else { event->setDtEnd( newDateTime.addSecs( durationInSeconds ) ); } } else if ( inc->type() == Incidence::TypeTodo ) { Todo::Ptr aTodo = inc.staticCast<Todo>(); const bool pasteAtDtStart = ( pasteOptions & FlagTodosPasteAtDtStart ); if ( pasteOptions & FlagPasteAtOriginalTime ) { // Set date and preserve time and timezone stuff const QDate date = newDateTime.date(); newDateTime = pasteAtDtStart ? aTodo->dtStart() : aTodo->dtDue(); newDateTime.setDate( date ); } if ( pasteAtDtStart ) { aTodo->setDtStart( newDateTime ); } else { aTodo->setDtDue( newDateTime ); } } else if ( inc->type() == Incidence::TypeJournal ) { if ( pasteOptions & FlagPasteAtOriginalTime ) { // Set date and preserve time and timezone stuff const QDate date = newDateTime.date(); newDateTime = inc->dtStart(); newDateTime.setDate( date ); } inc->setDtStart( newDateTime ); } else { kDebug() << "Trying to paste unknown incidence of type" << int( inc->type() ); } } return inc; }
void HtmlExport::createTodo(QTextStream *ts, const Todo::Ptr &todo) { qCDebug(KCALUTILS_LOG); const bool completed = todo->isCompleted(); Incidence::List relations = d->mCalendar->relations(todo->uid()); *ts << "<tr>" << endl; *ts << " <td class=\"sum"; if (completed) { *ts << "done"; } *ts << "\">" << endl; *ts << " <a name=\"" << todo->uid() << "\"></a>" << endl; *ts << " <b>" << cleanChars(todo->summary()) << "</b>" << endl; if (!todo->description().isEmpty()) { *ts << " <p>" << breakString(cleanChars(todo->description())) << "</p>" << endl; } if (relations.count()) { *ts << " <div align=\"right\"><a href=\"#sub" << todo->uid() << "\">" << i18nc("@title:column sub-to-dos of the parent to-do", "Sub-To-dos") << "</a></div>" << endl; } *ts << " </td>" << endl; *ts << " <td"; if (completed) { *ts << " class=\"done\""; } *ts << ">" << endl; *ts << " " << todo->priority() << endl; *ts << " </td>" << endl; *ts << " <td"; if (completed) { *ts << " class=\"done\""; } *ts << ">" << endl; *ts << " " << i18nc("@info to-do percent complete", "%1 %", todo->percentComplete()) << endl; *ts << " </td>" << endl; if (d->mSettings->taskDueDate()) { *ts << " <td"; if (completed) { *ts << " class=\"done\""; } *ts << ">" << endl; if (todo->hasDueDate()) { *ts << " " << Stringify::formatDate(todo->dtDue(true)) << endl; } else { *ts << " " << endl; } *ts << " </td>" << endl; } if (d->mSettings->taskLocation()) { *ts << " <td"; if (completed) { *ts << " class=\"done\""; } *ts << ">" << endl; formatLocation(ts, todo); *ts << " </td>" << endl; } if (d->mSettings->taskCategories()) { *ts << " <td"; if (completed) { *ts << " class=\"done\""; } *ts << ">" << endl; formatCategories(ts, todo); *ts << " </td>" << endl; } if (d->mSettings->taskAttendees()) { *ts << " <td"; if (completed) { *ts << " class=\"done\""; } *ts << ">" << endl; formatAttendees(ts, todo); *ts << " </td>" << endl; } *ts << "</tr>" << endl; }