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