File indexing completed on 2024-04-28 05:11:35
0001 /* 0002 SPDX-FileCopyrightText: 2010 Bertjan Broeksema <broeksema@kde.org> 0003 SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "incidencedialogfactory.h" 0009 #include "incidencedefaults.h" 0010 #include "incidencedialog.h" 0011 0012 #include <Akonadi/IncidenceChanger> 0013 #include <Akonadi/Item> 0014 #include <KCalendarCore/Event> 0015 #include <KCalendarCore/Todo> 0016 0017 using namespace IncidenceEditorNG; 0018 using namespace KCalendarCore; 0019 0020 IncidenceDialog *IncidenceDialogFactory::create(bool needsSaving, 0021 KCalendarCore::IncidenceBase::IncidenceType type, 0022 Akonadi::IncidenceChanger *changer, 0023 QWidget *parent, 0024 Qt::WindowFlags flags) 0025 { 0026 switch (type) { 0027 case KCalendarCore::IncidenceBase::TypeEvent: // Fall through 0028 case KCalendarCore::IncidenceBase::TypeTodo: 0029 case KCalendarCore::IncidenceBase::TypeJournal: { 0030 auto dialog = new IncidenceDialog(changer, parent, flags); 0031 0032 // needs to be save to akonadi?, apply button should be turned on if so. 0033 dialog->setInitiallyDirty(needsSaving /* mInitiallyDirty */); 0034 0035 return dialog; 0036 } 0037 default: 0038 return nullptr; 0039 } 0040 } 0041 0042 IncidenceDialog *IncidenceDialogFactory::createTodoEditor(const QString &summary, 0043 const QString &description, 0044 const QStringList &attachments, 0045 const QStringList &attendees, 0046 const QStringList &attachmentMimetypes, 0047 const QStringList &attachmentLabels, 0048 bool inlineAttachment, 0049 const Akonadi::Collection &defaultCollection, 0050 bool cleanupAttachmentTempFiles, 0051 QWidget *parent, 0052 Qt::WindowFlags flags) 0053 { 0054 IncidenceDefaults defaults = IncidenceDefaults::minimalIncidenceDefaults(cleanupAttachmentTempFiles); 0055 0056 // if attach or attendee list is empty, these methods don't do anything, so 0057 // it's safe to call them in every case 0058 defaults.setAttachments(attachments, attachmentMimetypes, attachmentLabels, inlineAttachment); 0059 defaults.setAttendees(attendees); 0060 0061 Todo::Ptr todo(new Todo); 0062 defaults.setDefaults(todo); 0063 0064 todo->setSummary(summary); 0065 todo->setDescription(description); 0066 0067 Akonadi::Item item; 0068 item.setPayload(todo); 0069 0070 IncidenceDialog *dialog = create(true, /* no need for, we're not editing an existing to-do */ 0071 KCalendarCore::Incidence::TypeTodo, 0072 nullptr, 0073 parent, 0074 flags); 0075 dialog->selectCollection(defaultCollection); 0076 dialog->load(item); 0077 dialog->setInitiallyDirty(true); 0078 return dialog; 0079 } 0080 0081 IncidenceDialog *IncidenceDialogFactory::createEventEditor(const QString &summary, 0082 const QString &description, 0083 const QStringList &attachments, 0084 const QStringList &attendees, 0085 const QStringList &attachmentMimetypes, 0086 const QStringList &attachmentLabels, 0087 bool inlineAttachment, 0088 const Akonadi::Collection &defaultCollection, 0089 bool cleanupAttachmentTempFiles, 0090 QWidget *parent, 0091 Qt::WindowFlags flags) 0092 { 0093 IncidenceDefaults defaults = IncidenceDefaults::minimalIncidenceDefaults(cleanupAttachmentTempFiles); 0094 0095 // if attach or attendee list is empty, these methods don't do anything, so 0096 // it's safe to call them in every case 0097 defaults.setAttachments(attachments, attachmentMimetypes, attachmentLabels, inlineAttachment); 0098 defaults.setAttendees(attendees); 0099 0100 Event::Ptr event(new Event); 0101 defaults.setDefaults(event); 0102 0103 event->setSummary(summary); 0104 event->setDescription(description); 0105 0106 Akonadi::Item item; 0107 item.setPayload(event); 0108 0109 IncidenceDialog *dialog = create(false, // not needed for saving, as we're not editing an existing incidence 0110 KCalendarCore::Incidence::TypeEvent, 0111 nullptr, 0112 parent, 0113 flags); 0114 0115 dialog->selectCollection(defaultCollection); 0116 dialog->load(item); 0117 dialog->setInitiallyDirty(true); 0118 0119 return dialog; 0120 }