You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kvoctrain/kvoctrain/query-dialogs/VerbQueryDlg.cpp

517 lines
15 KiB

/***************************************************************************
query dialog for verbs
-----------------------------------------------------------------------
begin : Fri Dec 3 18:28:18 1999
copyright : (C) 1999-2001 Ewald Arnold <kvoctrain@ewald-arnold.de>
(C) 2001 The KDE-EDU team
(C) 2004-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 "VerbQueryDlg.h"
#include <kv_resource.h>
#include <kapplication.h>
#include <kstandarddirs.h>
#include <klocale.h>
#include <kprogress.h>
#include <tqtimer.h>
#include <tqpushbutton.h>
#include <tqlabel.h>
#include <tqlineedit.h>
VerbQueryDlg::VerbQueryDlg
(
TQString type,
int entry,
int col,
int query_cycle,
int query_num,
int query_startnum,
kvoctrainExpr *exp,
kvoctrainDoc *doc,
const Conjugation &prefix,
const Conjugation &conjug)
: QueryDlgBase(i18n("Verb Training"))
{
mw = new VerbQueryDlgForm(this);
setMainWidget(mw);
connect(mw->dont_know, TQT_SIGNAL(clicked()), TQT_SLOT(dontKnowClicked()) );
connect(mw->know_it, TQT_SIGNAL(clicked()), TQT_SLOT(knowItClicked()) );
connect(mw->verify, TQT_SIGNAL(clicked()), TQT_SLOT(verifyClicked()) );
connect(mw->show_all, TQT_SIGNAL(clicked()), TQT_SLOT(showAllClicked()) );
connect(mw->p3pmField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p3pnField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p3snField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p3smField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p3pfField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p3sfField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p2pField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p2sField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p1pField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p1sField, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotReturnPressed()) );
connect(mw->p3pmField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP3pmChanged(const TQString&)) );
connect(mw->p3snField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP3snChanged(const TQString&)) );
connect(mw->p3pnField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP3pnChanged(const TQString&)) );
connect(mw->p3smField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP3smChanged(const TQString&)) );
connect(mw->p3pfField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP3pfChanged(const TQString&)) );
connect(mw->p3sfField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP3sfChanged(const TQString&)) );
connect(mw->p2pField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP2pChanged(const TQString&)) );
connect(mw->p2sField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP2sChanged(const TQString&)) );
connect(mw->p1pField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP1pChanged(const TQString&)) );
connect(mw->p1sField, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotP1sChanged(const TQString&)) );
qtimer = 0;
setQuery (type, entry, col, query_cycle, query_num, query_startnum, exp, doc, prefix, conjug);
mw->countbar->setFormat("%v/%m");
mw->timebar->setFormat("%v");
resize(configDialogSize("VerbQueryDialog"));
}
VerbQueryDlg::~ VerbQueryDlg( )
{
saveDialogSize("VerbQueryDialog");
}
void VerbQueryDlg::initFocus() const
{
mw->p1sField->setFocus();
}
void VerbQueryDlg::setQuery(TQString,
int entry,
int col,
int q_cycle,
int q_num,
int q_start,
kvoctrainExpr *exp,
kvoctrainDoc *doc,
const Conjugation &prefix,
const Conjugation &conjug)
{
//type_timeout = type_to;
kv_doc = doc;
kv_exp = exp;
q_row = entry;
q_ocol = col;
int mqtime = Prefs::maxTimePer();
mw->timebar->setEnabled(Prefs::showCounter());
mw->timelabel->setEnabled(Prefs::showCounter());
mw->show_all->setDefault(true);
TQString s;
s.setNum (q_cycle);
mw->progCount->setText (s);
conjugations = conjug;
mw->p1sLabel->setText (prefix.pers1Singular(CONJ_PREFIX));
mw->p2sLabel->setText (prefix.pers2Singular(CONJ_PREFIX));
mw->p3sfLabel->setText (prefix.pers3FemaleSingular(CONJ_PREFIX));
mw->p3smLabel->setText (prefix.pers3MaleSingular(CONJ_PREFIX));
mw->p3snLabel->setText (prefix.pers3NaturalSingular(CONJ_PREFIX));
mw->p1pLabel->setText (prefix.pers1Plural(CONJ_PREFIX));
mw->p2pLabel->setText (prefix.pers2Plural(CONJ_PREFIX));
mw->p3pfLabel->setText (prefix.pers3FemalePlural(CONJ_PREFIX));
mw->p3pmLabel->setText (prefix.pers3MalePlural(CONJ_PREFIX));
mw->p3pnLabel->setText (prefix.pers3NaturalPlural(CONJ_PREFIX));
mw->countbar->setTotalSteps(q_start);
mw->countbar->setProgress(q_start - q_num + 1);
if (mqtime > 0) { // more than 1000 milli-seconds
if (qtimer == 0) {
qtimer = new TQTimer( this );
connect( qtimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(timeoutReached()) );
}
if (Prefs::queryTimeout() != Prefs::EnumQueryTimeout::NoTimeout) {
timercount = mqtime;
mw->timebar->setTotalSteps(timercount);
mw->timebar->setProgress(timercount);
qtimer->start(1000, TRUE);
}
else
mw->timebar->setEnabled(false);
}
else
mw->timebar->setEnabled(false);
all_known = true;
current = -1;
next();
}
bool VerbQueryDlg::next()
{
resetAllFields();
TQString s, type;
if (q_ocol == 0)
s = kv_exp->getOriginal();
else
s = kv_exp->getTranslation(q_ocol);
if (current < (int) conjugations.numEntries()-1 )
current++;
type = conjugations.getType(current);
TQString format = i18n("Current tense is: %1.");
TQString msg = format.arg(conjugations.getName(type));
mw->instructionLabel->setText (msg);
mw->baseLabel->setText (s);
mw->p1sField->setText("");
mw->p1sField->setEnabled (!conjugations.pers1Singular(type).isEmpty());
mw->p2sField->setText("");
mw->p2sField->setEnabled (!conjugations.pers2Singular(type).isEmpty());
mw->p3sfField->setText("");
mw->p3sfField->setEnabled (!conjugations.pers3FemaleSingular(type).isEmpty());
mw->p3smField->setText("");
mw->p3smField->setEnabled (!conjugations.pers3MaleSingular(type).isEmpty());
mw->p3snField->setText("");
mw->p3snField->setEnabled (!conjugations.pers3NaturalSingular(type).isEmpty());
mw->p1pField->setText("");
mw->p1pField->setEnabled (!conjugations.pers1Plural(type).isEmpty());
mw->p2pField->setText("");
mw->p2pField->setEnabled (!conjugations.pers2Plural(type).isEmpty());
mw->p3pfField->setText("");
mw->p3pfField->setEnabled (!conjugations.pers3FemalePlural(type).isEmpty());
mw->p3pmField->setText("");
mw->p3pmField->setEnabled (!conjugations.pers3MalePlural(type).isEmpty());
mw->p3pnField->setText("");
mw->p3pnField->setEnabled (!conjugations.pers3NaturalPlural(type).isEmpty());
bool common = conjugations.pers3SingularCommon(type);
if (common) {
mw->p3smField->setEnabled(false);
mw->p3snField->setEnabled(false);
}
common = conjugations.pers3PluralCommon(type);
if (common) {
mw->p3pmField->setEnabled(false);
mw->p3pnField->setEnabled(false);
}
return false;
}
void VerbQueryDlg::showAllClicked()
{
resetAllFields();
mw->dont_know->setDefault(true);
TQString type = conjugations.getType (current);
mw->p1sField->setText (conjugations.pers1Singular(type));
mw->p2sField->setText (conjugations.pers2Singular(type));
mw->p3sfField->setText (conjugations.pers3FemaleSingular(type));
mw->p3smField->setText (conjugations.pers3MaleSingular(type));
mw->p3snField->setText (conjugations.pers3NaturalSingular(type));
mw->p1pField->setText (conjugations.pers1Plural(type));
mw->p2pField->setText (conjugations.pers2Plural(type));
mw->p3pfField->setText (conjugations.pers3FemalePlural(type));
mw->p3pmField->setText (conjugations.pers3MalePlural(type));
mw->p3pnField->setText (conjugations.pers3NaturalPlural(type));
verifyField (mw->p1sField, conjugations.pers1Singular(type));
verifyField (mw->p2sField, conjugations.pers2Singular(type));
verifyField (mw->p3sfField, conjugations.pers3FemaleSingular(type));
bool common = conjugations.pers3SingularCommon(type);
if (!common) {
verifyField (mw->p3smField, conjugations.pers3MaleSingular(type));
verifyField (mw->p3snField, conjugations.pers3NaturalSingular(type));
}
verifyField (mw->p1pField, conjugations.pers1Plural(type));
verifyField (mw->p2pField, conjugations.pers2Plural(type));
verifyField (mw->p3pfField, conjugations.pers3FemalePlural(type));
common = conjugations.pers3PluralCommon(type);
if (!common) {
verifyField (mw->p3pmField, conjugations.pers3MalePlural(type));
verifyField (mw->p3pnField, conjugations.pers3NaturalPlural(type));
}
}
void VerbQueryDlg::verifyClicked()
{
TQString type = conjugations.getType(current);
bool known = true;
if (!verifyField (mw->p1sField, conjugations.pers1Singular(type)))
known = false;
if (!verifyField (mw->p2sField, conjugations.pers2Singular(type)))
known = false;
if (!verifyField (mw->p3sfField, conjugations.pers3FemaleSingular(type)))
known = false;
bool common = conjugations.pers3SingularCommon(type);
if (!common) {
if (!verifyField (mw->p3smField, conjugations.pers3MaleSingular(type)))
known = false;
if (!verifyField (mw->p3snField, conjugations.pers3NaturalSingular(type)))
known = false;
}
if (!verifyField (mw->p1pField, conjugations.pers1Plural(type)))
known = false;
if (!verifyField (mw->p2pField, conjugations.pers2Plural(type)))
known = false;
if (!verifyField (mw->p3pfField, conjugations.pers3FemalePlural(type)))
known = false;
common = conjugations.pers3PluralCommon(type);
if (!common) {
if (!verifyField (mw->p3pmField, conjugations.pers3MalePlural(type)))
known = false;
if (!verifyField (mw->p3pnField, conjugations.pers3NaturalPlural(type)))
known = false;
}
if (known)
knowItClicked();
else {
all_known = false;
mw->dont_know->setDefault(true);
}
}
void VerbQueryDlg::resetAllFields()
{
resetField(mw->p1sField);
resetField(mw->p2sField);
resetField(mw->p3sfField);
resetField(mw->p3smField);
resetField(mw->p3snField);
resetField(mw->p1pField);
resetField(mw->p2pField);
resetField(mw->p3pfField);
resetField(mw->p3pmField);
resetField(mw->p3pnField);
}
void VerbQueryDlg::timeoutReached()
{
if (timercount > 0) {
timercount--;
mw->timebar->setProgress(timercount);
qtimer->start(1000, TRUE);
}
if (timercount <= 0) {
mw->timebar->setProgress(0);
if (current >= (int) conjugations.numEntries()-1 ) {
qtimer->stop();
if (Prefs::queryTimeout() == Prefs::EnumQueryTimeout::Show) {
showAllClicked();
mw->dont_know->setDefault(true);
}
else if (Prefs::queryTimeout() == Prefs::EnumQueryTimeout::Continue)
emit sigQueryChoice (Timeout);
}
else {
if (Prefs::queryTimeout() == Prefs::EnumQueryTimeout::Show) {
qtimer->stop();
showAllClicked();
mw->dont_know->setDefault(true);
}
else if (Prefs::queryTimeout() == Prefs::EnumQueryTimeout::Continue) {
next();
qtimer->start(1000, TRUE);
timercount = Prefs::maxTimePer();
}
}
}
}
void VerbQueryDlg::knowItClicked()
{
resetAllFields();
if (current >= (int) conjugations.numEntries()-1 ) {
if (all_known)
emit sigQueryChoice (Known);
else
emit sigQueryChoice (Unknown);
}
else
next();
}
void VerbQueryDlg::dontKnowClicked()
{
all_known = false;
if (current >= (int) conjugations.numEntries()-1 )
emit sigQueryChoice (Unknown);
else {
qtimer->start(1000, TRUE);
timercount = Prefs::maxTimePer();
next();
}
}
void VerbQueryDlg::slotUser2()
{
if (qtimer != 0)
qtimer->stop();
emit sigEditEntry (q_row, KV_COL_ORG+q_ocol);
}
void VerbQueryDlg::keyPressEvent( TQKeyEvent *e )
{
switch( e->key() )
{
case Key_Escape:
dontKnowClicked();
break;
case Key_Return:
case Key_Enter:
if (mw->dont_know->isDefault() )
dontKnowClicked();
else if (mw->know_it->isDefault() )
knowItClicked();
else if (mw->show_all->isDefault() )
showAllClicked();
else if (mw->verify->isDefault() )
verifyClicked();
break;
default:
e->ignore();
break;
}
}
void VerbQueryDlg::slotP3pfChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p3pfField);
}
void VerbQueryDlg::slotP3snChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p3snField);
}
void VerbQueryDlg::slotReturnPressed()
{
}
void VerbQueryDlg::slotP3smChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p3smField);
}
void VerbQueryDlg::slotP3pnChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p3pnField);
}
void VerbQueryDlg::slotP3sfChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p3sfField);
}
void VerbQueryDlg::slotP1sChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p1sField);
}
void VerbQueryDlg::slotP2sChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p2sField);
}
void VerbQueryDlg::slotP3pmChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p3pmField);
}
void VerbQueryDlg::slotP1pChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p1pField);
}
void VerbQueryDlg::slotP2pChanged(const TQString&)
{
mw->verify->setDefault(true);
resetField(mw->p2pField);
}
#include "VerbQueryDlg.moc"