-rw-r--r-- | libkdepim/kdateedit.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libkdepim/kdateedit.cpp b/libkdepim/kdateedit.cpp index c4c0081..2c78ea3 100644 --- a/libkdepim/kdateedit.cpp +++ b/libkdepim/kdateedit.cpp | |||
@@ -237,261 +237,262 @@ void KDateEdit::setDate( QDate date,int *cpos,const int key ,const bool dateForm | |||
237 | int day = (QDate(year,month,1).daysInMonth()<maxDay)?QDate(year,month,1).daysInMonth():maxDay; | 237 | int day = (QDate(year,month,1).daysInMonth()<maxDay)?QDate(year,month,1).daysInMonth():maxDay; |
238 | setDate( QDate( year, month, day ) ); | 238 | setDate( QDate( year, month, day ) ); |
239 | } | 239 | } |
240 | break; | 240 | break; |
241 | case 'y': | 241 | case 'y': |
242 | case 'Y': | 242 | case 'Y': |
243 | if(key == Key_Up) { | 243 | if(key == Key_Up) { |
244 | setDate( QDate( date.year() + 1, date.month() , date.day()) ); | 244 | setDate( QDate( date.year() + 1, date.month() , date.day()) ); |
245 | } | 245 | } |
246 | else if(key == Key_Down) { | 246 | else if(key == Key_Down) { |
247 | setDate( QDate( date.year() - 1, date.month() , date.day()) ); | 247 | setDate( QDate( date.year() - 1, date.month() , date.day()) ); |
248 | } | 248 | } |
249 | break; | 249 | break; |
250 | /* default: | 250 | /* default: |
251 | if(key == Key_Up) { | 251 | if(key == Key_Up) { |
252 | setDate( date.addDays( 1 ) ); | 252 | setDate( date.addDays( 1 ) ); |
253 | } else if(key == Key_Down) { | 253 | } else if(key == Key_Down) { |
254 | setDate( date.addDays( -1 ) ); | 254 | setDate( date.addDays( -1 ) ); |
255 | } | 255 | } |
256 | break;*/ | 256 | break;*/ |
257 | } | 257 | } |
258 | 258 | ||
259 | date = readDate(); | 259 | date = readDate(); |
260 | begin = dateForm.find("%"); | 260 | begin = dateForm.find("%"); |
261 | int allSelectStrLength = 0; | 261 | int allSelectStrLength = 0; |
262 | int selectStrLength = 0; | 262 | int selectStrLength = 0; |
263 | 263 | ||
264 | // set selection do new date an set cursor at end of selection | 264 | // set selection do new date an set cursor at end of selection |
265 | for(int i = 0; i < repeat; i++){ | 265 | for(int i = 0; i < repeat; i++){ |
266 | switch ( dateForm.at(begin + 1).latin1() ) | 266 | switch ( dateForm.at(begin + 1).latin1() ) |
267 | { | 267 | { |
268 | case 'd':// 16 (month day) | 268 | case 'd':// 16 (month day) |
269 | selectStrLength = 2; //Ok | 269 | selectStrLength = 2; //Ok |
270 | break; | 270 | break; |
271 | case 'm':// 01 (month) | 271 | case 'm':// 01 (month) |
272 | selectStrLength = 2; //Ok | 272 | selectStrLength = 2; //Ok |
273 | break; | 273 | break; |
274 | case 'a':// Mon (Weekday short) | 274 | case 'a':// Mon (Weekday short) |
275 | selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length(); | 275 | selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length(); |
276 | break; | 276 | break; |
277 | case 'A':// Monday (Weekday) | 277 | case 'A':// Monday (Weekday) |
278 | selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length(); | 278 | selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length(); |
279 | break; | 279 | break; |
280 | case 'b':// Jan (monthName short) | 280 | case 'b':// Jan (monthName short) |
281 | selectStrLength = KGlobal::locale()->monthName(date.month(), true).length(); | 281 | selectStrLength = KGlobal::locale()->monthName(date.month(), true).length(); |
282 | break; | 282 | break; |
283 | case 'B':// January (monthName) | 283 | case 'B':// January (monthName) |
284 | selectStrLength = KGlobal::locale()->monthName(date.month(), false).length(); | 284 | selectStrLength = KGlobal::locale()->monthName(date.month(), false).length(); |
285 | break; | 285 | break; |
286 | case 'y':// 04 (year short) | 286 | case 'y':// 04 (year short) |
287 | selectStrLength = 2; //Ok | 287 | selectStrLength = 2; //Ok |
288 | break; | 288 | break; |
289 | case 'Y':// 2004 (year) | 289 | case 'Y':// 2004 (year) |
290 | selectStrLength = 4; //Ok | 290 | selectStrLength = 4; //Ok |
291 | break; | 291 | break; |
292 | default: | 292 | default: |
293 | break; | 293 | break; |
294 | } | 294 | } |
295 | space = begin - (i * 2); | 295 | space = begin - (i * 2); |
296 | allSelectStrLength += selectStrLength; | 296 | allSelectStrLength += selectStrLength; |
297 | begin = dateForm.find("%", begin +1); | 297 | begin = dateForm.find("%", begin +1); |
298 | } | 298 | } |
299 | // set selection from begin of date | 299 | // set selection from begin of date |
300 | setSelect( space + allSelectStrLength - selectStrLength , selectStrLength); | 300 | setSelect( space + allSelectStrLength - selectStrLength , selectStrLength); |
301 | *cpos = space + allSelectStrLength; | 301 | *cpos = space + allSelectStrLength; |
302 | emit(dateChanged(date)); | 302 | emit(dateChanged(date)); |
303 | 303 | ||
304 | return; | 304 | return; |
305 | } | 305 | } |
306 | 306 | ||
307 | void KDateEdit::setHandleInvalid(bool handleInvalid) | 307 | void KDateEdit::setHandleInvalid(bool handleInvalid) |
308 | { | 308 | { |
309 | mHandleInvalid = handleInvalid; | 309 | mHandleInvalid = handleInvalid; |
310 | } | 310 | } |
311 | 311 | ||
312 | void KDateEdit::setEnabled(bool on) | 312 | void KDateEdit::setEnabled(bool on) |
313 | { | 313 | { |
314 | mDateEdit->setEnabled(on); | 314 | mDateEdit->setEnabled(on); |
315 | mDateButton->setEnabled(on); | 315 | mDateButton->setEnabled(on); |
316 | } | 316 | } |
317 | 317 | ||
318 | QDate KDateEdit::date() const | 318 | QDate KDateEdit::date() const |
319 | { | 319 | { |
320 | QDate date = readDate(); | 320 | QDate date = readDate(); |
321 | 321 | ||
322 | if (date.isValid() || mHandleInvalid) { | 322 | if (date.isValid() || mHandleInvalid) { |
323 | return date; | 323 | return date; |
324 | } else { | 324 | } else { |
325 | KNotifyClient::beep(); | 325 | KNotifyClient::beep(); |
326 | return QDate::currentDate(); | 326 | return QDate::currentDate(); |
327 | } | 327 | } |
328 | } | 328 | } |
329 | 329 | ||
330 | void KDateEdit::keyPressEvent(QKeyEvent *e) | 330 | void KDateEdit::keyPressEvent(QKeyEvent *e) |
331 | { | 331 | { |
332 | QDate date = readDate(); | 332 | QDate date = readDate(); |
333 | int cpos = mDateEdit->cursorPosition(); | 333 | int cpos = mDateEdit->cursorPosition(); |
334 | 334 | ||
335 | switch(e->key()) | 335 | switch(e->key()) |
336 | { | 336 | { |
337 | case Key_Escape: | 337 | case Key_Escape: |
338 | mDateEdit->deselect(); | 338 | mDateEdit->deselect(); |
339 | case Key_Tab: | 339 | case Key_Tab: |
340 | QHBox::keyPressEvent(e); | 340 | QHBox::keyPressEvent(e); |
341 | break; | 341 | break; |
342 | case Key_Up: | 342 | case Key_Up: |
343 | // when date invalid then set to currend and return | 343 | // when date invalid then set to currend and return |
344 | if(!date.isValid()) { | 344 | if(!date.isValid()) { |
345 | date = QDate::currentDate(); | 345 | date = QDate::currentDate(); |
346 | setDate(date); | 346 | setDate(date); |
347 | mDateEdit->setCursorPosition(cpos); | 347 | mDateEdit->setCursorPosition(cpos); |
348 | emit(dateChanged(date)); | 348 | emit(dateChanged(date)); |
349 | QString text = i18n( "You entered an invalid date!\n Date changed to current date." ); | 349 | QString text = i18n( "You entered an invalid date!\n Date changed to current date." ); |
350 | KMessageBox::information( 0, text ); | 350 | KMessageBox::information( 0, text ); |
351 | return; | 351 | return; |
352 | } | 352 | } |
353 | setDate(date, &cpos, Key_Up, dateFormShort); | 353 | setDate(date, &cpos, Key_Up, dateFormShort); |
354 | break; | 354 | break; |
355 | case Key_Down: | 355 | case Key_Down: |
356 | // when date invalid then set to current and return | 356 | // when date invalid then set to current and return |
357 | if(!date.isValid()) { | 357 | if(!date.isValid()) { |
358 | date = QDate::currentDate(); | 358 | date = QDate::currentDate(); |
359 | setDate(date); | 359 | setDate(date); |
360 | mDateEdit->setCursorPosition(cpos); | 360 | mDateEdit->setCursorPosition(cpos); |
361 | emit(dateChanged(date)); | 361 | emit(dateChanged(date)); |
362 | QString text = i18n( "You entered an invalid date!\n Date changed to current date." ); | 362 | QString text = i18n( "You entered an invalid date!\n Date changed to current date." ); |
363 | KMessageBox::information( 0, text ); | 363 | KMessageBox::information( 0, text ); |
364 | return; | 364 | return; |
365 | } | 365 | } |
366 | setDate(date, &cpos, Key_Down, dateFormShort); | 366 | setDate(date, &cpos, Key_Down, dateFormShort); |
367 | break; | 367 | break; |
368 | default: | 368 | default: |
369 | QHBox::keyPressEvent(e); | 369 | QHBox::keyPressEvent(e); |
370 | break; | 370 | break; |
371 | } // switch | 371 | } // switch |
372 | mDateEdit->setCursorPosition(cpos); | 372 | mDateEdit->setCursorPosition(cpos); |
373 | } | 373 | } |
374 | 374 | ||
375 | void KDateEdit::setSelect( int from, int to ) | 375 | void KDateEdit::setSelect( int from, int to ) |
376 | { | 376 | { |
377 | // return; | 377 | // return; |
378 | mDateEdit->setSelection( from , to ); | 378 | mDateEdit->setSelection( from , to ); |
379 | } | 379 | } |
380 | 380 | ||
381 | void KDateEdit::toggleDatePicker() | 381 | void KDateEdit::toggleDatePicker() |
382 | { | 382 | { |
383 | if( mDateFrame->isVisible() ) { | 383 | if( mDateFrame->isVisible() ) { |
384 | mDateFrame->hide(); | 384 | mDateFrame->hide(); |
385 | } else { | 385 | } else { |
386 | QPoint tmpPoint = mapToGlobal(mDateButton->geometry().bottomRight()); | 386 | QPoint tmpPoint = mapToGlobal(mDateButton->geometry().bottomRight()); |
387 | QSize datepickersize = mDatePicker->sizeHint(); | 387 | QSize datepickersize = mDatePicker->sizeHint(); |
388 | 388 | ||
389 | if ( tmpPoint.x() < 7+datepickersize.width() ) tmpPoint.setX( 7+datepickersize.width() ); | 389 | if ( tmpPoint.x() < 7+datepickersize.width() ) tmpPoint.setX( 7+datepickersize.width() ); |
390 | 390 | ||
391 | int h = QApplication::desktop()->height(); | 391 | int h = QApplication::desktop()->height(); |
392 | 392 | ||
393 | if ( tmpPoint.y() + datepickersize.height() > h ) tmpPoint.setY( h - datepickersize.height() ); | 393 | if ( tmpPoint.y() + datepickersize.height() > h ) tmpPoint.setY( h - datepickersize.height() ); |
394 | 394 | ||
395 | mDateFrame->setGeometry(tmpPoint.x()-datepickersize.width()-7, tmpPoint.y(), | 395 | mDateFrame->setGeometry(tmpPoint.x()-datepickersize.width()-7, tmpPoint.y(), |
396 | datepickersize.width()+2*mDateFrame->lineWidth(), datepickersize.height()+2*mDateFrame->lineWidth()); | 396 | datepickersize.width()+2*mDateFrame->lineWidth(), datepickersize.height()+2*mDateFrame->lineWidth()); |
397 | 397 | ||
398 | QDate date = readDate(); | 398 | QDate date = readDate(); |
399 | if(date.isValid()) { | 399 | if(date.isValid()) { |
400 | mDatePicker->setDate(date); | 400 | mDatePicker->setDate(date); |
401 | } else { | 401 | } else { |
402 | mDatePicker->setDate(QDate::currentDate()); | 402 | mDatePicker->setDate(QDate::currentDate()); |
403 | } | 403 | } |
404 | mDateFrame->show(); | 404 | mDateFrame->show(); |
405 | } | 405 | } |
406 | } | 406 | } |
407 | 407 | ||
408 | 408 | ||
409 | void KDateEdit::lineEnterPressed() | 409 | void KDateEdit::lineEnterPressed() |
410 | { | 410 | { |
411 | QDate date = readDate(); | 411 | QDate date = readDate(); |
412 | 412 | ||
413 | if(date.isValid()) | 413 | if(date.isValid()) |
414 | { | 414 | { |
415 | // Update the edit. This is needed if the user has entered a | 415 | // Update the edit. This is needed if the user has entered a |
416 | // word rather than the actual date. | 416 | // word rather than the actual date. |
417 | setDate(date); | 417 | setDate(date); |
418 | emit(dateChanged(date)); | 418 | emit(dateChanged(date)); |
419 | emit returnPressed(); | 419 | emit returnPressed(); |
420 | } | 420 | } |
421 | else | 421 | else |
422 | { | 422 | { |
423 | if ( withoutDp ) { | 423 | if ( withoutDp ) { |
424 | KNotifyClient::beep(); | 424 | KNotifyClient::beep(); |
425 | } else { | 425 | } else { |
426 | if ( !mDateEdit->text().isEmpty() ) { | 426 | if ( !mDateEdit->text().isEmpty() ) { |
427 | mTextChanged = false; | 427 | mTextChanged = false; |
428 | QString text = i18n( "You entered an invalid date!\n Will use current date instead." ); | 428 | QString text = i18n( "You entered an invalid date!\n Will use current date instead." ); |
429 | if ( KMessageBox::warningContinueCancel( 0, text ) == KMessageBox::Continue ) { | 429 | if ( isVisible() ) |
430 | setDate( QDate::currentDate() ); | 430 | if ( KMessageBox::warningContinueCancel( 0, text ) == KMessageBox::Continue ) { |
431 | emit dateChanged( QDate::currentDate() ); | 431 | setDate( QDate::currentDate() ); |
432 | } | 432 | emit dateChanged( QDate::currentDate() ); |
433 | } | ||
433 | } | 434 | } |
434 | } | 435 | } |
435 | } | 436 | } |
436 | } | 437 | } |
437 | 438 | ||
438 | bool KDateEdit::inputIsValid() | 439 | bool KDateEdit::inputIsValid() |
439 | { | 440 | { |
440 | return readDate().isValid(); | 441 | return readDate().isValid(); |
441 | } | 442 | } |
442 | 443 | ||
443 | QDate KDateEdit::readDate() const | 444 | QDate KDateEdit::readDate() const |
444 | { | 445 | { |
445 | QString text = mDateEdit->text(); | 446 | QString text = mDateEdit->text(); |
446 | QDate date; | 447 | QDate date; |
447 | 448 | ||
448 | if (mKeywordMap.contains(text.lower())) | 449 | if (mKeywordMap.contains(text.lower())) |
449 | { | 450 | { |
450 | date = QDate::currentDate().addDays(mKeywordMap[text.lower()]); | 451 | date = QDate::currentDate().addDays(mKeywordMap[text.lower()]); |
451 | } | 452 | } |
452 | else | 453 | else |
453 | { | 454 | { |
454 | date = KGlobal::locale()->readDate(text); | 455 | date = KGlobal::locale()->readDate(text); |
455 | } | 456 | } |
456 | 457 | ||
457 | return date; | 458 | return date; |
458 | } | 459 | } |
459 | 460 | ||
460 | bool KDateEdit::eventFilter(QObject *, QEvent *e) | 461 | bool KDateEdit::eventFilter(QObject *, QEvent *e) |
461 | { | 462 | { |
462 | // We only process the focus out event if the text has changed | 463 | // We only process the focus out event if the text has changed |
463 | // since we got focus | 464 | // since we got focus |
464 | if ((e->type() == QEvent::FocusOut) && mTextChanged) | 465 | if ((e->type() == QEvent::FocusOut) && mTextChanged) |
465 | { | 466 | { |
466 | lineEnterPressed(); | 467 | lineEnterPressed(); |
467 | mTextChanged = false; | 468 | mTextChanged = false; |
468 | } | 469 | } |
469 | // switch dateFormShort by double klick with mouse | 470 | // switch dateFormShort by double klick with mouse |
470 | else if (e->type() == QEvent::MouseButtonDblClick) | 471 | else if (e->type() == QEvent::MouseButtonDblClick) |
471 | { | 472 | { |
472 | toggleDateFormat(); | 473 | toggleDateFormat(); |
473 | } | 474 | } |
474 | else if (e->type() == QEvent::FocusIn) | 475 | else if (e->type() == QEvent::FocusIn) |
475 | { | 476 | { |
476 | maxDay = readDate().day(); | 477 | maxDay = readDate().day(); |
477 | } | 478 | } |
478 | 479 | ||
479 | return false; | 480 | return false; |
480 | } | 481 | } |
481 | void KDateEdit::toggleDateFormat() | 482 | void KDateEdit::toggleDateFormat() |
482 | { | 483 | { |
483 | dateFormShort = ! dateFormShort; | 484 | dateFormShort = ! dateFormShort; |
484 | mDateEdit->setText(KGlobal::locale()->formatDate(readDate(),dateFormShort)); | 485 | mDateEdit->setText(KGlobal::locale()->formatDate(readDate(),dateFormShort)); |
485 | 486 | ||
486 | } | 487 | } |
487 | 488 | ||
488 | void KDateEdit::textChanged(const QString &) | 489 | void KDateEdit::textChanged(const QString &) |
489 | { | 490 | { |
490 | if(mHandleInvalid && mDateEdit->text().stripWhiteSpace().isEmpty()) { | 491 | if(mHandleInvalid && mDateEdit->text().stripWhiteSpace().isEmpty()) { |
491 | QDate date; //invalid date | 492 | QDate date; //invalid date |
492 | emit(dateChanged(date)); | 493 | emit(dateChanged(date)); |
493 | } else { | 494 | } else { |
494 | mTextChanged = true; | 495 | mTextChanged = true; |
495 | } | 496 | } |
496 | maxDay = readDate().day(); | 497 | maxDay = readDate().day(); |
497 | } | 498 | } |