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 | |
31 | class QPoint; |
32 | class QDragMoveEvent; |
33 | class QPainter; |
34 | |
35 | namespace KPlato |
36 | { |
37 | |
38 | class View; |
39 | class Project; |
40 | class Calendar; |
41 | class CalendarDay; |
42 | |
43 | class KPLATOMODELS_EXPORT CalendarDayItemModelBase : public ItemModelBase |
44 | { |
45 | Q_OBJECT |
46 | public: |
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 | |
62 | protected slots: |
63 | void slotCalendarToBeRemoved( const Calendar *calendar ); |
64 | |
65 | protected: |
66 | Calendar *m_calendar; // current calendar |
67 | // QMap<TimeInterval*, CalendarDay*> m_days; |
68 | }; |
69 | |
70 | |
71 | class KPLATOMODELS_EXPORT CalendarItemModel : public ItemModelBase |
72 | { |
73 | Q_OBJECT |
74 | Q_ENUMS( Properties ) |
75 | public: |
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 ( 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 | |
114 | protected 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 | |
121 | protected: |
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 | |
129 | private: |
130 | Calendar *m_calendar; // test for sane operation |
131 | }; |
132 | |
133 | class KPLATOMODELS_EXPORT CalendarDayItemModel : public CalendarDayItemModelBase |
134 | { |
135 | Q_OBJECT |
136 | public: |
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 ( 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 | |
171 | protected 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 | |
185 | protected: |
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 | //-----> |
204 | class KPLATOMODELS_EXPORT DateTableDataModel : public KDateTableDataModel |
205 | { |
206 | Q_OBJECT |
207 | public: |
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 | |
215 | public slots: |
216 | void setCalendar( Calendar *calendar ); |
217 | |
218 | signals: |
219 | void reset(); |
220 | void dataChanged( const QDate &start, const QDate &end ); |
221 | |
222 | protected: |
223 | QVariant data( const Calendar &cal, const QDate &date, int role ) const; |
224 | |
225 | private: |
226 | Calendar *m_calendar; |
227 | }; |
228 | |
229 | //------- |
230 | class KPLATOMODELS_EXPORT DateTableDateDelegate : public KDateTableDateDelegate |
231 | { |
232 | Q_OBJECT |
233 | public: |
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 | |
240 | class KPLATOMODELS_EXPORT CalendarExtendedItemModel : public CalendarItemModel |
241 | { |
242 | Q_OBJECT |
243 | public: |
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 ( 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 | |