1 /***************************************************************************
2 kverbosview.cpp - description
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 /***************************************************************************
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. *
16 ***************************************************************************/
20 // include files for Qt
23 #include <qpushbutton.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.
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
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();
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");
116 void KVerbosView::slotN()
118 QLineEdit
* pl
= dynamic_cast<QLineEdit
*>(focusWidget());
125 void KVerbosView::slotA()
127 QLineEdit
* pl
= dynamic_cast<QLineEdit
*>(focusWidget());
134 void KVerbosView::slotE()
136 QLineEdit
* pl
= dynamic_cast<QLineEdit
*>(focusWidget());
143 void KVerbosView::slotI()
145 QLineEdit
* pl
= dynamic_cast<QLineEdit
*>(focusWidget());
152 void KVerbosView::slotO()
154 QLineEdit
* pl
= dynamic_cast<QLineEdit
*>(focusWidget());
161 void KVerbosView::slotU()
163 QLineEdit
* pl
= dynamic_cast<QLineEdit
*>(focusWidget());
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();
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
);
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);
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);
221 for (int i
= yo
; i
<=ellos
; i
++)
222 formEdit
[i
][1]->setEnabled(true);
224 EditAleman
->setFocus();
228 // Es soll das nächste Verb zur Anzeige gebracht werden.
229 void KVerbosView::slotWeiter()
234 emit
numberTrainedChanged(verbsTrained
);
235 ProgressBar
->setProgress(enteredCorrect
*100/verbsTrained
);
244 // Die Eingaben in den Eingabefeldern sollen geprüft werden.
245 void KVerbosView::slotCorregir()
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
);
260 // die Formen vergleichen
261 KVerbosApp
* kApp
= dynamic_cast<KVerbosApp
*>(parent());
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
);
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
);
292 // Die Statistik muss angepasst werden.
295 getDocument()->solved(richtig
);
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]);
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
]);
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()
334 QFont fontNormal
= EditVerbo
->font();
335 QLineEdit
* pl
= dynamic_cast<QLineEdit
*>(focusWidget());
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
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
);
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
369 int KVerbosView::userChanged(int& r1
, int& r2
)
373 if (verbsTrained
!=0)
374 r1
= enteredCorrect
*100/verbsTrained
;
377 ProgressBar
->setProgress(0);
378 emit
numberTrainedChanged(verbsTrained
);
379 emit
numberCorrectChanged(enteredCorrect
);
383 #include "kverbosview.moc"