diff options
Diffstat (limited to 'kvoctrain/kvoctrain/query-dialogs/QueryDlgBase.cpp')
-rw-r--r-- | kvoctrain/kvoctrain/query-dialogs/QueryDlgBase.cpp | 334 |
1 files changed, 334 insertions, 0 deletions
diff --git a/kvoctrain/kvoctrain/query-dialogs/QueryDlgBase.cpp b/kvoctrain/kvoctrain/query-dialogs/QueryDlgBase.cpp new file mode 100644 index 00000000..97b47c57 --- /dev/null +++ b/kvoctrain/kvoctrain/query-dialogs/QueryDlgBase.cpp @@ -0,0 +1,334 @@ +/*************************************************************************** + + base class for query dialogs + + ----------------------------------------------------------------------- + + begin : Wed Feb 16 20:50:53 MET 2000 + + 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 "QueryDlgBase.h" + +#include <qlineedit.h> +#include <qmultilineedit.h> +#include <qradiobutton.h> + +#include <LineList.h> + +#include <klocale.h> + +QueryDlgBase::QueryDlgBase(const QString & caption, QWidget *parent, const char *name, bool modal) + : KDialogBase(Swallow, caption, User1|User2, NoDefault, parent, name, modal, false, + KGuiItem(i18n("&Stop Query")), KGuiItem(i18n("&Edit Expression..."))) +{ + kv_doc = 0; + kv_exp = 0; + //type_timeout = kvq_notimeout; +} + + +QueryDlgBase::~QueryDlgBase () +{ +} + + +void QueryDlgBase::initFocus() const +{ + // +} + + +bool QueryDlgBase::smartCompare (const QString& s1, const QString &s2, + int ) const +{ + return s1.stripWhiteSpace() == s2.stripWhiteSpace(); +} + + +bool QueryDlgBase::verifyField(QLineEdit *field, const QString &really) +{ + if (!field->isEnabled() ) + return true; + + QColorGroup u_normal = field->colorGroup(); + u_normal.setColor(QColorGroup::Text, QColor(0xff, 0x00, 0x00)); + QColorGroup k_normal = field->colorGroup(); + k_normal.setColor(QColorGroup::Text, QColor(0x00, 0x80, 0x00)); + + QPalette known_pal( field->palette()); + QPalette unknown_pal( field->palette()); + + QFont ft = field->font(); + if (ft.weight() != QFont::Bold) { + ft.setWeight(QFont::Bold); + field->setFont(ft); + } + + bool ret = false; + if (smartCompare(really, field->text(), 0) ) { + ret = true; + if ( known_pal.inactive() != k_normal + || known_pal.active() != k_normal) { + // replace text colors + known_pal.setActive(k_normal); + known_pal.setInactive(k_normal); + field->setPalette( known_pal ); + } + } + else + if ( unknown_pal.inactive() != u_normal + || unknown_pal.active() != u_normal) { + // replace text colors + unknown_pal.setActive(u_normal); + unknown_pal.setInactive(u_normal); + field->setPalette( unknown_pal ); + } + return ret; +} + + +void QueryDlgBase::resetField(QLineEdit *field) +{ + if (!field->isEnabled() ) + return; + QColorGroup normal = field->colorGroup(); + normal.setColor(QColorGroup::Text, QColor(0x00, 0x00, 0x00)); + + QPalette pal( field->palette()); + // replace text colors + + if ( pal.inactive() != normal + || pal.active() != normal) { + pal.setActive(normal); + pal.setInactive(normal); + field->setPalette( pal ); + } + + QFont ft = field->font(); + if (ft.weight() != QFont::Normal) { + ft.setWeight(QFont::Normal); + field->setFont(ft); + } +} + + +bool QueryDlgBase::verifyField(QMultiLineEdit *field, const QString &really, bool mixed) +{ + if (!field->isEnabled()) + return true; + QColorGroup u_normal = field->colorGroup(); + u_normal.setColor(QColorGroup::Text, QColor(0xff, 0x00, 0x00)); + QColorGroup k_normal = field->colorGroup(); + k_normal.setColor(QColorGroup::Text, QColor(0x00, 0x80, 0x00)); + + QPalette known_pal( field->palette()); + QPalette unknown_pal( field->palette()); + + QFont ft = field->font(); + if (ft.weight() != QFont::Bold) { + ft.setWeight(QFont::Bold); + field->setFont(ft); + } + + bool ret = false; + bool equal = false; + LineList answerlist (really); + LineList inputlist (field->text()); + if (!mixed) // no tolerance + equal = smartCompare(answerlist.allLines(), inputlist.allLines(), 0); + else { + bool all = true; + for (int ai = 0; ai < (int) answerlist.count(); ai++) { + bool found = false; + for (int ii = 0; ii < (int) inputlist.count(); ii++) { + if (answerlist.getLine (ai) == inputlist.getLine(ii) ) { + found = true; + break; + } + } + if (!found) + all = false; + } + if (all) + equal = true; + } + + if (equal) { + ret = true; + if (known_pal.inactive() != k_normal + || known_pal.active() != k_normal) { + // replace text colors + known_pal.setActive(k_normal); + known_pal.setInactive(k_normal); + field->setPalette( known_pal ); + } + } + else + if ( unknown_pal.inactive() != u_normal + || unknown_pal.active() != u_normal) { + // replace text colors + unknown_pal.setActive(u_normal); + unknown_pal.setInactive(u_normal); + field->setPalette( unknown_pal ); + } + return ret; +} + + +void QueryDlgBase::resetField(QMultiLineEdit *field) +{ + if (!field->isEnabled() ) + return; + QColorGroup normal = field->colorGroup(); + normal.setColor(QColorGroup::Text, QColor(0x00, 0x00, 0x00)); + + QPalette pal( field->palette()); + // replace text colors + + if ( pal.inactive() != normal + || pal.active() != normal) { + pal.setActive(normal); + pal.setInactive(normal); + field->setPalette( pal ); + } + + QFont ft = field->font(); + if (ft.weight() != QFont::Normal) { + ft.setWeight(QFont::Normal); + field->setFont(ft); + } +} + + +void QueryDlgBase::verifyButton(QRadioButton *radio, bool is_ok, QWidget *widget2) +{ + if (!radio->isEnabled() ) + return; + + QColorGroup u_normal = radio->colorGroup(); + u_normal.setColor(QColorGroup::Foreground, QColor(0xff, 0x00, 0x00)); + QColorGroup k_normal = radio->colorGroup(); + k_normal.setColor(QColorGroup::Foreground, QColor(0x00, 0x80, 0x00)); + + QPalette known_pal( radio->palette()); + QPalette unknown_pal( radio->palette()); + + // replace text colors + + QFont ft = radio->font(); + if (ft.weight() != QFont::Bold) { + ft.setWeight(QFont::Bold); + radio->setFont(ft); + } + + if (widget2 != 0) { + ft = widget2->font(); + if (ft.weight() != QFont::Bold) { + ft.setWeight(QFont::Bold); + widget2->setFont(ft); + } + } + + if (is_ok) { + if ( known_pal.inactive() != k_normal + || known_pal.active() != k_normal) { + known_pal.setActive(k_normal); + known_pal.setInactive(k_normal); + radio->setPalette( known_pal ); + if (widget2 != 0) + widget2->setPalette( known_pal ); + } + } + else { + if ( unknown_pal.inactive() != u_normal + || unknown_pal.active() != u_normal) { + unknown_pal.setActive(u_normal); + unknown_pal.setInactive(u_normal); + radio->setPalette( unknown_pal ); + if (widget2 != 0) + widget2->setPalette( unknown_pal ); + } + } +} + + + +void QueryDlgBase::resetButton(QRadioButton *radio, QWidget *widget2) +{ + if (!radio->isEnabled() ) + return; + QColorGroup normal = radio->colorGroup(); + normal.setColor(QColorGroup::Foreground, QColor(0x00, 0x00, 0x00)); + + QPalette pal(radio->palette()); + // replace text colors, avoid flickering + if ( pal.inactive() != normal + || pal.active() != normal) { + pal.setActive(normal); + pal.setInactive(normal); + radio->setPalette( pal ); + if (widget2 != 0) + widget2->setPalette( pal ); + } + + QFont ft = radio->font(); + if (ft.weight() != QFont::Normal) { + ft.setWeight(QFont::Normal); + radio->setFont(ft); + } + + if (widget2 != 0) { + ft = widget2->font(); + if (ft.weight() != QFont::Normal) { + ft.setWeight(QFont::Normal); + widget2->setFont(ft); + } + } +} + + +QString QueryDlgBase::getOKComment(int percent_done) +{ + return i18n("Well done, you knew the correct answer. %1% done.").arg(percent_done); +} + + +QString QueryDlgBase::getTimeoutComment(int percent_done) +{ + return i18n("You waited too long to enter the correct answer. %1% done.").arg(percent_done); +} + + +QString QueryDlgBase::getNOKComment(int percent_done) +{ + return i18n("Your answer was wrong. %1% done.").arg(percent_done); +} + +void QueryDlgBase::closeEvent(QCloseEvent * /*e*/) +{ + emit sigQueryChoice(StopIt); +} + +void QueryDlgBase::slotUser1() +{ + emit sigQueryChoice(StopIt); +} + + +#include "QueryDlgBase.moc" |