moved kdeaccessibility kdeaddons kdeadmin kdeartwork kdebindings kdeedu kdegames...
[kdeedu.git] / kverbos / kverbos / kerfassen.cpp
blob309240e399214f37e8a7bb1bfbe264bdd4898f0f
1 /***************************************************************************
2 kerfassen.cpp - description
3 -------------------
4 begin : Sat Dec 15 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 "kerfassen.h"
20 #include <qlineedit.h>
21 #include <qlabel.h>
22 #include <qcombobox.h>
23 #include <qpushbutton.h>
24 #include <qtabwidget.h>
25 //#include <qvaluelist.h>
27 #include <kmessagebox.h>
29 //#include "verbspanish.h"
31 // Die Konstruktoren sollen sicherstellen, dass am Anfang die Karteikarten und
32 // die Eingabefelder für Gerund und Partizip nicht aktiviert sind.
33 // Das Dialogfeld in den Zustand nicht geändert versetzen.
34 KErfassen::KErfassen(spanishVerbList& l, int pos, QWidget* parent, const char* name, bool modal, WFlags fl)
35 : QErfassen(parent, name, modal, fl), liste(l)
37 formEdit[0][0] = EditYo2_1;
38 formEdit[1][0] = EditTu2_1;
39 formEdit[2][0] = EditEl2_1;
40 formEdit[3][0] = EditNosotros2_1;
41 formEdit[4][0] = EditVosotros2_1;
42 formEdit[5][0] = EditEllos2_1;
43 formEdit[0][1] = EditYo2_2;
44 formEdit[1][1] = EditTu2_2;
45 formEdit[2][1] = EditEl2_2;
46 formEdit[3][1] = EditNosotros2_2;
47 formEdit[4][1] = EditVosotros2_2;
48 formEdit[5][1] = EditEllos2_2;
49 formEdit[0][2] = EditYo2_3;
50 formEdit[1][2] = EditTu2_3;
51 formEdit[2][2] = EditEl2_3;
52 formEdit[3][2] = EditNosotros2_3;
53 formEdit[4][2] = EditVosotros2_3;
54 formEdit[5][2] = EditEllos2_3;
55 formEdit[0][3] = EditYo2_4;
56 formEdit[1][3] = EditTu2_4;
57 formEdit[2][3] = EditEl2_4;
58 formEdit[3][3] = EditNosotros2_4;
59 formEdit[4][3] = EditVosotros2_4;
60 formEdit[5][3] = EditEllos2_4;
61 formEdit[0][4] = EditYo2_5;
62 formEdit[1][4] = EditTu2_5;
63 formEdit[2][4] = EditEl2_5;
64 formEdit[3][4] = EditNosotros2_5;
65 formEdit[4][4] = EditVosotros2_5;
66 formEdit[5][4] = EditEllos2_5;
67 formEdit[0][5] = EditYo2_6;
68 formEdit[1][5] = EditTu2_6;
69 formEdit[2][5] = EditEl2_6;
70 formEdit[3][5] = EditNosotros2_6;
71 formEdit[4][5] = EditVosotros2_6;
72 formEdit[5][5] = EditEllos2_6;
73 formEdit[0][6] = EditYo2_7;
74 formEdit[1][6] = EditTu2_7;
75 formEdit[2][6] = EditEl2_7;
76 formEdit[3][6] = EditNosotros2_7;
77 formEdit[4][6] = EditVosotros2_7;
78 formEdit[5][6] = EditEllos2_7;
79 formEdit[0][7] = 0;
80 formEdit[1][7] = 0;
81 formEdit[2][7] = 0;
82 formEdit[3][7] = 0;
83 formEdit[4][7] = 0;
84 formEdit[5][7] = 0;
85 formEdit[0][8] = EditYo2_8;
86 formEdit[1][8] = EditTu2_8;
87 formEdit[2][8] = EditEl2_8;
88 formEdit[3][8] = EditNosotros2_8;
89 formEdit[4][8] = EditVosotros2_8;
90 formEdit[5][8] = EditEllos2_8;
91 if ((-1 == pos) || (pos >= (int)liste.count()))
92 position = liste.end();
93 else
94 position = liste.at(pos);
95 changed = false;
96 verbToWidget();
97 // einige Buttonbeschriftungen richtigstellen
98 ButtonN->setText("ñ");
99 ButtonA->setText("á");
100 ButtonE->setText("é");
101 ButtonI->setText("í");
102 ButtonO->setText("ó");
103 ButtonU->setText("ú");
104 TextTu1->setText("tú");
105 TextTu2->setText("tú");
106 TextTu3->setText("tú");
107 TextTu4->setText("tú");
108 TextTu5->setText("tú");
109 TextTu6->setText("tú");
110 TextTu7->setText("tú");
111 TextTu8->setText("tú");
112 ComboBoxTypen->changeItem("gu > gü", 9);
113 TabWidgetFormas->setCurrentPage(0);
114 EditVerbo->setFocus();
115 verbToWidget();
118 KErfassen::~KErfassen()
122 // Die Eingabefelder für das Gerund und das Partizip werden deaktiviert
123 // ebenso die Karteikarten, der Radiobutton wird zurückgesetzt
124 void KErfassen::deaktivieren()
126 if (position == liste.end())
127 ComboBoxTypen->setCurrentItem(REGULAR);
128 else
129 ComboBoxTypen->setCurrentItem((*position).getGroup());
130 TabWidgetFormas->setEnabled(false);
131 qWarning("desaktiviert");
132 TabWidgetFormas->setCurrentPage(0);
133 EditGerundio->setEnabled(false);
134 EditParticipio->setEnabled(false);
135 EditGerundio->setText("");
136 EditParticipio->setText("");
137 clearAllPages();
140 // Die Eingabefelder für das Gerund und das Partizip werden aktiviert
141 // ebenso die Karteikarten, der Radiobutton wird gesetzt
142 void KErfassen::aktivieren()
144 ComboBoxTypen->setCurrentItem(IRREGULAR);
145 TabWidgetFormas->setEnabled(true);
146 TabWidgetFormas->setCurrentPage(0);
147 EditGerundio->setEnabled(true);
148 EditParticipio->setEnabled(true);
151 // löscht die Eingabefelder der ersten Karteikarte für die Formen
152 void KErfassen::clearPage(int s)
154 for (int i=0; i<6; i++)
155 formEdit[i][s]->setText("");
158 void KErfassen::clearAllPages()
160 for (int i = presente; i<=subPasado; i++)
161 clearPage(i);
162 clearPage(imperativo);
165 // Löscht die Inhalte aller Datenfeldler des Dialoges.
166 void KErfassen::clearAll()
168 EditVerbo->setText("");
169 EditAleman->setText("");
170 // Die Eingabefelder sollen wieder deaktiviert werden. Dabei werden sie auch gelöscht.
171 deaktivieren();
172 qWarning("clearAll deaktiviert");
175 bool KErfassen::wasChanged()
177 return changed;
180 // prüft, ob der Fensterinhalt geändert wurde
181 bool KErfassen::widgetChanged()
183 bool result = true;
184 if (position != liste.end())
186 // Das Verb an der aktuellen Position ist nicht leer. Ist es gleich dem Verb
187 // im Widget, dann gab es keine Änderung.
188 if ((*position).allEqual(verbFromWidget()))
189 result = false;
191 else
193 // Die aktuelle Position ist leer. Ist das Verb im Widget leer, dann erfolgte
194 // keine Änderung.
195 if (verbFromWidget().isEmpty())
196 result = false;
198 return result;
201 // -----------------------------------------------
202 // Hier werden die Slots der Klasse implementiert.
203 // During the following passage the slots of this class are implemented.
204 // -----------------------------------------------
206 // the type of the verb was changed
207 void KErfassen::slotTypChanged(int i)
209 if (IRREGULAR == i)
211 aktivieren();
213 else
215 deaktivieren();
216 qWarning("slotTypeChanged deaktiviert");
220 // Die folgenden Slots löschen eine Seite der Karteikarten oder auch
221 // gleich alle Karten auf einmal.
222 void KErfassen::slotClearPage1()
224 clearPage(presente);
227 void KErfassen::slotClearPage2()
229 clearPage(imperfecto);
232 void KErfassen::slotClearPage3()
234 clearPage(indefinido);
237 void KErfassen::slotClearPage4()
239 clearPage(futuro);
242 void KErfassen::slotClearPage5()
244 clearPage(condicional);
247 void KErfassen::slotClearPage6()
249 clearPage(subPresente);
252 void KErfassen::slotClearPage7()
254 clearPage(subPasado);
257 void KErfassen::slotClearPage8()
259 clearPage(imperativo);
262 void KErfassen::slotClearAll()
264 clearAll();
267 void KErfassen::slotDlgEnde()
269 // Der Dialog wird beendet, nun muss geprüft werden, ob das Verb in den
270 // Dialogfeldern ein neues oder geändertes Verb ist. Dazu wird das Verb aus den
271 // Dialogfeldern geholt und mit dem Verb an der aktuellen Listenposition
272 // verglichen.
273 if (widgetChanged())
275 int willErfassen = KMessageBox::warningYesNoCancel(this,
276 i18n("The current verb is not in the list yet.\nDo you want to add it?"),
277 i18n("Warning"));
278 switch (willErfassen)
280 case KMessageBox::Yes : // YES
281 position = verbErfassen();
282 case KMessageBox::No : // NO
283 done(0);
284 break;
285 default : // wirkt wie CANCEL
286 break;
289 else
290 done(0);
293 // Ein Verb wurde eingegeben und die Eingabe mit dem
294 // weiter-Button beendet.
295 void KErfassen::slotWeiter()
297 if ( widgetChanged() )
299 position = verbErfassen();
301 // es müssen alle Eingabefelder wieder gelöscht werden oder das Verb an der aktuellen
302 // Position wird in den Dialog geladen und den Eingabefokus
303 // erhält das Feld für das spanische Wort
304 if (position == liste.end())
306 position = liste.begin();
308 else
310 position++;
312 verbToWidget();
313 TabWidgetFormas->setCurrentPage(0);
314 EditVerbo->setFocus();
315 } // slotWeiter
317 // Die Eingabeposition in der Liste muss eine Position weiter nach vorne rutschen.
318 void KErfassen::slotZurueck()
320 if ( widgetChanged() )
322 position = verbErfassen();
324 // es müssen alle Eingabefelder wieder gelöscht werden oder es muss das Verb an
325 // der Position in den Dialog geladen werden und den Eingabefokus
326 // erhält das Feld für das spanische Wort
327 if (position == liste.begin())
329 position = liste.end();
331 else
333 position--;
335 verbToWidget();
336 TabWidgetFormas->setCurrentPage(0);
337 EditVerbo->setFocus();
338 } // slotZurueck
340 // The dilog shows a verb but this verb shouldn't be changed. The user wants to
341 // enter a new verb. So he can use this button to get an empty dialog window for his
342 // new verb
343 void KErfassen::slotNewVerb()
345 if ( widgetChanged() )
346 position = verbErfassen();
347 position = liste.end();
348 verbToWidget();
349 TabWidgetFormas->setCurrentPage(0);
350 EditVerbo->setFocus();
353 void KErfassen::slotN()
355 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
356 if (pl)
357 pl->insert("ñ");
360 void KErfassen::slotA()
362 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
363 if (pl)
364 pl->insert("á");
367 void KErfassen::slotE()
369 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
370 if (pl)
371 pl->insert("é");
374 void KErfassen::slotI()
376 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
377 if (pl)
378 pl->insert("í");
381 void KErfassen::slotO()
383 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
384 if (pl)
385 pl->insert("ó");
388 void KErfassen::slotU()
390 QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
391 if (pl)
392 pl->insert("ú");
395 // A verb that is in the dialog should be addded to the list.
396 // - if it is completely new verb then the verb should be added at its alphabetical position
397 // - if there is a verb which is equal to the new verb then a dialog asks whether the
398 // verb should be added again or replaced or if the operation shoul be canceled.
399 spanishVerbList::Iterator KErfassen::verbErfassen()
401 verbSpanish v = verbFromWidget();
402 spanishVerbList::Iterator it = liste.begin();
403 if (liste.isEmpty())
405 // The list was empty until now
406 it = liste.append(v);
407 changed = true;
409 else
411 while ((it != liste.end()) && (*it < v))
412 it++;
413 if ((it == liste.end()) || !(*it == v))
415 // Das Verb v wurde nicht in der Liste gefunden.
416 it = liste.insert(it, v);
417 changed = true;
419 else
421 // Das Verb wurde in der Liste gefunden.
422 switch (KMessageBox::warningYesNoCancel(this,
423 i18n("The current verb is already in the list.\nDo you want to replace it?\nIf you do not want to change the list press 'Cancel'."),
424 i18n("Warning")))
426 case KMessageBox::Yes: // the verb at the position is replaced by v.
427 *it = v;
428 changed = true;
429 break;
430 case KMessageBox::No: // the verb v is added as a new verb
431 it = liste.insert(it, v);
432 changed = true;
433 break;
434 default:
435 // nothing is done the list remains unchanged.
440 return it;
441 } // VerbErfassen
443 // The information in the dialog is read and stored in an verb object and then returned
444 verbSpanish KErfassen::verbFromWidget()
446 verbSpanish v;
447 v.setSpanish(EditVerbo->text().simplifyWhiteSpace());
448 v.setForeign(EditAleman->text().simplifyWhiteSpace());
449 if (ComboBoxTypen->currentItem()!=IRREGULAR)
451 // regelmäßiges Verb - Endungstyp feststellen -> fertig
452 v.setGroup(ComboBoxTypen->currentItem());
454 else
456 // unregelmäßiges Verb - alle Formen übertragen -> fertig
457 v.setGroup(IRREGULAR);
458 v.setGerund(EditGerundio->text().simplifyWhiteSpace());
459 v.setPartizip(EditParticipio->text().simplifyWhiteSpace());
460 // die anderen Verbformen für die Zeiten übertragen.
461 for (int i=presente; i<=subPasado; i++)
462 for (int j = yo; j<=ellos; j++)
463 v.setForm(i, j, formEdit[j][i]->text().simplifyWhiteSpace());
464 for (int j = yo; j<=ellos; j++)
465 v.setForm(imperativo, j, formEdit[j][imperativo]->text().simplifyWhiteSpace());
467 return v;
470 // The verb at the position it should be displaied in the dialog
471 void KErfassen::verbToWidget()
473 if (position == liste.end())
475 clearAll();
477 else
479 verbSpanish v = *position;
480 EditVerbo->setText(v.getSpanish());
481 EditAleman->setText(v.getForeign());
482 ComboBoxTypen->setCurrentItem(v.getGroup());
483 if (v.isGroupVerb())
485 deaktivieren();
486 qWarning("verbTowidget deaktiviert");
488 else
490 // this is an irregular verb: bring all the forms to the dialog widget
491 aktivieren();
492 EditGerundio->setText(v.getGerund());
493 EditParticipio->setText(v.getPartizip());
494 // die anderen Verbformen für die Zeiten übertragen.
495 for (int i=presente; i<=subPasado; i++)
496 for (int j = yo; j<=ellos; j++)
497 formEdit[j][i]->setText(v.getForm(i, j));
498 for (int j = yo; j<=ellos; j++)
499 formEdit[j][imperativo]->setText(v.getForm(imperativo, j));
504 // The dialog works on his own copy of the verblist. So after the end of the dialog
505 // the caling function has to fetch the list from the dialog with this function.
506 spanishVerbList KErfassen::getList()
508 return liste;