File indexing completed on 2025-03-09 04:51:39
0001 /* 0002 This file is part of KOrganizer. 0003 0004 SPDX-FileCopyrightText: 2000, 2001, 2003 Cornelius Schumacher <schumacher@kde.org> 0005 SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com> 0006 SPDX-FileCopyrightText: 2005 Rafal Rzepecki <divide@users.sourceforge.net> 0007 SPDX-FileCopyrightText: 2008 Thomas Thrainer <tom_t@gmx.at> 0008 0009 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0010 */ 0011 0012 #include "kotodoview.h" 0013 #include "koeventpopupmenu.h" 0014 #include "prefs/koprefs.h" 0015 0016 #include <CalendarSupport/CalPrinter> 0017 0018 #include <Akonadi/CalendarUtils> 0019 #include <Akonadi/EntityTreeModel> 0020 0021 #include <QVBoxLayout> 0022 0023 KOTodoView::KOTodoView(bool sidebarView, QWidget *parent) 0024 : BaseView(parent) 0025 { 0026 auto eventPopup = new KOEventPopupMenu(this); 0027 mView = new EventViews::TodoView(KOPrefs::instance()->eventViewsPreferences(), sidebarView, parent); 0028 auto layout = new QVBoxLayout(this); 0029 layout->addWidget(mView); 0030 connect(mView, &EventViews::TodoView::printTodo, this, [this]() { 0031 printTodo(); 0032 }); 0033 connect(mView, &EventViews::TodoView::printPreviewTodo, this, &KOTodoView::printPreviewTodo); 0034 connect(mView, &EventViews::TodoView::purgeCompletedSignal, this, &KOTodoView::purgeCompletedSignal); 0035 0036 connect(mView, &EventViews::EventView::incidenceSelected, this, &BaseView::incidenceSelected); 0037 0038 connect(mView, &EventViews::EventView::showIncidenceSignal, this, &BaseView::showIncidenceSignal); 0039 0040 connect(mView, &EventViews::EventView::editIncidenceSignal, this, &BaseView::editIncidenceSignal); 0041 0042 connect(mView, &EventViews::EventView::deleteIncidenceSignal, this, &BaseView::deleteIncidenceSignal); 0043 0044 connect(mView, &EventViews::EventView::cutIncidenceSignal, this, &BaseView::cutIncidenceSignal); 0045 0046 connect(mView, &EventViews::EventView::copyIncidenceSignal, this, &BaseView::copyIncidenceSignal); 0047 0048 connect(mView, &EventViews::EventView::pasteIncidenceSignal, this, &BaseView::pasteIncidenceSignal); 0049 0050 connect(mView, &EventViews::EventView::toggleAlarmSignal, this, &BaseView::toggleAlarmSignal); 0051 0052 connect(mView, &EventViews::EventView::toggleTodoCompletedSignal, this, &BaseView::toggleTodoCompletedSignal); 0053 0054 connect(mView, &EventViews::EventView::copyIncidenceToResourceSignal, this, &BaseView::copyIncidenceToResourceSignal); 0055 0056 connect(mView, &EventViews::EventView::moveIncidenceToResourceSignal, this, &BaseView::moveIncidenceToResourceSignal); 0057 0058 connect(mView, &EventViews::EventView::dissociateOccurrencesSignal, this, &BaseView::dissociateOccurrencesSignal); 0059 0060 connect(mView, qOverload<>(&EventViews::TodoView::newEventSignal), this, qOverload<>(&KOTodoView::newEventSignal)); 0061 0062 connect(mView, qOverload<const QDate &>(&EventViews::TodoView::newEventSignal), this, qOverload<const QDate &>(&KOTodoView::newEventSignal)); 0063 0064 connect(mView, qOverload<const QDateTime &>(&EventViews::TodoView::newEventSignal), this, qOverload<const QDateTime &>(&KOTodoView::newEventSignal)); 0065 0066 connect(mView, 0067 qOverload<const QDateTime &, const QDateTime &>(&EventViews::TodoView::newEventSignal), 0068 this, 0069 qOverload<const QDateTime &, const QDateTime &>(&KOTodoView::newEventSignal)); 0070 0071 connect(mView, &EventViews::EventView::newTodoSignal, this, &BaseView::newTodoSignal); 0072 0073 connect(mView, &EventViews::EventView::newSubTodoSignal, this, &BaseView::newSubTodoSignal); 0074 0075 connect(mView, &EventViews::TodoView::fullViewChanged, this, &KOTodoView::fullViewChanged); 0076 0077 connect(mView, &EventViews::TodoView::unSubTodoSignal, this, &KOTodoView::unSubTodoSignal); 0078 connect(mView, &EventViews::TodoView::unAllSubTodoSignal, this, &KOTodoView::unAllSubTodoSignal); 0079 0080 connect(mView, 0081 static_cast<void (EventViews::TodoView::*)(const Akonadi::Item &)>(&EventViews::TodoView ::createEvent), 0082 eventPopup, 0083 static_cast<void (KOEventPopupMenu::*)(const Akonadi::Item &)>(&KOEventPopupMenu::createEvent)); 0084 connect(mView, 0085 static_cast<void (EventViews::TodoView::*)(const Akonadi::Item &)>(&EventViews::TodoView ::createNote), 0086 eventPopup, 0087 static_cast<void (KOEventPopupMenu::*)(const Akonadi::Item &)>(&KOEventPopupMenu::createNote)); 0088 } 0089 0090 KOTodoView::~KOTodoView() = default; 0091 0092 void KOTodoView::setModel(QAbstractItemModel *model) 0093 { 0094 BaseView::setModel(model); 0095 mView->setModel(model); 0096 } 0097 0098 void KOTodoView::calendarAdded(const Akonadi::CollectionCalendar::Ptr &calendar) 0099 { 0100 BaseView::calendarAdded(calendar); 0101 mView->addCalendar(calendar); 0102 } 0103 0104 void KOTodoView::calendarRemoved(const Akonadi::CollectionCalendar::Ptr &calendar) 0105 { 0106 BaseView::calendarRemoved(calendar); 0107 mView->removeCalendar(calendar); 0108 } 0109 0110 Akonadi::Item::List KOTodoView::selectedIncidences() 0111 { 0112 return mView->selectedIncidences(); 0113 } 0114 0115 KCalendarCore::DateList KOTodoView::selectedIncidenceDates() 0116 { 0117 return {}; 0118 } 0119 0120 void KOTodoView::setIncidenceChanger(Akonadi::IncidenceChanger *changer) 0121 { 0122 BaseView::setIncidenceChanger(changer); 0123 mView->setIncidenceChanger(changer); 0124 } 0125 0126 void KOTodoView::showDates(const QDate &start, const QDate &end, const QDate &) 0127 { 0128 // There is nothing to do here for the Todo View 0129 Q_UNUSED(start) 0130 Q_UNUSED(end) 0131 } 0132 0133 void KOTodoView::showIncidences(const Akonadi::Item::List &incidenceList, const QDate &date) 0134 { 0135 Q_UNUSED(incidenceList) 0136 Q_UNUSED(date) 0137 } 0138 0139 void KOTodoView::updateView() 0140 { 0141 // View is always updated, it's connected to ETM. 0142 } 0143 0144 void KOTodoView::changeIncidenceDisplay(const Akonadi::Item &, Akonadi::IncidenceChanger::ChangeType) 0145 { 0146 // Don't do anything, model is connected to ETM, it's up to date 0147 } 0148 0149 void KOTodoView::updateConfig() 0150 { 0151 mView->updateConfig(); 0152 } 0153 0154 void KOTodoView::clearSelection() 0155 { 0156 mView->clearSelection(); 0157 } 0158 0159 void KOTodoView::printTodo() 0160 { 0161 printTodo(false); 0162 } 0163 0164 void KOTodoView::printPreviewTodo() 0165 { 0166 printTodo(true); 0167 } 0168 0169 void KOTodoView::printTodo(bool preview) 0170 { 0171 const Akonadi::Item::List selectedItems = mView->selectedIncidences(); 0172 if (selectedItems.count() != 1) { 0173 return; 0174 } 0175 0176 Akonadi::Item todoItem = selectedItems.first(); 0177 KCalendarCore::Todo::Ptr todo = Akonadi::CalendarUtils::todo(todoItem); 0178 Q_ASSERT(todo); 0179 0180 const auto calendar = calendarForCollection(todoItem.storageCollectionId()); 0181 0182 CalendarSupport::CalPrinter printer(this, calendar, true); 0183 connect(this, &KOTodoView::configChanged, &printer, &CalendarSupport::CalPrinter::updateConfig); 0184 0185 KCalendarCore::Incidence::List selectedIncidences; 0186 selectedIncidences.append(todo); 0187 0188 QDate todoDate; 0189 if (todo->hasStartDate()) { 0190 todoDate = todo->dtStart().date(); 0191 } else { 0192 todoDate = todo->dtDue().date(); 0193 } 0194 0195 printer.print(CalendarSupport::CalPrinterBase::Incidence, todoDate, todoDate, selectedIncidences, preview); 0196 } 0197 0198 void KOTodoView::getHighlightMode(bool &highlightEvents, bool &highlightTodos, bool &highlightJournals) 0199 { 0200 highlightTodos = KOPrefs::instance()->mHighlightTodos; 0201 highlightEvents = !highlightTodos; 0202 highlightJournals = false; 0203 } 0204 0205 void KOTodoView::saveViewState() 0206 { 0207 mView->saveViewState(); 0208 } 0209 0210 void KOTodoView::restoreViewState() 0211 { 0212 mView->restoreViewState(); 0213 } 0214 0215 void KOTodoView::restoreLayout(KConfig *config, const QString &group, bool minimalDefaults) 0216 { 0217 mView->restoreLayout(config, group, minimalDefaults); 0218 } 0219 0220 void KOTodoView::saveLayout(KConfig *config, const QString &group) const 0221 { 0222 mView->saveLayout(config, group); 0223 } 0224 0225 bool KOTodoView::usesFullWindow() 0226 { 0227 return mView->usesFullWindow(); 0228 } 0229 0230 CalendarSupport::CalPrinterBase::PrintType KOTodoView::printType() const 0231 { 0232 return CalendarSupport::CalPrinterBase::Todolist; 0233 } 0234 0235 #include "moc_kotodoview.cpp"