File indexing completed on 2024-06-23 05:18:37
0001 /* 0002 SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "sendlaterdialog.h" 0008 #include "sendlaterinfo.h" 0009 #include "sendlatertimedatewidget_p.h" 0010 #include "ui_sendlaterwidget.h" 0011 0012 #include <KLocalizedString> 0013 #include <KSeparator> 0014 #include <QIcon> 0015 0016 #include <QCheckBox> 0017 #include <QDialogButtonBox> 0018 #include <QPushButton> 0019 #include <QVBoxLayout> 0020 0021 using namespace MessageComposer; 0022 0023 SendLaterDialog::SendLaterDialog(SendLaterInfo *info, QWidget *parent) 0024 : QDialog(parent) 0025 , mSendLaterWidget(new Ui::SendLaterWidget) 0026 , mInfo(info) 0027 { 0028 setWindowTitle(i18nc("@title:window", "Send Later")); 0029 setWindowIcon(QIcon::fromTheme(QStringLiteral("kmail"))); 0030 0031 auto mainLayout = new QVBoxLayout(this); 0032 0033 auto sendLaterWidget = new QWidget(this); 0034 mSendLaterWidget->setupUi(sendLaterWidget); 0035 0036 auto w = new QWidget(this); 0037 auto lay = new QVBoxLayout(w); 0038 lay->setContentsMargins({}); 0039 0040 auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); 0041 mOkButton = buttonBox->button(QDialogButtonBox::Ok); 0042 mOkButton->setObjectName(QLatin1StringView("okbutton")); 0043 mOkButton->setDefault(true); 0044 mOkButton->setShortcut(Qt::CTRL | Qt::Key_Return); 0045 connect(buttonBox, &QDialogButtonBox::rejected, this, &SendLaterDialog::reject); 0046 0047 if (!info) { 0048 mOkButton->setText(i18n("Send Later")); 0049 mDelay = new QCheckBox(i18n("Delay")); 0050 mDelay->setChecked(false); 0051 slotDelay(false); 0052 connect(mDelay, &QCheckBox::clicked, this, &SendLaterDialog::slotDelay); 0053 lay->addWidget(mDelay); 0054 } 0055 0056 connect(mOkButton, &QPushButton::clicked, this, &SendLaterDialog::slotOkClicked); 0057 0058 lay->addWidget(sendLaterWidget); 0059 0060 QDateTime t = QDateTime::currentDateTime(); 0061 t = t.addSecs(60 * 60); 0062 0063 mSendLaterWidget->mDateTime->setDateTime(t); 0064 connect(mSendLaterWidget->mRecurrence, &QCheckBox::clicked, this, &SendLaterDialog::slotRecurrenceClicked); 0065 const QStringList unitsList = {i18n("Days"), i18n("Weeks"), i18n("Months"), i18n("Years")}; 0066 mSendLaterWidget->mRecurrenceComboBox->addItems(unitsList); 0067 connect(mSendLaterWidget->mDateTime, &SendLaterTimeDateWidget::dateChanged, this, &SendLaterDialog::slotDateChanged); 0068 0069 lay->addWidget(new KSeparator); 0070 0071 mainLayout->addWidget(w); 0072 mainLayout->addWidget(buttonBox); 0073 slotRecurrenceClicked(false); 0074 if (info) { 0075 load(info); 0076 } 0077 resize(180, 120); 0078 } 0079 0080 SendLaterDialog::~SendLaterDialog() 0081 { 0082 delete mSendLaterWidget; 0083 } 0084 0085 void SendLaterDialog::slotDateChanged(const QString &date) 0086 { 0087 mOkButton->setEnabled(!date.isEmpty()); 0088 } 0089 0090 void SendLaterDialog::slotRecurrenceClicked(bool clicked) 0091 { 0092 mSendLaterWidget->mRecurrenceValue->setEnabled(clicked); 0093 mSendLaterWidget->mRecurrenceComboBox->setEnabled(clicked); 0094 } 0095 0096 void SendLaterDialog::load(SendLaterInfo *info) 0097 { 0098 mSendLaterWidget->mDateTime->setDateTime(info->dateTime()); 0099 const bool recurrence = info->isRecurrence(); 0100 mSendLaterWidget->mRecurrence->setChecked(recurrence); 0101 slotRecurrenceClicked(recurrence); 0102 mSendLaterWidget->mRecurrenceValue->setValue(info->recurrenceEachValue()); 0103 mSendLaterWidget->mRecurrenceComboBox->setCurrentIndex(static_cast<int>(info->recurrenceUnit())); 0104 } 0105 0106 SendLaterInfo *SendLaterDialog::info() 0107 { 0108 if (!mInfo) { 0109 mInfo = new SendLaterInfo(); 0110 } 0111 mInfo->setRecurrence(mSendLaterWidget->mRecurrence->isChecked()); 0112 mInfo->setRecurrenceEachValue(mSendLaterWidget->mRecurrenceValue->value()); 0113 mInfo->setRecurrenceUnit(static_cast<SendLaterInfo::RecurrenceUnit>(mSendLaterWidget->mRecurrenceComboBox->currentIndex())); 0114 if (mSendDateTime.isValid()) { 0115 mInfo->setDateTime(mSendDateTime); 0116 } else { 0117 mInfo->setDateTime(mSendLaterWidget->mDateTime->dateTime()); 0118 } 0119 return mInfo; 0120 } 0121 0122 SendLaterDialog::SendLaterAction SendLaterDialog::action() const 0123 { 0124 return mAction; 0125 } 0126 0127 void SendLaterDialog::slotOkClicked() 0128 { 0129 if (!mDelay || mDelay->isChecked()) { 0130 mSendDateTime = mSendLaterWidget->mDateTime->dateTime(); 0131 mAction = SendDeliveryAtTime; 0132 } else { 0133 mAction = PutInOutbox; 0134 } 0135 accept(); 0136 } 0137 0138 void SendLaterDialog::slotDelay(bool delayEnabled) 0139 { 0140 mSendLaterWidget->mLabel->setEnabled(delayEnabled); 0141 mSendLaterWidget->mDateTime->setEnabled(delayEnabled); 0142 mSendLaterWidget->mRecurrence->setEnabled(delayEnabled); 0143 mSendLaterWidget->mRecurrenceValue->setEnabled(delayEnabled && mSendLaterWidget->mRecurrence->isChecked()); 0144 mSendLaterWidget->mRecurrenceComboBox->setEnabled(delayEnabled && mSendLaterWidget->mRecurrence->isChecked()); 0145 } 0146 0147 #include "moc_sendlaterdialog.cpp"