summaryrefslogtreecommitdiffabout
path: root/libkdepim
Unidiff
Diffstat (limited to 'libkdepim') (more/less context) (ignore whitespace changes)
-rw-r--r--libkdepim/kdateedit.cpp9
-rw-r--r--libkdepim/kdateedit.h2
2 files changed, 11 insertions, 0 deletions
diff --git a/libkdepim/kdateedit.cpp b/libkdepim/kdateedit.cpp
index 3d9e690..bf38479 100644
--- a/libkdepim/kdateedit.cpp
+++ b/libkdepim/kdateedit.cpp
@@ -1,326 +1,335 @@
1/* 1/*
2 This file is part of libkdepim. 2 This file is part of libkdepim.
3 3
4 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qapplication.h> 25#include <qapplication.h>
26#include <qevent.h> 26#include <qevent.h>
27#include <qlineedit.h> 27#include <qlineedit.h>
28#include <qpixmap.h> 28#include <qpixmap.h>
29#include <qpushbutton.h> 29#include <qpushbutton.h>
30 30
31#include <kdatepicker.h> 31#include <kdatepicker.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <kglobal.h> 33#include <kglobal.h>
34#include <kiconloader.h> 34#include <kiconloader.h>
35#include <klocale.h> 35#include <klocale.h>
36#include <kmessagebox.h> 36#include <kmessagebox.h>
37#include <knotifyclient.h> 37#include <knotifyclient.h>
38#include <qpalette.h> 38#include <qpalette.h>
39 39
40#include "kdateedit.h" 40#include "kdateedit.h"
41//#include "kdateedit.moc" 41//#include "kdateedit.moc"
42 42
43KDateEdit::KDateEdit(QWidget *parent, const char *name, bool withoutDP ) 43KDateEdit::KDateEdit(QWidget *parent, const char *name, bool withoutDP )
44 : QHBox(parent, name) 44 : QHBox(parent, name)
45{ 45{
46 dateFormShort = true; 46 dateFormShort = true;
47 withoutDp = withoutDP; 47 withoutDp = withoutDP;
48 mDateEdit = new QLineEdit(this); 48 mDateEdit = new QLineEdit(this);
49 mDateEdit->setText(KGlobal::locale()->formatDate(QDate::currentDate(),dateFormShort)); 49 mDateEdit->setText(KGlobal::locale()->formatDate(QDate::currentDate(),dateFormShort));
50 setFocusProxy(mDateEdit); 50 setFocusProxy(mDateEdit);
51 mDateEdit->installEventFilter(this); 51 mDateEdit->installEventFilter(this);
52 52
53 // Highlight Background and Textcolor 53 // Highlight Background and Textcolor
54 QPalette palette = QWidget::palette(); 54 QPalette palette = QWidget::palette();
55 unsigned char red, green, blue; 55 unsigned char red, green, blue;
56 red = palette.color( QPalette::Normal , QColorGroup::Background ).red() - 10; 56 red = palette.color( QPalette::Normal , QColorGroup::Background ).red() - 10;
57 green = palette.color( QPalette::Normal , QColorGroup::Background ).green() - 10; 57 green = palette.color( QPalette::Normal , QColorGroup::Background ).green() - 10;
58 blue = palette.color( QPalette::Normal , QColorGroup::Background ).blue() - 10; 58 blue = palette.color( QPalette::Normal , QColorGroup::Background ).blue() - 10;
59 palette.setColor( QColorGroup::Highlight, QColor(red,green,blue) ); 59 palette.setColor( QColorGroup::Highlight, QColor(red,green,blue) );
60 palette.setColor( QColorGroup::HighlightedText, palette.color( QPalette::Normal , QColorGroup::Foreground ) ); 60 palette.setColor( QColorGroup::HighlightedText, palette.color( QPalette::Normal , QColorGroup::Foreground ) );
61 mDateEdit->setPalette( palette ); 61 mDateEdit->setPalette( palette );
62 62
63 if ( withoutDP ) { 63 if ( withoutDP ) {
64 mDateFrame = 0; 64 mDateFrame = 0;
65 mDateButton = 0; 65 mDateButton = 0;
66 mDatePicker = 0; 66 mDatePicker = 0;
67 } else { 67 } else {
68 QPixmap pixmap = SmallIcon("smallcal"); 68 QPixmap pixmap = SmallIcon("smallcal");
69 mDateButton = new QPushButton(this); 69 mDateButton = new QPushButton(this);
70 mDateButton->setPixmap(pixmap); 70 mDateButton->setPixmap(pixmap);
71 QPixmap pixmap2 = SmallIcon("today_small");
72 QPushButton* nowButton = new QPushButton(this);
73 nowButton->setPixmap(pixmap2);
71 74
72 mDateFrame = new QVBox(0,0,WType_Popup); 75 mDateFrame = new QVBox(0,0,WType_Popup);
73 // mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 76 // mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
74 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 77 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
75 mDateFrame->setLineWidth(3); 78 mDateFrame->setLineWidth(3);
76 mDateFrame->hide(); 79 mDateFrame->hide();
77 80
78 mDatePicker = new KDatePicker(mDateFrame,QDate::currentDate()); 81 mDatePicker = new KDatePicker(mDateFrame,QDate::currentDate());
79 connect(mDatePicker,SIGNAL(dateEntered(QDate)),SLOT(setDate(QDate))); 82 connect(mDatePicker,SIGNAL(dateEntered(QDate)),SLOT(setDate(QDate)));
80 connect(mDatePicker,SIGNAL(dateEntered(QDate)),SIGNAL(dateChanged(QDate))); 83 connect(mDatePicker,SIGNAL(dateEntered(QDate)),SIGNAL(dateChanged(QDate)));
81 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(setDate(QDate))); 84 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(setDate(QDate)));
82 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SIGNAL(dateChanged(QDate))); 85 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SIGNAL(dateChanged(QDate)));
83 connect(mDatePicker,SIGNAL(dateSelected(QDate)),mDateFrame,SLOT(hide())); 86 connect(mDatePicker,SIGNAL(dateSelected(QDate)),mDateFrame,SLOT(hide()));
84 connect(mDateButton,SIGNAL(clicked()),SLOT(toggleDatePicker())); 87 connect(mDateButton,SIGNAL(clicked()),SLOT(toggleDatePicker()));
88 connect(nowButton,SIGNAL(clicked()),SLOT(goToNow()));
85 mDateButton->setFocusPolicy( QWidget::NoFocus ); 89 mDateButton->setFocusPolicy( QWidget::NoFocus );
86 mDateButton->setAutoDefault( false ); 90 mDateButton->setAutoDefault( false );
87 //mDateFrame->resize( 400, 300 ); 91 //mDateFrame->resize( 400, 300 );
88 92
89 } 93 }
90 connect(mDateEdit,SIGNAL(returnPressed()),SLOT(lineEnterPressed())); 94 connect(mDateEdit,SIGNAL(returnPressed()),SLOT(lineEnterPressed()));
91 connect(mDateEdit,SIGNAL(textChanged(const QString &)), 95 connect(mDateEdit,SIGNAL(textChanged(const QString &)),
92 SLOT(textChanged(const QString &))); 96 SLOT(textChanged(const QString &)));
93 97
94 // Create the keyword list. This will be used to match against when the user 98 // Create the keyword list. This will be used to match against when the user
95 // enters information. 99 // enters information.
96 mKeywordMap[i18n("tomorrow")] = 1; 100 mKeywordMap[i18n("tomorrow")] = 1;
97 mKeywordMap[i18n("today")] = 0; 101 mKeywordMap[i18n("today")] = 0;
98 mKeywordMap[i18n("yesterday")] = -1; 102 mKeywordMap[i18n("yesterday")] = -1;
99 103
100 /* 104 /*
101 * This loop uses some math tricks to figure out the offset in days 105 * This loop uses some math tricks to figure out the offset in days
102 * to the next date the given day of the week occurs. There 106 * to the next date the given day of the week occurs. There
103 * are two cases, that the new day is >= the current day, which means 107 * are two cases, that the new day is >= the current day, which means
104 * the new day has not occured yet or that the new day < the current day, 108 * the new day has not occured yet or that the new day < the current day,
105 * which means the new day is already passed (so we need to find the 109 * which means the new day is already passed (so we need to find the
106 * day in the next week). 110 * day in the next week).
107 */ 111 */
108 QString dayName; 112 QString dayName;
109 int currentDay = QDate::currentDate().dayOfWeek(); 113 int currentDay = QDate::currentDate().dayOfWeek();
110 for (int i = 1; i <= 7; ++i) 114 for (int i = 1; i <= 7; ++i)
111 { 115 {
112 dayName = KGlobal::locale()->weekDayName(i).lower(); 116 dayName = KGlobal::locale()->weekDayName(i).lower();
113 if (i >= currentDay) 117 if (i >= currentDay)
114 mKeywordMap[dayName] = i - currentDay; 118 mKeywordMap[dayName] = i - currentDay;
115 else 119 else
116 mKeywordMap[dayName] = 7 - currentDay + i; 120 mKeywordMap[dayName] = 7 - currentDay + i;
117 } 121 }
118 122
119 mTextChanged = false; 123 mTextChanged = false;
120 mHandleInvalid = false; 124 mHandleInvalid = false;
121 // QWidget::setTabOrder( mDateEdit, mDateButton ); 125 // QWidget::setTabOrder( mDateEdit, mDateButton );
122} 126}
123 127
124KDateEdit::~KDateEdit() 128KDateEdit::~KDateEdit()
125{ 129{
126 delete mDateFrame; 130 delete mDateFrame;
127} 131}
128void KDateEdit::clear() 132void KDateEdit::clear()
129{ 133{
130 bool b = mDateEdit->signalsBlocked(); 134 bool b = mDateEdit->signalsBlocked();
131 mDateEdit->blockSignals(true); 135 mDateEdit->blockSignals(true);
132 mDateEdit->setText(""); 136 mDateEdit->setText("");
133 mDateEdit->blockSignals(b); 137 mDateEdit->blockSignals(b);
134} 138}
139void KDateEdit::goToNow()
140{
141 setDate(QDate::currentDate() );
142 emit setTimeTo( QTime::currentTime() );
143}
135void KDateEdit::setDate(QDate newDate) 144void KDateEdit::setDate(QDate newDate)
136{ 145{
137 if (!newDate.isValid() && !mHandleInvalid) 146 if (!newDate.isValid() && !mHandleInvalid)
138 return; 147 return;
139 if ( readDate() == newDate ) 148 if ( readDate() == newDate )
140 return; 149 return;
141 QString dateString = ""; 150 QString dateString = "";
142 if(newDate.isValid()) 151 if(newDate.isValid())
143 dateString = KGlobal::locale()->formatDate( newDate, dateFormShort ); 152 dateString = KGlobal::locale()->formatDate( newDate, dateFormShort );
144 153
145 mTextChanged = false; 154 mTextChanged = false;
146 155
147 // We do not want to generate a signal here, since we explicity setting 156 // We do not want to generate a signal here, since we explicity setting
148 // the date 157 // the date
149 bool b = mDateEdit->signalsBlocked(); 158 bool b = mDateEdit->signalsBlocked();
150 mDateEdit->blockSignals(true); 159 mDateEdit->blockSignals(true);
151 mDateEdit->setText(dateString); 160 mDateEdit->setText(dateString);
152 mDateEdit->blockSignals(b); 161 mDateEdit->blockSignals(b);
153} 162}
154 163
155void KDateEdit::setDate( QDate date,int *cpos,const int key ,const bool dateFormShort) 164void KDateEdit::setDate( QDate date,int *cpos,const int key ,const bool dateFormShort)
156{ 165{
157 QString dateForm = dateFormShort ? 166 QString dateForm = dateFormShort ?
158 KGlobal::locale()->dateFormatShort() : 167 KGlobal::locale()->dateFormatShort() :
159 KGlobal::locale()->dateFormat(); 168 KGlobal::locale()->dateFormat();
160 169
161 int begin = dateForm.find("%"); 170 int begin = dateForm.find("%");
162 int space = 0; 171 int space = 0;
163 int allStrLength = 0; 172 int allStrLength = 0;
164 int strLength = 0; 173 int strLength = 0;
165 int repeat = 0; 174 int repeat = 0;
166 175
167 // witch? Day, Month or Year switch? 176 // witch? Day, Month or Year switch?
168 while(1){ 177 while(1){
169 switch ( dateForm.at(begin + 1).latin1() ) 178 switch ( dateForm.at(begin + 1).latin1() )
170 { 179 {
171 case 'd':// 16 (month day) 180 case 'd':// 16 (month day)
172 strLength = 2; //Ok 181 strLength = 2; //Ok
173 break; 182 break;
174 case 'm':// 01 (month) 183 case 'm':// 01 (month)
175 strLength = 2; //Ok 184 strLength = 2; //Ok
176 break; 185 break;
177 case 'a':// Mon (Weekday) 186 case 'a':// Mon (Weekday)
178 strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length(); 187 strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length();
179 break; 188 break;
180 case 'A':// Monday (Weekday) 189 case 'A':// Monday (Weekday)
181 strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length(); 190 strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length();
182 break; 191 break;
183 case 'b':// Jan (monthName) 192 case 'b':// Jan (monthName)
184 strLength = KGlobal::locale()->monthName(date.month(), true).length(); 193 strLength = KGlobal::locale()->monthName(date.month(), true).length();
185 break; 194 break;
186 case 'B':// January (monthName) 195 case 'B':// January (monthName)
187 strLength = KGlobal::locale()->monthName(date.month(), false).length(); 196 strLength = KGlobal::locale()->monthName(date.month(), false).length();
188 break; 197 break;
189 case 'y':// 04 (year short) 198 case 'y':// 04 (year short)
190 strLength = 2; //Ok 199 strLength = 2; //Ok
191 break; 200 break;
192 case 'Y':// 2004 (year) 201 case 'Y':// 2004 (year)
193 strLength = 4; //Ok 202 strLength = 4; //Ok
194 break; 203 break;
195 default: 204 default:
196 break; 205 break;
197 } 206 }
198 space = begin - (repeat++ * 2); 207 space = begin - (repeat++ * 2);
199 // all select? then dayswitch 208 // all select? then dayswitch
200 if( (mDateEdit->text().length() == mDateEdit->markedText().length() ) && 209 if( (mDateEdit->text().length() == mDateEdit->markedText().length() ) &&
201 ( (dateForm.at(begin + 1).latin1() == 'd') || 210 ( (dateForm.at(begin + 1).latin1() == 'd') ||
202 (dateForm.at(begin + 1).latin1() == 'a') || 211 (dateForm.at(begin + 1).latin1() == 'a') ||
203 (dateForm.at(begin + 1).latin1() == 'A') ) ) { 212 (dateForm.at(begin + 1).latin1() == 'A') ) ) {
204 break; 213 break;
205 } 214 }
206 // mDateEdit-StringPos == CursorPosition(cpos) then break and set date 215 // mDateEdit-StringPos == CursorPosition(cpos) then break and set date
207 if( ( (space + allStrLength) <= *cpos && *cpos <= (space + allStrLength + strLength) ) || *cpos < begin ) { 216 if( ( (space + allStrLength) <= *cpos && *cpos <= (space + allStrLength + strLength) ) || *cpos < begin ) {
208 break; 217 break;
209 } 218 }
210 allStrLength += strLength; 219 allStrLength += strLength;
211 begin = dateForm.find("%", begin +1); 220 begin = dateForm.find("%", begin +1);
212 } 221 }
213 222
214 // set date 223 // set date
215 switch ( dateForm.at(begin + 1).latin1() ) { 224 switch ( dateForm.at(begin + 1).latin1() ) {
216 case 'd': 225 case 'd':
217 case 'a': 226 case 'a':
218 case 'A': 227 case 'A':
219 if(key == Key_Up) { 228 if(key == Key_Up) {
220 setDate( date.addDays( 1 ) ); 229 setDate( date.addDays( 1 ) );
221 } 230 }
222 else if(key == Key_Down) { 231 else if(key == Key_Down) {
223 setDate( date.addDays( -1 ) ); 232 setDate( date.addDays( -1 ) );
224 } 233 }
225 maxDay = readDate().day(); 234 maxDay = readDate().day();
226 break; 235 break;
227 case 'm': 236 case 'm':
228 case 'b': 237 case 'b':
229 case 'B': 238 case 'B':
230 if(key == Key_Up) { 239 if(key == Key_Up) {
231 int year = ((date.month()+1)>12)?date.year()+1:date.year(); 240 int year = ((date.month()+1)>12)?date.year()+1:date.year();
232 int month = ((date.month()+1)>12)?1:date.month()+1; 241 int month = ((date.month()+1)>12)?1:date.month()+1;
233 int day = (QDate(year,month,1).daysInMonth()<maxDay)?QDate(year,month,1).daysInMonth():maxDay; 242 int day = (QDate(year,month,1).daysInMonth()<maxDay)?QDate(year,month,1).daysInMonth():maxDay;
234 setDate( QDate( year, month, day ) ); 243 setDate( QDate( year, month, day ) );
235 } else if(key == Key_Down) { 244 } else if(key == Key_Down) {
236 int year = ((date.month()-1)<1)?date.year()-1:date.year(); 245 int year = ((date.month()-1)<1)?date.year()-1:date.year();
237 int month = ((date.month()-1)<1)?12:date.month()-1; 246 int month = ((date.month()-1)<1)?12:date.month()-1;
238 int day = (QDate(year,month,1).daysInMonth()<maxDay)?QDate(year,month,1).daysInMonth():maxDay; 247 int day = (QDate(year,month,1).daysInMonth()<maxDay)?QDate(year,month,1).daysInMonth():maxDay;
239 setDate( QDate( year, month, day ) ); 248 setDate( QDate( year, month, day ) );
240 } 249 }
241 break; 250 break;
242 case 'y': 251 case 'y':
243 case 'Y': 252 case 'Y':
244 if(key == Key_Up) { 253 if(key == Key_Up) {
245 setDate( QDate( date.year() + 1, date.month() , date.day()) ); 254 setDate( QDate( date.year() + 1, date.month() , date.day()) );
246 } 255 }
247 else if(key == Key_Down) { 256 else if(key == Key_Down) {
248 setDate( QDate( date.year() - 1, date.month() , date.day()) ); 257 setDate( QDate( date.year() - 1, date.month() , date.day()) );
249 } 258 }
250 break; 259 break;
251/* default: 260/* default:
252 if(key == Key_Up) { 261 if(key == Key_Up) {
253 setDate( date.addDays( 1 ) ); 262 setDate( date.addDays( 1 ) );
254 } else if(key == Key_Down) { 263 } else if(key == Key_Down) {
255 setDate( date.addDays( -1 ) ); 264 setDate( date.addDays( -1 ) );
256 } 265 }
257 break;*/ 266 break;*/
258 } 267 }
259 268
260 date = readDate(); 269 date = readDate();
261 begin = dateForm.find("%"); 270 begin = dateForm.find("%");
262 int allSelectStrLength = 0; 271 int allSelectStrLength = 0;
263 int selectStrLength = 0; 272 int selectStrLength = 0;
264 273
265 // set selection do new date an set cursor at end of selection 274 // set selection do new date an set cursor at end of selection
266 for(int i = 0; i < repeat; i++){ 275 for(int i = 0; i < repeat; i++){
267 switch ( dateForm.at(begin + 1).latin1() ) 276 switch ( dateForm.at(begin + 1).latin1() )
268 { 277 {
269 case 'd':// 16 (month day) 278 case 'd':// 16 (month day)
270 selectStrLength = 2; //Ok 279 selectStrLength = 2; //Ok
271 break; 280 break;
272 case 'm':// 01 (month) 281 case 'm':// 01 (month)
273 selectStrLength = 2; //Ok 282 selectStrLength = 2; //Ok
274 break; 283 break;
275 case 'a':// Mon (Weekday short) 284 case 'a':// Mon (Weekday short)
276 selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length(); 285 selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length();
277 break; 286 break;
278 case 'A':// Monday (Weekday) 287 case 'A':// Monday (Weekday)
279 selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length(); 288 selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length();
280 break; 289 break;
281 case 'b':// Jan (monthName short) 290 case 'b':// Jan (monthName short)
282 selectStrLength = KGlobal::locale()->monthName(date.month(), true).length(); 291 selectStrLength = KGlobal::locale()->monthName(date.month(), true).length();
283 break; 292 break;
284 case 'B':// January (monthName) 293 case 'B':// January (monthName)
285 selectStrLength = KGlobal::locale()->monthName(date.month(), false).length(); 294 selectStrLength = KGlobal::locale()->monthName(date.month(), false).length();
286 break; 295 break;
287 case 'y':// 04 (year short) 296 case 'y':// 04 (year short)
288 selectStrLength = 2; //Ok 297 selectStrLength = 2; //Ok
289 break; 298 break;
290 case 'Y':// 2004 (year) 299 case 'Y':// 2004 (year)
291 selectStrLength = 4; //Ok 300 selectStrLength = 4; //Ok
292 break; 301 break;
293 default: 302 default:
294 break; 303 break;
295 } 304 }
296 space = begin - (i * 2); 305 space = begin - (i * 2);
297 allSelectStrLength += selectStrLength; 306 allSelectStrLength += selectStrLength;
298 begin = dateForm.find("%", begin +1); 307 begin = dateForm.find("%", begin +1);
299 } 308 }
300 // set selection from begin of date 309 // set selection from begin of date
301 setSelect( space + allSelectStrLength - selectStrLength , selectStrLength); 310 setSelect( space + allSelectStrLength - selectStrLength , selectStrLength);
302 *cpos = space + allSelectStrLength; 311 *cpos = space + allSelectStrLength;
303 emit(dateChanged(date)); 312 emit(dateChanged(date));
304 313
305 return; 314 return;
306} 315}
307 316
308void KDateEdit::setHandleInvalid(bool handleInvalid) 317void KDateEdit::setHandleInvalid(bool handleInvalid)
309{ 318{
310 mHandleInvalid = handleInvalid; 319 mHandleInvalid = handleInvalid;
311} 320}
312 321
313void KDateEdit::setEnabled(bool on) 322void KDateEdit::setEnabled(bool on)
314{ 323{
315 mDateEdit->setEnabled(on); 324 mDateEdit->setEnabled(on);
316 mDateButton->setEnabled(on); 325 mDateButton->setEnabled(on);
317} 326}
318 327
319QDate KDateEdit::date() const 328QDate KDateEdit::date() const
320{ 329{
321 QDate date = readDate(); 330 QDate date = readDate();
322 331
323 if (date.isValid() || mHandleInvalid) { 332 if (date.isValid() || mHandleInvalid) {
324 return date; 333 return date;
325 } else { 334 } else {
326 KNotifyClient::beep(); 335 KNotifyClient::beep();
diff --git a/libkdepim/kdateedit.h b/libkdepim/kdateedit.h
index cf3b90a..2d8c452 100644
--- a/libkdepim/kdateedit.h
+++ b/libkdepim/kdateedit.h
@@ -1,141 +1,143 @@
1/* 1/*
2 This file is part of libkdepim. 2 This file is part of libkdepim.
3 3
4 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef KDATEEDIT_H 24#ifndef KDATEEDIT_H
25#define KDATEEDIT_H 25#define KDATEEDIT_H
26 26
27#include <qhbox.h> 27#include <qhbox.h>
28#include <qvbox.h> 28#include <qvbox.h>
29#include <qdatetime.h> 29#include <qdatetime.h>
30#include <qmap.h> 30#include <qmap.h>
31 31
32class QLineEdit; 32class QLineEdit;
33class QPushButton; 33class QPushButton;
34class QObject; 34class QObject;
35class QEvent; 35class QEvent;
36class KDatePicker; 36class KDatePicker;
37class KDateValidator; 37class KDateValidator;
38 38
39/** 39/**
40* A date editing widget that consists of a line edit followed by 40* A date editing widget that consists of a line edit followed by
41* a small push button. The line edit contains the date in text form, 41* a small push button. The line edit contains the date in text form,
42* and the push button will display a 'popup' style date picker. 42* and the push button will display a 'popup' style date picker.
43* 43*
44* This widget also supports advanced features like allowing the user 44* This widget also supports advanced features like allowing the user
45* to type in the day name to get the date. The following keywords 45* to type in the day name to get the date. The following keywords
46* are supported (in the native language): tomorrow, yesturday, today, 46* are supported (in the native language): tomorrow, yesturday, today,
47* monday, tuesday, wednesday, thursday, friday, saturday, sunday. 47* monday, tuesday, wednesday, thursday, friday, saturday, sunday.
48* 48*
49* @author Cornelius Schumacher <schumacher@kde.org> 49* @author Cornelius Schumacher <schumacher@kde.org>
50* @author Mike Pilone <mpilone@slac.com> 50* @author Mike Pilone <mpilone@slac.com>
51*/ 51*/
52class KDateEdit : public QHBox 52class KDateEdit : public QHBox
53{ 53{
54 Q_OBJECT 54 Q_OBJECT
55 public: 55 public:
56 KDateEdit(QWidget *parent=0, const char *name=0, bool withoutDP = false ); 56 KDateEdit(QWidget *parent=0, const char *name=0, bool withoutDP = false );
57 virtual ~KDateEdit(); 57 virtual ~KDateEdit();
58 58
59 /** @return True if the date in the text edit is valid, 59 /** @return True if the date in the text edit is valid,
60 * false otherwise. This will not modify the display of the date, 60 * false otherwise. This will not modify the display of the date,
61 * but only check for validity. 61 * but only check for validity.
62 */ 62 */
63 bool inputIsValid(); 63 bool inputIsValid();
64 64
65 /** @return The date entered. This will not 65 /** @return The date entered. This will not
66 * modify the display of the date, but only return it. 66 * modify the display of the date, but only return it.
67 */ 67 */
68 QDate date() const; 68 QDate date() const;
69 69
70 /** @param handleInvalid If true the date edit accepts invalid dates 70 /** @param handleInvalid If true the date edit accepts invalid dates
71 * and displays them as the empty ("") string. It also returns an invalid date. 71 * and displays them as the empty ("") string. It also returns an invalid date.
72 * If false (default) invalid dates are not accepted and instead the date 72 * If false (default) invalid dates are not accepted and instead the date
73 * of today will be returned. 73 * of today will be returned.
74 */ 74 */
75 void setHandleInvalid(bool handleInvalid); 75 void setHandleInvalid(bool handleInvalid);
76 76
77 /** Checks for a focus out event. The display of the date is updated 77 /** Checks for a focus out event. The display of the date is updated
78 * to display the proper date when the focus leaves. 78 * to display the proper date when the focus leaves.
79 */ 79 */
80 virtual bool eventFilter(QObject *o, QEvent *e); 80 virtual bool eventFilter(QObject *o, QEvent *e);
81 void toggleDateFormat(); 81 void toggleDateFormat();
82 void clear(); 82 void clear();
83 signals: 83 signals:
84 /** This signal is emitted whenever the user modifies the date. This 84 /** This signal is emitted whenever the user modifies the date. This
85 * may not get emitted until the user presses enter in the line edit or 85 * may not get emitted until the user presses enter in the line edit or
86 * focus leaves the widget (ie: the user confirms their selection). 86 * focus leaves the widget (ie: the user confirms their selection).
87 */ 87 */
88 void dateChanged(QDate); 88 void dateChanged(QDate);
89 void returnPressed(); 89 void returnPressed();
90 void setTimeTo( QTime );
90 public slots: 91 public slots:
91 /** Sets the date. 92 /** Sets the date.
92 * 93 *
93 * @param date The new date to display. This date must be valid or 94 * @param date The new date to display. This date must be valid or
94 * it will not be displayed. 95 * it will not be displayed.
95 */ 96 */
96 void setDate(QDate date); 97 void setDate(QDate date);
97 // set Date with key_up key_down to relation of cursor Position 98 // set Date with key_up key_down to relation of cursor Position
98 // and set selection from begin to end of single date 99 // and set selection from begin to end of single date
99 void setDate(QDate, int *cpos, const int, const bool); 100 void setDate(QDate, int *cpos, const int, const bool);
100 101
101 /** Sets the date edit to be enabled or disabled (grayed out) 102 /** Sets the date edit to be enabled or disabled (grayed out)
102 * 103 *
103 * @param on Enabled if true, disabled if false 104 * @param on Enabled if true, disabled if false
104 */ 105 */
105 void setEnabled(bool on); 106 void setEnabled(bool on);
106 107
107 protected slots: 108 protected slots:
108 void toggleDatePicker(); 109 void toggleDatePicker();
109 void lineEnterPressed(); 110 void lineEnterPressed();
110 void textChanged(const QString &); 111 void textChanged(const QString &);
112 void goToNow();
111 113
112 private: 114 private:
113 /** Reads the text from the line edit. If the text is a keyword, the 115 /** Reads the text from the line edit. If the text is a keyword, the
114 * word will be translated to a date. If the text is not a keyword, the 116 * word will be translated to a date. If the text is not a keyword, the
115 * text will be interpreted as a date. 117 * text will be interpreted as a date.
116 */ 118 */
117 QDate readDate() const; 119 QDate readDate() const;
118 120
119 /** Maps the text that the user can enter to the offset in days from 121 /** Maps the text that the user can enter to the offset in days from
120 * today. For example, the text 'tomorrow' is mapped to +1. 122 * today. For example, the text 'tomorrow' is mapped to +1.
121 */ 123 */
122 QMap<QString, int> mKeywordMap; 124 QMap<QString, int> mKeywordMap;
123 bool mTextChanged; 125 bool mTextChanged;
124 bool mHandleInvalid; 126 bool mHandleInvalid;
125 127
126 QPushButton *mDateButton; 128 QPushButton *mDateButton;
127 QLineEdit *mDateEdit; 129 QLineEdit *mDateEdit;
128 KDatePicker *mDatePicker; 130 KDatePicker *mDatePicker;
129 QVBox *mDateFrame; 131 QVBox *mDateFrame;
130 int maxDay; 132 int maxDay;
131 bool withoutDp; 133 bool withoutDp;
132 134
133 protected: 135 protected:
134 virtual void keyPressEvent(QKeyEvent *qke); 136 virtual void keyPressEvent(QKeyEvent *qke);
135 void setSelect ( int, int ); 137 void setSelect ( int, int );
136 bool dateFormShort; 138 bool dateFormShort;
137 char lengthMonthName; 139 char lengthMonthName;
138 140
139}; 141};
140 142
141#endif 143#endif