diff options
Diffstat (limited to 'kvoctrain/kvoctrain/entry-dialogs/FromToEntryPage.cpp')
-rw-r--r-- | kvoctrain/kvoctrain/entry-dialogs/FromToEntryPage.cpp | 395 |
1 files changed, 395 insertions, 0 deletions
diff --git a/kvoctrain/kvoctrain/entry-dialogs/FromToEntryPage.cpp b/kvoctrain/kvoctrain/entry-dialogs/FromToEntryPage.cpp new file mode 100644 index 00000000..462cdbf0 --- /dev/null +++ b/kvoctrain/kvoctrain/entry-dialogs/FromToEntryPage.cpp @@ -0,0 +1,395 @@ +/*************************************************************************** + + edit properties from/to original + + ----------------------------------------------------------------------- + + begin : Mon Jun 28 21:02:16 1999 + + copyright : (C) 1999-2001 Ewald Arnold <kvoctrain@ewald-arnold.de> + (C) 2001 The KDE-EDU team + (C) 2005 Peter Hedlund <peter.hedlund@kdemail.net> + + ----------------------------------------------------------------------- + + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + + +#include "FromToEntryPage.h" +#include "EntryDlg.h" + +#include <qlineedit.h> +#include <qcombobox.h> +#include <qpushbutton.h> +#include <qgroupbox.h> + +#include <klocale.h> + +#include <QueryManager.h> +#include <langset.h> + +#include "blockall.h" +#include "MySpinBox.h" + +#include <stdlib.h> + +static QStringList monthnames; + +FromToEntryPage::FromToEntryPage +( + EntryDlg *_dlgbook, + bool multi_sel, + grade_t _grade, + time_t _time, + count_t _qcount, + count_t _bcount, + QString faux, + QString label, + QWidget *parent, + const char *name +) + : + FromToEntryPageForm( parent, name ), fauxami(faux), dlgbook(_dlgbook) +{ + monthnames.clear(); + monthnames.append (""); + monthnames.append (i18n("January")); + monthnames.append (i18n("February")); + monthnames.append (i18n("March")); + monthnames.append (i18n("April")); + monthnames.append (i18n("May")); + monthnames.append (i18n("June")); + monthnames.append (i18n("July")); + monthnames.append (i18n("August")); + monthnames.append (i18n("September")); + monthnames.append (i18n("October")); + monthnames.append (i18n("November")); + monthnames.append (i18n("December")); + + connect( bcount_line, SIGNAL(textChanged(const QString&)), SLOT(slotBCount(const QString&)) ); + connect( qcount_line, SIGNAL(textChanged(const QString&)), SLOT(slotQCount(const QString&)) ); + connect( fauxami_line, SIGNAL(textChanged(const QString&)), SLOT(slotFauxAmiSelected(const QString&)) ); + + connect( never, SIGNAL(clicked()), SLOT(slotNever()) ); + connect( today, SIGNAL(clicked()), SLOT(slotToday()) ); + connect( gradebox, SIGNAL(activated(int)), SLOT(slotGradeSelected(int)) ); + + connect( year_spin, SIGNAL(valueChanged(int)), SLOT(slotYearChanged(int)) ); + connect( month_spin, SIGNAL(valueChanged(int)), SLOT(slotMonthChanged(int)) ); + connect( day_spin, SIGNAL(valueChanged(int)), SLOT(slotDayChanged(int)) ); + + year_spin->setData ((QStringList *) 0, 1980, 2100); + month_spin->setData (&monthnames, 1, 12); + day_spin->setData ((QStringList *) 0, 1, 31); + + QString s; + for (int i = 0; i <= KV_MAX_GRADE; i++) { + s.setNum (i); + gradebox->insertItem( QueryManager::gradeStr(i) ); + } + gradebox->setValidator (new BlockAllValidator() ); + + setTabOrder(fauxami_line, year_spin); + setTabOrder(year_spin, month_spin); + setTabOrder(month_spin, day_spin); + setTabOrder(day_spin, today); + + setData(multi_sel, _grade, _time, _qcount, _bcount, faux, label); +} + + +void FromToEntryPage::setData( + bool multi_sel, + grade_t _grade, + time_t _time, + count_t _qcount, + count_t _bcount, + QString faux, + QString label) +{ + grade = _grade; + qcount = _qcount; + bcount = _bcount; + fauxami = faux; + fauxami_line->setText(fauxami); + + valid_date = false; + QDateTime dt; + QDate date; + if (_time != 0 && !multi_sel) { + dt.setTime_t (_time); + valid_date = true; + + date = dt.date(); + year = date.year(); + month = date.month(); + day = date.day(); + + day_spin->setValue(day); + month_spin->setValue(month); + year_spin->setValue(year); + year_spin->setSpecial(QString::null); + month_spin->setSpecial(QString::null); + day_spin->setSpecial(QString::null); + } + else { + dt.setTime_t (time(0L)); + date = dt.date(); + year = date.year(); + month = date.month(); + day = date.day(); + year_spin->setSpecial("----"); + month_spin->setSpecial("----"); + day_spin->setSpecial("--"); + } + + direc_label->setTitle (label); + + gradebox->setCurrentItem (grade); + + QString s; + s.setNum (qcount); + qcount_line->setText (s); + + s.setNum (bcount); + bcount_line->setText (s); + + if (multi_sel) { + fauxami_line->setEnabled(false); + valid_date = false; + bcount_line->setText (""); + qcount_line->setText (""); + month_spin->setSpecial(" "); + day_spin->setSpecial(" "); + // FIXME: possibly derive new combobox type + // which filters ALL charcters to prevent new input + // in edit field + gradebox->clearEdit(); + } + + bcount_dirty = false; + qcount_dirty = false; + date_dirty = false; + grade_dirty = false; + + setModified(false); +} + + +void FromToEntryPage::slotFauxAmiSelected(const QString& s) +{ + setModified(true); + fauxami = s; +} + + +void FromToEntryPage::slotGradeSelected (int g) +{ + setModified(true); + grade_dirty = true; + grade = g; +} + + +void FromToEntryPage::slotQCount(const QString& s) +{ + setModified(true); + qcount_dirty = true; + qcount = atoi (s.local8Bit()); +} + + +void FromToEntryPage::slotBCount(const QString& s) +{ + setModified(true); + bcount_dirty = true; + bcount = atoi (s.local8Bit()); +} + + +time_t FromToEntryPage::getDate () const +{ + // FIXME: warning dialog/don`t quit dialog when date invalid + if (valid_date) { + QDate act_date (year, month, day); + QDateTime time_null (QDate (1970, 1, 1), QTime (0,0,0)); + return -QDateTime(act_date).secsTo (time_null); + } + else + return 0; +} + + +void FromToEntryPage::validate() +{ + if (!valid_date) { + valid_date = true; + day_spin->setValue(day); + month_spin->setValue(month); + year_spin->setValue(year); + } +} + + +void FromToEntryPage::slotYearChanged(int new_year) +{ + setModified(true); + date_dirty = true; + if (!valid_date) { + slotToday(); + new_year = year; + } + + year_spin->setSpecial(QString::null); + + year = new_year; + validate(); +} + + +void FromToEntryPage::slotDecYear() +{ + setModified(true); +} + + +// FIXME: dec month when day decrease below 1 +void FromToEntryPage::slotIncYear() +{ + setModified(true); +} + + +void FromToEntryPage::slotMonthChanged(int new_month) +{ + setModified(true); + date_dirty = true; + if (!valid_date) { + slotToday(); + new_month = month; + } + + month_spin->setSpecial(QString::null); + + month = new_month; + validate(); +} + + +void FromToEntryPage::slotDecMonth() +{ + setModified(true); +} + + +void FromToEntryPage::slotIncMonth() +{ + setModified(true); +} + + +void FromToEntryPage::slotDayChanged(int new_day) +{ + setModified(true); + date_dirty = true; + if (!valid_date) { + slotToday(); + new_day = day; + } + + day_spin->setSpecial(QString::null); + + day = new_day; + validate(); +} + + +void FromToEntryPage::slotDecDay() +{ + setModified(true); +} + + +void FromToEntryPage::slotIncDay() +{ + setModified(true); +} + + +void FromToEntryPage::slotToday() +{ + setModified(true); + date_dirty = true; + QDateTime dt; + dt.setTime_t (time(0L)); + + year = dt.date().year(); + month = dt.date().month(); + day = dt.date().day(); + + day_spin->setValue(day); + month_spin->setValue(month); + year_spin->setValue(year); + year_spin->setSpecial(QString::null); + month_spin->setSpecial(QString::null); + day_spin->setSpecial(QString::null); + validate(); +} + + +void FromToEntryPage::slotNever() +{ + setModified(true); + date_dirty = true; + year = 0; + month = 0; + day = 0; + year_spin->setSpecial("----"); + month_spin->setSpecial("----"); + day_spin->setSpecial("--"); + valid_date = false; +} + + +bool FromToEntryPage::isModified() +{ + return modified; +} + + +void FromToEntryPage::setEnabled(int enable) +{ + bool ena = enable == EntryDlg::EnableAll; + + bcount_line->setEnabled(ena); + qcount_line->setEnabled(ena); + fauxami_line->setEnabled(ena); + + never->setEnabled(ena); + today->setEnabled(ena); + gradebox->setEnabled(ena); + + year_spin->setEnabled(ena); + month_spin->setEnabled(ena); + day_spin->setEnabled(ena); +} + + +void FromToEntryPage::setModified(bool mod) +{ + modified = mod; + if (mod) + emit sigModified(); +} + +#include "FromToEntryPage.moc" + |