1/* This file is part of the KDE project
2 Copyright (C) 2007 Dag Andersen <danders@get2net>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17* Boston, MA 02110-1301, USA.
18*/
19
20#ifndef KPTCALENDARMODEL_H
21#define KPTCALENDARMODEL_H
22
23#include "kplatomodels_export.h"
24
25#include "kptitemmodelbase.h"
26#include "kptcalendar.h"
27#include "kptcalendarmodel.h"
28
29#include "kcalendar/kdatetable.h"
30
31class QPoint;
32class QDragMoveEvent;
33class QPainter;
34
35namespace KPlato
36{
37
38class View;
39class Project;
40class Calendar;
41class CalendarDay;
42
43class KPLATOMODELS_EXPORT CalendarDayItemModelBase : public ItemModelBase
44{
45 Q_OBJECT
46public:
47 explicit CalendarDayItemModelBase( QObject *parent = 0 );
48 ~CalendarDayItemModelBase();
49
50 virtual void setCalendar( Calendar *calendar );
51 virtual Calendar *calendar() const { return m_calendar; }
52 virtual void setProject( Project *project );
53
54 CalendarDay *day( const QModelIndex &index ) const;
55// TimeInterval *interval( const QModelIndex &index ) const;
56
57// QModelIndex insertInterval ( TimeInterval *ti, CalendarDay *day );
58// void removeInterval( TimeInterval *ti );
59
60// CalendarDay *parentDay( const TimeInterval *ti ) const { return m_days.value( const_cast<TimeInterval*>( ti ) ); }
61
62protected slots:
63 void slotCalendarToBeRemoved( const Calendar *calendar );
64
65protected:
66 Calendar *m_calendar; // current calendar
67// QMap<TimeInterval*, CalendarDay*> m_days;
68};
69
70
71class KPLATOMODELS_EXPORT CalendarItemModel : public ItemModelBase
72{
73 Q_OBJECT
74 Q_ENUMS( Properties )
75public:
76 explicit CalendarItemModel( QObject *parent = 0 );
77 ~CalendarItemModel();
78
79 enum Properties {
80 Name = 0,
81 TimeZone
82 };
83 const QMetaEnum columnMap() const;
84
85 virtual void setProject( Project *project );
86
87 virtual Qt::ItemFlags flags( const QModelIndex & index ) const;
88
89 virtual QModelIndex parent( const QModelIndex & index ) const;
90 virtual QModelIndex index( int row, int column, const QModelIndex & parent = QModelIndex() ) const;
91 QModelIndex index( const Calendar *calendar, int column = 0 ) const;
92
93 virtual int columnCount( const QModelIndex & parent = QModelIndex() ) const;
94 virtual int rowCount( const QModelIndex & parent = QModelIndex() ) const;
95
96 virtual QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const;
97 virtual bool setData( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole );
98
99
100 virtual QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
101
102 virtual QMimeData * mimeData( const QModelIndexList & indexes ) const;
103 virtual QStringList mimeTypes () const;
104 virtual Qt::DropActions supportedDropActions() const;
105 virtual bool dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent );
106 using ItemModelBase::dropAllowed;
107 bool dropAllowed( Calendar *on, const QMimeData *data );
108
109 Calendar *calendar( const QModelIndex &index ) const;
110 QModelIndex insertCalendar( Calendar *calendar, int pos, Calendar *parent = 0 );
111 void removeCalendar( QList<Calendar*> lst );
112 void removeCalendar( Calendar *calendar );
113
114protected slots:
115 void slotCalendarChanged( Calendar* );
116 void slotCalendarToBeInserted( const Calendar *parent, int row );
117 void slotCalendarInserted( const Calendar *calendar );
118 void slotCalendarToBeRemoved( const Calendar *calendar );
119 void slotCalendarRemoved( const Calendar *calendar );
120
121protected:
122 QVariant name( const Calendar *calendar, int role ) const;
123 bool setName( Calendar *calendar, const QVariant &value, int role );
124 QVariant timeZone( const Calendar *calendar, int role ) const;
125 bool setTimeZone( Calendar *calendar, const QVariant &value, int role );
126
127 QList<Calendar*> calendarList( QDataStream &stream ) const;
128
129private:
130 Calendar *m_calendar; // test for sane operation
131};
132
133class KPLATOMODELS_EXPORT CalendarDayItemModel : public CalendarDayItemModelBase
134{
135 Q_OBJECT
136public:
137 explicit CalendarDayItemModel( QObject *parent = 0 );
138 ~CalendarDayItemModel();
139
140 virtual void setCalendar( Calendar *calendar );
141
142 virtual Qt::ItemFlags flags( const QModelIndex & index ) const;
143
144 virtual QModelIndex parent( const QModelIndex & index ) const;
145 virtual bool hasChildren( const QModelIndex & parent = QModelIndex() ) const;
146 virtual QModelIndex index( int row, int column, const QModelIndex & parent = QModelIndex() ) const;
147 QModelIndex index( const CalendarDay* day ) const;
148 QModelIndex index( const TimeInterval* ti ) const;
149
150 virtual int columnCount( const QModelIndex & parent = QModelIndex() ) const;
151 virtual int rowCount( const QModelIndex & parent = QModelIndex() ) const;
152
153 virtual QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const;
154 virtual bool setData( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole );
155
156
157 virtual QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
158
159 CalendarDay *day( const QModelIndex &index ) const;
160 TimeInterval *interval( const QModelIndex &index ) const;
161
162 QAbstractItemDelegate *createDelegate( int column, QWidget *parent ) const;
163 QModelIndex insertInterval ( TimeInterval *ti, CalendarDay *day );
164 void removeInterval( TimeInterval *ti );
165 QModelIndex insertDay ( CalendarDay *day );
166 void removeDay ( CalendarDay *day );
167
168 bool isDate( const CalendarDay *day ) const;
169 bool isWeekday( const CalendarDay *day ) const;
170
171protected slots:
172 void slotDayChanged( CalendarDay *day );
173 void slotTimeIntervalChanged( TimeInterval *ti );
174
175/* void slotDayToBeAdded( CalendarDay *day, int row );
176 void slotDayAdded( CalendarDay *day );
177 void slotDayToBeRemoved( CalendarDay *day );
178 void slotDayRemoved( CalendarDay *day );*/
179
180// void slotWorkIntervalToBeAdded( CalendarDay *day, TimeInterval *ti, int row );
181 void slotWorkIntervalAdded( CalendarDay *day, TimeInterval *ti );
182// void slotWorkIntervalToBeRemoved( CalendarDay *day, TimeInterval *ti );
183 void slotWorkIntervalRemoved( CalendarDay *day, TimeInterval *ti );
184
185protected:
186/* QVariant date( const CalendarDay *day, int role ) const;
187 bool setDate( CalendarDay *day, const QVariant &value, int role );*/
188 QVariant name( int weekday, int role ) const;
189 QVariant dayState( const CalendarDay *day, int role ) const;
190 bool setDayState( CalendarDay *day, const QVariant &value, int role );
191/* QVariant intervalStart( const TimeInterval *ti, int role ) const;
192 bool setIntervalStart( TimeInterval *ti, const QVariant &value, int role );
193 QVariant intervalEnd( const TimeInterval *ti, int role ) const;
194 bool setIntervalEnd( TimeInterval *ti, const QVariant &value, int role );*/
195 QVariant workDuration( const CalendarDay *day, int role ) const;
196// QVariant intervalDuration( const TimeInterval *ti, int role ) const;
197
198 void addIntervals( CalendarDay *day );
199 void removeIntervals( CalendarDay *day );
200
201};
202
203//----->
204class KPLATOMODELS_EXPORT DateTableDataModel : public KDateTableDataModel
205{
206 Q_OBJECT
207public:
208 explicit DateTableDataModel(QObject *parent);
209
210 /// Fetch data for @p date, @p dataType specifies the type of data
211 virtual QVariant data( const QDate &date, int role = Qt::DisplayRole, int dataType = -1 ) const;
212 virtual QVariant weekDayData( int day, int role = Qt::DisplayRole ) const;
213 virtual QVariant weekNumberData( int week, int role = Qt::DisplayRole ) const;
214
215public slots:
216 void setCalendar( Calendar *calendar );
217
218signals:
219 void reset();
220 void dataChanged( const QDate &start, const QDate &end );
221
222protected:
223 QVariant data( const Calendar &cal, const QDate &date, int role ) const;
224
225private:
226 Calendar *m_calendar;
227};
228
229//-------
230class KPLATOMODELS_EXPORT DateTableDateDelegate : public KDateTableDateDelegate
231{
232 Q_OBJECT
233public:
234 explicit DateTableDateDelegate(QObject *parent = 0);
235 ~DateTableDateDelegate() {}
236
237 virtual QRectF paint( QPainter *painter, const StyleOptionViewItem &option, const QDate &date, KDateTableDataModel *model );
238};
239
240class KPLATOMODELS_EXPORT CalendarExtendedItemModel : public CalendarItemModel
241{
242 Q_OBJECT
243public:
244 explicit CalendarExtendedItemModel( QObject *parent = 0 );
245
246 virtual Qt::ItemFlags flags( const QModelIndex & index ) const;
247
248 using CalendarItemModel::index;
249 virtual QModelIndex index( int row, int column, const QModelIndex & parent = QModelIndex() ) const;
250
251 virtual int columnCount( const QModelIndex & parent = QModelIndex() ) const;
252
253 virtual QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const;
254 virtual bool setData( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole );
255
256
257 virtual QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
258
259 int columnNumber( const QString &name ) const;
260};
261
262
263} //KPlato namespace
264
265#endif
266