File indexing completed on 2025-01-26 04:49:10

0001 /*
0002     SPDX-FileCopyrightText: 2007 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "attendeeselector.h"
0008 
0009 #include <KEmailAddress>
0010 #include <PimCommonAkonadi/AddresseeLineEdit>
0011 
0012 #include <KGuiItem>
0013 #include <KLocalizedString>
0014 #include <KStandardGuiItem>
0015 #include <QDialogButtonBox>
0016 #include <QVBoxLayout>
0017 
0018 AttendeeSelector::AttendeeSelector(QWidget *parent)
0019     : QDialog(parent)
0020 {
0021     setWindowTitle(i18nc("@title:window", "Select Attendees"));
0022     auto mainLayout = new QVBoxLayout(this);
0023     auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
0024     auto mainWidget = new QWidget(this);
0025     mainLayout->addWidget(mainWidget);
0026     mOkButton = buttonBox->button(QDialogButtonBox::Ok);
0027     mOkButton->setDefault(true);
0028     mOkButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0029     connect(buttonBox, &QDialogButtonBox::accepted, this, &AttendeeSelector::accept);
0030     connect(buttonBox, &QDialogButtonBox::rejected, this, &AttendeeSelector::reject);
0031     mainLayout->addWidget(buttonBox);
0032 
0033     ui.setupUi(mainWidget);
0034 
0035     KGuiItem::assign(ui.addButton, KStandardGuiItem::add());
0036     connect(ui.addButton, &QPushButton::clicked, this, &AttendeeSelector::addClicked);
0037     KGuiItem::assign(ui.removeButton, KStandardGuiItem::remove());
0038     connect(ui.removeButton, &QPushButton::clicked, this, &AttendeeSelector::removeClicked);
0039 
0040     ui.attendeeEdit->setPlaceholderText(i18n("Click to add a new attendee"));
0041     connect(ui.attendeeEdit, &PimCommon::AddresseeLineEdit::textChanged, this, &AttendeeSelector::textChanged);
0042     connect(ui.attendeeEdit, &PimCommon::AddresseeLineEdit::returnPressed, this, &AttendeeSelector::addClicked);
0043 
0044     connect(ui.attendeeList, &QListWidget::itemSelectionChanged, this, &AttendeeSelector::selectionChanged);
0045     mOkButton->setEnabled(false);
0046 }
0047 
0048 QStringList AttendeeSelector::attendees() const
0049 {
0050     QStringList rv;
0051     const int numberOfAttendee(ui.attendeeList->count());
0052     rv.reserve(numberOfAttendee);
0053     for (int i = 0; i < numberOfAttendee; ++i) {
0054         const QString addr = ui.attendeeList->item(i)->text();
0055 
0056         // Build a nice address for this attendee including the CN.
0057         QString tname;
0058         QString temail;
0059         KEmailAddress::extractEmailAddressAndName(addr, temail, tname); // ignore return value
0060         // which is always false
0061         rv << temail;
0062     }
0063     return rv;
0064 }
0065 
0066 void AttendeeSelector::addClicked()
0067 {
0068     const QString str = ui.attendeeEdit->text();
0069     if (!str.isEmpty()) {
0070         ui.attendeeList->addItem(str);
0071     }
0072     ui.attendeeEdit->clear();
0073     mOkButton->setEnabled(true);
0074 }
0075 
0076 void AttendeeSelector::removeClicked()
0077 {
0078     delete ui.attendeeList->takeItem(ui.attendeeList->currentRow());
0079     mOkButton->setEnabled((ui.attendeeList->count() > 0));
0080 }
0081 
0082 void AttendeeSelector::textChanged(const QString &text)
0083 {
0084     ui.addButton->setEnabled(!text.isEmpty());
0085 }
0086 
0087 void AttendeeSelector::selectionChanged()
0088 {
0089     ui.removeButton->setEnabled(ui.attendeeList->currentItem());
0090 }
0091 
0092 #include "moc_attendeeselector.cpp"