Eventviews

prefs.cpp
1/*
2 SPDX-FileCopyrightText: 2001, 2003 Cornelius Schumacher <schumacher@kde.org>
3 SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
4 SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
5 SPDX-FileContributor: Kevin Krammer <krake@kdab.com>
6
7 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
8*/
9#include "prefs.h"
10#include "prefs_base.h"
11
12#include "calendarview_debug.h"
13
14#include <Akonadi/AttributeFactory>
15#include <Akonadi/CollectionColorAttribute>
16
17#include <QFontDatabase>
18#include <QRandomGenerator>
19using namespace EventViews;
20
21static QSet<EventViews::EventView::ItemIcon> iconArrayToSet(const QByteArray &array)
22{
24 for (int i = 0; i < array.size(); ++i) {
25 if (i >= EventViews::EventView::IconCount) {
26 qCWarning(CALENDARVIEW_LOG) << "Icon array is too big: " << array.size();
27 return set;
28 }
29 if (array[i] != 0) {
30 set.insert(static_cast<EventViews::EventView::ItemIcon>(i));
31 }
32 }
33 return set;
34}
35
36static QByteArray iconSetToArray(const QSet<EventViews::EventView::ItemIcon> &set)
37{
38 QByteArray array;
39 for (int i = 0; i < EventViews::EventView::IconCount; ++i) {
40 const bool contains = set.contains(static_cast<EventViews::EventView::ItemIcon>(i));
41 array.append(contains ? 1 : 0);
42 }
43
44 return array;
45}
46
47static QByteArray agendaViewIconDefaults()
48{
49 QByteArray iconDefaults;
50 iconDefaults.resize(7);
51
52 iconDefaults[EventViews::EventView::CalendarCustomIcon] = 1;
53 iconDefaults[EventViews::EventView::TaskIcon] = 1;
54 iconDefaults[EventViews::EventView::JournalIcon] = 1;
55 iconDefaults[EventViews::EventView::RecurringIcon] = 1;
56 iconDefaults[EventViews::EventView::ReminderIcon] = 1;
57 iconDefaults[EventViews::EventView::ReadOnlyIcon] = 1;
58 iconDefaults[EventViews::EventView::ReplyIcon] = 0;
59
60 return iconDefaults;
61}
62
63static QByteArray monthViewIconDefaults()
64{
65 QByteArray iconDefaults;
66 iconDefaults.resize(7);
67
68 iconDefaults[EventViews::EventView::CalendarCustomIcon] = 1;
69 iconDefaults[EventViews::EventView::TaskIcon] = 1;
70 iconDefaults[EventViews::EventView::JournalIcon] = 1;
71 iconDefaults[EventViews::EventView::RecurringIcon] = 0;
72 iconDefaults[EventViews::EventView::ReminderIcon] = 0;
73 iconDefaults[EventViews::EventView::ReadOnlyIcon] = 1;
74 iconDefaults[EventViews::EventView::ReplyIcon] = 0;
75
76 return iconDefaults;
77}
78
79class BaseConfig : public PrefsBase
80{
81public:
82 BaseConfig();
83
84 void setResourceColor(const QString &resource, const QColor &color);
85
86 void setTimeScaleTimezones(const QStringList &timeZones);
87 QStringList timeScaleTimezones() const;
88
89public:
90 QHash<QString, QColor> mResourceColors;
91 QColor mDefaultResourceColor;
92
93 QFont mDefaultMonthViewFont;
94 QFont mDefaultAgendaTimeLabelsFont;
95
96 QStringList mTimeScaleTimeZones;
97
98 QSet<EventViews::EventView::ItemIcon> mAgendaViewIcons;
99 QSet<EventViews::EventView::ItemIcon> mMonthViewIcons;
100
101protected:
102 void usrSetDefaults() override;
103 void usrRead() override;
104 bool usrSave() override;
105};
106
107BaseConfig::BaseConfig()
108
109{
110 mDefaultResourceColor = QColor(); // Default is a color invalid
111
112 mDefaultAgendaTimeLabelsFont = QFontDatabase::systemFont(QFontDatabase::GeneralFont);
113 // make a large default time bar font, at least 16 points.
114 mDefaultAgendaTimeLabelsFont.setPointSize(qMax(mDefaultAgendaTimeLabelsFont.pointSize() + 4, 16));
115
117 // make it a bit smaller
118 mDefaultMonthViewFont.setPointSize(qMax(mDefaultMonthViewFont.pointSize() - 2, 6));
119
120 agendaTimeLabelsFontItem()->setDefaultValue(mDefaultAgendaTimeLabelsFont);
121 agendaTimeLabelsFontItem()->setDefault();
122 monthViewFontItem()->setDefaultValue(mDefaultMonthViewFont);
123 monthViewFontItem()->setDefault();
124}
125
126void BaseConfig::setResourceColor(const QString &resource, const QColor &color)
127{
128 mResourceColors.insert(resource, color);
129}
130
131void BaseConfig::setTimeScaleTimezones(const QStringList &list)
132{
133 mTimeScaleTimeZones = list;
134}
135
136QStringList BaseConfig::timeScaleTimezones() const
137{
138 return mTimeScaleTimeZones;
139}
140
141void BaseConfig::usrSetDefaults()
142{
143 setAgendaTimeLabelsFont(mDefaultAgendaTimeLabelsFont);
144 setMonthViewFont(mDefaultMonthViewFont);
145
146 PrefsBase::usrSetDefaults();
147}
148
149void BaseConfig::usrRead()
150{
151 KConfigGroup rColorsConfig(config(), QStringLiteral("Resources Colors"));
152 const QStringList colorKeyList = rColorsConfig.keyList();
153
154 for (const QString &key : colorKeyList) {
155 QColor color = rColorsConfig.readEntry(key, mDefaultResourceColor);
156 // qCDebug(CALENDARVIEW_LOG) << "key:" << key << "value:" << color;
157 setResourceColor(key, color);
158 }
159
160#if 0
161 config()->setGroup("FreeBusy");
162 if (mRememberRetrievePw) {
163 mRetrievePassword
164 = KStringHandler::obscure(config()->readEntry("Retrieve Server Password"));
165 }
166#endif
167
168 KConfigGroup timeScaleConfig(config(), QStringLiteral("Timescale"));
169 setTimeScaleTimezones(timeScaleConfig.readEntry("Timescale Timezones", QStringList()));
170
171 KConfigGroup monthViewConfig(config(), QStringLiteral("Month View"));
172 KConfigGroup agendaViewConfig(config(), QStringLiteral("Agenda View"));
173 const auto agendaIconArray = agendaViewConfig.readEntry<QByteArray>("agendaViewItemIcons", agendaViewIconDefaults());
174 const auto monthIconArray = monthViewConfig.readEntry<QByteArray>("monthViewItemIcons", monthViewIconDefaults());
175
176 mAgendaViewIcons = iconArrayToSet(agendaIconArray);
177 mMonthViewIcons = iconArrayToSet(monthIconArray);
178
180}
181
182bool BaseConfig::usrSave()
183{
184 KConfigGroup rColorsConfig(config(), QStringLiteral("Resources Colors"));
185 for (auto it = mResourceColors.constBegin(); it != mResourceColors.constEnd(); ++it) {
186 rColorsConfig.writeEntry(it.key(), it.value());
187 }
188
189#if 0
190 if (mRememberRetrievePw) {
191 config()->writeEntry("Retrieve Server Password",
192 KStringHandler::obscure(mRetrievePassword));
193 } else {
194 config()->deleteEntry("Retrieve Server Password");
195 }
196#endif
197
198 KConfigGroup timeScaleConfig(config(), QStringLiteral("Timescale"));
199 timeScaleConfig.writeEntry("Timescale Timezones", timeScaleTimezones());
200
201 KConfigGroup monthViewConfig(config(), QStringLiteral("Month View"));
202 KConfigGroup agendaViewConfig(config(), QStringLiteral("Agenda View"));
203
204 const QByteArray agendaIconArray = iconSetToArray(mAgendaViewIcons);
205 const QByteArray monthIconArray = iconSetToArray(mMonthViewIcons);
206
207 agendaViewConfig.writeEntry<QByteArray>("agendaViewItemIcons", agendaIconArray);
208 monthViewConfig.writeEntry<QByteArray>("monthViewItemIcons", monthIconArray);
209
211}
212
213class EventViews::PrefsPrivate
214{
215public:
216 explicit PrefsPrivate(Prefs *parent)
217 : q(parent)
218 {
219 }
220
221 PrefsPrivate(Prefs *parent, KCoreConfigSkeleton *appConfig)
222 : mAppConfig(appConfig)
223 , q(parent)
224 {
225 }
226
227 KConfigSkeletonItem *appConfigItem(const KConfigSkeletonItem *baseConfigItem) const;
228
229 void setBool(KCoreConfigSkeleton::ItemBool *baseConfigItem, bool value);
230 bool getBool(const KCoreConfigSkeleton::ItemBool *baseConfigItem) const;
231
232 void setInt(KCoreConfigSkeleton::ItemInt *baseConfigItem, int value);
233 int getInt(const KCoreConfigSkeleton::ItemInt *baseConfigItem) const;
234
235 void setString(KCoreConfigSkeleton::ItemString *baseConfigItem, const QString &value);
236 QString getString(const KCoreConfigSkeleton::ItemString *baseConfigItem) const;
237
238 void setDateTime(KCoreConfigSkeleton::ItemDateTime *baseConfigItem, const QDateTime &value);
239 QDateTime getDateTime(const KCoreConfigSkeleton::ItemDateTime *baseConfigItem) const;
240
241 void setStringList(KCoreConfigSkeleton::ItemStringList *baseConfigItem, const QStringList &value);
242 QStringList getStringList(const KCoreConfigSkeleton::ItemStringList *baseConfigItem) const;
243
244 void setColor(KConfigSkeleton::ItemColor *baseConfigItem, const QColor &value);
245 QColor getColor(const KConfigSkeleton::ItemColor *baseConfigItem) const;
246
247 void setFont(KConfigSkeleton::ItemFont *baseConfigItem, const QFont &value);
248 QFont getFont(const KConfigSkeleton::ItemFont *baseConfigItem) const;
249
250public:
251 BaseConfig mBaseConfig;
252 KCoreConfigSkeleton *mAppConfig = nullptr;
253
254private:
255 Prefs *q;
256};
257
258KConfigSkeletonItem *PrefsPrivate::appConfigItem(const KConfigSkeletonItem *baseConfigItem) const
259{
260 Q_ASSERT(baseConfigItem);
261
262 if (mAppConfig) {
263 return mAppConfig->findItem(baseConfigItem->name());
264 }
265
266 return nullptr;
267}
268
269void PrefsPrivate::setBool(KCoreConfigSkeleton::ItemBool *baseConfigItem, bool value)
270{
271 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
272 if (appItem) {
273 auto item = dynamic_cast<KCoreConfigSkeleton::ItemBool *>(appItem);
274 if (item) {
275 item->setValue(value);
276 } else {
277 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Bool";
278 }
279 } else {
280 baseConfigItem->setValue(value);
281 }
282}
283
284bool PrefsPrivate::getBool(const KCoreConfigSkeleton::ItemBool *baseConfigItem) const
285{
286 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
287 if (appItem) {
288 auto item = dynamic_cast<KCoreConfigSkeleton::ItemBool *>(appItem);
289 if (item) {
290 return item->value();
291 }
292 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Bool";
293 }
294 return baseConfigItem->value();
295}
296
297void PrefsPrivate::setInt(KCoreConfigSkeleton::ItemInt *baseConfigItem, int value)
298{
299 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
300 if (appItem) {
301 auto item = dynamic_cast<KCoreConfigSkeleton::ItemInt *>(appItem);
302 if (item) {
303 item->setValue(value);
304 } else {
305 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Int";
306 }
307 } else {
308 baseConfigItem->setValue(value);
309 }
310}
311
312int PrefsPrivate::getInt(const KCoreConfigSkeleton::ItemInt *baseConfigItem) const
313{
314 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
315 if (appItem) {
316 auto item = dynamic_cast<KCoreConfigSkeleton::ItemInt *>(appItem);
317 if (item) {
318 return item->value();
319 }
320 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Int";
321 }
322 return baseConfigItem->value();
323}
324
325void PrefsPrivate::setString(KCoreConfigSkeleton::ItemString *baseConfigItem, const QString &value)
326{
327 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
328 if (appItem) {
329 auto item = dynamic_cast<KCoreConfigSkeleton::ItemString *>(appItem);
330
331 if (item) {
332 item->setValue(value);
333 } else {
334 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type String";
335 }
336 } else {
337 baseConfigItem->setValue(value);
338 }
339}
340
341QString PrefsPrivate::getString(const KCoreConfigSkeleton::ItemString *baseConfigItem) const
342{
343 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
344 if (appItem) {
345 auto item = dynamic_cast<KCoreConfigSkeleton::ItemString *>(appItem);
346
347 if (item) {
348 return item->value();
349 }
350 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type String";
351 }
352 return baseConfigItem->value();
353}
354
355void PrefsPrivate::setDateTime(KCoreConfigSkeleton::ItemDateTime *baseConfigItem, const QDateTime &value)
356{
357 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
358 if (appItem) {
359 auto item = dynamic_cast<KCoreConfigSkeleton::ItemDateTime *>(appItem);
360
361 if (item) {
362 item->setValue(value);
363 } else {
364 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type DateTime";
365 }
366 } else {
367 baseConfigItem->setValue(value);
368 }
369}
370
371QDateTime PrefsPrivate::getDateTime(const KCoreConfigSkeleton::ItemDateTime *baseConfigItem) const
372{
373 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
374 if (appItem) {
375 auto item = dynamic_cast<KCoreConfigSkeleton::ItemDateTime *>(appItem);
376
377 if (item) {
378 return item->value();
379 }
380 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type DateTime";
381 }
382 return baseConfigItem->value();
383}
384
385void PrefsPrivate::setStringList(KCoreConfigSkeleton::ItemStringList *baseConfigItem, const QStringList &value)
386{
387 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
388 if (appItem) {
389 auto item = dynamic_cast<KCoreConfigSkeleton::ItemStringList *>(appItem);
390
391 if (item) {
392 item->setValue(value);
393 } else {
394 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type StringList";
395 }
396 } else {
397 baseConfigItem->setValue(value);
398 }
399}
400
401QStringList PrefsPrivate::getStringList(const KCoreConfigSkeleton::ItemStringList *baseConfigItem) const
402{
403 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
404 if (appItem) {
405 auto item = dynamic_cast<KCoreConfigSkeleton::ItemStringList *>(appItem);
406
407 if (item) {
408 return item->value();
409 }
410 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type StringList";
411 }
412 return baseConfigItem->value();
413}
414
415void PrefsPrivate::setColor(KConfigSkeleton::ItemColor *baseConfigItem, const QColor &value)
416{
417 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
418 if (appItem) {
419 auto item = dynamic_cast<KConfigSkeleton::ItemColor *>(appItem);
420 if (item) {
421 item->setValue(value);
422 } else {
423 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Color";
424 }
425 } else {
426 baseConfigItem->setValue(value);
427 }
428}
429
430QColor PrefsPrivate::getColor(const KConfigSkeleton::ItemColor *baseConfigItem) const
431{
432 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
433 if (appItem) {
434 auto item = dynamic_cast<KConfigSkeleton::ItemColor *>(appItem);
435 if (item) {
436 return item->value();
437 }
438 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Color";
439 }
440 return baseConfigItem->value();
441}
442
443void PrefsPrivate::setFont(KConfigSkeleton::ItemFont *baseConfigItem, const QFont &value)
444{
445 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
446 if (appItem) {
447 auto item = dynamic_cast<KConfigSkeleton::ItemFont *>(appItem);
448 if (item) {
449 item->setValue(value);
450 } else {
451 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Font";
452 }
453 } else {
454 baseConfigItem->setValue(value);
455 }
456}
457
458QFont PrefsPrivate::getFont(const KConfigSkeleton::ItemFont *baseConfigItem) const
459{
460 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
461 if (appItem) {
462 auto item = dynamic_cast<KConfigSkeleton::ItemFont *>(appItem);
463 if (item) {
464 return item->value();
465 }
466 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Font";
467 }
468 return baseConfigItem->value();
469}
470
471Prefs::Prefs()
472 : d(new PrefsPrivate(this))
473{
474 // necessary to use CollectionColorAttribute in the EventViews::resourceColor and EventViews::setResourceColor
476}
477
478Prefs::Prefs(KCoreConfigSkeleton *appConfig)
479 : d(new PrefsPrivate(this, appConfig))
480{
481 // necessary to use CollectionColorAttribute in the EventViews::resourceColor and EventViews::setResourceColor
483}
484
485Prefs::~Prefs() = default;
486
487void Prefs::readConfig()
488{
489 d->mBaseConfig.load();
490 if (d->mAppConfig) {
491 d->mAppConfig->load();
492 }
493}
494
495void Prefs::writeConfig()
496{
497 d->mBaseConfig.save();
498 if (d->mAppConfig) {
499 d->mAppConfig->save();
500 }
501}
502
503void Prefs::setUseSystemColor(bool useSystemColor)
504{
505 d->setBool(d->mBaseConfig.useSystemColorItem(), useSystemColor);
506}
507
508bool Prefs::useSystemColor() const
509{
510 return d->getBool(d->mBaseConfig.useSystemColorItem());
511}
512
513void Prefs::setMarcusBainsShowSeconds(bool showSeconds)
514{
515 d->setBool(d->mBaseConfig.marcusBainsShowSecondsItem(), showSeconds);
516}
517
518bool Prefs::marcusBainsShowSeconds() const
519{
520 return d->getBool(d->mBaseConfig.marcusBainsShowSecondsItem());
521}
522
523void Prefs::setAgendaMarcusBainsLineLineColor(const QColor &color)
524{
525 d->setColor(d->mBaseConfig.agendaMarcusBainsLineLineColorItem(), color);
526}
527
528QColor Prefs::agendaMarcusBainsLineLineColor() const
529{
530 return d->getColor(d->mBaseConfig.agendaMarcusBainsLineLineColorItem());
531}
532
533void Prefs::setMarcusBainsEnabled(bool enabled)
534{
535 d->setBool(d->mBaseConfig.marcusBainsEnabledItem(), enabled);
536}
537
538bool Prefs::marcusBainsEnabled() const
539{
540 return d->getBool(d->mBaseConfig.marcusBainsEnabledItem());
541}
542
543void Prefs::setAgendaMarcusBainsLineFont(const QFont &font)
544{
545 d->setFont(d->mBaseConfig.agendaMarcusBainsLineFontItem(), font);
546}
547
548QFont Prefs::agendaMarcusBainsLineFont() const
549{
550 return d->getFont(d->mBaseConfig.agendaMarcusBainsLineFontItem());
551}
552
553void Prefs::setHourSize(int size)
554{
555 d->setInt(d->mBaseConfig.hourSizeItem(), size);
556}
557
558int Prefs::hourSize() const
559{
560 return d->getInt(d->mBaseConfig.hourSizeItem());
561}
562
563void Prefs::setDayBegins(const QDateTime &dateTime)
564{
565 d->setDateTime(d->mBaseConfig.dayBeginsItem(), dateTime);
566}
567
568QDateTime Prefs::dayBegins() const
569{
570 return d->getDateTime(d->mBaseConfig.dayBeginsItem());
571}
572
573void Prefs::setFirstDayOfWeek(const int day)
574{
575 d->setInt(d->mBaseConfig.weekStartDayItem(), day - 1);
576}
577
578int Prefs::firstDayOfWeek() const
579{
580 return d->getInt(d->mBaseConfig.weekStartDayItem()) + 1;
581}
582
583void Prefs::setWorkingHoursStart(const QDateTime &dateTime)
584{
585 d->setDateTime(d->mBaseConfig.workingHoursStartItem(), dateTime);
586}
587
588QDateTime Prefs::workingHoursStart() const
589{
590 return d->getDateTime(d->mBaseConfig.workingHoursStartItem());
591}
592
593void Prefs::setWorkingHoursEnd(const QDateTime &dateTime)
594{
595 d->setDateTime(d->mBaseConfig.workingHoursEndItem(), dateTime);
596}
597
598QDateTime Prefs::workingHoursEnd() const
599{
600 return d->getDateTime(d->mBaseConfig.workingHoursEndItem());
601}
602
603void Prefs::setSelectionStartsEditor(bool startEditor)
604{
605 d->setBool(d->mBaseConfig.selectionStartsEditorItem(), startEditor);
606}
607
608bool Prefs::selectionStartsEditor() const
609{
610 return d->getBool(d->mBaseConfig.selectionStartsEditorItem());
611}
612
613void Prefs::setAgendaGridWorkHoursBackgroundColor(const QColor &color)
614{
615 d->setColor(d->mBaseConfig.agendaGridWorkHoursBackgroundColorItem(), color);
616}
617
618QColor Prefs::agendaGridWorkHoursBackgroundColor() const
619{
620 return d->getColor(d->mBaseConfig.agendaGridWorkHoursBackgroundColorItem());
621}
622
623void Prefs::setAgendaGridHighlightColor(const QColor &color)
624{
625 d->setColor(d->mBaseConfig.agendaGridHighlightColorItem(), color);
626}
627
628QColor Prefs::agendaGridHighlightColor() const
629{
630 return d->getColor(d->mBaseConfig.agendaGridHighlightColorItem());
631}
632
633void Prefs::setAgendaGridBackgroundColor(const QColor &color)
634{
635 d->setColor(d->mBaseConfig.agendaGridBackgroundColorItem(), color);
636}
637
638QColor Prefs::agendaGridBackgroundColor() const
639{
640 return d->getColor(d->mBaseConfig.agendaGridBackgroundColorItem());
641}
642
643void Prefs::setEnableAgendaItemIcons(bool enable)
644{
645 d->setBool(d->mBaseConfig.enableAgendaItemIconsItem(), enable);
646}
647
648bool Prefs::enableAgendaItemIcons() const
649{
650 return d->getBool(d->mBaseConfig.enableAgendaItemIconsItem());
651}
652
653void Prefs::setTodosUseCategoryColors(bool useColors)
654{
655 d->setBool(d->mBaseConfig.todosUseCategoryColorsItem(), useColors);
656}
657
658bool Prefs::todosUseCategoryColors() const
659{
660 return d->getBool(d->mBaseConfig.todosUseCategoryColorsItem());
661}
662
663void Prefs::setAgendaHolidaysBackgroundColor(const QColor &color) const
664{
665 d->setColor(d->mBaseConfig.agendaHolidaysBackgroundColorItem(), color);
666}
667
668QColor Prefs::agendaHolidaysBackgroundColor() const
669{
670 return d->getColor(d->mBaseConfig.agendaHolidaysBackgroundColorItem());
671}
672
673void Prefs::setAgendaViewColors(int colors)
674{
675 d->setInt(d->mBaseConfig.agendaViewColorsItem(), colors);
676}
677
678int Prefs::agendaViewColors() const
679{
680 return d->getInt(d->mBaseConfig.agendaViewColorsItem());
681}
682
683void Prefs::setAgendaViewFont(const QFont &font)
684{
685 d->setFont(d->mBaseConfig.agendaViewFontItem(), font);
686}
687
688QFont Prefs::agendaViewFont() const
689{
690 return d->getFont(d->mBaseConfig.agendaViewFontItem());
691}
692
693void Prefs::setMonthViewFont(const QFont &font)
694{
695 d->setFont(d->mBaseConfig.monthViewFontItem(), font);
696}
697
698QFont Prefs::monthViewFont() const
699{
700 return d->getFont(d->mBaseConfig.monthViewFontItem());
701}
702
703QColor Prefs::monthGridBackgroundColor() const
704{
705 return d->getColor(d->mBaseConfig.monthGridBackgroundColorItem());
706}
707
708void Prefs::setMonthGridBackgroundColor(const QColor &color)
709{
710 d->setColor(d->mBaseConfig.monthGridBackgroundColorItem(), color);
711}
712
713QColor Prefs::monthGridWorkHoursBackgroundColor() const
714{
715 return d->getColor(d->mBaseConfig.monthGridWorkHoursBackgroundColorItem());
716}
717
718void Prefs::monthGridWorkHoursBackgroundColor(const QColor &color)
719{
720 d->setColor(d->mBaseConfig.monthGridWorkHoursBackgroundColorItem(), color);
721}
722
723int Prefs::monthViewColors() const
724{
725 return d->getInt(d->mBaseConfig.monthViewColorsItem());
726}
727
728void Prefs::setMonthViewColors(int colors) const
729{
730 d->setInt(d->mBaseConfig.monthViewColorsItem(), colors);
731}
732
733void Prefs::setEnableMonthItemIcons(bool enable)
734{
735 d->setBool(d->mBaseConfig.enableMonthItemIconsItem(), enable);
736}
737
738bool Prefs::enableMonthItemIcons() const
739{
740 return d->getBool(d->mBaseConfig.enableMonthItemIconsItem());
741}
742
743bool Prefs::showTimeInMonthView() const
744{
745 return d->getBool(d->mBaseConfig.showTimeInMonthViewItem());
746}
747
748void Prefs::setShowTimeInMonthView(bool show)
749{
750 d->setBool(d->mBaseConfig.showTimeInMonthViewItem(), show);
751}
752
753bool Prefs::showTodosMonthView() const
754{
755 return d->getBool(d->mBaseConfig.showTodosMonthViewItem());
756}
757
758void Prefs::setShowTodosMonthView(bool enable)
759{
760 d->setBool(d->mBaseConfig.showTodosMonthViewItem(), enable);
761}
762
763bool Prefs::showJournalsMonthView() const
764{
765 return d->getBool(d->mBaseConfig.showJournalsMonthViewItem());
766}
767
768void Prefs::setShowJournalsMonthView(bool enable)
769{
770 d->setBool(d->mBaseConfig.showJournalsMonthViewItem(), enable);
771}
772
773bool Prefs::fullViewMonth() const
774{
775 return d->getBool(d->mBaseConfig.fullViewMonthItem());
776}
777
778void Prefs::setFullViewMonth(bool fullView)
779{
780 d->setBool(d->mBaseConfig.fullViewMonthItem(), fullView);
781}
782
783bool Prefs::sortCompletedTodosSeparately() const
784{
785 return d->getBool(d->mBaseConfig.sortCompletedTodosSeparatelyItem());
786}
787
788void Prefs::setSortCompletedTodosSeparately(bool enable)
789{
790 d->setBool(d->mBaseConfig.sortCompletedTodosSeparatelyItem(), enable);
791}
792
793void Prefs::setEnableToolTips(bool enable)
794{
795 d->setBool(d->mBaseConfig.enableToolTipsItem(), enable);
796}
797
798bool Prefs::enableToolTips() const
799{
800 return d->getBool(d->mBaseConfig.enableToolTipsItem());
801}
802
803void Prefs::setShowTodosAgendaView(bool show)
804{
805 d->setBool(d->mBaseConfig.showTodosAgendaViewItem(), show);
806}
807
808bool Prefs::showTodosAgendaView() const
809{
810 return d->getBool(d->mBaseConfig.showTodosAgendaViewItem());
811}
812
813void Prefs::setAgendaTimeLabelsFont(const QFont &font)
814{
815 d->setFont(d->mBaseConfig.agendaTimeLabelsFontItem(), font);
816}
817
818QFont Prefs::agendaTimeLabelsFont() const
819{
820 return d->getFont(d->mBaseConfig.agendaTimeLabelsFontItem());
821}
822
823QTimeZone Prefs::timeZone() const
824{
826}
827
828bool Prefs::colorAgendaBusyDays() const
829{
830 return d->getBool(d->mBaseConfig.colorBusyDaysEnabledItem());
831}
832
833bool Prefs::colorMonthBusyDays() const
834{
835 return d->getBool(d->mBaseConfig.colorMonthBusyDaysEnabledItem());
836}
837
838QColor Prefs::viewBgBusyColor() const
839{
840 return d->getColor(d->mBaseConfig.viewBgBusyColorItem());
841}
842
843void Prefs::setViewBgBusyColor(const QColor &color)
844{
845 d->mBaseConfig.mViewBgBusyColor = color;
846}
847
848QColor Prefs::holidayColor() const
849{
850 return d->getColor(d->mBaseConfig.holidayColorItem());
851}
852
853void Prefs::setHolidayColor(const QColor &color)
854{
855 d->mBaseConfig.mHolidayColor = color;
856}
857
858QColor Prefs::agendaViewBackgroundColor() const
859{
860 return d->getColor(d->mBaseConfig.agendaBgColorItem());
861}
862
863void Prefs::setAgendaViewBackgroundColor(const QColor &color)
864{
865 d->mBaseConfig.mAgendaBgColor = color;
866}
867
868QColor Prefs::workingHoursColor() const
869{
870 return d->getColor(d->mBaseConfig.workingHoursColorItem());
871}
872
873void Prefs::setWorkingHoursColor(const QColor &color)
874{
875 d->mBaseConfig.mWorkingHoursColor = color;
876}
877
878QColor Prefs::todoDueTodayColor() const
879{
880 return d->getColor(d->mBaseConfig.todoDueTodayColorItem());
881}
882
883void Prefs::setTodoDueTodayColor(const QColor &color)
884{
885 d->mBaseConfig.mTodoDueTodayColor = color;
886}
887
888QColor Prefs::todoOverdueColor() const
889{
890 return d->getColor(d->mBaseConfig.todoOverdueColorItem());
891}
892
893void Prefs::setTodoOverdueColor(const QColor &color)
894{
895 d->mBaseConfig.mTodoOverdueColor = color;
896}
897
898void Prefs::setColorAgendaBusyDays(bool enable)
899{
900 d->mBaseConfig.mColorBusyDaysEnabled = enable;
901}
902
903void Prefs::setColorMonthBusyDays(bool enable)
904{
905 d->mBaseConfig.mColorMonthBusyDaysEnabled = enable;
906}
907
908void Prefs::setResourceColor(const QString &cal, const QColor &color)
909{
910 d->mBaseConfig.setResourceColor(cal, color);
911}
912
913QColor Prefs::resourceColorKnown(const QString &cal) const
914{
915 QColor color;
916 if (!cal.isEmpty()) {
917 color = d->mBaseConfig.mResourceColors.value(cal);
918 }
919 return color;
920}
921
922QColor Prefs::resourceColor(const QString &cal)
923{
924 if (cal.isEmpty()) {
925 return d->mBaseConfig.mDefaultResourceColor;
926 }
927
928 QColor color = resourceColorKnown(cal);
929
930 // assign default color if enabled
931 if (!color.isValid() && d->getBool(d->mBaseConfig.assignDefaultResourceColorsItem())) {
932 color.setRgb(0x37, 0x7A, 0xBC); // blueish
933 const int seed = d->getInt(d->mBaseConfig.defaultResourceColorSeedItem());
934 const QStringList colors = d->getStringList(d->mBaseConfig.defaultResourceColorsItem());
935 if (seed > 0 && seed - 1 < colors.size()) {
936 color = QColor::fromString(colors[seed - 1]);
937 } else {
938 color.setRgb(QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256));
939 }
940 d->setInt(d->mBaseConfig.defaultResourceColorSeedItem(), (seed + 1));
941 d->mBaseConfig.setResourceColor(cal, color);
942 }
943 if (color.isValid()) {
944 return color;
945 } else {
946 return d->mBaseConfig.mDefaultResourceColor;
947 }
948}
949
950QStringList Prefs::timeScaleTimezones() const
951{
952 return d->mBaseConfig.timeScaleTimezones();
953}
954
955void Prefs::setTimeScaleTimezones(const QStringList &list)
956{
957 d->mBaseConfig.setTimeScaleTimezones(list);
958}
959
960KConfigSkeleton::ItemFont *Prefs::fontItem(const QString &name) const
961{
962 KConfigSkeletonItem *item = d->mAppConfig ? d->mAppConfig->findItem(name) : nullptr;
963
964 if (!item) {
965 item = d->mBaseConfig.findItem(name);
966 }
967
968 return dynamic_cast<KConfigSkeleton::ItemFont *>(item);
969}
970
971QStringList Prefs::selectedPlugins() const
972{
973 return d->mBaseConfig.mSelectedPlugins;
974}
975
976QStringList Prefs::decorationsAtAgendaViewTop() const
977{
978 return d->mBaseConfig.decorationsAtAgendaViewTop();
979}
980
981QStringList Prefs::decorationsAtAgendaViewBottom() const
982{
983 return d->mBaseConfig.decorationsAtAgendaViewBottom();
984}
985
986void Prefs::setSelectedPlugins(const QStringList &plugins)
987{
988 d->mBaseConfig.setSelectedPlugins(plugins);
989}
990
991void Prefs::setDecorationsAtAgendaViewTop(const QStringList &decorations)
992{
993 d->mBaseConfig.setDecorationsAtAgendaViewTop(decorations);
994}
995
996void Prefs::setDecorationsAtAgendaViewBottom(const QStringList &decorations)
997{
998 d->mBaseConfig.setDecorationsAtAgendaViewBottom(decorations);
999}
1000
1001QSet<EventViews::EventView::ItemIcon> Prefs::agendaViewIcons() const
1002{
1003 return d->mBaseConfig.mAgendaViewIcons;
1004}
1005
1006void Prefs::setAgendaViewIcons(const QSet<EventViews::EventView::ItemIcon> &icons)
1007{
1008 d->mBaseConfig.mAgendaViewIcons = icons;
1009}
1010
1011QSet<EventViews::EventView::ItemIcon> Prefs::monthViewIcons() const
1012{
1013 return d->mBaseConfig.mMonthViewIcons;
1014}
1015
1016void Prefs::setMonthViewIcons(const QSet<EventViews::EventView::ItemIcon> &icons)
1017{
1018 d->mBaseConfig.mMonthViewIcons = icons;
1019}
1020
1021void Prefs::setFlatListTodo(bool enable)
1022{
1023 d->mBaseConfig.mFlatListTodo = enable;
1024}
1025
1026bool Prefs::flatListTodo() const
1027{
1028 return d->mBaseConfig.mFlatListTodo;
1029}
1030
1031void Prefs::setFullViewTodo(bool enable)
1032{
1033 d->mBaseConfig.mFullViewTodo = enable;
1034}
1035
1036bool Prefs::fullViewTodo() const
1037{
1038 return d->mBaseConfig.mFullViewTodo;
1039}
1040
1041bool Prefs::enableTodoQuickSearch() const
1042{
1043 return d->mBaseConfig.mEnableTodoQuickSearch;
1044}
1045
1046void Prefs::setEnableTodoQuickSearch(bool enable)
1047{
1048 d->mBaseConfig.mEnableTodoQuickSearch = enable;
1049}
1050
1051bool Prefs::enableQuickTodo() const
1052{
1053 return d->mBaseConfig.mEnableQuickTodo;
1054}
1055
1056void Prefs::setEnableQuickTodo(bool enable)
1057{
1058 d->mBaseConfig.mEnableQuickTodo = enable;
1059}
1060
1061bool Prefs::highlightTodos() const
1062{
1063 return d->mBaseConfig.mHighlightTodos;
1064}
1065
1066void Prefs::setHighlightTodos(bool highlight)
1067{
1068 d->mBaseConfig.mHighlightTodos = highlight;
1069}
1070
1071KConfig *Prefs::config() const
1072{
1073 return d->mAppConfig ? d->mAppConfig->config() : d->mBaseConfig.config();
1074}
static void registerAttribute()
void setValue(const T &v)
QString name() const
virtual bool usrSave()
virtual void usrRead()
Namespace EventViews provides facilities for displaying incidences, including events,...
Definition agenda.h:33
KIOCORE_EXPORT QStringList list(const QString &fileClass)
KCOREADDONS_EXPORT QString obscure(const QString &str)
QByteArray & append(QByteArrayView data)
void resize(qsizetype newSize, char c)
qsizetype size() const const
QColor fromString(QAnyStringView name)
bool isValid() const const
void setRgb(QRgb rgb)
int value() const const
QFont systemFont(SystemFont type)
qsizetype size() const const
QRandomGenerator * global()
bool contains(const QSet< T > &other) const const
iterator insert(const T &value)
bool isEmpty() const const
QTimeZone systemTimeZone()
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 18 2025 12:08:17 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.