moved kdeaccessibility kdeaddons kdeadmin kdeartwork kdebindings kdeedu kdegames...
[kdeedu.git] / kverbos / kverbos / kverbosview.cpp
bloba9bb236e731de93e3513d10220b9a5e739decb41
1 /***************************************************************************
2 kverbosview.cpp - description
3 -------------------
4 begin : Die Mai 1 21:39:04 CEST 2001
5 copyright : (C) 2001 by Arnold Kraschinski
6 email : arnold.k67@gmx.de
7 ***************************************************************************/
9 /***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
18 #include <cstdlib>
20 // include files for Qt
21 #include <qprinter.h>
22 #include <qpainter.h>
23 #include <qpushbutton.h>
24 #include <qlabel.h>
25 #include <qlineedit.h>
26 #include <qprogressbar.h>
29 // application specific includes
30 #include "kverbosview.h"
31 #include "kverbosdoc.h"
33 #include "verbspanish.h"
36 KVerbosView::KVerbosView(QWidget *parent, const char *name) : QLernen/*QWidget*/(parent, name)
38 // Hier wird gesetzt, wie der Hintergrund des Fensters zu zeichnen ist.
39 setBackgroundMode(PaletteBackground);
40 // Die gesamten Zeiger auf QLineEdit in ein Feld umwandeln
41 formEdit[0][0] = EditYo1;
42 formEdit[1][0] = EditTu1;
43 formEdit[2][0] = EditEl1;
44 formEdit[3][0] = EditNosotros1;
45 formEdit[4][0] = EditVosotros1;
46 formEdit[5][0] = EditEllos1;
47 formEdit[0][1] = EditYo2;
48 formEdit[1][1] = EditTu2;
49 formEdit[2][1] = EditEl2;
50 formEdit[3][1] = EditNosotros2;
51 formEdit[4][1] = EditVosotros2;
52 formEdit[5][1] = EditEllos2;
53 formEdit[0][2] = EditYo3;
54 formEdit[1][2] = EditTu3;
55 formEdit[2][2] = EditEl3;
56 formEdit[3][2] = EditNosotros3;
57 formEdit[4][2] = EditVosotros3;
58 formEdit[5][2] = EditEllos3;
59 // einige Schalterbezeichnungen müssen richtiggestellt werden.
60 ButtonN->setText("ñ");
61 ButtonA->setText("á");
62 ButtonE->setText("é");
63 ButtonI->setText("í");
64 ButtonO->setText("ó");
65 ButtonU->setText("ú");
66 TextTu->setText("tú");
67 EditAleman->setFocus();
68 // Es muss ein Verb aus dem Dokument geholt werden, das dann in dem Fenster dargestellt
69 // werden kann, wenn es ein Verb gibt. Ansonsten bleibt das Fenster leer.
70 zeigeVerb();
71 enteredCorrect = 0;
72 verbsTrained = 0;
75 KVerbosView::~KVerbosView()
79 KVerbosDoc* KVerbosView::getDocument() const
81 KVerbosApp *theApp=(KVerbosApp *) parentWidget();
83 return theApp->getDocument();
86 void KVerbosView::print(QPrinter *pPrinter)
88 QPainter printpainter;
89 printpainter.begin(pPrinter);
91 // TODO: add your printing code here
93 printpainter.end();
96 // This funktion erases all accents from the letters of a string
97 QString KVerbosView::deleteAccents(const QString& s) const
99 QString s2 = s.simplifyWhiteSpace();
100 if (!s2.isEmpty())
102 for (unsigned int i=0; i<s2.length(); i++)
104 QString t = s2.mid(i, 1);
105 if (t == "á") s2.replace(i, 1, "a");
106 if (t == "é") s2.replace(i, 1, "e");
107 if (t == "í") s2.replace(i, 1, "i");
108 if (t == "ó") s2.replace(i, 1, "o");
109 if (t == "ú") s2.replace(i, 1, "u");
110 if (t == "ñ") s2.replace(i, 1, "n");
113 return s2;
116 void KVerbosView::slotN()
118 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
119 if (pl)
121 pl->insert("ñ");
125 void KVerbosView::slotA()
127 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
128 if (pl)
130 pl->insert("á");
134 void KVerbosView::slotE()
136 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
137 if (pl)
139 pl->insert("é");
143 void KVerbosView::slotI()
145 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
146 if (pl)
148 pl->insert("í");
152 void KVerbosView::slotO()
154 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
155 if (pl)
157 pl->insert("ó");
161 void KVerbosView::slotU()
163 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
164 if (pl)
166 pl->insert("ú");
170 // Alle Eingabefelder werden gelöscht, dabei muss auch die Schrift auf normal
171 // gesetzt werden, damit die korrigierten Felder wieder die normale Schrift erhalten.
172 void KVerbosView::slotClearAll()
174 QFont fontNormal = EditVerbo->font();
175 QPalette palette = EditVerbo->palette();
176 EditAleman->clear();
177 EditAleman->setFont(fontNormal);
178 EditAleman->setPalette(palette);
179 for (int i=0; i<6; i++)
180 for (int j=0; j<3; j++)
182 formEdit[i][j]->clear();
183 formEdit[i][j]->setFont(fontNormal);
184 formEdit[i][j]->setPalette(palette);
188 // Die Ansicht wird aufgefordert das aktuelle Verb vom Dokument zu holen und es in dem
189 // Fenster zur Ansicht zu bringen. Dabei wird von dem Dokument nur ein Zeiger auf das
190 // Verb übergeben und die entsprechende Zeit, die gelernt werden soll.
191 void KVerbosView::zeigeVerb()
193 // einen Zeiger auf das Dokument besorgen und ein Verb und seine Formen besorgen.
194 KVerbosDoc* pDoc = getDocument();
195 pDoc->getAuswahl(formen, zeitAuswahl);
196 slotClearAll();
197 // Die spanische Form der Verbes zur Anzeige bringen
198 EditVerbo->setText(formen[6][0]);
199 // Die Übungszeit zur Anzeige bringen.
200 TextTiempo->setText(verbSpanish::timeNames[zeitAuswahl]);
201 // Wenn kein reflexives Verb vorliegt, werden die Felder deaktiviert
202 if (formen[0][0].isEmpty())
204 for (int i = yo; i<=ellos; i++)
205 formEdit[i][0]->setEnabled(false);
207 else
209 for (int i = yo; i<=ellos; i++)
210 formEdit[i][0]->setEnabled(true);
212 // Wenn eine einfache, nicht zusammengesetzte Form vorliegt, werden die
213 // Felder deaktiviert.
214 if (formen[0][1].isEmpty())
216 for (int i = yo; i<=ellos; i++)
217 formEdit[i][1]->setEnabled(false);
219 else
221 for (int i = yo; i<=ellos; i++)
222 formEdit[i][1]->setEnabled(true);
224 EditAleman->setFocus();
225 corrected = false;
228 // Es soll das nächste Verb zur Anzeige gebracht werden.
229 void KVerbosView::slotWeiter()
231 if (corrected)
233 verbsTrained++;
234 emit numberTrainedChanged(verbsTrained);
235 ProgressBar->setProgress(enteredCorrect*100/verbsTrained);
236 zeigeVerb();
238 else
240 slotCorregir();
244 // Die Eingaben in den Eingabefeldern sollen geprüft werden.
245 void KVerbosView::slotCorregir()
247 bool richtig = true;
248 QFont fontNormal = EditVerbo->font();
249 QFont fontBold = EditVerbo->font();
250 fontBold.setUnderline(true);
251 QPalette palette = EditVerbo->palette();
252 palette.setColor(QColorGroup::Text, red);
253 palette.setColor(QColorGroup::Base, white);
254 if ( 0 > formen[6][1].find(EditAleman->text().simplifyWhiteSpace(), 0))
256 EditAleman->setFont(fontBold);
257 EditAleman->setPalette(palette);
258 richtig = false;
260 // die Formen vergleichen
261 KVerbosApp* kApp = dynamic_cast<KVerbosApp*>(parent());
262 if (!kApp) {
263 return;
265 for (int j=0; j<3; j++)
267 if (!formen[0][j].isEmpty())
269 for (int i=0; i<6; i++)
270 if (kApp->doitStrict())
272 if (formEdit[i][j]->text().simplifyWhiteSpace() != formen[i][j])
274 formEdit[i][j]->setFont(fontBold);
275 formEdit[i][j]->setPalette(palette);
276 richtig = false;
279 else
281 QString s1 = formEdit[i][j]->text().simplifyWhiteSpace();
282 QString s2 = formen[i][j];
283 if (deleteAccents(s1) != deleteAccents(s2))
285 formEdit[i][j]->setFont(fontBold);
286 formEdit[i][j]->setPalette(palette);
287 richtig = false;
292 // Die Statistik muss angepasst werden.
293 if (!corrected)
295 getDocument()->solved(richtig);
296 if (richtig)
298 enteredCorrect++;
299 emit numberCorrectChanged(enteredCorrect);
300 emit informKFeeder(1);
301 // Show the German expression. So the user can see the other German meanings
302 // if there are some.
303 EditAleman->setText(formen[6][1]);
306 corrected = true;
309 // Die Lösung soll in dem Fenster präsentiert werden.
310 void KVerbosView::slotSolution()
312 QFont fontNormal = EditVerbo->font();
313 EditAleman->setFont(fontNormal);
314 EditAleman->setPalette(EditVerbo->palette());
315 EditAleman->setText(formen[6][1]);
317 for (int i=0; i<6; i++)
318 for (int j=0; j<3; j++)
320 formEdit[i][j]->setFont(fontNormal);
321 formEdit[i][j]->setPalette(EditVerbo->palette());
322 formEdit[i][j]->setText(formen[i][j]);
324 corrected = true;
327 // Wird bei einem bereits korrigiertem Verb eine weitere Eingabe gamacht, muss die
328 // Markierung, Unterstreichen oder Fettdruck, rückgängig gemacht und wieder der
329 // normale Font gesetzt werden.
330 void KVerbosView::slotFont()
332 if (corrected)
334 QFont fontNormal = EditVerbo->font();
335 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
336 if (0 != pl)
338 pl->setFont(fontNormal);
339 pl->setPalette(EditVerbo->palette());
344 // Weil bei den Gerund- bzw. Perfektformen das eingeben der für alle Personen
345 // gleichen Formen langweilig ist und es auch nicht gut ist, wenn man sechs mal
346 // die falsche Form eingibt, wird die Form aus dem yo-Eingabefeld in die anderen
347 // kopiert.
348 void KVerbosView::slotCopyText()
350 // erst prüfen, ob so eine Zeitform vorliegt.
351 if (zeitAuswahl >= MAX_TIEMPOS)
353 QString s = formEdit[0][2]->text();
354 for (int i=1; i<6; i++)
356 formEdit[i][2]->setText(s);
357 if (corrected)
359 QFont fontNormal = EditVerbo->font();
360 formEdit[i][2]->setFont(fontNormal);
366 // tell the view that the user has changed. Training results are deleted and set to the
367 // initial values. A new verb is chosen. The function returns the training result of the
368 // old user.
369 int KVerbosView::userChanged(int& r1, int& r2)
371 r1 = 0;
372 r2 = verbsTrained;
373 if (verbsTrained !=0)
374 r1 = enteredCorrect*100/verbsTrained;
375 enteredCorrect = 0;
376 verbsTrained = 0;
377 ProgressBar->setProgress(0);
378 emit numberTrainedChanged(verbsTrained);
379 emit numberCorrectChanged(enteredCorrect);
380 return r1;
383 #include "kverbosview.moc"