File indexing completed on 2024-04-28 05:11:36

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Sandro Knauß <knauss@kolabsys.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0005  */
0006 
0007 #include "individualmaildialog.h"
0008 
0009 #include <KGuiItem>
0010 #include <KLocalizedString>
0011 
0012 #include <QComboBox>
0013 #include <QDialogButtonBox>
0014 #include <QGridLayout>
0015 #include <QLabel>
0016 #include <QPushButton>
0017 
0018 using namespace IncidenceEditorNG;
0019 
0020 IndividualMailDialog::IndividualMailDialog(const QString &question,
0021                                            const KCalendarCore::Attendee::List &attendees,
0022                                            const KGuiItem &buttonYes,
0023                                            const KGuiItem &buttonNo,
0024                                            QWidget *parent)
0025     : QDialog(parent)
0026 {
0027     setWindowTitle(i18nc("@title:window", "Group Scheduling Email"));
0028     m_detailsWidget = new QWidget();
0029     auto layout = new QGridLayout(m_detailsWidget);
0030     mAttendeeDecision.reserve(attendees.size());
0031     int row = 0;
0032     for (const KCalendarCore::Attendee &attendee : attendees) {
0033         auto options = new QComboBox();
0034         options->addItem(i18nc("@item:inlistbox ITIP Messages for one attendee", "Send update"), QVariant(Update));
0035         options->addItem(i18nc("@item:inlistbox ITIP Messages for one attendee", "Send no update"), QVariant(NoUpdate));
0036         options->addItem(i18nc("@item:inlistbox ITIP Messages for one attendee", "Edit mail"), QVariant(Edit));
0037         options->setWhatsThis(i18nc("@info:whatsthis", "Options for this particular attendee."));
0038         options->setToolTip(i18nc("@info:tooltip", "Choose an option for this attendee."));
0039         mAttendeeDecision.emplace_back(attendee, options);
0040 
0041         layout->addWidget(new QLabel(attendee.fullName()), row, 0);
0042         layout->addWidget(options, row, 1);
0043         ++row;
0044     }
0045     QSizePolicy sizePolicy = m_detailsWidget->sizePolicy();
0046     sizePolicy.setHorizontalStretch(1);
0047     sizePolicy.setVerticalStretch(1);
0048     m_detailsWidget->setSizePolicy(sizePolicy);
0049 
0050     QWidget *mW = new QLabel(question);
0051 
0052     auto topLayout = new QVBoxLayout(this);
0053     topLayout->addWidget(mW);
0054     topLayout->addWidget(m_detailsWidget);
0055 
0056     m_buttons = new QDialogButtonBox(this);
0057     m_buttons->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No | QDialogButtonBox::Help);
0058     auto yesButton = m_buttons->button(QDialogButtonBox::Yes);
0059     yesButton->setText(buttonYes.text());
0060     connect(yesButton, &QPushButton::clicked, this, [this]() {
0061         done(QDialogButtonBox::Yes);
0062     });
0063     auto noButton = m_buttons->button(QDialogButtonBox::No);
0064     noButton->setText(buttonNo.text());
0065     connect(noButton, &QPushButton::clicked, this, [this]() {
0066         done(QDialogButtonBox::No);
0067     });
0068     auto detailsButton = m_buttons->button(QDialogButtonBox::Help);
0069     detailsButton->setIcon(QIcon::fromTheme(QStringLiteral("help-about")));
0070     connect(detailsButton, &QPushButton::clicked, this, [this]() {
0071         m_detailsWidget->setVisible(!m_detailsWidget->isVisible());
0072         updateButtonState();
0073         adjustSize();
0074     });
0075     m_detailsWidget->setVisible(false);
0076     updateButtonState();
0077 
0078     topLayout->addWidget(m_buttons);
0079 }
0080 
0081 IndividualMailDialog::~IndividualMailDialog() = default;
0082 
0083 KCalendarCore::Attendee::List IndividualMailDialog::editAttendees() const
0084 {
0085     KCalendarCore::Attendee::List edit;
0086     for (auto it = mAttendeeDecision.cbegin(), end = mAttendeeDecision.cend(); it != end; ++it) {
0087         const int index = (*it).second->currentIndex();
0088         if ((*it).second->itemData(index, Qt::UserRole) == Edit) {
0089             edit.append((*it).first);
0090         }
0091     }
0092     return edit;
0093 }
0094 
0095 KCalendarCore::Attendee::List IndividualMailDialog::updateAttendees() const
0096 {
0097     KCalendarCore::Attendee::List update;
0098     for (auto it = mAttendeeDecision.cbegin(), end = mAttendeeDecision.cend(); it != end; ++it) {
0099         const int index = (*it).second->currentIndex();
0100         if ((*it).second->itemData(index, Qt::UserRole) == Update) {
0101             update.append((*it).first);
0102         }
0103     }
0104     return update;
0105 }
0106 
0107 void IndividualMailDialog::updateButtonState()
0108 {
0109     auto detailsButton = m_buttons->button(QDialogButtonBox::Help);
0110     if (m_detailsWidget->isVisible()) {
0111         detailsButton->setText(i18nc("@action:button show list of attendees", "Individual mailsettings <<"));
0112     } else {
0113         detailsButton->setText(i18nc("@action:button show list of attendees", "Individual mailsettings >>"));
0114     }
0115 }
0116 
0117 #include "moc_individualmaildialog.cpp"