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/kverbos/kverbos/kverbosview.cpp

384 lines
9.9 KiB

/***************************************************************************
kverbosview.cpp - description
-------------------
begin : Die Mai 1 21:39:04 CEST 2001
copyright : (C) 2001 by Arnold Kraschinski
email : arnold.k67@gmx.de
***************************************************************************/
/***************************************************************************
* *
* 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 <cstdlib>
// include files for TQt
#include <tqprinter.h>
#include <tqpainter.h>
#include <tqpushbutton.h>
#include <tqlabel.h>
#include <tqlineedit.h>
#include <tqprogressbar.h>
// application specific includes
#include "kverbosview.h"
#include "kverbosdoc.h"
#include "verbspanish.h"
KVerbosView::KVerbosView(TQWidget *parent, const char *name) : QLernen/*TQWidget*/(parent, name)
{
// Hier wird gesetzt, wie der Hintergrund des Fensters zu zeichnen ist.
setBackgroundMode(PaletteBackground);
// Die gesamten Zeiger auf TQLineEdit in ein Feld umwandeln
formEdit[0][0] = EditYo1;
formEdit[1][0] = EditTu1;
formEdit[2][0] = EditEl1;
formEdit[3][0] = EditNosotros1;
formEdit[4][0] = EditVosotros1;
formEdit[5][0] = EditEllos1;
formEdit[0][1] = EditYo2;
formEdit[1][1] = EditTu2;
formEdit[2][1] = EditEl2;
formEdit[3][1] = EditNosotros2;
formEdit[4][1] = EditVosotros2;
formEdit[5][1] = EditEllos2;
formEdit[0][2] = EditYo3;
formEdit[1][2] = EditTu3;
formEdit[2][2] = EditEl3;
formEdit[3][2] = EditNosotros3;
formEdit[4][2] = EditVosotros3;
formEdit[5][2] = EditEllos3;
// einige Schalterbezeichnungen m<>ssen richtiggestellt werden.
ButtonN->setText("<EFBFBD>");
ButtonA->setText("<EFBFBD>");
ButtonE->setText("<EFBFBD>");
ButtonI->setText("<EFBFBD>");
ButtonO->setText("<EFBFBD>");
ButtonU->setText("<EFBFBD>");
TextTu->setText("t<EFBFBD>");
EditAleman->setFocus();
// Es muss ein Verb aus dem Dokument geholt werden, das dann in dem Fenster dargestellt
// werden kann, wenn es ein Verb gibt. Ansonsten bleibt das Fenster leer.
zeigeVerb();
enteredCorrect = 0;
verbsTrained = 0;
}
KVerbosView::~KVerbosView()
{
}
KVerbosDoc* KVerbosView::getDocument() const
{
KVerbosApp *theApp=(KVerbosApp *) parentWidget();
return theApp->getDocument();
}
void KVerbosView::print(TQPrinter *pPrinter)
{
TQPainter printpainter;
printpainter.begin(pPrinter);
// TODO: add your printing code here
printpainter.end();
}
// This funktion erases all accents from the letters of a string
TQString KVerbosView::deleteAccents(const TQString& s) const
{
TQString s2 = s.simplifyWhiteSpace();
if (!s2.isEmpty())
{
for (unsigned int i=0; i<s2.length(); i++)
{
TQString t = s2.mid(i, 1);
if (t == "<EFBFBD>") s2.replace(i, 1, "a");
if (t == "<EFBFBD>") s2.replace(i, 1, "e");
if (t == "<EFBFBD>") s2.replace(i, 1, "i");
if (t == "<EFBFBD>") s2.replace(i, 1, "o");
if (t == "<EFBFBD>") s2.replace(i, 1, "u");
if (t == "<EFBFBD>") s2.replace(i, 1, "n");
};
};
return s2;
}
void KVerbosView::slotN()
{
TQLineEdit* pl = dynamic_cast<TQLineEdit*>(focusWidget());
if (pl)
{
pl->insert("<EFBFBD>");
};
}
void KVerbosView::slotA()
{
TQLineEdit* pl = dynamic_cast<TQLineEdit*>(focusWidget());
if (pl)
{
pl->insert("<EFBFBD>");
};
}
void KVerbosView::slotE()
{
TQLineEdit* pl = dynamic_cast<TQLineEdit*>(focusWidget());
if (pl)
{
pl->insert("<EFBFBD>");
};
}
void KVerbosView::slotI()
{
TQLineEdit* pl = dynamic_cast<TQLineEdit*>(focusWidget());
if (pl)
{
pl->insert("<EFBFBD>");
};
}
void KVerbosView::slotO()
{
TQLineEdit* pl = dynamic_cast<TQLineEdit*>(focusWidget());
if (pl)
{
pl->insert("<EFBFBD>");
};
}
void KVerbosView::slotU()
{
TQLineEdit* pl = dynamic_cast<TQLineEdit*>(focusWidget());
if (pl)
{
pl->insert("<EFBFBD>");
};
}
// Alle Eingabefelder werden gel<65>scht, dabei muss auch die Schrift auf normal
// gesetzt werden, damit die korrigierten Felder wieder die normale Schrift erhalten.
void KVerbosView::slotClearAll()
{
TQFont fontNormal = EditVerbo->font();
TQPalette palette = EditVerbo->palette();
EditAleman->clear();
EditAleman->setFont(fontNormal);
EditAleman->setPalette(palette);
for (int i=0; i<6; i++)
for (int j=0; j<3; j++)
{
formEdit[i][j]->clear();
formEdit[i][j]->setFont(fontNormal);
formEdit[i][j]->setPalette(palette);
};
}
// Die Ansicht wird aufgefordert das aktuelle Verb vom Dokument zu holen und es in dem
// Fenster zur Ansicht zu bringen. Dabei wird von dem Dokument nur ein Zeiger auf das
// Verb <20>bergeben und die entsprechende Zeit, die gelernt werden soll.
void KVerbosView::zeigeVerb()
{
// einen Zeiger auf das Dokument besorgen und ein Verb und seine Formen besorgen.
KVerbosDoc* pDoc = getDocument();
pDoc->getAuswahl(formen, zeitAuswahl);
slotClearAll();
// Die spanische Form der Verbes zur Anzeige bringen
EditVerbo->setText(formen[6][0]);
// Die <20>bungszeit zur Anzeige bringen.
TextTiempo->setText(verbSpanish::timeNames[zeitAuswahl]);
// Wenn kein reflexives Verb vorliegt, werden die Felder deaktiviert
if (formen[0][0].isEmpty())
{
for (int i = yo; i<=ellos; i++)
formEdit[i][0]->setEnabled(false);
}
else
{
for (int i = yo; i<=ellos; i++)
formEdit[i][0]->setEnabled(true);
};
// Wenn eine einfache, nicht zusammengesetzte Form vorliegt, werden die
// Felder deaktiviert.
if (formen[0][1].isEmpty())
{
for (int i = yo; i<=ellos; i++)
formEdit[i][1]->setEnabled(false);
}
else
{
for (int i = yo; i<=ellos; i++)
formEdit[i][1]->setEnabled(true);
};
EditAleman->setFocus();
corrected = false;
}
// Es soll das n<>chste Verb zur Anzeige gebracht werden.
void KVerbosView::slotWeiter()
{
if (corrected)
{
verbsTrained++;
emit numberTrainedChanged(verbsTrained);
ProgressBar->setProgress(enteredCorrect*100/verbsTrained);
zeigeVerb();
}
else
{
slotCorregir();
};
}
// Die Eingaben in den Eingabefeldern sollen gepr<70>ft werden.
void KVerbosView::slotCorregir()
{
bool richtig = true;
TQFont fontNormal = EditVerbo->font();
TQFont fontBold = EditVerbo->font();
fontBold.setUnderline(true);
TQPalette palette = EditVerbo->palette();
palette.setColor(TQColorGroup::Text, red);
palette.setColor(TQColorGroup::Base, white);
if ( 0 > formen[6][1].find(EditAleman->text().simplifyWhiteSpace(), 0))
{
EditAleman->setFont(fontBold);
EditAleman->setPalette(palette);
richtig = false;
};
// die Formen vergleichen
KVerbosApp* kApp = dynamic_cast<KVerbosApp*>(parent());
if (!kApp) {
return;
}
for (int j=0; j<3; j++)
{
if (!formen[0][j].isEmpty())
{
for (int i=0; i<6; i++)
if (kApp->doitStrict())
{
if (formEdit[i][j]->text().simplifyWhiteSpace() != formen[i][j])
{
formEdit[i][j]->setFont(fontBold);
formEdit[i][j]->setPalette(palette);
richtig = false;
};
}
else
{
TQString s1 = formEdit[i][j]->text().simplifyWhiteSpace();
TQString s2 = formen[i][j];
if (deleteAccents(s1) != deleteAccents(s2))
{
formEdit[i][j]->setFont(fontBold);
formEdit[i][j]->setPalette(palette);
richtig = false;
};
};
};
};
// Die Statistik muss angepasst werden.
if (!corrected)
{
getDocument()->solved(richtig);
if (richtig)
{
enteredCorrect++;
emit numberCorrectChanged(enteredCorrect);
emit informKFeeder(1);
// Show the German expression. So the user can see the other German meanings
// if there are some.
EditAleman->setText(formen[6][1]);
};
};
corrected = true;
}
// Die L<>sung soll in dem Fenster pr<70>sentiert werden.
void KVerbosView::slotSolution()
{
TQFont fontNormal = EditVerbo->font();
EditAleman->setFont(fontNormal);
EditAleman->setPalette(EditVerbo->palette());
EditAleman->setText(formen[6][1]);
//
for (int i=0; i<6; i++)
for (int j=0; j<3; j++)
{
formEdit[i][j]->setFont(fontNormal);
formEdit[i][j]->setPalette(EditVerbo->palette());
formEdit[i][j]->setText(formen[i][j]);
};
corrected = true;
}
// Wird bei einem bereits korrigiertem Verb eine weitere Eingabe gamacht, muss die
// Markierung, Unterstreichen oder Fettdruck, r<>ckg<6B>ngig gemacht und wieder der
// normale Font gesetzt werden.
void KVerbosView::slotFont()
{
if (corrected)
{
TQFont fontNormal = EditVerbo->font();
TQLineEdit* pl = dynamic_cast<TQLineEdit*>(focusWidget());
if (0 != pl)
{
pl->setFont(fontNormal);
pl->setPalette(EditVerbo->palette());
};
};
}
// Weil bei den Gerund- bzw. Perfektformen das eingeben der f<>r alle Personen
// gleichen Formen langweilig ist und es auch nicht gut ist, wenn man sechs mal
// die falsche Form eingibt, wird die Form aus dem yo-Eingabefeld in die anderen
// kopiert.
void KVerbosView::slotCopyText()
{
// erst pr<70>fen, ob so eine Zeitform vorliegt.
if (zeitAuswahl >= MAX_TIEMPOS)
{
TQString s = formEdit[0][2]->text();
for (int i=1; i<6; i++)
{
formEdit[i][2]->setText(s);
if (corrected)
{
TQFont fontNormal = EditVerbo->font();
formEdit[i][2]->setFont(fontNormal);
};
};
};
}
// tell the view that the user has changed. Training results are deleted and set to the
// initial values. A new verb is chosen. The function returns the training result of the
// old user.
int KVerbosView::userChanged(int& r1, int& r2)
{
r1 = 0;
r2 = verbsTrained;
if (verbsTrained !=0)
r1 = enteredCorrect*100/verbsTrained;
enteredCorrect = 0;
verbsTrained = 0;
ProgressBar->setProgress(0);
emit numberTrainedChanged(verbsTrained);
emit numberCorrectChanged(enteredCorrect);
return r1;
}
#include "kverbosview.moc"