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 }