karm
ktimewidget.cpp00001 #include <stdlib.h>
00002
00003 #include <qlabel.h>
00004 #include <qlayout.h>
00005 #include <qlineedit.h>
00006 #include <qstring.h>
00007 #include <qvalidator.h>
00008 #include <qwidget.h>
00009
00010 #include <klocale.h>
00011 #include "ktimewidget.h"
00012
00013 enum ValidatorType { HOUR, MINUTE };
00014
00015 class TimeValidator : public QValidator
00016 {
00017 public:
00018 TimeValidator( ValidatorType tp, QWidget *parent=0, const char *name=0)
00019 : QValidator(parent, name)
00020 {
00021 _tp = tp;
00022 }
00023 State validate(QString &str, int &) const
00024 {
00025 if (str.isEmpty())
00026 return Acceptable;
00027
00028 bool ok;
00029 int val = str.toInt( &ok );
00030 if ( ! ok )
00031 return Invalid;
00032
00033 if ( str.contains('-') != 0 )
00034 return Invalid;
00035
00036 if ( _tp==MINUTE && val >= 60 )
00037 return Invalid;
00038 else
00039 return Acceptable;
00040 }
00041
00042 public:
00043 ValidatorType _tp;
00044 };
00045
00046
00047 class KarmLineEdit : public QLineEdit
00048 {
00049
00050 public:
00051 KarmLineEdit( QWidget* parent, const char* name = 0 )
00052 : QLineEdit( parent, name ) {}
00053
00054 protected:
00055
00056 virtual void keyPressEvent( QKeyEvent *event )
00057 {
00058 QLineEdit::keyPressEvent( event );
00059 if ( text().length() == 2 && !event->text().isEmpty() )
00060 focusNextPrevChild(true);
00061 }
00062 };
00063
00064
00065 KArmTimeWidget::KArmTimeWidget( QWidget* parent, const char* name )
00066 : QWidget(parent, name)
00067 {
00068 QHBoxLayout *layout = new QHBoxLayout(this);
00069
00070 _hourLE = new QLineEdit( this);
00071
00072
00073 _hourLE->setFixedWidth( fontMetrics().maxWidth() * 3
00074 + 2 * _hourLE->frameWidth() + 2);
00075 layout->addWidget(_hourLE);
00076 TimeValidator *validator = new TimeValidator( HOUR, _hourLE,
00077 "Validator for _hourLE");
00078 _hourLE->setValidator( validator );
00079 _hourLE->setAlignment( Qt::AlignRight );
00080
00081
00082 QLabel *hr = new QLabel( i18n( "abbreviation for hours", " hr. " ), this );
00083 layout->addWidget( hr );
00084
00085 _minuteLE = new KarmLineEdit(this);
00086
00087
00088 _minuteLE->setFixedWidth( fontMetrics().maxWidth() * 2
00089 + 2 * _minuteLE->frameWidth() + 2);
00090 layout->addWidget(_minuteLE);
00091 validator = new TimeValidator( MINUTE, _minuteLE, "Validator for _minuteLE");
00092 _minuteLE->setValidator( validator );
00093 _minuteLE->setMaxLength(2);
00094 _minuteLE->setAlignment( Qt::AlignRight );
00095
00096 QLabel *min = new QLabel( i18n( "abbreviation for minutes", " min. " ), this );
00097 layout->addWidget( min );
00098
00099 layout->addStretch(1);
00100 setFocusProxy( _hourLE );
00101 }
00102
00103 void KArmTimeWidget::setTime( int hour, int minute )
00104 {
00105 QString dummy;
00106
00107 dummy.setNum( hour );
00108 _hourLE->setText( dummy );
00109
00110 dummy.setNum( abs(minute) );
00111 if (abs(minute) < 10 ) {
00112 dummy = QString::fromLatin1( "0" ) + dummy;
00113 }
00114 _minuteLE->setText( dummy );
00115 }
00116
00117 long KArmTimeWidget::time() const
00118 {
00119 bool ok;
00120 int h, m;
00121
00122 h = _hourLE->text().toInt( &ok );
00123 m = _minuteLE->text().toInt( &ok );
00124
00125
00126 return h * 60 + ( ( h < 0) ? -1 : 1 ) * m;
00127 }
|