1 /****************************************************************************
2 ** $Id: qt/qdatetimeedit.h   3.3.8   edited Jan 11 14:46 $
3 **
4 ** Definition of date and time edit classes
5 **
6 ** Created : 001103
7 **
8 ** Copyright (C) 2005-2007 Trolltech ASA.  All rights reserved.
9 **
10 ** This file is part of the widgets module of the Qt GUI Toolkit.
11 **
12 ** This file may be distributed under the terms of the Q Public License
13 ** as defined by Trolltech ASA of Norway and appearing in the file
14 ** LICENSE.QPL included in the packaging of this file.
15 **
16 ** This file may be distributed and/or modified under the terms of the
17 ** GNU General Public License version 2 as published by the Free Software
18 ** Foundation and appearing in the file LICENSE.GPL included in the
19 ** packaging of this file.
20 **
21 ** Licensees holding valid Qt Enterprise Edition licenses may use this
22 ** file in accordance with the Qt Commercial License Agreement provided
23 ** with the Software.
24 **
25 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27 **
28 ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29 **   information about Qt Commercial License Agreements.
30 ** See http://www.trolltech.com/qpl/ for QPL licensing information.
31 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
32 **
33 ** Contact info@trolltech.com if any conditions of this licensing are
34 ** not clear to you.
35 **
36 **********************************************************************/
37 
38 #ifndef QDATETIMEEDIT_H
39 #define QDATETIMEEDIT_H
40 
41 #ifndef QT_H
42 #include "qwidget.h"
43 #include "qstring.h"
44 #include "qdatetime.h"
45 #endif // QT_H
46 
47 #ifndef QT_NO_DATETIMEEDIT
48 
49 class Q_EXPORT QDateTimeEditBase : public QWidget
50 {
51     Q_OBJECT
52 public:
53     QDateTimeEditBase( QWidget* parent=0, const char* name=0 )
QWidget(parent,name)54 	: QWidget( parent, name ) {}
55 
56     virtual bool setFocusSection( int sec ) = 0;
57     virtual QString sectionFormattedText( int sec ) = 0;
58     virtual void addNumber( int sec, int num ) = 0;
59     virtual void removeLastNumber( int sec ) = 0;
60 
61 public slots:
62     virtual void stepUp() = 0;
63     virtual void stepDown() = 0;
64 
65 private:
66 #if defined(Q_DISABLE_COPY) // Disabled copy constructor and operator=
67     QDateTimeEditBase( const QDateTimeEditBase & );
68     QDateTimeEditBase &operator=( const QDateTimeEditBase & );
69 #endif
70 };
71 
72 class QDateEditPrivate;
73 
74 class Q_EXPORT QDateEdit : public QDateTimeEditBase
75 {
76     Q_OBJECT
77     Q_ENUMS( Order )
78     Q_PROPERTY( Order order READ order WRITE setOrder )
79     Q_PROPERTY( QDate date READ date WRITE setDate )
80     Q_PROPERTY( bool autoAdvance READ autoAdvance WRITE setAutoAdvance )
81     Q_PROPERTY( QDate maxValue READ maxValue WRITE setMaxValue )
82     Q_PROPERTY( QDate minValue READ minValue WRITE setMinValue )
83 
84 public:
85     QDateEdit( QWidget* parent=0,  const char* name=0 );
86     QDateEdit( const QDate& date, QWidget* parent=0,  const char* name=0 );
87     ~QDateEdit();
88 
89     enum Order { DMY, MDY, YMD, YDM };
90 
91     QSize sizeHint() const;
92     QSize minimumSizeHint() const;
93 
94 public slots:
95     virtual void setDate( const QDate& date );
96 
97 public:
98     QDate date() const;
99     virtual void setOrder( Order order );
100     Order order() const;
101     virtual void setAutoAdvance( bool advance );
102     bool autoAdvance() const;
103 
setMinValue(const QDate & d)104     virtual void setMinValue( const QDate& d ) { setRange( d, maxValue() ); }
105     QDate minValue() const;
setMaxValue(const QDate & d)106     virtual void setMaxValue( const QDate& d ) { setRange( minValue(), d ); }
107     QDate maxValue() const;
108     virtual void setRange( const QDate& min, const QDate& max );
109     QString separator() const;
110     virtual void setSeparator( const QString& s );
111 
112     // Make removeFirstNumber() virtual in QDateTimeEditBase in 4.0
113     void removeFirstNumber( int sec );
114 
115 signals:
116     void valueChanged( const QDate& date );
117 
118 protected:
119     bool event( QEvent *e );
120     void timerEvent( QTimerEvent * );
121     void resizeEvent( QResizeEvent * );
122     void stepUp();
123     void stepDown();
124     QString sectionFormattedText( int sec );
125     void addNumber( int sec, int num );
126 
127     void removeLastNumber( int sec );
128     bool setFocusSection( int s );
129 
130     virtual void setYear( int year );
131     virtual void setMonth( int month );
132     virtual void setDay( int day );
133     virtual void fix();
134     virtual bool outOfRange( int y, int m, int d ) const;
135 
136 protected slots:
137     void updateButtons();
138 
139 private:
140     void init();
141     int sectionOffsetEnd( int sec ) const;
142     int sectionLength( int sec ) const;
143     QString sectionText( int sec ) const;
144     QDateEditPrivate* d;
145 
146 #if defined(Q_DISABLE_COPY)
147     QDateEdit( const QDateEdit & );
148     QDateEdit &operator=( const QDateEdit & );
149 #endif
150 };
151 
152 class QTimeEditPrivate;
153 
154 class Q_EXPORT QTimeEdit : public QDateTimeEditBase
155 {
156     Q_OBJECT
157     Q_SETS( Display )
158     Q_PROPERTY( QTime time READ time WRITE setTime )
159     Q_PROPERTY( bool autoAdvance READ autoAdvance WRITE setAutoAdvance )
160     Q_PROPERTY( QTime maxValue READ maxValue WRITE setMaxValue )
161     Q_PROPERTY( QTime minValue READ minValue WRITE setMinValue )
162     Q_PROPERTY( Display display READ display WRITE setDisplay )
163 
164 public:
165     enum Display {
166 	Hours	= 0x01,
167 	Minutes	= 0x02,
168 	Seconds	= 0x04,
169 	/*Reserved = 0x08,*/
170 	AMPM	= 0x10
171     };
172 
173     QTimeEdit( QWidget* parent=0,  const char* name=0 );
174     QTimeEdit( const QTime& time, QWidget* parent=0,  const char* name=0 );
175     ~QTimeEdit();
176 
177     QSize sizeHint() const;
178     QSize minimumSizeHint() const;
179 
180 public slots:
181     virtual void setTime( const QTime& time );
182 
183 public:
184     QTime time() const;
185     virtual void setAutoAdvance( bool advance );
186     bool autoAdvance() const;
187 
setMinValue(const QTime & d)188     virtual void setMinValue( const QTime& d ) { setRange( d, maxValue() ); }
189     QTime minValue() const;
setMaxValue(const QTime & d)190     virtual void setMaxValue( const QTime& d ) { setRange( minValue(), d ); }
191     QTime maxValue() const;
192     virtual void setRange( const QTime& min, const QTime& max );
193     QString separator() const;
194     virtual void setSeparator( const QString& s );
195 
196     uint display() const;
197     void setDisplay( uint disp );
198 
199     // Make removeFirstNumber() virtual in QDateTimeEditBase in 4.0
200     void removeFirstNumber( int sec );
201 
202 signals:
203     void valueChanged( const QTime& time );
204 
205 protected:
206     bool event( QEvent *e );
207     void timerEvent( QTimerEvent *e );
208     void resizeEvent( QResizeEvent * );
209     void stepUp();
210     void stepDown();
211     QString sectionFormattedText( int sec );
212     void addNumber( int sec, int num );
213     void removeLastNumber( int sec );
214     bool setFocusSection( int s );
215 
216     virtual bool outOfRange( int h, int m, int s ) const;
217     virtual void setHour( int h );
218     virtual void setMinute( int m );
219     virtual void setSecond( int s );
220 
221 protected slots:
222     void updateButtons();
223 
224 private:
225     void init();
226     QString sectionText( int sec );
227     QTimeEditPrivate* d;
228 
229 #if defined(Q_DISABLE_COPY)
230     QTimeEdit( const QTimeEdit & );
231     QTimeEdit &operator=( const QTimeEdit & );
232 #endif
233 };
234 
235 
236 class QDateTimeEditPrivate;
237 
238 class Q_EXPORT QDateTimeEdit : public QWidget
239 {
240     Q_OBJECT
241     Q_PROPERTY( QDateTime dateTime READ dateTime WRITE setDateTime )
242 
243 public:
244     QDateTimeEdit( QWidget* parent=0, const char* name=0 );
245     QDateTimeEdit( const QDateTime& datetime, QWidget* parent=0,
246 		   const char* name=0 );
247     ~QDateTimeEdit();
248 
249     QSize sizeHint() const;
250     QSize minimumSizeHint() const;
251 
252 public slots:
253     virtual void setDateTime( const QDateTime & dt );
254 
255 public:
256     QDateTime dateTime() const;
257 
dateEdit()258     QDateEdit* dateEdit() { return de; }
timeEdit()259     QTimeEdit* timeEdit() { return te; }
260 
261     virtual void setAutoAdvance( bool advance );
262     bool autoAdvance() const;
263 
264 signals:
265     void valueChanged( const QDateTime& datetime );
266 
267 protected:
268     // ### make init() private in Qt 4.0
269     void init();
270     void resizeEvent( QResizeEvent * );
271 
272 protected slots:
273     // ### make these two functions private in Qt 4.0,
274     //     and merge them into one with no parameter
275     void newValue( const QDate& d );
276     void newValue( const QTime& t );
277 
278 private:
279     QDateEdit* de;
280     QTimeEdit* te;
281     QDateTimeEditPrivate* d;
282 
283 #if defined(Q_DISABLE_COPY)
284     QDateTimeEdit( const QDateTimeEdit & );
285     QDateTimeEdit &operator=( const QDateTimeEdit & );
286 #endif
287 };
288 
289 #endif
290 #endif
291