-rw-r--r-- | korganizer/ktimeedit.cpp | 106 |
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 @@ -16,85 +16,47 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <qkeycode.h> #include <qcombobox.h> #include <qdatetime.h> #include <qlineedit.h> +#include <qlistbox.h> #include <qapplication.h> #include <kmessagebox.h> #include <kglobal.h> #include <kdebug.h> #include <klocale.h> #include <kpimglobalprefs.h> #include "ktimeedit.h" #include "koprefs.h" #include <qvalidator.h> // Validator for a time value with only hours and minutes (no seconds) // Mostly locale aware. Author: David Faure <faure@kde.org> -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... // But Qt-3.2 will offer QLineEdit::setMask, so a "99:99" mask would help. 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 ) setSizeLimit ( 6 ); mTime = qt; // mNoTimeString = i18n("No Time"); // insertItem( mNoTimeString ); // Fill combo box with selection of times in localized format. QTime timeEntry(0,0,0); do { @@ -136,46 +98,40 @@ KOTimeEdit::~KOTimeEdit() bool KOTimeEdit::hasTime() const { // Can't happen if ( currentText().isEmpty() ) return false; //if ( currentText() == mNoTimeString ) return false; return true; // always } 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 { // Set size policy to Fixed, because edit cannot contain more text than the // string representing the time. It doesn't make sense to provide more space. QSizePolicy sizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); return sizePolicy; } */ void KOTimeEdit::setTime(QTime newTime) { if ( mTime != newTime ) { - kdDebug(5850) << "KOTimeEdit::setTime(): " << newTime.toString() << endl; - mTime = newTime; updateText(); } } void KOTimeEdit::activ(int i) { // The last entry, 23:59, is a special case if( i == count() - 1 ) mTime = QTime( 23, 59, 0 ); else @@ -370,34 +326,36 @@ void KOTimeEdit::keyPressEvent(QKeyEvent *e) lineEdit()->setCursorPosition(++cpos); setSelect ( cpos , 1 ); } break; // rest case Key_Prior: subTime(QTime(1,0,0)); break; case Key_Next: addTime(QTime(1,0,0)); break; case Key_Backspace: + qDebug("+++++++++++back "); if ( cpos > 0) { if ( cpos == 3 ) --cpos; if ( cpos > 5) cpos = 5; text.at( cpos-1 ) = '0'; lineEdit()->setText( text ); lineEdit()->setCursorPosition(--cpos); setSelect ( cpos , 1 ); changedText(); + qDebug("---------back "); } break; } // switch arrows // if cursor at string end, alltext market and keyEvent don't ArrowLeft -> deselect and cpos if( cpos > 4 && lineEdit()->markedText().length() == 5 && e->key() != Key_Left ) { lineEdit()->deselect(); cpos = 0; lineEdit()->setCursorPosition(cpos); setSelect(cpos , 1); } @@ -476,53 +434,41 @@ void KOTimeEdit::keyPressEvent(QKeyEvent *e) text.at( 5 ) = 'p'; lineEdit()->setText( text ); lineEdit()->setCursorPosition(5); } } } } 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); } |