File indexing completed on 2024-06-16 04:57:15
0001 /* 0002 This file is part of KOrganizer. 0003 SPDX-FileCopyrightText: 2001 Cornelius Schumacher <schumacher@kde.org> 0004 SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0007 */ 0008 0009 #include "koagendaview.h" 0010 #include "koeventpopupmenu.h" 0011 #include "prefs/koprefs.h" 0012 0013 #include <EventViews/AgendaView> 0014 0015 #include <QHBoxLayout> 0016 0017 class KOAgendaViewPrivate 0018 { 0019 public: 0020 KOAgendaViewPrivate(bool isSideBySide, KOAgendaView *parent) 0021 : q(parent) 0022 { 0023 mAgendaView = 0024 new EventViews::AgendaView(KOPrefs::instance()->eventViewsPreferences(), QDate::currentDate(), QDate::currentDate(), true, isSideBySide, parent); 0025 mPopup = q->eventPopup(); 0026 } 0027 0028 ~KOAgendaViewPrivate() 0029 { 0030 delete mAgendaView; 0031 delete mPopup; 0032 } 0033 0034 EventViews::AgendaView *mAgendaView = nullptr; 0035 KOEventPopupMenu *mPopup = nullptr; 0036 0037 private: 0038 KOAgendaView *const q; 0039 }; 0040 0041 KOAgendaView::KOAgendaView(QWidget *parent, bool isSideBySide) 0042 : KOEventView(parent) 0043 , d(new KOAgendaViewPrivate(isSideBySide, this)) 0044 { 0045 auto layout = new QHBoxLayout(this); 0046 layout->setContentsMargins({}); 0047 layout->addWidget(d->mAgendaView); 0048 0049 connect(d->mAgendaView, &EventViews::AgendaView::zoomViewHorizontally, this, &KOAgendaView::zoomViewHorizontally); 0050 0051 connect(d->mAgendaView, &EventViews::AgendaView::timeSpanSelectionChanged, this, &KOAgendaView::timeSpanSelectionChanged); 0052 0053 connect(d->mAgendaView, &EventViews::AgendaView::showIncidencePopupSignal, d->mPopup, &KOEventPopupMenu::showIncidencePopup); 0054 0055 connect(d->mAgendaView, &EventViews::AgendaView::showNewEventPopupSignal, this, &KOAgendaView::showNewEventPopup); 0056 0057 connect(d->mAgendaView, &EventViews::EventView::datesSelected, this, &KOEventView::datesSelected); 0058 0059 connect(d->mAgendaView, &EventViews::EventView::shiftedEvent, this, &KOEventView::shiftedEvent); 0060 0061 connect(d->mAgendaView, &EventViews::EventView::incidenceSelected, this, &KOrg::BaseView::incidenceSelected); 0062 0063 connect(d->mAgendaView, &EventViews::EventView::showIncidenceSignal, this, &KOrg::BaseView::showIncidenceSignal); 0064 0065 connect(d->mAgendaView, &EventViews::EventView::editIncidenceSignal, this, &KOrg::BaseView::editIncidenceSignal); 0066 0067 connect(d->mAgendaView, &EventViews::EventView::deleteIncidenceSignal, this, &KOrg::BaseView::deleteIncidenceSignal); 0068 0069 connect(d->mAgendaView, &EventViews::EventView::cutIncidenceSignal, this, &KOrg::BaseView::cutIncidenceSignal); 0070 0071 connect(d->mAgendaView, &EventViews::EventView::copyIncidenceSignal, this, &KOrg::BaseView::copyIncidenceSignal); 0072 0073 connect(d->mAgendaView, &EventViews::EventView::pasteIncidenceSignal, this, &KOrg::BaseView::pasteIncidenceSignal); 0074 0075 connect(d->mAgendaView, &EventViews::EventView::toggleAlarmSignal, this, &KOrg::BaseView::toggleAlarmSignal); 0076 0077 connect(d->mAgendaView, &EventViews::EventView::toggleTodoCompletedSignal, this, &KOrg::BaseView::toggleTodoCompletedSignal); 0078 0079 connect(d->mAgendaView, &EventViews::EventView::copyIncidenceToResourceSignal, this, &KOrg::BaseView::copyIncidenceToResourceSignal); 0080 0081 connect(d->mAgendaView, &EventViews::EventView::moveIncidenceToResourceSignal, this, &KOrg::BaseView::moveIncidenceToResourceSignal); 0082 0083 connect(d->mAgendaView, &EventViews::EventView::dissociateOccurrencesSignal, this, &KOrg::BaseView::dissociateOccurrencesSignal); 0084 0085 connect(d->mAgendaView, qOverload<>(&EventViews::AgendaView::newEventSignal), this, qOverload<>(&KOAgendaView::newEventSignal)); 0086 0087 connect(d->mAgendaView, qOverload<const QDate &>(&EventViews::AgendaView::newEventSignal), this, qOverload<const QDate &>(&KOAgendaView::newEventSignal)); 0088 0089 connect(d->mAgendaView, 0090 qOverload<const QDateTime &>(&EventViews::AgendaView::newEventSignal), 0091 this, 0092 qOverload<const QDateTime &>(&KOAgendaView::newEventSignal)); 0093 0094 connect(d->mAgendaView, 0095 qOverload<const QDateTime &, const QDateTime &>(&EventViews::AgendaView::newEventSignal), 0096 this, 0097 qOverload<const QDateTime &, const QDateTime &>(&KOAgendaView::newEventSignal)); 0098 0099 connect(d->mAgendaView, &EventViews::EventView::newTodoSignal, this, &KOrg::BaseView::newTodoSignal); 0100 0101 connect(d->mAgendaView, &EventViews::EventView::newSubTodoSignal, this, &KOrg::BaseView::newSubTodoSignal); 0102 0103 connect(d->mAgendaView, &EventViews::EventView::newJournalSignal, this, &KOrg::BaseView::newJournalSignal); 0104 0105 d->mAgendaView->show(); 0106 } 0107 0108 KOAgendaView::~KOAgendaView() = default; 0109 0110 void KOAgendaView::setModel(QAbstractItemModel *model) 0111 { 0112 KOEventView::setModel(model); 0113 d->mAgendaView->setModel(model); 0114 } 0115 0116 void KOAgendaView::zoomInVertically() 0117 { 0118 d->mAgendaView->zoomInVertically(); 0119 } 0120 0121 void KOAgendaView::zoomOutVertically() 0122 { 0123 d->mAgendaView->zoomOutVertically(); 0124 } 0125 0126 void KOAgendaView::zoomInHorizontally(QDate date) 0127 { 0128 d->mAgendaView->zoomInHorizontally(date); 0129 } 0130 0131 void KOAgendaView::zoomOutHorizontally(QDate date) 0132 { 0133 d->mAgendaView->zoomOutHorizontally(date); 0134 } 0135 0136 void KOAgendaView::zoomView(const int delta, const QPoint &pos, const Qt::Orientation orient) 0137 { 0138 d->mAgendaView->zoomView(delta, pos, orient); 0139 } 0140 0141 void KOAgendaView::enableAgendaUpdate(bool enable) 0142 { 0143 d->mAgendaView->enableAgendaUpdate(enable); 0144 } 0145 0146 int KOAgendaView::maxDatesHint() const 0147 { 0148 // Not sure about the max number of events, so return 0 for now. 0149 return 0; 0150 } 0151 0152 int KOAgendaView::currentDateCount() const 0153 { 0154 return d->mAgendaView->currentDateCount(); 0155 } 0156 0157 Akonadi::Item::List KOAgendaView::selectedIncidences() 0158 { 0159 return d->mAgendaView->selectedIncidences(); 0160 } 0161 0162 KCalendarCore::DateList KOAgendaView::selectedIncidenceDates() 0163 { 0164 return d->mAgendaView->selectedIncidenceDates(); 0165 } 0166 0167 bool KOAgendaView::eventDurationHint(QDateTime &startDt, QDateTime &endDt, bool &allDay) 0168 { 0169 return d->mAgendaView->eventDurationHint(startDt, endDt, allDay); 0170 } 0171 0172 /** returns if only a single cell is selected, or a range of cells */ 0173 bool KOAgendaView::selectedIsSingleCell() 0174 { 0175 return d->mAgendaView->selectedIsSingleCell(); 0176 } 0177 0178 void KOAgendaView::updateView() 0179 { 0180 d->mAgendaView->updateView(); 0181 } 0182 0183 void KOAgendaView::updateConfig() 0184 { 0185 d->mAgendaView->updateConfig(); 0186 } 0187 0188 void KOAgendaView::showDates(const QDate &start, const QDate &end, const QDate &) 0189 { 0190 d->mAgendaView->showDates(start, end); 0191 } 0192 0193 void KOAgendaView::showIncidences(const Akonadi::Item::List &incidences, const QDate &date) 0194 { 0195 d->mAgendaView->showIncidences(incidences, date); 0196 } 0197 0198 void KOAgendaView::changeIncidenceDisplayAdded(const Akonadi::Item &) 0199 { 0200 // Do nothing, EventViews::AgendaView knows when items change 0201 } 0202 0203 void KOAgendaView::changeIncidenceDisplay(const Akonadi::Item &, Akonadi::IncidenceChanger::ChangeType) 0204 { 0205 // Do nothing, EventViews::AgendaView knows when items change 0206 } 0207 0208 CalendarSupport::CalPrinter::PrintType KOAgendaView::printType() const 0209 { 0210 // If up to three days are selected, use day style, otherwise week 0211 if (currentDateCount() <= 3) { 0212 return CalendarSupport::CalPrinter::Day; 0213 } else { 0214 return CalendarSupport::CalPrinter::Week; 0215 } 0216 } 0217 0218 void KOAgendaView::readSettings() 0219 { 0220 d->mAgendaView->readSettings(); 0221 } 0222 0223 void KOAgendaView::readSettings(KConfig *config) 0224 { 0225 d->mAgendaView->readSettings(config); 0226 } 0227 0228 void KOAgendaView::writeSettings(KConfig *config) 0229 { 0230 d->mAgendaView->writeSettings(config); 0231 } 0232 0233 void KOAgendaView::clearSelection() 0234 { 0235 d->mAgendaView->clearSelection(); 0236 } 0237 0238 void KOAgendaView::deleteSelectedDateTime() 0239 { 0240 d->mAgendaView->deleteSelectedDateTime(); 0241 } 0242 0243 void KOAgendaView::setIncidenceChanger(Akonadi::IncidenceChanger *changer) 0244 { 0245 d->mAgendaView->setIncidenceChanger(changer); 0246 } 0247 0248 QDateTime KOAgendaView::selectionStart() 0249 { 0250 return d->mAgendaView->selectionStart(); 0251 } 0252 0253 QDateTime KOAgendaView::selectionEnd() 0254 { 0255 return d->mAgendaView->selectionEnd(); 0256 } 0257 0258 bool KOAgendaView::selectedIsAllDay() 0259 { 0260 return d->mAgendaView->selectedIsAllDay(); 0261 } 0262 0263 void KOAgendaView::setTypeAheadReceiver(QObject *o) 0264 { 0265 d->mAgendaView->setTypeAheadReceiver(o); 0266 } 0267 0268 void KOAgendaView::setChanges(EventViews::EventView::Changes changes) 0269 { 0270 // Only ConfigChanged and FilterChanged should go from korg->AgendaView 0271 // All other values are already detected inside AgendaView. 0272 // We could just pass "changes", but korganizer does a very bad job at 0273 // determining what changed, for example if you move an incidence 0274 // the BaseView::setDateRange(...) is called causing DatesChanged 0275 // flag to be on, when no dates changed. 0276 EventViews::EventView::Changes c; 0277 if (changes.testFlag(EventViews::EventView::ConfigChanged)) { 0278 c = EventViews::EventView::ConfigChanged; 0279 } 0280 0281 if (changes.testFlag(EventViews::EventView::FilterChanged)) { 0282 c |= EventViews::EventView::FilterChanged; 0283 } 0284 0285 d->mAgendaView->setChanges(c | d->mAgendaView->changes()); 0286 } 0287 0288 void KOAgendaView::setDateRange(const QDateTime &start, const QDateTime &end, const QDate &) 0289 { 0290 d->mAgendaView->setDateRange(start, end); 0291 } 0292 0293 void KOAgendaView::calendarAdded(const Akonadi::CollectionCalendar::Ptr &calendar) 0294 { 0295 d->mAgendaView->addCalendar(calendar); 0296 } 0297 0298 void KOAgendaView::calendarRemoved(const Akonadi::CollectionCalendar::Ptr &calendar) 0299 { 0300 d->mAgendaView->removeCalendar(calendar); 0301 } 0302 0303 #include "moc_koagendaview.cpp"