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"