diff options
Diffstat (limited to 'kverbos/kverbos/kverbosview.cpp')
-rw-r--r-- | kverbos/kverbos/kverbosview.cpp | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/kverbos/kverbos/kverbosview.cpp b/kverbos/kverbos/kverbosview.cpp new file mode 100644 index 00000000..a9bb236e --- /dev/null +++ b/kverbos/kverbos/kverbosview.cpp @@ -0,0 +1,383 @@ +/*************************************************************************** + 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 Qt +#include <qprinter.h> +#include <qpainter.h> +#include <qpushbutton.h> +#include <qlabel.h> +#include <qlineedit.h> +#include <qprogressbar.h> + + +// application specific includes +#include "kverbosview.h" +#include "kverbosdoc.h" + +#include "verbspanish.h" + + +KVerbosView::KVerbosView(QWidget *parent, const char *name) : QLernen/*QWidget*/(parent, name) +{ + // Hier wird gesetzt, wie der Hintergrund des Fensters zu zeichnen ist. + setBackgroundMode(PaletteBackground); + // Die gesamten Zeiger auf QLineEdit 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("ñ"); + ButtonA->setText("á"); + ButtonE->setText("é"); + ButtonI->setText("í"); + ButtonO->setText("ó"); + ButtonU->setText("ú"); + TextTu->setText("tú"); + 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(QPrinter *pPrinter) +{ + QPainter printpainter; + printpainter.begin(pPrinter); + + // TODO: add your printing code here + + printpainter.end(); +} + +// This funktion erases all accents from the letters of a string +QString KVerbosView::deleteAccents(const QString& s) const +{ + QString s2 = s.simplifyWhiteSpace(); + if (!s2.isEmpty()) + { + for (unsigned int i=0; i<s2.length(); i++) + { + QString t = s2.mid(i, 1); + if (t == "á") s2.replace(i, 1, "a"); + if (t == "é") s2.replace(i, 1, "e"); + if (t == "í") s2.replace(i, 1, "i"); + if (t == "ó") s2.replace(i, 1, "o"); + if (t == "ú") s2.replace(i, 1, "u"); + if (t == "ñ") s2.replace(i, 1, "n"); + }; + }; + return s2; +} + +void KVerbosView::slotN() +{ + QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget()); + if (pl) + { + pl->insert("ñ"); + }; +} + +void KVerbosView::slotA() +{ + QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget()); + if (pl) + { + pl->insert("á"); + }; +} + +void KVerbosView::slotE() +{ + QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget()); + if (pl) + { + pl->insert("é"); + }; +} + +void KVerbosView::slotI() +{ + QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget()); + if (pl) + { + pl->insert("í"); + }; +} + +void KVerbosView::slotO() +{ + QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget()); + if (pl) + { + pl->insert("ó"); + }; +} + +void KVerbosView::slotU() +{ + QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget()); + if (pl) + { + pl->insert("ú"); + }; +} + +// Alle Eingabefelder werden gelöscht, dabei muss auch die Schrift auf normal +// gesetzt werden, damit die korrigierten Felder wieder die normale Schrift erhalten. +void KVerbosView::slotClearAll() +{ + QFont fontNormal = EditVerbo->font(); + QPalette 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 ü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 Ü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üft werden. +void KVerbosView::slotCorregir() +{ + bool richtig = true; + QFont fontNormal = EditVerbo->font(); + QFont fontBold = EditVerbo->font(); + fontBold.setUnderline(true); + QPalette palette = EditVerbo->palette(); + palette.setColor(QColorGroup::Text, red); + palette.setColor(QColorGroup::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 + { + QString s1 = formEdit[i][j]->text().simplifyWhiteSpace(); + QString 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äsentiert werden. +void KVerbosView::slotSolution() +{ + QFont 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ängig gemacht und wieder der +// normale Font gesetzt werden. +void KVerbosView::slotFont() +{ + if (corrected) + { + QFont fontNormal = EditVerbo->font(); + QLineEdit* pl = dynamic_cast<QLineEdit*>(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üfen, ob so eine Zeitform vorliegt. + if (zeitAuswahl >= MAX_TIEMPOS) + { + QString s = formEdit[0][2]->text(); + for (int i=1; i<6; i++) + { + formEdit[i][2]->setText(s); + if (corrected) + { + QFont 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" |