File indexing completed on 2025-03-09 04:54:44

0001 /*
0002     SPDX-License-Identifier: BSL-1.0
0003 */
0004 
0005 #include "invitationsettings.h"
0006 #include "settings/messageviewersettings.h"
0007 #include "ui_invitationsettings.h"
0008 #include <PimCommon/ConfigureImmutableWidgetUtils>
0009 using namespace PimCommon::ConfigureImmutableWidgetUtils;
0010 
0011 #include <KLocalizedString>
0012 #include <KMessageBox>
0013 
0014 using namespace MessageViewer;
0015 
0016 class MessageViewer::InvitationSettingsPrivate
0017 {
0018 public:
0019     InvitationSettingsPrivate()
0020         : mInvitationUi(new Ui_InvitationSettings)
0021     {
0022     }
0023 
0024     ~InvitationSettingsPrivate()
0025     {
0026         delete mInvitationUi;
0027     }
0028 
0029     Ui_InvitationSettings *const mInvitationUi;
0030 };
0031 
0032 InvitationSettings::InvitationSettings(QWidget *parent)
0033     : QWidget(parent)
0034     , d(new MessageViewer::InvitationSettingsPrivate)
0035 {
0036     d->mInvitationUi->setupUi(this);
0037 
0038     d->mInvitationUi->mDeleteInvitations->setText(
0039         i18n(MessageViewer::MessageViewerSettings::self()->deleteInvitationEmailsAfterSendingReplyItem()->label().toUtf8().constData()));
0040     d->mInvitationUi->mDeleteInvitations->setWhatsThis(
0041         i18n(MessageViewer::MessageViewerSettings::self()->deleteInvitationEmailsAfterSendingReplyItem()->whatsThis().toUtf8().constData()));
0042     connect(d->mInvitationUi->mDeleteInvitations, &QCheckBox::toggled, this, &InvitationSettings::changed);
0043 
0044     d->mInvitationUi->mLegacyMangleFromTo->setWhatsThis(
0045         i18n(MessageViewer::MessageViewerSettings::self()->legacyMangleFromToHeadersItem()->whatsThis().toUtf8().constData()));
0046     connect(d->mInvitationUi->mLegacyMangleFromTo, &QCheckBox::stateChanged, this, &InvitationSettings::changed);
0047 
0048     d->mInvitationUi->mLegacyBodyInvites->setWhatsThis(
0049         i18n(MessageViewer::MessageViewerSettings::self()->legacyBodyInvitesItem()->whatsThis().toUtf8().constData()));
0050     connect(d->mInvitationUi->mLegacyBodyInvites, &QCheckBox::toggled, this, &InvitationSettings::slotLegacyBodyInvitesToggled);
0051     connect(d->mInvitationUi->mLegacyBodyInvites, &QCheckBox::stateChanged, this, &InvitationSettings::changed);
0052 
0053     d->mInvitationUi->mExchangeCompatibleInvitations->setWhatsThis(
0054         i18n(MessageViewer::MessageViewerSettings::self()->exchangeCompatibleInvitationsItem()->whatsThis().toUtf8().constData()));
0055     connect(d->mInvitationUi->mExchangeCompatibleInvitations, &QCheckBox::stateChanged, this, &InvitationSettings::changed);
0056 
0057     // Laurent BUG:257723: in kmail2 it's not possible to not send automatically.
0058     d->mInvitationUi->mAutomaticSending->hide();
0059     d->mInvitationUi->mAutomaticSending->setWhatsThis(
0060         i18n(MessageViewer::MessageViewerSettings::self()->automaticSendingItem()->whatsThis().toUtf8().constData()));
0061     connect(d->mInvitationUi->mAutomaticSending, &QCheckBox::stateChanged, this, &InvitationSettings::changed);
0062 }
0063 
0064 InvitationSettings::~InvitationSettings() = default;
0065 
0066 void InvitationSettings::slotLegacyBodyInvitesToggled(bool on)
0067 {
0068     if (on) {
0069         const QString txt = i18n(
0070             "<qt>Invitations are normally sent as attachments to "
0071             "a mail. This switch changes the invitation mails to "
0072             "be sent in the text of the mail instead; this is "
0073             "necessary to send invitations and replies to "
0074             "Microsoft Outlook.<br />But, when you do this, you no "
0075             "longer get descriptive text that mail programs "
0076             "can read; so, to people who have email programs "
0077             "that do not understand the invitations, the "
0078             "resulting messages look very odd.<br />People that have email "
0079             "programs that do understand invitations will still "
0080             "be able to work with this.</qt>");
0081         KMessageBox::information(this, txt, QString(), QStringLiteral("LegacyBodyInvitesWarning"));
0082     }
0083     // Invitations in the body are autosent in any case (no point in editing raw ICAL)
0084     // So the autosend option is only available if invitations are sent as attachment.
0085     d->mInvitationUi->mAutomaticSending->setEnabled(!d->mInvitationUi->mLegacyBodyInvites->isChecked());
0086 }
0087 
0088 void InvitationSettings::doLoadFromGlobalSettings()
0089 {
0090     loadWidget(d->mInvitationUi->mLegacyMangleFromTo, MessageViewer::MessageViewerSettings::self()->legacyMangleFromToHeadersItem());
0091     d->mInvitationUi->mLegacyBodyInvites->blockSignals(true);
0092     loadWidget(d->mInvitationUi->mLegacyBodyInvites, MessageViewer::MessageViewerSettings::self()->legacyBodyInvitesItem());
0093     d->mInvitationUi->mLegacyBodyInvites->blockSignals(false);
0094     loadWidget(d->mInvitationUi->mExchangeCompatibleInvitations, MessageViewer::MessageViewerSettings::self()->exchangeCompatibleInvitationsItem());
0095     loadWidget(d->mInvitationUi->mAutomaticSending, MessageViewer::MessageViewerSettings::self()->automaticSendingItem());
0096     // TODO verify it
0097     d->mInvitationUi->mAutomaticSending->setEnabled(!d->mInvitationUi->mLegacyBodyInvites->isChecked());
0098     loadWidget(d->mInvitationUi->mDeleteInvitations, MessageViewer::MessageViewerSettings::self()->deleteInvitationEmailsAfterSendingReplyItem());
0099 }
0100 
0101 void InvitationSettings::save()
0102 {
0103     saveCheckBox(d->mInvitationUi->mLegacyMangleFromTo, MessageViewer::MessageViewerSettings::self()->legacyMangleFromToHeadersItem());
0104     saveCheckBox(d->mInvitationUi->mLegacyBodyInvites, MessageViewer::MessageViewerSettings::self()->legacyBodyInvitesItem());
0105     saveCheckBox(d->mInvitationUi->mExchangeCompatibleInvitations, MessageViewer::MessageViewerSettings::self()->exchangeCompatibleInvitationsItem());
0106     saveCheckBox(d->mInvitationUi->mAutomaticSending, MessageViewer::MessageViewerSettings::self()->automaticSendingItem());
0107     saveCheckBox(d->mInvitationUi->mDeleteInvitations, MessageViewer::MessageViewerSettings::self()->deleteInvitationEmailsAfterSendingReplyItem());
0108 }
0109 
0110 QString InvitationSettings::helpAnchor() const
0111 {
0112     return QStringLiteral("configure-misc-invites");
0113 }
0114 
0115 void InvitationSettings::doResetToDefaultsOther()
0116 {
0117     const bool bUseDefaults = MessageViewer::MessageViewerSettings::self()->useDefaults(true);
0118     loadWidget(d->mInvitationUi->mLegacyMangleFromTo, MessageViewer::MessageViewerSettings::self()->legacyMangleFromToHeadersItem());
0119     d->mInvitationUi->mLegacyBodyInvites->blockSignals(true);
0120     loadWidget(d->mInvitationUi->mLegacyBodyInvites, MessageViewer::MessageViewerSettings::self()->legacyBodyInvitesItem());
0121     d->mInvitationUi->mLegacyBodyInvites->blockSignals(false);
0122     loadWidget(d->mInvitationUi->mExchangeCompatibleInvitations, MessageViewer::MessageViewerSettings::self()->exchangeCompatibleInvitationsItem());
0123     loadWidget(d->mInvitationUi->mAutomaticSending, MessageViewer::MessageViewerSettings::self()->automaticSendingItem());
0124     // TODO verify it
0125     d->mInvitationUi->mAutomaticSending->setEnabled(!d->mInvitationUi->mLegacyBodyInvites->isChecked());
0126     loadWidget(d->mInvitationUi->mDeleteInvitations, MessageViewer::MessageViewerSettings::self()->deleteInvitationEmailsAfterSendingReplyItem());
0127     MessageViewer::MessageViewerSettings::self()->useDefaults(bUseDefaults);
0128 }
0129 
0130 #include "moc_invitationsettings.cpp"