KCalUtils

dndfactory.h
Go to the documentation of this file.
1 /*
2  This file is part of the kcalutils library.
3 
4  SPDX-FileCopyrightText: 1998 Preston Brown <[email protected]>
5  SPDX-FileCopyrightText: 2001, 2002, 2003 Cornelius Schumacher <[email protected]>
6  SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <[email protected]>
7  SPDX-FileCopyrightText: 2008 Thomas Thrainer <[email protected]>
8 
9  SPDX-License-Identifier: LGPL-2.0-or-later
10 */
11 /**
12  @file
13  This file is part of the API for handling calendar data and
14  defines the DndFactory class.
15 
16  @author Preston Brown <[email protected]>
17  @author Cornelius Schumacher <[email protected]>
18  @author Reinhold Kainhofer <[email protected]>
19 */
20 #pragma once
21 
22 #include "kcalutils_export.h"
23 
24 #include <KCalendarCore/Calendar>
25 #include <KCalendarCore/Event>
26 #include <KCalendarCore/Todo>
27 
28 #include <QDateTime>
29 
30 #include <memory>
31 
32 class QDrag;
33 class QDropEvent;
34 class QMimeData;
35 
36 namespace KCalUtils
37 {
38 class DndFactoryPrivate;
39 /**
40  @brief
41  vCalendar/iCalendar Drag-and-Drop object factory.
42 
43  This class implements functions to create Drag and Drop objects used for
44  Drag-and-Drop and Copy-and-Paste.
45 */
46 class KCALUTILS_EXPORT DndFactory
47 {
48 public:
49  enum PasteFlag {
50  FlagTodosPasteAtDtStart = 1, /**< If the cloned incidence is a to-do, the date/time passed
51  to DndFactory::pasteIncidence() will change dtStart if this
52  flag is on, changes dtDue otherwise. */
53  FlagPasteAtOriginalTime = 2 /**< If set, incidences will be pasted at the specified date
54  but will preserve their original time */
55  };
56 
57  Q_DECLARE_FLAGS(PasteFlags, PasteFlag)
58 
59  explicit DndFactory(const KCalendarCore::Calendar::Ptr &cal);
60 
61  ~DndFactory();
62 
63  /**
64  Create the calendar that is contained in the drop event's data.
65  */
66  KCalendarCore::Calendar::Ptr createDropCalendar(QDropEvent *de);
67 
68  /**
69  Create the calendar that is contained in the mime data.
70  */
71  static KCalendarCore::Calendar::Ptr createDropCalendar(const QMimeData *md);
72 
73  /**
74  Create the mime data for the whole calendar.
75  */
76  QMimeData *createMimeData();
77 
78  /**
79  Create a drag object for the whole calendar.
80  */
81  QDrag *createDrag(QObject *owner);
82 
83  /**
84  Create the mime data for a single incidence.
85  */
86  QMimeData *createMimeData(const KCalendarCore::Incidence::Ptr &incidence);
87 
88  /**
89  Create a drag object for a single incidence.
90  */
91  QDrag *createDrag(const KCalendarCore::Incidence::Ptr &incidence, QObject *owner);
92 
93  /**
94  Create Todo object from mime data.
95  */
96  KCalendarCore::Todo::Ptr createDropTodo(const QMimeData *md);
97 
98  /**
99  Create Todo object from drop event.
100  */
101  KCalendarCore::Todo::Ptr createDropTodo(QDropEvent *de);
102 
103  /**
104  Create Event object from mime data.
105  */
106  KCalendarCore::Event::Ptr createDropEvent(const QMimeData *md);
107 
108  /**
109  Create Event object from drop event.
110  */
111  KCalendarCore::Event::Ptr createDropEvent(QDropEvent *de);
112 
113  /**
114  Cut the incidence to the clipboard.
115  */
116  void cutIncidence(const KCalendarCore::Incidence::Ptr &);
117 
118  /**
119  Copy the incidence to clipboard/
120  */
121  bool copyIncidence(const KCalendarCore::Incidence::Ptr &);
122 
123  /**
124  Cuts a list of @p incidences to the clipboard.
125  */
126  bool cutIncidences(const KCalendarCore::Incidence::List &incidences);
127 
128  /**
129  Copies a list of @p incidences to the clipboard.
130  */
131  bool copyIncidences(const KCalendarCore::Incidence::List &incidences);
132 
133  /**
134  This function clones the incidences that are in the clipboard and sets the clone's
135  date/time to the specified @p newDateTime.
136 
137  @see pasteIncidence()
138  */
139  KCalendarCore::Incidence::List pasteIncidences(const QDateTime &newDateTime = QDateTime(), PasteFlags pasteOptions = PasteFlags());
140 
141  /**
142  This function clones the incidence that's in the clipboard and sets the clone's
143  date/time to the specified @p newDateTime.
144 
145  @param newDateTime The new date/time that the incidence will have. If it's an event
146  or journal, DTSTART will be set. If it's a to-do, DTDUE is set.
147  If you wish another behaviour, like changing DTSTART on to-dos, specify
148  @p pasteOptions. If newDateTime is invalid the original incidence's dateTime
149  will be used, regardless of @p pasteOptions.
150 
151  @param pasteOptions Control how @p newDateTime changes the incidence's dates. @see PasteFlag.
152 
153  @return A pointer to the cloned incidence.
154  */
155  KCalendarCore::Incidence::Ptr pasteIncidence(const QDateTime &newDateTime = QDateTime(), PasteFlags pasteOptions = PasteFlags());
156 
157 private:
158  //@cond PRIVATE
159  Q_DISABLE_COPY(DndFactory)
160  std::unique_ptr<DndFactoryPrivate> const d;
161  //@endcond
162 };
163 }
vCalendar/iCalendar Drag-and-Drop object factory.
Definition: dndfactory.h:46
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Tue Feb 7 2023 04:10:54 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.