From 62ff81d5d292ddf3c6032b48f27a6daedf6a6cb0 Mon Sep 17 00:00:00 2001 From: zautrix Date: Sun, 16 Jan 2005 08:49:00 +0000 Subject: beter time edit --- (limited to 'korganizer/ktimeedit.cpp') 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 @@ #include #include #include +#include #include #include @@ -39,44 +40,6 @@ // Validator for a time value with only hours and minutes (no seconds) // Mostly locale aware. Author: David Faure -class KOTimeValidator : public QValidator -{ -public: - KOTimeValidator(QWidget* parent, const char* name=0) : QValidator(parent, name) {} - - virtual State validate(QString& str, int& /*cursorPos*/) const - { - return Acceptable; - bool ok = false; - // TODO use KLocale::WithoutSeconds in HEAD - /*QTime time =*/ KGlobal::locale()->readTime(str, &ok); - if ( ok ) - return Acceptable; - // readTime doesn't help knowing when the string is "Intermediate". - int length = str.length(); - if ( !str ) // empty string? - return Invalid; // there should always be a ':' in it, right? - // HACK. Not fully locale aware etc. (esp. the separator is '.' in sv_SE...) - QChar sep = ':'; - // I want to allow "HH:", ":MM" and ":" to make editing easier - if ( str[0] == sep ) - { - if ( length == 1 ) // just ":" - return Intermediate; - QString minutes = str.mid(1); - int m = minutes.toInt(&ok); - if ( ok && m >= 0 && m < 60 ) - return Intermediate; - } else if ( str.at(str.length()-1) == sep ) - { - QString hours = str.left(length-1); - int h = hours.toInt(&ok); - if ( ok && h >= 0 && h < 24 ) - return Intermediate; - } - return Invalid; - } -}; // KTimeWidget/QTimeEdit provide nicer editing, but don't provide a combobox. // Difficult to get all in one... @@ -85,7 +48,6 @@ KOTimeEdit::KOTimeEdit(QWidget *parent, QTime qt, const char *name) : QComboBox(TRUE, parent, name) { setInsertionPolicy(NoInsertion); - setValidator( new KOTimeValidator( this ) ); mFlagKeyPressed = false; if ( QApplication::desktop()->width() < 650 ) @@ -145,11 +107,7 @@ bool KOTimeEdit::hasTime() const QTime KOTimeEdit::getTime() const { - //kdDebug(5850) << "KOTimeEdit::getTime(), currentText() = " << currentText() << endl; - // TODO use KLocale::WithoutSeconds in HEAD - QTime time = KGlobal::locale()->readTime(currentText()); - // kdDebug(5850) << "KOTimeEdit::getTime(): " << time.toString() << endl; - return time; + return KGlobal::locale()->readTime(currentText()); } /* QSizePolicy KOTimeEdit::sizePolicy() const @@ -165,8 +123,6 @@ void KOTimeEdit::setTime(QTime newTime) { if ( mTime != newTime ) { - kdDebug(5850) << "KOTimeEdit::setTime(): " << newTime.toString() << endl; - mTime = newTime; updateText(); } @@ -379,6 +335,7 @@ void KOTimeEdit::keyPressEvent(QKeyEvent *e) addTime(QTime(1,0,0)); break; case Key_Backspace: + qDebug("+++++++++++back "); if ( cpos > 0) { if ( cpos == 3 ) --cpos; @@ -389,6 +346,7 @@ void KOTimeEdit::keyPressEvent(QKeyEvent *e) lineEdit()->setCursorPosition(--cpos); setSelect ( cpos , 1 ); changedText(); + qDebug("---------back "); } break; } // switch arrows @@ -485,44 +443,32 @@ void KOTimeEdit::keyPressEvent(QKeyEvent *e) } void KOTimeEdit::updateText() -{ -// kdDebug(5850) << "KOTimeEdit::updateText() " << endl - QString s = KGlobal::locale()->formatTime(mTime); - // Set the text but without emitting signals, nor losing the cursor position - QLineEdit *line = lineEdit(); - line->blockSignals(true); - int pos = line->cursorPosition(); - // qDebug(" settext *%s* ", s.latin1()); - line->setText(s); - // line->setCursorPosition(pos); -// line->blockSignals(false); - -// kdDebug(5850) << "KOTimeEdit::updateText(): " << s << endl; - - if (!mTime.minute() % 15) { +{ + listBox()->blockSignals( true ); + blockSignals( true ); + QString s = KGlobal::locale()->formatTime(mTime); + // Set the text but without emitting signals, nor losing the cursor position + QLineEdit *line = lineEdit(); + line->blockSignals(true); + int pos = line->cursorPosition(); setCurrentItem((mTime.hour()*4)+(mTime.minute()/15)); - } - line->setCursorPosition(pos); - line->blockSignals(false); - -} + line->setText(s); + line->setCursorPosition(pos); + line->blockSignals(false); + blockSignals( false ); + listBox()->blockSignals( false ); -bool KOTimeEdit::inputIsValid() const -{ - int cursorPos = lineEdit()->cursorPosition(); - QString str = currentText(); - return validator()->validate( str, cursorPos ) == QValidator::Acceptable; } void KOTimeEdit::changedText() { - //kdDebug(5850) << "KOTimeEdit::changedText()" << endl; - if ( inputIsValid() ) - { - int pos = lineEdit()->cursorPosition(); - mTime = getTime(); - // updateText(); - emit timeChanged(mTime); - lineEdit()->setCursorPosition(pos); - } + int pos = lineEdit()->cursorPosition(); + mTime = getTime(); + blockSignals( true ); + QString text = lineEdit()->text(); + setCurrentItem((mTime.hour()*4)+(mTime.minute()/15)); + lineEdit()->setText(text); + blockSignals( false ); + emit timeChanged(mTime); + lineEdit()->setCursorPosition(pos); } -- cgit v0.9.0.2