86 lines
2.6 KiB
C++
86 lines
2.6 KiB
C++
/*
|
|
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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <QtGui>
|
|
#include <QtWidgets>
|
|
#include <QString>
|
|
|
|
#include "CalendarDelegate.hpp"
|
|
|
|
void CalendarDelegate::OnCalendarClicked(const QDate &date)
|
|
{
|
|
_date = date;
|
|
commitData(qobject_cast<QWidget*>(sender()));
|
|
closeEditor(qobject_cast<QWidget*>(sender()), QAbstractItemDelegate::SubmitModelCache);
|
|
}
|
|
|
|
void CalendarDelegate::OnCalendarSelectionChanged(void)
|
|
{
|
|
QCalendarWidget* calendar = qobject_cast<QCalendarWidget*>(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, QVariant::fromValue(_date.toString(_dateFormat)));
|
|
}
|
|
|
|
void CalendarDelegate::setEditorData(QWidget *editor,
|
|
const QModelIndex &index) const
|
|
{
|
|
QCalendarWidget *calendar = qobject_cast<QCalendarWidget *>(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);
|
|
}
|
|
}
|