File indexing completed on 2025-03-09 04:51:37

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Sandro Knauß <knauss@kolabsys.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0005  */
0006 
0007 #include "quickview.h"
0008 #include "korganizer_debug.h"
0009 #include "ui_quickview.h"
0010 
0011 #include <Akonadi/CalendarUtils>
0012 
0013 #include <KCalendarCore/Event>
0014 
0015 #include <EventViews/AgendaView>
0016 
0017 #include <KCheckableProxyModel>
0018 #include <KConfigGroup>
0019 #include <KSharedConfig>
0020 
0021 #include <KWindowConfig>
0022 #include <QDialogButtonBox>
0023 #include <QPushButton>
0024 #include <QSplitter>
0025 #include <QVBoxLayout>
0026 #include <QWindow>
0027 
0028 namespace
0029 {
0030 static const char myQuickviewConfigGroupName[] = "Quickview";
0031 }
0032 
0033 Quickview::Quickview(const Akonadi::CollectionCalendar::Ptr &calendar, const QString &title)
0034     : QDialog()
0035     , mUi(new Ui_quickview)
0036 {
0037     auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this);
0038     auto mainWidget = new QWidget(this);
0039     auto mainLayout = new QVBoxLayout(this);
0040     mainLayout->addWidget(mainWidget);
0041     connect(buttonBox, &QDialogButtonBox::accepted, this, &Quickview::accept);
0042     connect(buttonBox, &QDialogButtonBox::rejected, this, &Quickview::reject);
0043     auto w = new QWidget(this);
0044     mUi->setupUi(w);
0045     mainLayout->addWidget(w);
0046     mainLayout->addWidget(buttonBox);
0047 
0048     mAgendaView = new EventViews::AgendaView(QDate(), QDate(), false, false);
0049     mUi->mAgendaBtn->hide();
0050     mUi->mMothBtn->hide();
0051     mUi->mWeekBtn->hide();
0052     mUi->mDayBtn->hide();
0053 
0054     mAgendaView->addCalendar(calendar);
0055 
0056     mUi->calendar->addWidget(mAgendaView);
0057 
0058     setWindowTitle(title);
0059 
0060     connect(mUi->mTodayBtn, &QPushButton::clicked, this, &Quickview::onTodayClicked);
0061     connect(mUi->mNextBtn, &QPushButton::clicked, this, &Quickview::onNextClicked);
0062     connect(mUi->mPreviousBtn, &QPushButton::clicked, this, &Quickview::onPreviousClicked);
0063 
0064     onTodayClicked();
0065 
0066     readConfig();
0067 }
0068 
0069 Quickview::~Quickview()
0070 {
0071     writeConfig();
0072     delete mUi;
0073 }
0074 
0075 void Quickview::onNextClicked()
0076 {
0077     const QDate start = mAgendaView->startDate().addDays(mDayRange);
0078     mAgendaView->showDates(start, start.addDays(mDayRange - 1));
0079 }
0080 
0081 void Quickview::onPreviousClicked()
0082 {
0083     const QDate start = mAgendaView->startDate().addDays(-mDayRange);
0084     mAgendaView->showDates(start, start.addDays(mDayRange - 1));
0085 }
0086 
0087 void Quickview::onTodayClicked()
0088 {
0089     QDate start = QDate::currentDate();
0090     start = start.addDays(-QDate::currentDate().dayOfWeek() + 1);
0091     mAgendaView->showDates(start, start.addDays(mDayRange - 1));
0092 }
0093 
0094 void Quickview::readConfig()
0095 {
0096     create(); // ensure a window is created
0097     windowHandle()->resize(QSize(775, 600));
0098     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myQuickviewConfigGroupName));
0099     KWindowConfig::restoreWindowSize(windowHandle(), group);
0100     resize(windowHandle()->size()); // workaround for QTBUG-40584
0101 
0102     const QList<int> sizes = group.readEntry("Separator", QList<int>());
0103 
0104     // don't allow invalid/corrupted settings or else agenda becomes invisible
0105     if (sizes.count() >= 2 && !sizes.contains(0)) {
0106         mAgendaView->splitter()->setSizes(sizes);
0107     }
0108 }
0109 
0110 void Quickview::writeConfig()
0111 {
0112     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myQuickviewConfigGroupName));
0113     KWindowConfig::saveWindowSize(windowHandle(), group);
0114     const QList<int> list = mAgendaView->splitter()->sizes();
0115     group.writeEntry("Separator", list);
0116 
0117     group.sync();
0118 }
0119 
0120 #include "moc_quickview.cpp"