File indexing completed on 2024-06-02 05:26:14

0001 /*
0002   This file is part of KOrganizer.
0003 
0004   SPDX-FileCopyrightText: 2000-2003 Cornelius Schumacher <schumacher@kde.org>
0005   SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
0006 
0007   SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0008 */
0009 
0010 #include "koprefsdialogviews.h"
0011 
0012 #include "kocore.h"
0013 #include "koglobals.h"
0014 #include "koprefs.h"
0015 #include "widgets/kitemiconcheckcombo.h"
0016 #include <KLocalizedString>
0017 #include <KPluginFactory>
0018 #include <QCheckBox>
0019 #include <QFrame>
0020 #include <QGroupBox>
0021 #include <QLabel>
0022 #include <QSpinBox>
0023 #include <QTabWidget>
0024 #include <QVBoxLayout>
0025 
0026 K_PLUGIN_CLASS_WITH_JSON(KOPrefsDialogViews, "korganizer_configviews.json")
0027 
0028 KOPrefsDialogViews::KOPrefsDialogViews(QObject *parent, const KPluginMetaData &data)
0029     : Korganizer::KPrefsModule(KOPrefs::instance(), parent, data)
0030     , mMonthIconComboBox(new KItemIconCheckCombo(KItemIconCheckCombo::MonthType, widget()))
0031     , mAgendaIconComboBox(new KItemIconCheckCombo(KItemIconCheckCombo::AgendaType, widget()))
0032 {
0033     auto topTopLayout = new QVBoxLayout(widget());
0034     topTopLayout->setContentsMargins({});
0035     auto tabWidget = new QTabWidget(widget());
0036     tabWidget->setDocumentMode(true);
0037     topTopLayout->addWidget(tabWidget);
0038 
0039     connect(mMonthIconComboBox, &KPIM::KCheckComboBox::checkedItemsChanged, this, &Korganizer::KPrefsModule::slotWidChanged);
0040     connect(mAgendaIconComboBox, &KPIM::KCheckComboBox::checkedItemsChanged, this, &Korganizer::KPrefsModule::slotWidChanged);
0041 
0042     // Tab: Views->General
0043     auto generalFrame = new QFrame(widget());
0044     tabWidget->addTab(generalFrame, QIcon::fromTheme(QStringLiteral("view-choose")), i18nc("@title:tab general settings", "General"));
0045 
0046     QBoxLayout *generalLayout = new QVBoxLayout(generalFrame);
0047 
0048     // GroupBox: Views->General->Display Options
0049     auto gdisplayLayout = new QVBoxLayout;
0050     auto gdisplayBox = new QGroupBox(i18nc("@title:group", "Display Options"));
0051 
0052     QBoxLayout *nextDaysLayout = new QHBoxLayout;
0053     gdisplayLayout->addLayout(nextDaysLayout);
0054 
0055     Korganizer::KPrefsWidInt *nextDays = addWidInt(KOPrefs::instance()->nextXDaysItem());
0056     nextDays->spinBox()->setSuffix(i18nc("@label suffix in the N days spin box", " days"));
0057 
0058     nextDaysLayout->addWidget(nextDays->label());
0059     nextDaysLayout->addWidget(nextDays->spinBox());
0060     nextDaysLayout->addStretch(1);
0061 
0062     gdisplayLayout->addWidget(addWidBool(KOPrefs::instance()->enableToolTipsItem())->checkBox());
0063     gdisplayLayout->addWidget(addWidBool(KOPrefs::instance()->todosUseCategoryColorsItem())->checkBox());
0064     gdisplayBox->setLayout(gdisplayLayout);
0065     generalLayout->addWidget(gdisplayBox);
0066 
0067     // GroupBox: Views->General->Date Navigator
0068     auto datenavLayout = new QVBoxLayout;
0069     auto datenavBox = new QGroupBox(i18nc("@title:group", "Date Navigator"));
0070     datenavLayout->addWidget(addWidBool(KOPrefs::instance()->dailyRecurItem())->checkBox());
0071     datenavLayout->addWidget(addWidBool(KOPrefs::instance()->weeklyRecurItem())->checkBox());
0072     datenavLayout->addWidget(addWidBool(KOPrefs::instance()->highlightTodosItem())->checkBox());
0073     datenavLayout->addWidget(addWidBool(KOPrefs::instance()->highlightJournalsItem())->checkBox());
0074     datenavLayout->addWidget(addWidBool(KOPrefs::instance()->weekNumbersShowWorkItem())->checkBox());
0075     datenavBox->setLayout(datenavLayout);
0076     generalLayout->addWidget(datenavBox);
0077     generalLayout->addStretch(1);
0078 
0079     // Tab: Views->Agenda View
0080     auto agendaFrame = new QFrame(widget());
0081     tabWidget->addTab(agendaFrame, QIcon::fromTheme(QStringLiteral("view-calendar-workweek")), i18nc("@title:tab", "Agenda View"));
0082 
0083     QBoxLayout *agendaLayout = new QVBoxLayout(agendaFrame);
0084 
0085     // GroupBox: Views->Agenda View->Display Options
0086     auto adisplayLayout = new QVBoxLayout;
0087     auto adisplayBox = new QGroupBox(i18nc("@title:group", "Display Options"));
0088 
0089     auto hourSizeLayout = new QHBoxLayout;
0090     adisplayLayout->addLayout(hourSizeLayout);
0091 
0092     Korganizer::KPrefsWidInt *hourSize = addWidInt(KOPrefs::instance()->hourSizeItem());
0093     hourSize->spinBox()->setSuffix(i18nc("@label suffix in the hour size spin box", " pixels"));
0094 
0095     hourSizeLayout->addWidget(hourSize->label());
0096     hourSizeLayout->addWidget(hourSize->spinBox());
0097     hourSizeLayout->addStretch(1);
0098 
0099     adisplayLayout->addWidget(addWidBool(KOPrefs::instance()->enableAgendaItemIconsItem())->checkBox());
0100     adisplayLayout->addWidget(addWidBool(KOPrefs::instance()->showTodosAgendaViewItem())->checkBox());
0101     Korganizer::KPrefsWidBool *marcusBainsEnabled = addWidBool(KOPrefs::instance()->marcusBainsEnabledItem());
0102     adisplayLayout->addWidget(marcusBainsEnabled->checkBox());
0103 
0104     Korganizer::KPrefsWidBool *marcusBainsShowSeconds = addWidBool(KOPrefs::instance()->marcusBainsShowSecondsItem());
0105     connect(marcusBainsEnabled->checkBox(), &QAbstractButton::toggled, marcusBainsShowSeconds->checkBox(), &QWidget::setEnabled);
0106 
0107     adisplayLayout->addWidget(marcusBainsShowSeconds->checkBox());
0108     adisplayLayout->addWidget(addWidBool(KOPrefs::instance()->selectionStartsEditorItem())->checkBox());
0109     adisplayLayout->addWidget(mAgendaIconComboBox);
0110     adisplayBox->setLayout(adisplayLayout);
0111     agendaLayout->addWidget(adisplayBox);
0112 
0113     // GroupBox: Views->Agenda View->Color Usage
0114     agendaLayout->addWidget(addWidRadios(KOPrefs::instance()->agendaViewColorsItem())->groupBox());
0115 
0116     agendaLayout->addWidget(addWidBool(KOPrefs::instance()->colorBusyDaysEnabledItem())->checkBox());
0117 
0118     // GroupBox: Views->Agenda View->Multiple Calendars
0119     agendaLayout->addWidget(addWidRadios(KOPrefs::instance()->agendaViewCalendarDisplayItem())->groupBox());
0120 
0121     agendaLayout->addStretch(1);
0122 
0123     // Tab: Views->Month View
0124     auto monthFrame = new QFrame(widget());
0125     tabWidget->addTab(monthFrame, QIcon::fromTheme(QStringLiteral("view-calendar-month")), i18nc("@title:tab", "Month View"));
0126 
0127     QBoxLayout *monthLayout = new QVBoxLayout(monthFrame);
0128 
0129     // GroupBox: Views->Month View->Display Options
0130     auto mdisplayLayout = new QVBoxLayout;
0131     auto mdisplayBox = new QGroupBox(i18nc("@title:group", "Display Options"));
0132     /*mdisplayLayout->addWidget(
0133           addWidBool( KOPrefs::instance()->enableMonthScrollItem() )->checkBox() );*/
0134     mdisplayLayout->addWidget(addWidBool(KOPrefs::instance()->showTimeInMonthViewItem())->checkBox());
0135     mdisplayLayout->addWidget(addWidBool(KOPrefs::instance()->enableMonthItemIconsItem())->checkBox());
0136     mdisplayLayout->addWidget(addWidBool(KOPrefs::instance()->showTodosMonthViewItem())->checkBox());
0137     mdisplayLayout->addWidget(addWidBool(KOPrefs::instance()->showJournalsMonthViewItem())->checkBox());
0138     mdisplayBox->setLayout(mdisplayLayout);
0139 
0140     mdisplayLayout->addWidget(mMonthIconComboBox);
0141 
0142     monthLayout->addWidget(mdisplayBox);
0143 
0144     monthLayout->addWidget(addWidBool(KOPrefs::instance()->colorMonthBusyDaysEnabledItem())->checkBox());
0145 
0146     // GroupBox: Views->Month View->Color Usage
0147     monthLayout->addWidget(addWidRadios(KOPrefs::instance()->monthViewColorsItem())->groupBox());
0148     monthLayout->addStretch(1);
0149 
0150     // Tab: Views->Todo View
0151     auto todoFrame = new QFrame(widget());
0152     tabWidget->addTab(todoFrame, QIcon::fromTheme(QStringLiteral("view-calendar-tasks")), i18nc("@title:tab", "Todo View"));
0153 
0154     QBoxLayout *todoLayout = new QVBoxLayout(todoFrame);
0155 
0156     // GroupBox: Views->Todo View->Display Options
0157     auto tdisplayLayout = new QVBoxLayout;
0158     auto tdisplayBox = new QGroupBox(i18nc("@title:group", "Display Options"));
0159     tdisplayLayout->addWidget(addWidBool(KOPrefs::instance()->sortCompletedTodosSeparatelyItem())->checkBox());
0160     tdisplayBox->setLayout(tdisplayLayout);
0161     todoLayout->addWidget(tdisplayBox);
0162 
0163     // GroupBox: Views->Todo View->Other
0164     auto otherLayout = new QVBoxLayout;
0165     auto otherBox = new QGroupBox(i18nc("@title:group", "Other Options"));
0166     otherLayout->addWidget(addWidBool(KOPrefs::instance()->recordTodosInJournalsItem())->checkBox());
0167     otherBox->setLayout(otherLayout);
0168     todoLayout->addWidget(otherBox);
0169     todoLayout->addStretch(1);
0170 
0171     load();
0172 }
0173 
0174 void KOPrefsDialogViews::usrReadConfig()
0175 {
0176     mAgendaIconComboBox->setCheckedIcons(KOPrefs::instance()->eventViewsPreferences()->agendaViewIcons());
0177     mMonthIconComboBox->setCheckedIcons(KOPrefs::instance()->eventViewsPreferences()->monthViewIcons());
0178 }
0179 
0180 void KOPrefsDialogViews::usrWriteConfig()
0181 {
0182     KOPrefs::instance()->eventViewsPreferences()->setAgendaViewIcons(mAgendaIconComboBox->checkedIcons());
0183     KOPrefs::instance()->eventViewsPreferences()->setMonthViewIcons(mMonthIconComboBox->checkedIcons());
0184 }
0185 
0186 #include "koprefsdialogviews.moc"