/* Copyright 2017 Grégory Soutadé This file is part of KissCount. KissCount is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. KissCount is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with KissCount. If not, see . */ #include #include #include #include "CalendarDelegate.hpp" void CalendarDelegate::OnCalendarClicked(const QDate &date) { _date = date; commitData(qobject_cast(sender())); closeEditor(qobject_cast(sender()), QAbstractItemDelegate::SubmitModelCache); } void CalendarDelegate::OnCalendarSelectionChanged(void) { QCalendarWidget* calendar = qobject_cast(sender()); _date = calendar->selectedDate(); commitData(calendar); } QWidget * CalendarDelegate::createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const { QCalendarWidget* calendar = new QCalendarWidget(parent->parentWidget()->parentWidget()); calendar->setGridVisible(false); calendar->setFirstDayOfWeek(Qt::Monday); calendar->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); calendar->setMinimumWidth(300); calendar->setMinimumHeight(200); connect(calendar, SIGNAL(clicked (const QDate&)), this, SLOT(OnCalendarClicked(const QDate&))); connect(calendar, SIGNAL(selectionChanged (void)), this, SLOT(OnCalendarSelectionChanged(void))); return calendar; } void CalendarDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { if (index.row() < (int)_accounts->size()) { Account ac = (*_accounts)[index.row()]; if (_start) ac.start_date = _date; else ac.end_date = _date; } model->setData(index, qVariantFromValue(_date.toString(_dateFormat))); } void CalendarDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QCalendarWidget *calendar = qobject_cast(editor); if (index.row() >= (int)_accounts->size()) calendar->setSelectedDate(_date); else { Account ac = (*_accounts)[index.row()]; if (_start) calendar->setSelectedDate(ac.start_date); else calendar->setSelectedDate(ac.end_date); } }