42 #include <KIconLoader>
45 #include <QtCore/QMimeData>
46 #include <QtGui/QApplication>
47 #include <QtGui/QClipboard>
48 #include <QtGui/QDrag>
49 #include <QtGui/QDropEvent>
50 #include <QtGui/QPixmap>
52 using namespace KCalCore;
53 using namespace KCalUtils;
60 class KCalUtils::DndFactory::Private
64 : mCalendar ( calendar )
68 const KDateTime &newDateTime,
69 const QFlags<PasteFlag> &pasteOptions )
79 if ( inc && newDateTime.isValid() ) {
85 const int durationInSeconds =
event->
dtStart().secsTo( event->dtEnd() );
86 const int durationInDays =
event->dtStart().daysTo( event->dtEnd() );
88 event->setDtStart( newDateTime );
90 if ( newDateTime.isDateOnly() ) {
91 event->setDtEnd( newDateTime.addDays( durationInDays ) );
93 event->setDtEnd( newDateTime.addSecs( durationInSeconds ) );
99 if ( pasteOptions & FlagTodosPasteAtDtStart ) {
102 aTodo->setDtDue( newDateTime );
106 inc->setDtStart( newDateTime );
108 kDebug() <<
"Trying to paste unknown incidence of type" << int( inc->type() );
120 : d( new KCalUtils::
DndFactory::Private ( calendar ) )
124 DndFactory::~DndFactory()
131 QMimeData *mimeData =
new QMimeData;
141 QDrag *drag =
new QDrag( owner );
151 cal->addIncidence( i );
153 QMimeData *mimeData =
new QMimeData;
159 if ( uri.isValid() ) {
160 QMap<QString, QString> metadata;
161 metadata[
"labels"] = KUrl::toPercentEncoding( i->summary() );
162 uri.populateMimeData( mimeData, metadata );
170 QDrag *drag =
new QDrag( owner );
172 drag->setPixmap( BarIcon( incidence->iconName() ) );
183 const KDateTime::Spec &timeSpec )
213 if ( !events.isEmpty() ) {
239 if ( !todos.isEmpty() ) {
261 list.append( selectedIncidence );
268 Incidence::List::ConstIterator it;
269 for ( it = incidences.constBegin(); it != incidences.constEnd(); ++it ) {
270 d->mCalendar->deleteIncidence( *it );
280 QClipboard *clipboard = QApplication::clipboard();
281 Q_ASSERT( clipboard );
284 Incidence::List::ConstIterator it;
285 for ( it = incidences.constBegin(); it != incidences.constEnd(); ++it ) {
291 QMimeData *mimeData =
new QMimeData;
296 if ( calendar->incidences().isEmpty() ) {
299 clipboard->setMimeData( mimeData );
307 list.append( selectedInc );
312 const QFlags<PasteFlag> &pasteOptions )
314 QClipboard *clipboard = QApplication::clipboard();
315 Q_ASSERT( clipboard );
320 kDebug() <<
"Can't parse clipboard";
326 QHash<QString, Incidence::Ptr> oldUidToNewInc;
328 Incidence::List::ConstIterator it;
330 for ( it = incidences.constBegin();
331 it != incidences.constEnd(); ++it ) {
332 Incidence::Ptr incidence = d->pasteIncidence( *it, newDateTime, pasteOptions );
334 list.append( incidence );
335 oldUidToNewInc[(*it)->uid()] = *it;
340 for ( it = list.constBegin(); it != list.constEnd(); ++it ) {
342 if ( oldUidToNewInc.contains( incidence->relatedTo() ) ) {
343 Incidence::Ptr parentInc = oldUidToNewInc[incidence->relatedTo()];
344 incidence->setRelatedTo( parentInc->uid() );
347 incidence->setRelatedTo( QString() );
355 const QFlags<PasteFlag> &pasteOptions )
357 QClipboard *clipboard = QApplication::clipboard();
361 kDebug() <<
"Can't parse clipboard";
368 return d->pasteIncidence( incidence, newDateTime, pasteOptions );