File indexing completed on 2024-05-12 05:21:22
0001 /* 0002 SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com> 0003 SPDX-FileContributor: Tobias Koenig <tokoe@kdab.com> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "collectiongeneralpage.h" 0009 #include <Akonadi/BlockAlarmsAttribute> 0010 #include <Akonadi/Collection> 0011 #include <Akonadi/EntityDisplayAttribute> 0012 #include <PimCommon/PimUtil> 0013 0014 #include <KCalendarCore/Event> 0015 #include <KCalendarCore/Journal> 0016 #include <KCalendarCore/Todo> 0017 0018 #include <KIconButton> 0019 #include <KLocalizedString> 0020 #include <QLineEdit> 0021 0022 #include <QCheckBox> 0023 #include <QFormLayout> 0024 #include <QHBoxLayout> 0025 0026 #include <Akonadi/CollectionAnnotationsAttribute> 0027 #include <PimCommonAkonadi/CollectionTypeUtil> 0028 #include <PimCommonAkonadi/IncidencesForWidget> 0029 0030 using namespace Akonadi; 0031 using namespace CalendarSupport; 0032 0033 CollectionGeneralPage::CollectionGeneralPage(QWidget *parent) 0034 : CollectionPropertiesPage(parent) 0035 { 0036 setObjectName(QLatin1StringView("CalendarSupport::CollectionGeneralPage")); 0037 setPageTitle(i18nc("@title:tab General settings for a folder.", "General")); 0038 } 0039 0040 void CollectionGeneralPage::init(const Akonadi::Collection &collection) 0041 { 0042 auto topLayout = new QFormLayout(this); 0043 0044 mNameEdit = new QLineEdit(this); 0045 mNameEdit->setToolTip(i18nc("@info:tooltip", "Set the folder name")); 0046 mNameEdit->setWhatsThis(i18nc("@info:whatsthis", "Enter a name here to set the name of this folder.")); 0047 topLayout->addRow(i18nc("@label:textbox Name of the folder.", "&Name:"), mNameEdit); 0048 0049 // should replies to mails in this folder be kept in this same folder? 0050 mBlockAlarmsCheckBox = new QCheckBox(i18nc("@option:check", "Block reminders locally"), this); 0051 mBlockAlarmsCheckBox->setToolTip(i18nc("@info:tooltip", "Ignore reminders from this calendar")); 0052 mBlockAlarmsCheckBox->setWhatsThis(i18nc("@info:whatsthis", 0053 "Check this box if you do not want to receive reminders from items " 0054 "associated with this calendar.")); 0055 topLayout->addRow(QString(), mBlockAlarmsCheckBox); 0056 0057 auto hbox = new QHBoxLayout(); 0058 mIconCheckBox = new QCheckBox(i18nc("@option:check", "&Use custom icon:"), this); 0059 mIconCheckBox->setToolTip(i18nc("@info:tooltip", "Set a custom icon")); 0060 mIconCheckBox->setWhatsThis(i18nc("@info:whatsthis", "Check this box if you want to set a custom icon for this folder.")); 0061 mIconButton = new KIconButton(this); 0062 mIconButton->setIconSize(16); 0063 hbox->addWidget(mIconCheckBox); 0064 hbox->addWidget(mIconButton); 0065 hbox->addStretch(); 0066 topLayout->addRow(QString(), hbox); 0067 0068 if ((collection.parentCollection() != Akonadi::Collection::root()) && PimCommon::Util::isImapResource(collection.resource())) { 0069 const auto annotationAttribute = collection.attribute<Akonadi::CollectionAnnotationsAttribute>(); 0070 0071 const QMap<QByteArray, QByteArray> annotations = (annotationAttribute ? annotationAttribute->annotations() : QMap<QByteArray, QByteArray>()); 0072 0073 PimCommon::CollectionTypeUtil collectionUtil; 0074 const PimCommon::CollectionTypeUtil::IncidencesFor incidencesFor = 0075 collectionUtil.incidencesForFromString(QLatin1StringView(annotations.value(PimCommon::CollectionTypeUtil ::kolabIncidencesFor()))); 0076 mIncidencesForComboBox = new PimCommon::IncidencesForWidget(this); 0077 topLayout->addRow(PimCommon::IncidencesForWidget::labelName(), mIncidencesForComboBox); 0078 0079 mIncidencesForComboBox->setCurrentIndex(incidencesFor); 0080 } 0081 } 0082 0083 CollectionGeneralPage::~CollectionGeneralPage() = default; 0084 0085 void CollectionGeneralPage::load(const Akonadi::Collection &collection) 0086 { 0087 init(collection); 0088 mNameEdit->setEnabled(collection.rights() & Collection::CanChangeCollection); 0089 0090 const QString displayName = collection.displayName(); 0091 0092 mNameEdit->setText(displayName); 0093 mBlockAlarmsCheckBox->setChecked(collection.hasAttribute<BlockAlarmsAttribute>() && collection.attribute<BlockAlarmsAttribute>()->isEverythingBlocked()); 0094 0095 QString iconName; 0096 if (collection.hasAttribute<EntityDisplayAttribute>()) { 0097 iconName = collection.attribute<EntityDisplayAttribute>()->iconName(); 0098 } 0099 0100 if (iconName.isEmpty()) { 0101 const QStringList mimeTypes = collection.contentMimeTypes(); 0102 if (collection.contentMimeTypes().count() > 1 || collection.contentMimeTypes().contains(KCalendarCore::Event::eventMimeType())) { 0103 mIconButton->setIcon(QIcon::fromTheme(QStringLiteral("view-pim-calendar"))); 0104 } else if (collection.contentMimeTypes().contains(KCalendarCore::Todo::todoMimeType())) { 0105 mIconButton->setIcon(QIcon::fromTheme(QStringLiteral("view-pim-tasks"))); 0106 } else if (collection.contentMimeTypes().contains(KCalendarCore::Journal::journalMimeType())) { 0107 mIconButton->setIcon(QIcon::fromTheme(QStringLiteral("view-pim-journal"))); 0108 } else if (mimeTypes.isEmpty()) { 0109 mIconButton->setIcon(QIcon::fromTheme(QStringLiteral("folder-grey"))); 0110 } else { 0111 mIconButton->setIcon(QIcon::fromTheme(QStringLiteral("folder"))); 0112 } 0113 } else { 0114 mIconButton->setIcon(iconName); 0115 } 0116 mIconCheckBox->setChecked(!iconName.isEmpty()); 0117 } 0118 0119 void CollectionGeneralPage::save(Collection &collection) 0120 { 0121 if (collection.hasAttribute<EntityDisplayAttribute>() && !collection.attribute<EntityDisplayAttribute>()->displayName().isEmpty()) { 0122 collection.attribute<EntityDisplayAttribute>()->setDisplayName(mNameEdit->text()); 0123 } else { 0124 collection.setName(mNameEdit->text()); 0125 } 0126 0127 auto attr = collection.attribute<BlockAlarmsAttribute>(Collection::AddIfMissing); 0128 attr->blockEverything(mBlockAlarmsCheckBox->isChecked()); 0129 0130 if (mIconCheckBox->isChecked()) { 0131 collection.attribute<EntityDisplayAttribute>(Collection::AddIfMissing)->setIconName(mIconButton->icon()); 0132 } else if (collection.hasAttribute<EntityDisplayAttribute>()) { 0133 collection.attribute<EntityDisplayAttribute>()->setIconName(QString()); 0134 } 0135 auto annotationsAttribute = collection.attribute<Akonadi::CollectionAnnotationsAttribute>(Collection::AddIfMissing); 0136 0137 QMap<QByteArray, QByteArray> annotations = annotationsAttribute->annotations(); 0138 0139 PimCommon::CollectionTypeUtil collectionUtil; 0140 if (mIncidencesForComboBox && mIncidencesForComboBox->isEnabled()) { 0141 annotations[PimCommon::CollectionTypeUtil::kolabIncidencesFor()] = 0142 collectionUtil.incidencesForToString(static_cast<PimCommon::CollectionTypeUtil::IncidencesFor>(mIncidencesForComboBox->currentIndex())).toLatin1(); 0143 } 0144 0145 if (annotations.isEmpty()) { 0146 collection.removeAttribute<Akonadi::CollectionAnnotationsAttribute>(); 0147 } else { 0148 annotationsAttribute->setAnnotations(annotations); 0149 } 0150 } 0151 0152 #include "moc_collectiongeneralpage.cpp"