1 /*
2 SPDX-FileCopyrightText: 2010 Casey Link <unnamedrambler@gmail.com>
3 SPDX-FileCopyrightText: 2009-2010 Klaralvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7
8 #include "attendeeeditor.h"
9
10 #include "incidenceeditor_debug.h"
11
12 using namespace IncidenceEditorNG;
13
AttendeeEditor(QWidget * parent)14 AttendeeEditor::AttendeeEditor(QWidget *parent)
15 : MultiplyingLineEditor(new AttendeeLineFactory(parent), parent)
16 {
17 connect(this, &AttendeeEditor::lineAdded, this, &AttendeeEditor::slotLineAdded);
18
19 addData();
20 }
21
slotLineAdded(KPIM::MultiplyingLine * line)22 void AttendeeEditor::slotLineAdded(KPIM::MultiplyingLine *line)
23 {
24 auto att = qobject_cast<AttendeeLine *>(line);
25 if (!att) {
26 return;
27 }
28
29 connect(att, qOverload<>(&AttendeeLine::changed), this, &AttendeeEditor::slotCalculateTotal);
30 connect(att, qOverload<const KCalendarCore::Attendee &, const KCalendarCore::Attendee &>(&AttendeeLine::changed), this, &AttendeeEditor::changed);
31 connect(att, &AttendeeLine::editingFinished, this, &AttendeeEditor::editingFinished);
32 }
33
slotCalculateTotal()34 void AttendeeEditor::slotCalculateTotal()
35 {
36 int empty = 0;
37 int count = 0;
38
39 const QList<KPIM::MultiplyingLine *> listLines = lines();
40 for (KPIM::MultiplyingLine *line : listLines) {
41 auto att = qobject_cast<AttendeeLine *>(line);
42 if (att) {
43 if (att->isEmpty()) {
44 ++empty;
45 } else {
46 ++count;
47 }
48 }
49 }
50 Q_EMIT countChanged(count);
51 // We always want at least one empty line
52 if (empty == 0) {
53 addData();
54 }
55 }
56
attendees() const57 AttendeeData::List AttendeeEditor::attendees() const
58 {
59 const QVector<KPIM::MultiplyingLineData::Ptr> dataList = allData();
60 AttendeeData::List attList; // clazy:exclude=inefficient-qlist
61 // qCDebug(INCIDENCEEDITOR_LOG) << "num attendees:" << dataList.size();
62 for (const KPIM::MultiplyingLineData::Ptr &datum : dataList) {
63 AttendeeData::Ptr att = qSharedPointerDynamicCast<AttendeeData>(datum);
64 if (!att) {
65 continue;
66 }
67 attList << att;
68 }
69 return attList;
70 }
71
addAttendee(const KCalendarCore::Attendee & attendee)72 void AttendeeEditor::addAttendee(const KCalendarCore::Attendee &attendee)
73 {
74 addData(AttendeeData::Ptr(new AttendeeData(attendee)));
75 }
76
removeAttendee(const AttendeeData::Ptr & attendee)77 void AttendeeEditor::removeAttendee(const AttendeeData::Ptr &attendee)
78 {
79 removeData(attendee);
80 }
81
setActions(AttendeeLine::AttendeeActions actions)82 void AttendeeEditor::setActions(AttendeeLine::AttendeeActions actions)
83 {
84 const QList<KPIM::MultiplyingLine *> listLines = lines();
85 for (KPIM::MultiplyingLine *line : listLines) {
86 auto att = qobject_cast<AttendeeLine *>(line);
87 att->setActions(actions);
88 }
89 }
90