moved kdeaccessibility kdeaddons kdeadmin kdeartwork kdebindings kdeedu kdegames...
[kdeedu.git] / libkdeedu / extdate / extdatetimeedit.h
blob86d5c1a62c68fa3482181b04babc837862f0cef9
1 /****************************************************************************
2 **
3 **
4 ** Definition of date and time edit classes
5 **
6 ** Created : 001103
7 **
8 ** Original QDateTimeEdit Copyright (C) 2000 Trolltech AS. All rights reserved.
9 **
10 ** >> modifications to introduce ExtDate (C) 2004 Jason Harris <jharris@30doradus.org>
11 ** >> ExtDate modifications are licensed under the GPL: http://www.gnu.org/licenses/gpl.html
13 ** This file may be distributed and/or modified under the terms of the
14 ** GNU General Public License version 2 as published by the Free Software
15 ** Foundation and appearing in the file LICENSE.GPL included in the
16 ** packaging of this file.
18 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
19 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
23 **********************************************************************/
25 #ifndef EXTDATETIMEEDIT_H
26 #define EXTDATETIMEEDIT_H
28 #ifndef QT_H
29 #include <qwidget.h>
30 #include <qstring.h>
31 #endif // QT_H
33 #include "extdatetime.h"
35 #ifndef QT_NO_DATETIMEEDIT
37 class QTimeEdit;
39 class ExtDateTimeEditBase : public QWidget
41 Q_OBJECT
42 public:
43 ExtDateTimeEditBase( QWidget* parent=0, const char* name=0 )
44 : QWidget( parent, name ) {}
46 virtual bool setFocusSection( int sec ) = 0;
47 virtual QString sectionFormattedText( int sec ) = 0;
48 virtual void addNumber( int sec, int num ) = 0;
49 virtual void removeLastNumber( int sec ) = 0;
51 public slots:
52 virtual void stepUp() = 0;
53 virtual void stepDown() = 0;
55 private:
56 #if defined(Q_DISABLE_COPY) // Disabled copy constructor and operator=
57 ExtDateTimeEditBase( const ExtDateTimeEditBase & );
58 ExtDateTimeEditBase &operator=( const ExtDateTimeEditBase & );
59 #endif
62 class ExtDateEditPrivate;
64 class KDE_EXPORT ExtDateEdit : public ExtDateTimeEditBase
66 Q_OBJECT
67 Q_ENUMS( Order )
68 Q_PROPERTY( Order order READ order WRITE setOrder )
69 // Q_PROPERTY( ExtDate date READ date WRITE setDate )
70 Q_PROPERTY( bool autoAdvance READ autoAdvance WRITE setAutoAdvance )
71 // Q_PROPERTY( ExtDate maxValue READ maxValue WRITE setMaxValue )
72 // Q_PROPERTY( ExtDate minValue READ minValue WRITE setMinValue )
74 public:
75 ExtDateEdit( QWidget* parent=0, const char* name=0 );
76 ExtDateEdit( const ExtDate& date, QWidget* parent=0, const char* name=0 );
77 ~ExtDateEdit();
79 enum Order { DMY, MDY, YMD, YDM };
81 QSize sizeHint() const;
82 QSize minimumSizeHint() const;
84 public slots:
85 virtual void setDate( const ExtDate& date );
87 public:
88 ExtDate date() const;
89 virtual void setOrder( Order order );
90 Order order() const;
91 virtual void setAutoAdvance( bool advance );
92 bool autoAdvance() const;
94 virtual void setMinValue( const ExtDate& d ) { setRange( d, maxValue() ); }
95 ExtDate minValue() const;
96 virtual void setMaxValue( const ExtDate& d ) { setRange( minValue(), d ); }
97 ExtDate maxValue() const;
98 virtual void setRange( const ExtDate& min, const ExtDate& max );
99 QString separator() const;
100 virtual void setSeparator( const QString& s );
102 // Make removeFirstNumber() virtual in ExtDateTimeEditBase in 4.0
103 void removeFirstNumber( int sec );
105 signals:
106 void valueChanged( const ExtDate& date );
108 protected:
109 bool event( QEvent *e );
110 void timerEvent( QTimerEvent * );
111 void resizeEvent( QResizeEvent * );
112 void stepUp();
113 void stepDown();
114 QString sectionFormattedText( int sec );
115 void addNumber( int sec, int num );
117 void removeLastNumber( int sec );
118 bool setFocusSection( int s );
120 virtual void setYear( int year );
121 virtual void setMonth( int month );
122 virtual void setDay( int day );
123 virtual void fix();
124 virtual bool outOfRange( int y, int m, int d ) const;
126 protected slots:
127 void updateButtons();
129 private:
130 void init();
131 int sectionOffsetEnd( int sec ) const;
132 int sectionLength( int sec ) const;
133 QString sectionText( int sec ) const;
134 ExtDateEditPrivate* d;
136 #if defined(Q_DISABLE_COPY)
137 ExtDateEdit( const ExtDateEdit & );
138 ExtDateEdit &operator=( const ExtDateEdit & );
139 #endif
142 // class QTimeEditPrivate;
144 // class Q_EXPORT QTimeEdit : public ExtDateTimeEditBase
145 // {
146 // Q_OBJECT
147 // Q_SETS( Display )
148 // Q_PROPERTY( QTime time READ time WRITE setTime )
149 // Q_PROPERTY( bool autoAdvance READ autoAdvance WRITE setAutoAdvance )
150 // Q_PROPERTY( QTime maxValue READ maxValue WRITE setMaxValue )
151 // Q_PROPERTY( QTime minValue READ minValue WRITE setMinValue )
152 // Q_PROPERTY( Display display READ display WRITE setDisplay )
154 // public:
155 // enum Display {
156 // Hours = 0x01,
157 // Minutes = 0x02,
158 // Seconds = 0x04,
159 // /*Reserved = 0x08,*/
160 // AMPM = 0x10
161 // };
163 // QTimeEdit( QWidget* parent=0, const char* name=0 );
164 // QTimeEdit( const QTime& time, QWidget* parent=0, const char* name=0 );
165 // ~QTimeEdit();
167 // QSize sizeHint() const;
168 // QSize minimumSizeHint() const;
170 // public slots:
171 // virtual void setTime( const QTime& time );
173 // public:
174 // QTime time() const;
175 // virtual void setAutoAdvance( bool advance );
176 // bool autoAdvance() const;
178 // virtual void setMinValue( const QTime& d ) { setRange( d, maxValue() ); }
179 // QTime minValue() const;
180 // virtual void setMaxValue( const QTime& d ) { setRange( minValue(), d ); }
181 // QTime maxValue() const;
182 // virtual void setRange( const QTime& min, const QTime& max );
183 // QString separator() const;
184 // virtual void setSeparator( const QString& s );
186 // uint display() const;
187 // void setDisplay( uint disp );
189 // // Make removeFirstNumber() virtual in ExtDateTimeEditBase in 4.0
190 // void removeFirstNumber( int sec );
192 // signals:
193 // void valueChanged( const QTime& time );
195 // protected:
196 // bool event( QEvent *e );
197 // void timerEvent( QTimerEvent *e );
198 // void resizeEvent( QResizeEvent * );
199 // void stepUp();
200 // void stepDown();
201 // QString sectionFormattedText( int sec );
202 // void addNumber( int sec, int num );
203 // void removeLastNumber( int sec );
204 // bool setFocusSection( int s );
206 // virtual bool outOfRange( int h, int m, int s ) const;
207 // virtual void setHour( int h );
208 // virtual void setMinute( int m );
209 // virtual void setSecond( int s );
211 // protected slots:
212 // void updateButtons();
214 // private:
215 // void init();
216 // QString sectionText( int sec );
217 // QTimeEditPrivate* d;
219 // #if defined(Q_DISABLE_COPY)
220 // QTimeEdit( const QTimeEdit & );
221 // QTimeEdit &operator=( const QTimeEdit & );
222 // #endif
223 // };
226 class ExtDateTimeEditPrivate;
228 class KDE_EXPORT ExtDateTimeEdit : public QWidget
230 Q_OBJECT
231 // Q_PROPERTY( ExtDateTime dateTime READ dateTime WRITE setDateTime )
233 public:
234 ExtDateTimeEdit( QWidget* parent=0, const char* name=0 );
235 ExtDateTimeEdit( const ExtDateTime& datetime, QWidget* parent=0,
236 const char* name=0 );
237 ~ExtDateTimeEdit();
239 QSize sizeHint() const;
240 QSize minimumSizeHint() const;
242 public slots:
243 virtual void setDateTime( const ExtDateTime & dt );
245 public:
246 ExtDateTime dateTime() const;
248 ExtDateEdit* dateEdit() { return de; }
249 QTimeEdit* timeEdit() { return te; }
251 virtual void setAutoAdvance( bool advance );
252 bool autoAdvance() const;
254 signals:
255 void valueChanged( const ExtDateTime& datetime );
257 protected:
258 // ### make init() private in Qt 4.0
259 void init();
260 void resizeEvent( QResizeEvent * );
262 protected slots:
263 // ### make these two functions private in Qt 4.0,
264 // and merge them into one with no parameter
265 void newValue( const ExtDate& d );
266 void newValue( const QTime& t );
268 private:
269 ExtDateEdit* de;
270 QTimeEdit* te;
271 ExtDateTimeEditPrivate* d;
273 #if defined(Q_DISABLE_COPY)
274 ExtDateTimeEdit( const ExtDateTimeEdit & );
275 ExtDateTimeEdit &operator=( const ExtDateTimeEdit & );
276 #endif
279 class QNumberSection
281 public:
282 QNumberSection( int selStart = 0, int selEnd = 0, bool separat = TRUE, int actual = -1 )
283 : selstart( selStart ), selend( selEnd ), act( actual ), sep( separat )
285 int selectionStart() const { return selstart; }
286 void setSelectionStart( int s ) { selstart = s; }
287 int selectionEnd() const { return selend; }
288 void setSelectionEnd( int s ) { selend = s; }
289 int width() const { return selend - selstart; }
290 int index() const { return act; }
291 bool separator() const { return sep; }
292 Q_DUMMY_COMPARISON_OPERATOR( QNumberSection )
293 private:
294 int selstart :12;
295 int selend :12;
296 int act :7;
297 bool sep :1;
300 class ExtDateTimeEditorPrivate;
302 class ExtDateTimeEditor : public QWidget
304 Q_OBJECT
305 public:
306 ExtDateTimeEditor( ExtDateTimeEditBase * parent=0,
307 const char * name=0 );
308 ~ExtDateTimeEditor();
310 // void setControlWidget( ExtDateTimeEditBase * widget );
311 // ExtDateTimeEditBase * controlWidget() const;
313 void setSeparator( const QString& s );
314 QString separator() const;
316 int focusSection() const;
317 bool setFocusSection( int s );
318 void appendSection( const QNumberSection& sec );
319 void clearSections();
320 void setSectionSelection( int sec, int selstart, int selend );
321 bool eventFilter( QObject *o, QEvent *e );
322 int sectionAt( const QPoint &p );
323 int mapSection( int sec );
325 protected:
326 void init();
327 bool event( QEvent *e );
328 void resizeEvent( QResizeEvent * );
329 void paintEvent( QPaintEvent * );
330 void mousePressEvent( QMouseEvent *e );
332 private:
333 ExtDateTimeEditBase* cw;
334 ExtDateTimeEditorPrivate* d;
337 #endif
338 #endif