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()
217 {
218 }
219
220 PrefsPrivate(KCoreConfigSkeleton *appConfig)
221 : mAppConfig(appConfig)
222 {
223 }
224
225 KConfigSkeletonItem *appConfigItem(const KConfigSkeletonItem *baseConfigItem) const;
226
227 void setBool(KCoreConfigSkeleton::ItemBool *baseConfigItem, bool value);
228 bool getBool(const KCoreConfigSkeleton::ItemBool *baseConfigItem) const;
229
230 void setInt(KCoreConfigSkeleton::ItemInt *baseConfigItem, int value);
231 int getInt(const KCoreConfigSkeleton::ItemInt *baseConfigItem) const;
232
233 void setString(KCoreConfigSkeleton::ItemString *baseConfigItem, const QString &value);
234 QString getString(const KCoreConfigSkeleton::ItemString *baseConfigItem) const;
235
236 void setDateTime(KCoreConfigSkeleton::ItemDateTime *baseConfigItem, const QDateTime &value);
237 QDateTime getDateTime(const KCoreConfigSkeleton::ItemDateTime *baseConfigItem) const;
238
239 void setStringList(KCoreConfigSkeleton::ItemStringList *baseConfigItem, const QStringList &value);
240 QStringList getStringList(const KCoreConfigSkeleton::ItemStringList *baseConfigItem) const;
241
242 void setColor(KConfigSkeleton::ItemColor *baseConfigItem, const QColor &value);
243 QColor getColor(const KConfigSkeleton::ItemColor *baseConfigItem) const;
244
245 void setFont(KConfigSkeleton::ItemFont *baseConfigItem, const QFont &value);
246 QFont getFont(const KConfigSkeleton::ItemFont *baseConfigItem) const;
247
248public:
249 BaseConfig mBaseConfig;
250 KCoreConfigSkeleton *mAppConfig = nullptr;
251};
252
253KConfigSkeletonItem *PrefsPrivate::appConfigItem(const KConfigSkeletonItem *baseConfigItem) const
254{
255 Q_ASSERT(baseConfigItem);
256
257 if (mAppConfig) {
258 return mAppConfig->findItem(baseConfigItem->name());
259 }
260
261 return nullptr;
262}
263
264void PrefsPrivate::setBool(KCoreConfigSkeleton::ItemBool *baseConfigItem, bool value)
265{
266 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
267 if (appItem) {
268 auto item = dynamic_cast<KCoreConfigSkeleton::ItemBool *>(appItem);
269 if (item) {
270 item->setValue(value);
271 } else {
272 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Bool";
273 }
274 } else {
275 baseConfigItem->setValue(value);
276 }
277}
278
279bool PrefsPrivate::getBool(const KCoreConfigSkeleton::ItemBool *baseConfigItem) const
280{
281 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
282 if (appItem) {
283 auto item = dynamic_cast<KCoreConfigSkeleton::ItemBool *>(appItem);
284 if (item) {
285 return item->value();
286 }
287 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Bool";
288 }
289 return baseConfigItem->value();
290}
291
292void PrefsPrivate::setInt(KCoreConfigSkeleton::ItemInt *baseConfigItem, int value)
293{
294 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
295 if (appItem) {
296 auto item = dynamic_cast<KCoreConfigSkeleton::ItemInt *>(appItem);
297 if (item) {
298 item->setValue(value);
299 } else {
300 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Int";
301 }
302 } else {
303 baseConfigItem->setValue(value);
304 }
305}
306
307int PrefsPrivate::getInt(const KCoreConfigSkeleton::ItemInt *baseConfigItem) const
308{
309 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
310 if (appItem) {
311 auto item = dynamic_cast<KCoreConfigSkeleton::ItemInt *>(appItem);
312 if (item) {
313 return item->value();
314 }
315 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Int";
316 }
317 return baseConfigItem->value();
318}
319
320void PrefsPrivate::setString(KCoreConfigSkeleton::ItemString *baseConfigItem, const QString &value)
321{
322 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
323 if (appItem) {
324 auto item = dynamic_cast<KCoreConfigSkeleton::ItemString *>(appItem);
325
326 if (item) {
327 item->setValue(value);
328 } else {
329 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type String";
330 }
331 } else {
332 baseConfigItem->setValue(value);
333 }
334}
335
336QString PrefsPrivate::getString(const KCoreConfigSkeleton::ItemString *baseConfigItem) const
337{
338 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
339 if (appItem) {
340 auto item = dynamic_cast<KCoreConfigSkeleton::ItemString *>(appItem);
341
342 if (item) {
343 return item->value();
344 }
345 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type String";
346 }
347 return baseConfigItem->value();
348}
349
350void PrefsPrivate::setDateTime(KCoreConfigSkeleton::ItemDateTime *baseConfigItem, const QDateTime &value)
351{
352 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
353 if (appItem) {
354 auto item = dynamic_cast<KCoreConfigSkeleton::ItemDateTime *>(appItem);
355
356 if (item) {
357 item->setValue(value);
358 } else {
359 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type DateTime";
360 }
361 } else {
362 baseConfigItem->setValue(value);
363 }
364}
365
366QDateTime PrefsPrivate::getDateTime(const KCoreConfigSkeleton::ItemDateTime *baseConfigItem) const
367{
368 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
369 if (appItem) {
370 auto item = dynamic_cast<KCoreConfigSkeleton::ItemDateTime *>(appItem);
371
372 if (item) {
373 return item->value();
374 }
375 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type DateTime";
376 }
377 return baseConfigItem->value();
378}
379
380void PrefsPrivate::setStringList(KCoreConfigSkeleton::ItemStringList *baseConfigItem, const QStringList &value)
381{
382 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
383 if (appItem) {
384 auto item = dynamic_cast<KCoreConfigSkeleton::ItemStringList *>(appItem);
385
386 if (item) {
387 item->setValue(value);
388 } else {
389 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type StringList";
390 }
391 } else {
392 baseConfigItem->setValue(value);
393 }
394}
395
396QStringList PrefsPrivate::getStringList(const KCoreConfigSkeleton::ItemStringList *baseConfigItem) const
397{
398 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
399 if (appItem) {
400 auto item = dynamic_cast<KCoreConfigSkeleton::ItemStringList *>(appItem);
401
402 if (item) {
403 return item->value();
404 }
405 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type StringList";
406 }
407 return baseConfigItem->value();
408}
409
410void PrefsPrivate::setColor(KConfigSkeleton::ItemColor *baseConfigItem, const QColor &value)
411{
412 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
413 if (appItem) {
414 auto item = dynamic_cast<KConfigSkeleton::ItemColor *>(appItem);
415 if (item) {
416 item->setValue(value);
417 } else {
418 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Color";
419 }
420 } else {
421 baseConfigItem->setValue(value);
422 }
423}
424
425QColor PrefsPrivate::getColor(const KConfigSkeleton::ItemColor *baseConfigItem) const
426{
427 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
428 if (appItem) {
429 auto item = dynamic_cast<KConfigSkeleton::ItemColor *>(appItem);
430 if (item) {
431 return item->value();
432 }
433 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Color";
434 }
435 return baseConfigItem->value();
436}
437
438void PrefsPrivate::setFont(KConfigSkeleton::ItemFont *baseConfigItem, const QFont &value)
439{
440 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
441 if (appItem) {
442 auto item = dynamic_cast<KConfigSkeleton::ItemFont *>(appItem);
443 if (item) {
444 item->setValue(value);
445 } else {
446 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Font";
447 }
448 } else {
449 baseConfigItem->setValue(value);
450 }
451}
452
453QFont PrefsPrivate::getFont(const KConfigSkeleton::ItemFont *baseConfigItem) const
454{
455 KConfigSkeletonItem *appItem = appConfigItem(baseConfigItem);
456 if (appItem) {
457 auto item = dynamic_cast<KConfigSkeleton::ItemFont *>(appItem);
458 if (item) {
459 return item->value();
460 }
461 qCCritical(CALENDARVIEW_LOG) << "Application config item" << appItem->name() << "is not of type Font";
462 }
463 return baseConfigItem->value();
464}
465
466Prefs::Prefs()
467 : d(new PrefsPrivate())
468{
469 // necessary to use CollectionColorAttribute in the EventViews::resourceColor and EventViews::setResourceColor
471}
472
473Prefs::Prefs(KCoreConfigSkeleton *appConfig)
474 : d(new PrefsPrivate(appConfig))
475{
476 // necessary to use CollectionColorAttribute in the EventViews::resourceColor and EventViews::setResourceColor
478}
479
480Prefs::~Prefs() = default;
481
482void Prefs::readConfig()
483{
484 d->mBaseConfig.load();
485 if (d->mAppConfig) {
486 d->mAppConfig->load();
487 }
488}
489
490void Prefs::writeConfig()
491{
492 d->mBaseConfig.save();
493 if (d->mAppConfig) {
494 d->mAppConfig->save();
495 }
496}
497
498void Prefs::setUseSystemColor(bool useSystemColor)
499{
500 d->setBool(d->mBaseConfig.useSystemColorItem(), useSystemColor);
501}
502
503bool Prefs::useSystemColor() const
504{
505 return d->getBool(d->mBaseConfig.useSystemColorItem());
506}
507
508void Prefs::setMarcusBainsShowSeconds(bool showSeconds)
509{
510 d->setBool(d->mBaseConfig.marcusBainsShowSecondsItem(), showSeconds);
511}
512
513bool Prefs::marcusBainsShowSeconds() const
514{
515 return d->getBool(d->mBaseConfig.marcusBainsShowSecondsItem());
516}
517
518void Prefs::setAgendaMarcusBainsLineLineColor(const QColor &color)
519{
520 d->setColor(d->mBaseConfig.agendaMarcusBainsLineLineColorItem(), color);
521}
522
523QColor Prefs::agendaMarcusBainsLineLineColor() const
524{
525 return d->getColor(d->mBaseConfig.agendaMarcusBainsLineLineColorItem());
526}
527
528void Prefs::setMarcusBainsEnabled(bool enabled)
529{
530 d->setBool(d->mBaseConfig.marcusBainsEnabledItem(), enabled);
531}
532
533bool Prefs::marcusBainsEnabled() const
534{
535 return d->getBool(d->mBaseConfig.marcusBainsEnabledItem());
536}
537
538void Prefs::setAgendaMarcusBainsLineFont(const QFont &font)
539{
540 d->setFont(d->mBaseConfig.agendaMarcusBainsLineFontItem(), font);
541}
542
543QFont Prefs::agendaMarcusBainsLineFont() const
544{
545 return d->getFont(d->mBaseConfig.agendaMarcusBainsLineFontItem());
546}
547
548void Prefs::setHourSize(int size)
549{
550 d->setInt(d->mBaseConfig.hourSizeItem(), size);
551}
552
553int Prefs::hourSize() const
554{
555 return d->getInt(d->mBaseConfig.hourSizeItem());
556}
557
558void Prefs::setDayBegins(const QDateTime &dateTime)
559{
560 d->setDateTime(d->mBaseConfig.dayBeginsItem(), dateTime);
561}
562
563QDateTime Prefs::dayBegins() const
564{
565 return d->getDateTime(d->mBaseConfig.dayBeginsItem());
566}
567
568void Prefs::setFirstDayOfWeek(const int day)
569{
570 d->setInt(d->mBaseConfig.weekStartDayItem(), day - 1);
571}
572
573int Prefs::firstDayOfWeek() const
574{
575 return d->getInt(d->mBaseConfig.weekStartDayItem()) + 1;
576}
577
578void Prefs::setWorkingHoursStart(const QDateTime &dateTime)
579{
580 d->setDateTime(d->mBaseConfig.workingHoursStartItem(), dateTime);
581}
582
583QDateTime Prefs::workingHoursStart() const
584{
585 return d->getDateTime(d->mBaseConfig.workingHoursStartItem());
586}
587
588void Prefs::setWorkingHoursEnd(const QDateTime &dateTime)
589{
590 d->setDateTime(d->mBaseConfig.workingHoursEndItem(), dateTime);
591}
592
593QDateTime Prefs::workingHoursEnd() const
594{
595 return d->getDateTime(d->mBaseConfig.workingHoursEndItem());
596}
597
598void Prefs::setSelectionStartsEditor(bool startEditor)
599{
600 d->setBool(d->mBaseConfig.selectionStartsEditorItem(), startEditor);
601}
602
603bool Prefs::selectionStartsEditor() const
604{
605 return d->getBool(d->mBaseConfig.selectionStartsEditorItem());
606}
607
608void Prefs::setAgendaGridWorkHoursBackgroundColor(const QColor &color)
609{
610 d->setColor(d->mBaseConfig.agendaGridWorkHoursBackgroundColorItem(), color);
611}
612
613QColor Prefs::agendaGridWorkHoursBackgroundColor() const
614{
615 return d->getColor(d->mBaseConfig.agendaGridWorkHoursBackgroundColorItem());
616}
617
618void Prefs::setAgendaGridHighlightColor(const QColor &color)
619{
620 d->setColor(d->mBaseConfig.agendaGridHighlightColorItem(), color);
621}
622
623QColor Prefs::agendaGridHighlightColor() const
624{
625 return d->getColor(d->mBaseConfig.agendaGridHighlightColorItem());
626}
627
628void Prefs::setAgendaGridBackgroundColor(const QColor &color)
629{
630 d->setColor(d->mBaseConfig.agendaGridBackgroundColorItem(), color);
631}
632
633QColor Prefs::agendaGridBackgroundColor() const
634{
635 return d->getColor(d->mBaseConfig.agendaGridBackgroundColorItem());
636}
637
638void Prefs::setEnableAgendaItemIcons(bool enable)
639{
640 d->setBool(d->mBaseConfig.enableAgendaItemIconsItem(), enable);
641}
642
643bool Prefs::enableAgendaItemIcons() const
644{
645 return d->getBool(d->mBaseConfig.enableAgendaItemIconsItem());
646}
647
648void Prefs::setTodosUseCategoryColors(bool useColors)
649{
650 d->setBool(d->mBaseConfig.todosUseCategoryColorsItem(), useColors);
651}
652
653bool Prefs::todosUseCategoryColors() const
654{
655 return d->getBool(d->mBaseConfig.todosUseCategoryColorsItem());
656}
657
658void Prefs::setAgendaHolidaysBackgroundColor(const QColor &color) const
659{
660 d->setColor(d->mBaseConfig.agendaHolidaysBackgroundColorItem(), color);
661}
662
663QColor Prefs::agendaHolidaysBackgroundColor() const
664{
665 return d->getColor(d->mBaseConfig.agendaHolidaysBackgroundColorItem());
666}
667
668void Prefs::setAgendaViewColors(int colors)
669{
670 d->setInt(d->mBaseConfig.agendaViewColorsItem(), colors);
671}
672
673int Prefs::agendaViewColors() const
674{
675 return d->getInt(d->mBaseConfig.agendaViewColorsItem());
676}
677
678void Prefs::setAgendaViewFont(const QFont &font)
679{
680 d->setFont(d->mBaseConfig.agendaViewFontItem(), font);
681}
682
683QFont Prefs::agendaViewFont() const
684{
685 return d->getFont(d->mBaseConfig.agendaViewFontItem());
686}
687
688void Prefs::setMonthViewFont(const QFont &font)
689{
690 d->setFont(d->mBaseConfig.monthViewFontItem(), font);
691}
692
693QFont Prefs::monthViewFont() const
694{
695 return d->getFont(d->mBaseConfig.monthViewFontItem());
696}
697
698QColor Prefs::monthGridBackgroundColor() const
699{
700 return d->getColor(d->mBaseConfig.monthGridBackgroundColorItem());
701}
702
703void Prefs::setMonthGridBackgroundColor(const QColor &color)
704{
705 d->setColor(d->mBaseConfig.monthGridBackgroundColorItem(), color);
706}
707
708QColor Prefs::monthGridWorkHoursBackgroundColor() const
709{
710 return d->getColor(d->mBaseConfig.monthGridWorkHoursBackgroundColorItem());
711}
712
713void Prefs::monthGridWorkHoursBackgroundColor(const QColor &color)
714{
715 d->setColor(d->mBaseConfig.monthGridWorkHoursBackgroundColorItem(), color);
716}
717
718int Prefs::monthViewColors() const
719{
720 return d->getInt(d->mBaseConfig.monthViewColorsItem());
721}
722
723void Prefs::setMonthViewColors(int colors) const
724{
725 d->setInt(d->mBaseConfig.monthViewColorsItem(), colors);
726}
727
728void Prefs::setEnableMonthItemIcons(bool enable)
729{
730 d->setBool(d->mBaseConfig.enableMonthItemIconsItem(), enable);
731}
732
733bool Prefs::enableMonthItemIcons() const
734{
735 return d->getBool(d->mBaseConfig.enableMonthItemIconsItem());
736}
737
738bool Prefs::showTimeInMonthView() const
739{
740 return d->getBool(d->mBaseConfig.showTimeInMonthViewItem());
741}
742
743void Prefs::setShowTimeInMonthView(bool show)
744{
745 d->setBool(d->mBaseConfig.showTimeInMonthViewItem(), show);
746}
747
748bool Prefs::showTodosMonthView() const
749{
750 return d->getBool(d->mBaseConfig.showTodosMonthViewItem());
751}
752
753void Prefs::setShowTodosMonthView(bool enable)
754{
755 d->setBool(d->mBaseConfig.showTodosMonthViewItem(), enable);
756}
757
758bool Prefs::showJournalsMonthView() const
759{
760 return d->getBool(d->mBaseConfig.showJournalsMonthViewItem());
761}
762
763void Prefs::setShowJournalsMonthView(bool enable)
764{
765 d->setBool(d->mBaseConfig.showJournalsMonthViewItem(), enable);
766}
767
768bool Prefs::fullViewMonth() const
769{
770 return d->getBool(d->mBaseConfig.fullViewMonthItem());
771}
772
773void Prefs::setFullViewMonth(bool fullView)
774{
775 d->setBool(d->mBaseConfig.fullViewMonthItem(), fullView);
776}
777
778bool Prefs::sortCompletedTodosSeparately() const
779{
780 return d->getBool(d->mBaseConfig.sortCompletedTodosSeparatelyItem());
781}
782
783void Prefs::setSortCompletedTodosSeparately(bool enable)
784{
785 d->setBool(d->mBaseConfig.sortCompletedTodosSeparatelyItem(), enable);
786}
787
788void Prefs::setEnableToolTips(bool enable)
789{
790 d->setBool(d->mBaseConfig.enableToolTipsItem(), enable);
791}
792
793bool Prefs::enableToolTips() const
794{
795 return d->getBool(d->mBaseConfig.enableToolTipsItem());
796}
797
798void Prefs::setShowTodosAgendaView(bool show)
799{
800 d->setBool(d->mBaseConfig.showTodosAgendaViewItem(), show);
801}
802
803bool Prefs::showTodosAgendaView() const
804{
805 return d->getBool(d->mBaseConfig.showTodosAgendaViewItem());
806}
807
808void Prefs::setAgendaTimeLabelsFont(const QFont &font)
809{
810 d->setFont(d->mBaseConfig.agendaTimeLabelsFontItem(), font);
811}
812
813QFont Prefs::agendaTimeLabelsFont() const
814{
815 return d->getFont(d->mBaseConfig.agendaTimeLabelsFontItem());
816}
817
818QTimeZone Prefs::timeZone() const
819{
821}
822
823bool Prefs::colorAgendaBusyDays() const
824{
825 return d->getBool(d->mBaseConfig.colorBusyDaysEnabledItem());
826}
827
828bool Prefs::colorMonthBusyDays() const
829{
830 return d->getBool(d->mBaseConfig.colorMonthBusyDaysEnabledItem());
831}
832
833QColor Prefs::viewBgBusyColor() const
834{
835 return d->getColor(d->mBaseConfig.viewBgBusyColorItem());
836}
837
838void Prefs::setViewBgBusyColor(const QColor &color)
839{
840 d->mBaseConfig.mViewBgBusyColor = color;
841}
842
843QColor Prefs::holidayColor() const
844{
845 return d->getColor(d->mBaseConfig.holidayColorItem());
846}
847
848void Prefs::setHolidayColor(const QColor &color)
849{
850 d->mBaseConfig.mHolidayColor = color;
851}
852
853QColor Prefs::agendaViewBackgroundColor() const
854{
855 return d->getColor(d->mBaseConfig.agendaBgColorItem());
856}
857
858void Prefs::setAgendaViewBackgroundColor(const QColor &color)
859{
860 d->mBaseConfig.mAgendaBgColor = color;
861}
862
863QColor Prefs::workingHoursColor() const
864{
865 return d->getColor(d->mBaseConfig.workingHoursColorItem());
866}
867
868void Prefs::setWorkingHoursColor(const QColor &color)
869{
870 d->mBaseConfig.mWorkingHoursColor = color;
871}
872
873QColor Prefs::todoDueTodayColor() const
874{
875 return d->getColor(d->mBaseConfig.todoDueTodayColorItem());
876}
877
878void Prefs::setTodoDueTodayColor(const QColor &color)
879{
880 d->mBaseConfig.mTodoDueTodayColor = color;
881}
882
883QColor Prefs::todoOverdueColor() const
884{
885 return d->getColor(d->mBaseConfig.todoOverdueColorItem());
886}
887
888void Prefs::setTodoOverdueColor(const QColor &color)
889{
890 d->mBaseConfig.mTodoOverdueColor = color;
891}
892
893void Prefs::setColorAgendaBusyDays(bool enable)
894{
895 d->mBaseConfig.mColorBusyDaysEnabled = enable;
896}
897
898void Prefs::setColorMonthBusyDays(bool enable)
899{
900 d->mBaseConfig.mColorMonthBusyDaysEnabled = enable;
901}
902
903void Prefs::setResourceColor(const QString &cal, const QColor &color)
904{
905 d->mBaseConfig.setResourceColor(cal, color);
906}
907
908QColor Prefs::resourceColorKnown(const QString &cal) const
909{
910 QColor color;
911 if (!cal.isEmpty()) {
912 color = d->mBaseConfig.mResourceColors.value(cal);
913 }
914 return color;
915}
916
917QColor Prefs::resourceColor(const QString &cal)
918{
919 if (cal.isEmpty()) {
920 return d->mBaseConfig.mDefaultResourceColor;
921 }
922
923 QColor color = resourceColorKnown(cal);
924
925 // assign default color if enabled
926 if (!color.isValid() && d->getBool(d->mBaseConfig.assignDefaultResourceColorsItem())) {
927 color.setRgb(0x37, 0x7A, 0xBC); // blueish
928 const int seed = d->getInt(d->mBaseConfig.defaultResourceColorSeedItem());
929 const QStringList colors = d->getStringList(d->mBaseConfig.defaultResourceColorsItem());
930 if (seed > 0 && seed - 1 < colors.size()) {
931 color = QColor::fromString(colors[seed - 1]);
932 } else {
933 color.setRgb(QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256));
934 }
935 d->setInt(d->mBaseConfig.defaultResourceColorSeedItem(), (seed + 1));
936 d->mBaseConfig.setResourceColor(cal, color);
937 }
938 if (color.isValid()) {
939 return color;
940 } else {
941 return d->mBaseConfig.mDefaultResourceColor;
942 }
943}
944
945QStringList Prefs::timeScaleTimezones() const
946{
947 return d->mBaseConfig.timeScaleTimezones();
948}
949
950void Prefs::setTimeScaleTimezones(const QStringList &list)
951{
952 d->mBaseConfig.setTimeScaleTimezones(list);
953}
954
955KConfigSkeleton::ItemFont *Prefs::fontItem(const QString &name) const
956{
957 KConfigSkeletonItem *item = d->mAppConfig ? d->mAppConfig->findItem(name) : nullptr;
958
959 if (!item) {
960 item = d->mBaseConfig.findItem(name);
961 }
962
963 return dynamic_cast<KConfigSkeleton::ItemFont *>(item);
964}
965
966QStringList Prefs::selectedPlugins() const
967{
968 return d->mBaseConfig.mSelectedPlugins;
969}
970
971QStringList Prefs::decorationsAtAgendaViewTop() const
972{
973 return d->mBaseConfig.decorationsAtAgendaViewTop();
974}
975
976QStringList Prefs::decorationsAtAgendaViewBottom() const
977{
978 return d->mBaseConfig.decorationsAtAgendaViewBottom();
979}
980
981void Prefs::setSelectedPlugins(const QStringList &plugins)
982{
983 d->mBaseConfig.setSelectedPlugins(plugins);
984}
985
986void Prefs::setDecorationsAtAgendaViewTop(const QStringList &decorations)
987{
988 d->mBaseConfig.setDecorationsAtAgendaViewTop(decorations);
989}
990
991void Prefs::setDecorationsAtAgendaViewBottom(const QStringList &decorations)
992{
993 d->mBaseConfig.setDecorationsAtAgendaViewBottom(decorations);
994}
995
996QSet<EventViews::EventView::ItemIcon> Prefs::agendaViewIcons() const
997{
998 return d->mBaseConfig.mAgendaViewIcons;
999}
1000
1001void Prefs::setAgendaViewIcons(const QSet<EventViews::EventView::ItemIcon> &icons)
1002{
1003 d->mBaseConfig.mAgendaViewIcons = icons;
1004}
1005
1006QSet<EventViews::EventView::ItemIcon> Prefs::monthViewIcons() const
1007{
1008 return d->mBaseConfig.mMonthViewIcons;
1009}
1010
1011void Prefs::setMonthViewIcons(const QSet<EventViews::EventView::ItemIcon> &icons)
1012{
1013 d->mBaseConfig.mMonthViewIcons = icons;
1014}
1015
1016void Prefs::setFlatListTodo(bool enable)
1017{
1018 d->mBaseConfig.mFlatListTodo = enable;
1019}
1020
1021bool Prefs::flatListTodo() const
1022{
1023 return d->mBaseConfig.mFlatListTodo;
1024}
1025
1026void Prefs::setFullViewTodo(bool enable)
1027{
1028 d->mBaseConfig.mFullViewTodo = enable;
1029}
1030
1031bool Prefs::fullViewTodo() const
1032{
1033 return d->mBaseConfig.mFullViewTodo;
1034}
1035
1036bool Prefs::enableTodoQuickSearch() const
1037{
1038 return d->mBaseConfig.mEnableTodoQuickSearch;
1039}
1040
1041void Prefs::setEnableTodoQuickSearch(bool enable)
1042{
1043 d->mBaseConfig.mEnableTodoQuickSearch = enable;
1044}
1045
1046bool Prefs::enableQuickTodo() const
1047{
1048 return d->mBaseConfig.mEnableQuickTodo;
1049}
1050
1051void Prefs::setEnableQuickTodo(bool enable)
1052{
1053 d->mBaseConfig.mEnableQuickTodo = enable;
1054}
1055
1056bool Prefs::highlightTodos() const
1057{
1058 return d->mBaseConfig.mHighlightTodos;
1059}
1060
1061void Prefs::setHighlightTodos(bool highlight)
1062{
1063 d->mBaseConfig.mHighlightTodos = highlight;
1064}
1065
1066KConfig *Prefs::config() const
1067{
1068 return d->mAppConfig ? d->mAppConfig->config() : d->mBaseConfig.config();
1069}
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 May 2 2025 11:51:37 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.