summaryrefslogtreecommitdiffabout
path: root/libkdepim
authorzautrix <zautrix>2005-02-09 13:22:06 (UTC)
committer zautrix <zautrix>2005-02-09 13:22:06 (UTC)
commitc3dd5bfd446b893a8b39ddec425a6cf8deff2261 (patch) (side-by-side diff)
treed0dd74c17fd6101da1d6c403c85924c58bc1ac9b /libkdepim
parent940cdd0fd1349e7f8e53adff0595c1d946322ef1 (diff)
downloadkdepimpi-c3dd5bfd446b893a8b39ddec425a6cf8deff2261.zip
kdepimpi-c3dd5bfd446b893a8b39ddec425a6cf8deff2261.tar.gz
kdepimpi-c3dd5bfd446b893a8b39ddec425a6cf8deff2261.tar.bz2
fixes
Diffstat (limited to 'libkdepim') (more/less context) (ignore whitespace changes)
-rw-r--r--libkdepim/kdateedit.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/libkdepim/kdateedit.cpp b/libkdepim/kdateedit.cpp
index c4c0081..2c78ea3 100644
--- a/libkdepim/kdateedit.cpp
+++ b/libkdepim/kdateedit.cpp
@@ -173,325 +173,326 @@ void KDateEdit::setDate( QDate date,int *cpos,const int key ,const bool dateForm
case 'm':// 01 (month)
strLength = 2; //Ok
break;
case 'a':// Mon (Weekday)
strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length();
break;
case 'A':// Monday (Weekday)
strLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length();
break;
case 'b':// Jan (monthName)
strLength = KGlobal::locale()->monthName(date.month(), true).length();
break;
case 'B':// January (monthName)
strLength = KGlobal::locale()->monthName(date.month(), false).length();
break;
case 'y':// 04 (year short)
strLength = 2; //Ok
break;
case 'Y':// 2004 (year)
strLength = 4; //Ok
break;
default:
break;
}
space = begin - (repeat++ * 2);
// all select? then dayswitch
if( (mDateEdit->text().length() == mDateEdit->markedText().length() ) &&
( (dateForm.at(begin + 1).latin1() == 'd') ||
(dateForm.at(begin + 1).latin1() == 'a') ||
(dateForm.at(begin + 1).latin1() == 'A') ) ) {
break;
}
// mDateEdit-StringPos == CursorPosition(cpos) then break and set date
if( ( (space + allStrLength) <= *cpos && *cpos <= (space + allStrLength + strLength) ) || *cpos < begin ) {
break;
}
allStrLength += strLength;
begin = dateForm.find("%", begin +1);
}
// set date
switch ( dateForm.at(begin + 1).latin1() ) {
case 'd':
case 'a':
case 'A':
if(key == Key_Up) {
setDate( date.addDays( 1 ) );
}
else if(key == Key_Down) {
setDate( date.addDays( -1 ) );
}
maxDay = readDate().day();
break;
case 'm':
case 'b':
case 'B':
if(key == Key_Up) {
int year = ((date.month()+1)>12)?date.year()+1:date.year();
int month = ((date.month()+1)>12)?1:date.month()+1;
int day = (QDate(year,month,1).daysInMonth()<maxDay)?QDate(year,month,1).daysInMonth():maxDay;
setDate( QDate( year, month, day ) );
} else if(key == Key_Down) {
int year = ((date.month()-1)<1)?date.year()-1:date.year();
int month = ((date.month()-1)<1)?12:date.month()-1;
int day = (QDate(year,month,1).daysInMonth()<maxDay)?QDate(year,month,1).daysInMonth():maxDay;
setDate( QDate( year, month, day ) );
}
break;
case 'y':
case 'Y':
if(key == Key_Up) {
setDate( QDate( date.year() + 1, date.month() , date.day()) );
}
else if(key == Key_Down) {
setDate( QDate( date.year() - 1, date.month() , date.day()) );
}
break;
/* default:
if(key == Key_Up) {
setDate( date.addDays( 1 ) );
} else if(key == Key_Down) {
setDate( date.addDays( -1 ) );
}
break;*/
}
date = readDate();
begin = dateForm.find("%");
int allSelectStrLength = 0;
int selectStrLength = 0;
// set selection do new date an set cursor at end of selection
for(int i = 0; i < repeat; i++){
switch ( dateForm.at(begin + 1).latin1() )
{
case 'd':// 16 (month day)
selectStrLength = 2; //Ok
break;
case 'm':// 01 (month)
selectStrLength = 2; //Ok
break;
case 'a':// Mon (Weekday short)
selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), true).length();
break;
case 'A':// Monday (Weekday)
selectStrLength = KGlobal::locale()->weekDayName(date.dayOfWeek(), false).length();
break;
case 'b':// Jan (monthName short)
selectStrLength = KGlobal::locale()->monthName(date.month(), true).length();
break;
case 'B':// January (monthName)
selectStrLength = KGlobal::locale()->monthName(date.month(), false).length();
break;
case 'y':// 04 (year short)
selectStrLength = 2; //Ok
break;
case 'Y':// 2004 (year)
selectStrLength = 4; //Ok
break;
default:
break;
}
space = begin - (i * 2);
allSelectStrLength += selectStrLength;
begin = dateForm.find("%", begin +1);
}
// set selection from begin of date
setSelect( space + allSelectStrLength - selectStrLength , selectStrLength);
*cpos = space + allSelectStrLength;
emit(dateChanged(date));
return;
}
void KDateEdit::setHandleInvalid(bool handleInvalid)
{
mHandleInvalid = handleInvalid;
}
void KDateEdit::setEnabled(bool on)
{
mDateEdit->setEnabled(on);
mDateButton->setEnabled(on);
}
QDate KDateEdit::date() const
{
QDate date = readDate();
if (date.isValid() || mHandleInvalid) {
return date;
} else {
KNotifyClient::beep();
return QDate::currentDate();
}
}
void KDateEdit::keyPressEvent(QKeyEvent *e)
{
QDate date = readDate();
int cpos = mDateEdit->cursorPosition();
switch(e->key())
{
case Key_Escape:
mDateEdit->deselect();
case Key_Tab:
QHBox::keyPressEvent(e);
break;
case Key_Up:
// when date invalid then set to currend and return
if(!date.isValid()) {
date = QDate::currentDate();
setDate(date);
mDateEdit->setCursorPosition(cpos);
emit(dateChanged(date));
QString text = i18n( "You entered an invalid date!\n Date changed to current date." );
KMessageBox::information( 0, text );
return;
}
setDate(date, &cpos, Key_Up, dateFormShort);
break;
case Key_Down:
// when date invalid then set to current and return
if(!date.isValid()) {
date = QDate::currentDate();
setDate(date);
mDateEdit->setCursorPosition(cpos);
emit(dateChanged(date));
QString text = i18n( "You entered an invalid date!\n Date changed to current date." );
KMessageBox::information( 0, text );
return;
}
setDate(date, &cpos, Key_Down, dateFormShort);
break;
default:
QHBox::keyPressEvent(e);
break;
} // switch
mDateEdit->setCursorPosition(cpos);
}
void KDateEdit::setSelect( int from, int to )
{
// return;
mDateEdit->setSelection( from , to );
}
void KDateEdit::toggleDatePicker()
{
if( mDateFrame->isVisible() ) {
mDateFrame->hide();
} else {
QPoint tmpPoint = mapToGlobal(mDateButton->geometry().bottomRight());
QSize datepickersize = mDatePicker->sizeHint();
if ( tmpPoint.x() < 7+datepickersize.width() ) tmpPoint.setX( 7+datepickersize.width() );
int h = QApplication::desktop()->height();
if ( tmpPoint.y() + datepickersize.height() > h ) tmpPoint.setY( h - datepickersize.height() );
mDateFrame->setGeometry(tmpPoint.x()-datepickersize.width()-7, tmpPoint.y(),
datepickersize.width()+2*mDateFrame->lineWidth(), datepickersize.height()+2*mDateFrame->lineWidth());
QDate date = readDate();
if(date.isValid()) {
mDatePicker->setDate(date);
} else {
mDatePicker->setDate(QDate::currentDate());
}
mDateFrame->show();
}
}
void KDateEdit::lineEnterPressed()
{
QDate date = readDate();
if(date.isValid())
{
// Update the edit. This is needed if the user has entered a
// word rather than the actual date.
setDate(date);
emit(dateChanged(date));
emit returnPressed();
}
else
{
if ( withoutDp ) {
KNotifyClient::beep();
} else {
if ( !mDateEdit->text().isEmpty() ) {
mTextChanged = false;
QString text = i18n( "You entered an invalid date!\n Will use current date instead." );
- if ( KMessageBox::warningContinueCancel( 0, text ) == KMessageBox::Continue ) {
- setDate( QDate::currentDate() );
- emit dateChanged( QDate::currentDate() );
- }
+ if ( isVisible() )
+ if ( KMessageBox::warningContinueCancel( 0, text ) == KMessageBox::Continue ) {
+ setDate( QDate::currentDate() );
+ emit dateChanged( QDate::currentDate() );
+ }
}
}
}
}
bool KDateEdit::inputIsValid()
{
return readDate().isValid();
}
QDate KDateEdit::readDate() const
{
QString text = mDateEdit->text();
QDate date;
if (mKeywordMap.contains(text.lower()))
{
date = QDate::currentDate().addDays(mKeywordMap[text.lower()]);
}
else
{
date = KGlobal::locale()->readDate(text);
}
return date;
}
bool KDateEdit::eventFilter(QObject *, QEvent *e)
{
// We only process the focus out event if the text has changed
// since we got focus
if ((e->type() == QEvent::FocusOut) && mTextChanged)
{
lineEnterPressed();
mTextChanged = false;
}
// switch dateFormShort by double klick with mouse
else if (e->type() == QEvent::MouseButtonDblClick)
{
toggleDateFormat();
}
else if (e->type() == QEvent::FocusIn)
{
maxDay = readDate().day();
}
return false;
}
void KDateEdit::toggleDateFormat()
{
dateFormShort = ! dateFormShort;
mDateEdit->setText(KGlobal::locale()->formatDate(readDate(),dateFormShort));
}
void KDateEdit::textChanged(const QString &)
{
if(mHandleInvalid && mDateEdit->text().stripWhiteSpace().isEmpty()) {
QDate date; //invalid date
emit(dateChanged(date));
} else {
mTextChanged = true;
}
maxDay = readDate().day();
}