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"