summaryrefslogtreecommitdiffabout
path: root/korganizer/ktimeedit.cpp
authorzautrix <zautrix>2005-01-16 08:49:00 (UTC)
committer zautrix <zautrix>2005-01-16 08:49:00 (UTC)
commit62ff81d5d292ddf3c6032b48f27a6daedf6a6cb0 (patch) (unidiff)
treeef89d1577b47959c172e644701bf9dc7541c2987 /korganizer/ktimeedit.cpp
parent32795d059fa22cc9fd213db4b4d87e30866a7cb9 (diff)
downloadkdepimpi-62ff81d5d292ddf3c6032b48f27a6daedf6a6cb0.zip
kdepimpi-62ff81d5d292ddf3c6032b48f27a6daedf6a6cb0.tar.gz
kdepimpi-62ff81d5d292ddf3c6032b48f27a6daedf6a6cb0.tar.bz2
beter time edit
Diffstat (limited to 'korganizer/ktimeedit.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/ktimeedit.cpp106
1 files changed, 26 insertions, 80 deletions
diff --git a/korganizer/ktimeedit.cpp b/korganizer/ktimeedit.cpp
index f5a1c50..5222ac9 100644
--- a/korganizer/ktimeedit.cpp
+++ b/korganizer/ktimeedit.cpp
@@ -25,6 +25,7 @@
25#include <qcombobox.h> 25#include <qcombobox.h>
26#include <qdatetime.h> 26#include <qdatetime.h>
27#include <qlineedit.h> 27#include <qlineedit.h>
28#include <qlistbox.h>
28#include <qapplication.h> 29#include <qapplication.h>
29 30
30#include <kmessagebox.h> 31#include <kmessagebox.h>
@@ -39,44 +40,6 @@
39 40
40// Validator for a time value with only hours and minutes (no seconds) 41// Validator for a time value with only hours and minutes (no seconds)
41// Mostly locale aware. Author: David Faure <faure@kde.org> 42// Mostly locale aware. Author: David Faure <faure@kde.org>
42class KOTimeValidator : public QValidator
43{
44public:
45 KOTimeValidator(QWidget* parent, const char* name=0) : QValidator(parent, name) {}
46
47 virtual State validate(QString& str, int& /*cursorPos*/) const
48 {
49 return Acceptable;
50 bool ok = false;
51 // TODO use KLocale::WithoutSeconds in HEAD
52 /*QTime time =*/ KGlobal::locale()->readTime(str, &ok);
53 if ( ok )
54 return Acceptable;
55 // readTime doesn't help knowing when the string is "Intermediate".
56 int length = str.length();
57 if ( !str ) // empty string?
58 return Invalid; // there should always be a ':' in it, right?
59 // HACK. Not fully locale aware etc. (esp. the separator is '.' in sv_SE...)
60 QChar sep = ':';
61 // I want to allow "HH:", ":MM" and ":" to make editing easier
62 if ( str[0] == sep )
63 {
64 if ( length == 1 ) // just ":"
65 return Intermediate;
66 QString minutes = str.mid(1);
67 int m = minutes.toInt(&ok);
68 if ( ok && m >= 0 && m < 60 )
69 return Intermediate;
70 } else if ( str.at(str.length()-1) == sep )
71 {
72 QString hours = str.left(length-1);
73 int h = hours.toInt(&ok);
74 if ( ok && h >= 0 && h < 24 )
75 return Intermediate;
76 }
77 return Invalid;
78 }
79};
80 43
81// KTimeWidget/QTimeEdit provide nicer editing, but don't provide a combobox. 44// KTimeWidget/QTimeEdit provide nicer editing, but don't provide a combobox.
82// Difficult to get all in one... 45// Difficult to get all in one...
@@ -85,7 +48,6 @@ KOTimeEdit::KOTimeEdit(QWidget *parent, QTime qt, const char *name)
85 : QComboBox(TRUE, parent, name) 48 : QComboBox(TRUE, parent, name)
86{ 49{
87 setInsertionPolicy(NoInsertion); 50 setInsertionPolicy(NoInsertion);
88 setValidator( new KOTimeValidator( this ) );
89 mFlagKeyPressed = false; 51 mFlagKeyPressed = false;
90 52
91 if ( QApplication::desktop()->width() < 650 ) 53 if ( QApplication::desktop()->width() < 650 )
@@ -145,11 +107,7 @@ bool KOTimeEdit::hasTime() const
145 107
146QTime KOTimeEdit::getTime() const 108QTime KOTimeEdit::getTime() const
147{ 109{
148 //kdDebug(5850) << "KOTimeEdit::getTime(), currentText() = " << currentText() << endl; 110 return KGlobal::locale()->readTime(currentText());
149 // TODO use KLocale::WithoutSeconds in HEAD
150 QTime time = KGlobal::locale()->readTime(currentText());
151 // kdDebug(5850) << "KOTimeEdit::getTime(): " << time.toString() << endl;
152 return time;
153} 111}
154/* 112/*
155QSizePolicy KOTimeEdit::sizePolicy() const 113QSizePolicy KOTimeEdit::sizePolicy() const
@@ -165,8 +123,6 @@ void KOTimeEdit::setTime(QTime newTime)
165{ 123{
166 if ( mTime != newTime ) 124 if ( mTime != newTime )
167 { 125 {
168 kdDebug(5850) << "KOTimeEdit::setTime(): " << newTime.toString() << endl;
169
170 mTime = newTime; 126 mTime = newTime;
171 updateText(); 127 updateText();
172 } 128 }
@@ -379,6 +335,7 @@ void KOTimeEdit::keyPressEvent(QKeyEvent *e)
379 addTime(QTime(1,0,0)); 335 addTime(QTime(1,0,0));
380 break; 336 break;
381 case Key_Backspace: 337 case Key_Backspace:
338 qDebug("+++++++++++back ");
382 if ( cpos > 0) { 339 if ( cpos > 0) {
383 if ( cpos == 3 ) 340 if ( cpos == 3 )
384 --cpos; 341 --cpos;
@@ -389,6 +346,7 @@ void KOTimeEdit::keyPressEvent(QKeyEvent *e)
389 lineEdit()->setCursorPosition(--cpos); 346 lineEdit()->setCursorPosition(--cpos);
390 setSelect ( cpos , 1 ); 347 setSelect ( cpos , 1 );
391 changedText(); 348 changedText();
349 qDebug("---------back ");
392 } 350 }
393 break; 351 break;
394 } // switch arrows 352 } // switch arrows
@@ -485,44 +443,32 @@ void KOTimeEdit::keyPressEvent(QKeyEvent *e)
485} 443}
486 444
487void KOTimeEdit::updateText() 445void KOTimeEdit::updateText()
488{ 446{
489// kdDebug(5850) << "KOTimeEdit::updateText() " << endl 447 listBox()->blockSignals( true );
490 QString s = KGlobal::locale()->formatTime(mTime); 448 blockSignals( true );
491 // Set the text but without emitting signals, nor losing the cursor position 449 QString s = KGlobal::locale()->formatTime(mTime);
492 QLineEdit *line = lineEdit(); 450 // Set the text but without emitting signals, nor losing the cursor position
493 line->blockSignals(true); 451 QLineEdit *line = lineEdit();
494 int pos = line->cursorPosition(); 452 line->blockSignals(true);
495 // qDebug(" settext *%s* ", s.latin1()); 453 int pos = line->cursorPosition();
496 line->setText(s);
497 // line->setCursorPosition(pos);
498// line->blockSignals(false);
499
500// kdDebug(5850) << "KOTimeEdit::updateText(): " << s << endl;
501
502 if (!mTime.minute() % 15) {
503 setCurrentItem((mTime.hour()*4)+(mTime.minute()/15)); 454 setCurrentItem((mTime.hour()*4)+(mTime.minute()/15));
504 } 455 line->setText(s);
505 line->setCursorPosition(pos); 456 line->setCursorPosition(pos);
506 line->blockSignals(false); 457 line->blockSignals(false);
507 458 blockSignals( false );
508} 459 listBox()->blockSignals( false );
509 460
510bool KOTimeEdit::inputIsValid() const
511{
512 int cursorPos = lineEdit()->cursorPosition();
513 QString str = currentText();
514 return validator()->validate( str, cursorPos ) == QValidator::Acceptable;
515} 461}
516 462
517void KOTimeEdit::changedText() 463void KOTimeEdit::changedText()
518{ 464{
519 //kdDebug(5850) << "KOTimeEdit::changedText()" << endl; 465 int pos = lineEdit()->cursorPosition();
520 if ( inputIsValid() ) 466 mTime = getTime();
521 { 467 blockSignals( true );
522 int pos = lineEdit()->cursorPosition(); 468 QString text = lineEdit()->text();
523 mTime = getTime(); 469 setCurrentItem((mTime.hour()*4)+(mTime.minute()/15));
524 // updateText(); 470 lineEdit()->setText(text);
525 emit timeChanged(mTime); 471 blockSignals( false );
526 lineEdit()->setCursorPosition(pos); 472 emit timeChanged(mTime);
527 } 473 lineEdit()->setCursorPosition(pos);
528} 474}