author | zautrix <zautrix> | 2005-01-16 08:49:00 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-01-16 08:49:00 (UTC) |
commit | 62ff81d5d292ddf3c6032b48f27a6daedf6a6cb0 (patch) (side-by-side diff) | |
tree | ef89d1577b47959c172e644701bf9dc7541c2987 | |
parent | 32795d059fa22cc9fd213db4b4d87e30866a7cb9 (diff) | |
download | kdepimpi-62ff81d5d292ddf3c6032b48f27a6daedf6a6cb0.zip kdepimpi-62ff81d5d292ddf3c6032b48f27a6daedf6a6cb0.tar.gz kdepimpi-62ff81d5d292ddf3c6032b48f27a6daedf6a6cb0.tar.bz2 |
beter time edit
-rw-r--r-- | bin/kdepim/WhatsNew.txt | 5 | ||||
-rw-r--r-- | korganizer/koeditorgeneralevent.cpp | 17 | ||||
-rw-r--r-- | korganizer/koeditorgeneraltodo.cpp | 12 | ||||
-rw-r--r-- | korganizer/ktimeedit.cpp | 106 | ||||
-rw-r--r-- | korganizer/ktimeedit.h | 3 | ||||
-rw-r--r-- | microkde/kdecore/klocale.cpp | 4 |
6 files changed, 33 insertions, 114 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt index c8293b2..5d8ef41 100644 --- a/bin/kdepim/WhatsNew.txt +++ b/bin/kdepim/WhatsNew.txt @@ -7,24 +7,29 @@ Please read the changelog of VERSION 1.9.17 as well. Cleaned up the syncing config dialog. Added sync config options for date range for events. Added sync config options for filters on incoming data. Added sync config options for filters on outgoing data. Please read the updated SyncHowTo about the new filter settings. These filter settings make it now possible to sync with shared calendars without writing back private or confidential data (via the outgoing filters). To sync only with particular parts of a shared calendar, the incoming filter settings can be used. An example can be found in the SyncHowTo. + +KO/Pi: +The timeedit input has a pulldown list for times. +If opened, this pulldown list should now has the right time highlighted. + ********** VERSION 1.9.17 ************ KO/Pi: Fixed that tooltips were not updated after moving an item in agenda view. Fixed a bug in sorting start date for recurring events in list view. Changed the left button in todo viewer from "Agenda" to "Set completed". This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View. Added more info in the todo viewer: Startdate, parent/sub todos. diff --git a/korganizer/koeditorgeneralevent.cpp b/korganizer/koeditorgeneralevent.cpp index fc5be71..30b792b 100644 --- a/korganizer/koeditorgeneralevent.cpp +++ b/korganizer/koeditorgeneralevent.cpp @@ -385,41 +385,24 @@ void KOEditorGeneralEvent::emitDateTimeStr() from = l->formatDateTime(mCurrStartDateTime); to = l->formatDateTime(mCurrEndDateTime); } QString str = i18n("From: %1 To: %2 %3").arg(from).arg(to) .arg(mDurationLabel->text()); emit dateTimeStrChanged(str); } bool KOEditorGeneralEvent::validateInput() { -// kdDebug() << "KOEditorGeneralEvent::validateInput()" << endl; - - if (!mNoTimeButton->isChecked()) { - if (!mStartTimeEdit->inputIsValid()) { - KMessageBox::sorry( 0, - i18n("Please specify a valid start time, for example '%1'.") - .arg( KGlobal::locale()->formatTime( QTime::currentTime() ) ) ); - return false; - } - - if (!mEndTimeEdit->inputIsValid()) { - KMessageBox::sorry( 0, - i18n("Please specify a valid end time, for example '%1'.") - .arg( KGlobal::locale()->formatTime( QTime::currentTime() ) ) ); - return false; - } - } if (!mStartDateEdit->inputIsValid()) { KMessageBox::sorry( 0, i18n("Please specify a valid start date, for example '%1'.") .arg( KGlobal::locale()->formatDate( QDate::currentDate() ) ) ); return false; } if (!mEndDateEdit->inputIsValid()) { KMessageBox::sorry( 0, i18n("Please specify a valid end date, for example '%1'.") .arg( KGlobal::locale()->formatDate( QDate::currentDate() ) ) ); diff --git a/korganizer/koeditorgeneraltodo.cpp b/korganizer/koeditorgeneraltodo.cpp index 7db7da0..158a7d3 100644 --- a/korganizer/koeditorgeneraltodo.cpp +++ b/korganizer/koeditorgeneraltodo.cpp @@ -375,43 +375,31 @@ void KOEditorGeneralTodo::showAlarm() else { alarmDisable(true); } } bool KOEditorGeneralTodo::validateInput() { if (mDueCheck->isChecked()) { if (!mDueDateEdit->inputIsValid()) { KMessageBox::sorry(0,i18n("Please specify a valid due date.")); return false; } - if (mTimeButton->isChecked()) { - if (!mDueTimeEdit->inputIsValid()) { - KMessageBox::sorry(0,i18n("Please specify a valid due time.")); - return false; - } - } } if (mStartCheck->isChecked()) { if (!mStartDateEdit->inputIsValid()) { KMessageBox::sorry(0,i18n("Please specify a valid start date.")); return false; } - if (mTimeButton->isChecked()) { - if (!mStartTimeEdit->inputIsValid()) { - KMessageBox::sorry(0,i18n("Please specify a valid start time.")); - return false; - } - } } if (mStartCheck->isChecked() && mDueCheck->isChecked()) { QDateTime startDate; QDateTime dueDate; startDate.setDate(mStartDateEdit->date()); dueDate.setDate(mDueDateEdit->date()); if (mTimeButton->isChecked()) { startDate.setTime(mStartTimeEdit->getTime()); dueDate.setTime(mDueTimeEdit->getTime()); } if (startDate > dueDate) { 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); } diff --git a/korganizer/ktimeedit.h b/korganizer/ktimeedit.h index 7923070..b3d842d 100644 --- a/korganizer/ktimeedit.h +++ b/korganizer/ktimeedit.h @@ -49,27 +49,24 @@ class KOTimeEdit : public QComboBox /** Returns, if a time is selected. Can not return false anymore.... */ bool hasTime() const; /** returns the time that is currently set in the timeLineEdit. */ QTime getTime() const; /** returns the prefered size policy of the KOTimeEdit */ //QSizePolicy sizePolicy() const; - /** return true if input is a valid time and false if not */ - bool inputIsValid() const; - signals: /** Emitted every time the time displayed changes. "newt" is the new time. */ void timeChanged(QTime newt); public slots: /** used to set the time which is displayed to a specific value. */ void setTime(QTime qt); protected slots: diff --git a/microkde/kdecore/klocale.cpp b/microkde/kdecore/klocale.cpp index d7e384c..7f31ab1 100644 --- a/microkde/kdecore/klocale.cpp +++ b/microkde/kdecore/klocale.cpp @@ -553,27 +553,27 @@ QDate KLocale::readDate(const QString &intstr, const QString &fmt, bool* ok) con { if (ok) *ok = true; return QDate(year, month, day); } error: if (ok) *ok = false; return QDate(); // invalid date } QTime KLocale::readTime(const QString &intstr, bool *ok) const { QTime _time; - _time = readTime(intstr, true, ok); + _time = readTime(intstr, false, ok); if (_time.isValid()) return _time; - return readTime(intstr, false, ok); + return readTime(intstr, true, ok); } QTime KLocale::readTime(const QString &intstr, bool seconds, bool *ok) const { QString str = intstr.simplifyWhiteSpace().lower(); QString Format = timeFormat().simplifyWhiteSpace(); if (!seconds) Format.replace(QRegExp(QString::fromLatin1(".%S")), QString::null); int hour = -1, minute = -1, second = seconds ? -1 : 0; // don't require seconds bool g_12h = false; |