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) (side-by-side diff)
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
@@ -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);
}