summaryrefslogtreecommitdiffstats
path: root/kverbos/kverbos
diff options
context:
space:
mode:
Diffstat (limited to 'kverbos/kverbos')
-rw-r--r--kverbos/kverbos/Makefile.am32
-rw-r--r--kverbos/kverbos/banderas.pngbin0 -> 6451 bytes
-rw-r--r--kverbos/kverbos/data/Makefile.am1
-rw-r--r--kverbos/kverbos/data/de/Makefile.am4
-rw-r--r--kverbos/kverbos/data/de/verbos.verbos2371
-rw-r--r--kverbos/kverbos/data/en/Makefile.am4
-rw-r--r--kverbos/kverbos/data/en/verbos.verbos2371
-rw-r--r--kverbos/kverbos/deu16.pngbin0 -> 99 bytes
-rw-r--r--kverbos/kverbos/icons/Makefile.am1
-rw-r--r--kverbos/kverbos/icons/cr16-action-kverbosuser.pngbin0 -> 868 bytes
-rw-r--r--kverbos/kverbos/icons/hi128-app-kverbos.pngbin0 -> 4989 bytes
-rw-r--r--kverbos/kverbos/icons/hi16-app-kverbos.pngbin0 -> 549 bytes
-rw-r--r--kverbos/kverbos/icons/hi22-app-kverbos.pngbin0 -> 690 bytes
-rw-r--r--kverbos/kverbos/icons/hi32-app-kverbos.pngbin0 -> 1035 bytes
-rw-r--r--kverbos/kverbos/icons/hi48-app-kverbos.pngbin0 -> 1637 bytes
-rw-r--r--kverbos/kverbos/icons/hisc-app-kverbos.svgzbin0 -> 1909 bytes
-rw-r--r--kverbos/kverbos/kerfassen.cpp512
-rw-r--r--kverbos/kverbos/kerfassen.h148
-rw-r--r--kverbos/kverbos/kfeeder16.pngbin0 -> 376 bytes
-rw-r--r--kverbos/kverbos/kfeedercontrol.cpp140
-rw-r--r--kverbos/kverbos/kfeedercontrol.h58
-rw-r--r--kverbos/kverbos/kresult.cpp95
-rw-r--r--kverbos/kverbos/kresult.h39
-rw-r--r--kverbos/kverbos/kstartuplogo.cpp42
-rw-r--r--kverbos/kverbos/kstartuplogo.h37
-rw-r--r--kverbos/kverbos/kverbedit.cpp152
-rw-r--r--kverbos/kverbos/kverbedit.h74
-rw-r--r--kverbos/kverbos/kverbos.cpp757
-rw-r--r--kverbos/kverbos/kverbos.desktop75
-rw-r--r--kverbos/kverbos/kverbos.h249
-rw-r--r--kverbos/kverbos/kverbos.kcfg24
-rw-r--r--kverbos/kverbos/kverbosdoc.cpp782
-rw-r--r--kverbos/kverbos/kverbosdoc.h165
-rw-r--r--kverbos/kverbos/kverbosoptions.cpp60
-rw-r--r--kverbos/kverbos/kverbosoptions.h44
-rw-r--r--kverbos/kverbos/kverbosui.rc32
-rw-r--r--kverbos/kverbos/kverbosuser.cpp264
-rw-r--r--kverbos/kverbos/kverbosuser.h118
-rw-r--r--kverbos/kverbos/kverbosview.cpp383
-rw-r--r--kverbos/kverbos/kverbosview.h148
-rw-r--r--kverbos/kverbos/main.cpp74
-rw-r--r--kverbos/kverbos/prefs.kcfgc6
-rw-r--r--kverbos/kverbos/qerfassen.ui2796
-rw-r--r--kverbos/kverbos/qlernen.ui1021
-rw-r--r--kverbos/kverbos/qresult.ui275
-rw-r--r--kverbos/kverbos/qverbedit.ui196
-rw-r--r--kverbos/kverbos/qverbosoptions.ui1228
-rw-r--r--kverbos/kverbos/span16.pngbin0 -> 98 bytes
-rw-r--r--kverbos/kverbos/startuplogo.pngbin0 -> 11234 bytes
-rw-r--r--kverbos/kverbos/startuplogo.svgzbin0 -> 4525 bytes
-rw-r--r--kverbos/kverbos/user.pngbin0 -> 210 bytes
-rw-r--r--kverbos/kverbos/verbspanish.cpp943
-rw-r--r--kverbos/kverbos/verbspanish.h301
-rw-r--r--kverbos/kverbos/version.h3
54 files changed, 16025 insertions, 0 deletions
diff --git a/kverbos/kverbos/Makefile.am b/kverbos/kverbos/Makefile.am
new file mode 100644
index 00000000..9a3b3c97
--- /dev/null
+++ b/kverbos/kverbos/Makefile.am
@@ -0,0 +1,32 @@
+SUBDIRS = icons data
+
+bin_PROGRAMS = kverbos
+kverbos_SOURCES = kfeedercontrol.cpp kresult.cpp qresult.ui verbspanish.cpp kverbosuser.cpp kerfassen.cpp qerfassen.ui kverbedit.cpp qverbedit.ui qverbosoptions.ui kverbosoptions.cpp qlernen.ui kstartuplogo.cpp kverbosview.cpp kverbosdoc.cpp kverbos.cpp main.cpp prefs.kcfgc
+kverbos_LDADD = $(LIB_KFILE) $(LIB_KDEUI) $(LIB_KDECORE) $(LIB_QT) $(LIBSOCKET)
+
+
+EXTRA_DIST = kfeedercontrol.cpp kfeedercontrol.h main.cpp kverbos.cpp kverbos.h kverbosdoc.cpp kverbosdoc.h kverbosview.cpp kverbosview.h kverbosui.rc kverbos.desktop kstartuplogo.cpp kstartuplogo.h startuplogo.png qlernen.ui kverbosoptions.cpp kverbosoptions.h qverbosoptions.ui qverbedit.ui kverbedit.cpp kverbedit.h qerfassen.ui kerfassen.cpp kerfassen.h deu16.png span16.png kverbosuser.cpp kverbosuser.h verbspanish.cpp verbspanish.h qresult.ui kverbosuser.png kresult.cpp kresult.h
+
+xdg_apps_DATA = kverbos.desktop
+kde_kcfg_DATA = kverbos.kcfg
+
+pics_DATA = startuplogo.png
+picsdir = $(kde_datadir)/kverbos/pics
+
+# set the include path for X, qt and KDE
+INCLUDES= $(all_includes)
+
+METASOURCES = AUTO
+
+# the library search path.
+kverbos_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+
+rcdir = $(kde_datadir)/kverbos
+rc_DATA = kverbosui.rc
+
+messages: rc.cpp
+ LIST=`find . -name \*.h -o -name \*.hh -o -name \*.H -o -name \*.hxx -o -name \*.hpp -o -name \*.cpp -o -name \*.cc -o -name \*.cxx -o -name \*.ecpp -o -name \*.C`; \
+ if test -n "$$LIST"; then \
+ $(XGETTEXT) $$LIST -o $(podir)/kverbos.pot; \
+ fi
+
diff --git a/kverbos/kverbos/banderas.png b/kverbos/kverbos/banderas.png
new file mode 100644
index 00000000..e775df23
--- /dev/null
+++ b/kverbos/kverbos/banderas.png
Binary files differ
diff --git a/kverbos/kverbos/data/Makefile.am b/kverbos/kverbos/data/Makefile.am
new file mode 100644
index 00000000..54cb7de5
--- /dev/null
+++ b/kverbos/kverbos/data/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = $(AUTODIRS)
diff --git a/kverbos/kverbos/data/de/Makefile.am b/kverbos/kverbos/data/de/Makefile.am
new file mode 100644
index 00000000..55399ef0
--- /dev/null
+++ b/kverbos/kverbos/data/de/Makefile.am
@@ -0,0 +1,4 @@
+verbos_DATA = verbos.verbos
+
+verbosdir = $(kde_datadir)/kverbos/data/de
+
diff --git a/kverbos/kverbos/data/de/verbos.verbos b/kverbos/kverbos/data/de/verbos.verbos
new file mode 100644
index 00000000..06041a63
--- /dev/null
+++ b/kverbos/kverbos/data/de/verbos.verbos
@@ -0,0 +1,2371 @@
+abandonar
+verlassen, vernachlässigen
+0
+abrir
+öffnen
+1
+abriendo
+abierto
+abro
+abres
+abre
+abrimos
+abrís
+abren
+abría
+abrías
+abría
+abríamos
+abríais
+abrían
+abrí
+abriste
+abrió
+abrimos
+abristeis
+abrieron
+abriré
+abrirás
+abrirá
+abriremos
+abriréis
+abrirán
+abriría
+abrirías
+abriría
+abriríamos
+abriríais
+abrirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+acostarse
+sich schlafen legen
+0
+acostumbrarse
+sich gewöhnen
+0
+afeitar
+rasieren
+0
+afeitarse
+sich rasieren
+0
+almacenar
+speichern
+0
+almorzar
+zu Mittag essen, mittagessen
+3
+andar
+gehen, laufen
+1
+andando
+andado
+ando
+andas
+anda
+andamos
+andais
+andan
+andaba
+andabas
+andaba
+andábamos
+andabais
+andaban
+anduve
+anduviste
+anduvo
+anduvimos
+anduvisteis
+anduvieron
+andaré
+andarás
+andará
+andaremos
+andaréis
+andarán
+andaría
+andarías
+andaría
+andaríamos
+andaríais
+andarían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+apostar
+wetten
+3
+aprender
+lernen
+0
+asombrar
+erstaunen
+0
+asombrarse
+sich wundern
+0
+atacar
+angreifen
+6
+ausentarse
+sich entfernen, weggehen
+0
+averiguar
+untersuchen, Ermittlungen anstellen, ermitteln
+9
+bailar
+tanzen
+0
+barrer
+kehren, fegen, säubern
+0
+bañarse
+sich baden
+0
+caber
+Platz haben, hineingehen, hineinpassen
+1
+cabiendo
+cabido
+quepo
+cabes
+cabe
+cabemos
+cabéis
+caben
+cabía
+cabías
+cabía
+cabíamos
+cabíais
+cabían
+cupe
+cupiste
+cupo
+cupimos
+cupisteis
+cupieron
+cabré
+cabrás
+cabrá
+cabremos
+cabréis
+cabrán
+cabría
+cabrías
+cabría
+cabríamos
+cabríais
+cabrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+caer
+fallen
+1
+cayendo
+caído
+caigo
+caes
+cae
+caemos
+caéis
+caen
+caía
+caías
+caía
+caíamos
+caíais
+caían
+caí
+caíste
+cayó
+caímos
+caísteis
+cayeron
+caeré
+caerás
+caerá
+caeremos
+caeréis
+caerán
+caería
+caerías
+caería
+caeríamos
+caeríais
+caerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+calcular
+rechnen, annehmen
+0
+cantar
+singen
+0
+cazar
+jagen, verfolgen
+8
+cenar
+zu Abend essen, abendessen
+0
+cerrar
+schließen
+2
+coger
+nehmen, greifen
+11
+comer
+essen
+0
+comprar
+kaufen, einkaufen
+0
+comprender
+verstehen, begreifen
+0
+conducir
+führen, fahren
+1
+conduciendo
+conducido
+conduzco
+conduces
+conduce
+conducimos
+conducís
+conducen
+conducía
+conducías
+conducía
+conducíamos
+conducíais
+conducían
+conduje
+condujiste
+condujo
+condujimos
+condujisteis
+condujieron
+conduciré
+conducirás
+conducirá
+conduciremos
+conduciréis
+conducirán
+conduciría
+conducirías
+conduciría
+conduciríamos
+conduciríais
+conducirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+conduce
+conduzca
+conduzcamos
+conducid
+conduzcan
+conocer
+kennen, kennenlernen
+1
+conociendo
+conocido
+conozco
+conoces
+conoce
+conocemos
+conocéis
+conocen
+conocía
+conocías
+conocía
+conocíamos
+conocíais
+conocían
+conocí
+conociste
+conoció
+conocimos
+conocisteis
+conocieron
+conoceré
+conocerás
+conocerá
+conoceremos
+conoceréis
+conocerán
+conocería
+conocerías
+conocería
+conoceríamos
+conoceríais
+conocerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+considerar
+betrachten, berücksichtigen
+0
+contar
+zählen, erzählen, gelten
+3
+contestar
+erwidern, beantworten, abfragen
+0
+continuar
+weitermachen
+15
+costar
+kosten
+3
+dar
+geben
+1
+dando
+dado
+doy
+das
+da
+damos
+dais
+dan
+daba
+dabas
+daba
+dabamos
+dabais
+daban
+di
+diste
+dio
+dimos
+disteis
+dieron
+daré
+darás
+dará
+daremos
+daréis
+darán
+daría
+darías
+daría
+daríamos
+daríais
+darían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+deber
+sollen
+0
+decepcionar
+enttäuschen
+0
+decir
+sagen
+1
+diciendo
+dicho
+digo
+dices
+dice
+decimos
+decís
+dicen
+decía
+decías
+decía
+decíamos
+decíais
+decían
+dije
+dijiste
+dijo
+dijimos
+dijisteis
+dijeron
+diré
+dirás
+dirá
+diremos
+diréis
+dirán
+diría
+dirías
+diría
+diríamos
+diríais
+dirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+delinquir
+eine Straftat begehen
+13
+demostrar
+zeigen, vorführen
+3
+desear
+wünschen, begehren
+0
+devolver
+zurückgeben, wiedergeben
+1
+devolviendo
+devolvido
+vuelvo
+vuelves
+vuelve
+volvemos
+volvéis
+vuelven
+devolvía
+devolvías
+devolvía
+devolvíamos
+devolvíais
+devolvían
+devolví
+devolviste
+devolvió
+devolvimos
+devolvisteis
+devolvieron
+devolveré
+devolverás
+devolverá
+devolveremos
+devolveréis
+devolverán
+devolvería
+devolverías
+devolvería
+devolveríamos
+devolveríais
+devolverían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+vuelve
+vuelva
+volvamos
+volved
+vuelvan
+disculpar
+entschuldigen, verzeihen
+0
+discutir
+diskutieren, streiten
+0
+disfrutar
+genießen, sich vergnügen
+0
+disgustar
+nicht gefallen, mißfallen, verärgern, erzürnen
+0
+distinguir
+unterscheiden, kennzeichnen
+12
+dormir
+schlafen
+1
+durmiendo
+dormido
+duermo
+duermes
+duerme
+dormimos
+dormís
+duermen
+dormía
+dormías
+dormía
+dormíamos
+dormíais
+dormían
+dormí
+dormiste
+durmió
+dormimos
+dormisteis
+durmieron
+dormiré
+dormirás
+dormirá
+dormiremos
+dormiréis
+dormirán
+dormiría
+dormirías
+dormiría
+dormiríamos
+dormiríais
+dormirían
+duerma
+duermas
+duerma
+durmamos
+durmáis
+duerman
+
+
+
+
+
+
+
+
+
+
+
+
+
+duerme
+duerma
+durmamos
+dormid
+duerman
+ducharse
+sich duschen
+0
+encontrar
+finden, treffen
+3
+encontrarse
+sich befinden, sich treffen
+3
+entender
+verstehen
+2
+enviar
+senden, schicken
+14
+escoger
+auswählen, aussuchen
+11
+escribir
+schreiben
+1
+escribiendo
+escrito
+escribo
+escribes
+escribe
+escribimos
+escribís
+escriben
+escribía
+escribías
+escribía
+escribíamos
+escribíais
+escribían
+escribí
+escribiste
+escribió
+escribimos
+escribisteis
+escribieron
+escribiré
+escribirás
+escribirá
+escribiremos
+escribiréis
+escribirán
+escribiría
+escribirías
+escribiría
+escribiríamos
+escribiríais
+escribirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+escuchar
+hören, zuhören, horchen
+0
+esperar
+erwarten, warten auf
+0
+estar
+sein
+1
+estando
+estado
+estoy
+estas
+esta
+estamos
+estais
+estan
+estaba
+estabas
+estaba
+estabamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estare
+estaras
+estara
+estaremos
+estareis
+estaran
+estaria
+estarias
+estaria
+estariamos
+estariais
+estarian
+este
+estes
+este
+estemos
+esteis
+esten
+estuviera
+estuvieras
+estuviera
+estuvieramos
+estuvierais
+estuvieran
+
+
+
+
+
+
+
+esta
+este
+estemos
+estad
+esten
+estudiar
+studieren, lernen
+0
+fijar
+festmachen, befestigen
+0
+fumar
+rauchen
+0
+ganar
+gewinnen, verdienen, erhalten, bekommen
+0
+haber
+haben
+1
+habiendo
+habido
+he
+has
+ha
+hemos
+habéis
+han
+había
+habías
+había
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habría
+habríamos
+habríais
+habrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+hablar
+sprechen
+0
+hacer
+machen, tun
+1
+haciendo
+hecho
+hago
+haces
+hace
+hacemos
+hacéis
+hacen
+hacía
+hacías
+hacía
+hacíamos
+hacíais
+hacían
+hice
+hiciste
+hizo
+hicimos
+hicisteis
+hicieron
+haré
+harás
+hará
+haremos
+haréis
+harán
+haría
+harías
+haría
+haríamos
+haríais
+harían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+haz
+haga
+hagamos
+haced
+hagan
+ir
+gehen
+1
+yendo
+ido
+voy
+vas
+va
+vamos
+vais
+van
+iba
+ibas
+iba
+íbamos
+ibais
+iban
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+iré
+irás
+irá
+iremos
+irés
+irán
+iría
+irías
+iría
+iríamos
+iríais
+irían
+vaya
+vayas
+vaya
+vayamos
+vayáis
+vayan
+fuera
+fueras
+fuera
+fuéramos
+fuerais
+fueran
+
+
+
+
+
+
+
+ve
+vaya
+vayamos
+id
+vayan
+jugar
+spielen
+4
+lastimarse
+sich verletzen
+0
+leer
+lesen
+1
+leyendo
+leído
+leo
+lees
+lee
+leemos
+leéis
+leen
+leí
+leíste
+leyó
+leímos
+leísteis
+leyeron
+leí
+leiste
+leió
+leimos
+leisteis
+leieron
+leeré
+leerás
+leerá
+leeremos
+leeréis
+leerán
+leería
+leerías
+leería
+leeríamos
+leeríais
+leerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+levantarse
+aufstehen
+0
+limpiar
+putzen, reinigen
+0
+llamar
+rufen, anrufen
+0
+llamarse
+heißen, sich nennen
+0
+llegar
+ankommen
+7
+llevar
+tragen, bringen, mitbringen
+0
+llover
+regnen
+3
+manejar
+handhaben, führen, leiten, (AM->),fahren
+0
+meter
+hineinstecken
+0
+mirar
+ansehen
+0
+morder
+beißen, anbeißen
+3
+mostrar
+zeigen, ausstellen
+3
+mover
+bewegen
+3
+nadar
+schwimmen
+0
+necesitar
+brauchen, benötigen
+0
+observar
+beobachten
+0
+oír
+hören
+1
+oyendo
+oído
+oigo
+oyes
+oye
+oímos
+oís
+oyen
+oía
+oías
+oía
+oíamos
+oíais
+oían
+oí
+oíste
+oyó
+oímos
+oísteis
+oyeron
+oíré
+oírás
+oírá
+oíremos
+oíréis
+oírán
+oíría
+oírías
+oíría
+oíríamos
+oíríais
+oírían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+oye
+oiga
+oigamos
+oid
+oigan
+pagar
+zahlen, bezahlen
+7
+parecer
+scheinen, aussehen wie
+1
+pareciendo
+parecido
+parezco
+pareces
+parece
+parecemos
+parecéis
+parecen
+parecía
+parecías
+parecía
+parecíamos
+parecíais
+parecían
+parecí
+pareciste
+pareció
+parecimos
+parecisteis
+parecieron
+pareceré
+parecerás
+parecerá
+pareceremos
+pareceréis
+parecerán
+parecería
+parecerías
+parecería
+pareceríamos
+pareceríais
+parecerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+parece
+parezca
+parezcamos
+pareced
+parezcan
+pasar
+verbringen, vorbeigehen
+0
+pedir
+bitten
+1
+pidiendo
+pedido
+pido
+pides
+pide
+pedimos
+pedís
+piden
+pedía
+pedías
+pedía
+pedíamos
+pedíais
+pedían
+pedí
+pediste
+pidió
+pedimos
+pedisteis
+pidieron
+pidiere
+pidieres
+pidiere
+pidiéremos
+pidiereis
+pidieren
+pediría
+pedirías
+pediría
+pediríamos
+pediríais
+pedirían
+pida
+pidas
+pida
+pidamos
+pidáis
+pidan
+pidiera
+pidieras
+pidiera
+pidiéramos
+pidierais
+pidieran
+
+
+
+
+
+
+
+pide
+pida
+pidamos
+pedid
+pidan
+peinar
+kämmen
+0
+pensar
+denken, überdenken
+2
+poder
+können, dürfen
+1
+pudiendo
+podido
+puedo
+puedes
+puede
+podemos
+podéis
+pueden
+podía
+podías
+podía
+podíamos
+podíais
+podían
+pude
+pudiste
+pudo
+pudimos
+pudisteis
+pudieron
+podré
+podrás
+podrá
+podremos
+podréis
+podrán
+podría
+podrías
+podría
+podríamos
+podríais
+podrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+poner
+setzen, stellen, legen
+1
+poniendo
+puesto
+pongo
+pones
+pone
+ponemos
+ponéis
+ponen
+ponía
+ponías
+ponía
+poníamos
+poníais
+ponían
+puse
+pusiste
+puso
+pusimos
+pusisteis
+pusieron
+pondré
+pondrás
+pondrá
+pondremos
+pondréis
+pondrán
+pondría
+pondrías
+pondría
+pondríamos
+pondríais
+pondrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+pon
+ponga
+pongamos
+poned
+pongan
+practicar
+üben, praktizieren, treiben, (Sport)
+6
+preparar
+vorbereiten
+0
+presumir
+vermuten, annehmen
+0
+probar
+probieren
+3
+programar
+programmieren
+0
+prometer
+versprechen
+0
+quejarse
+sich beklagen
+0
+querer
+wollen, lieben, wünschen
+1
+queriendo
+querido
+quiero
+quieres
+quiere
+queremos
+queréis
+quieren
+quería
+querías
+quería
+queríamos
+queríais
+querían
+quise
+quisiste
+quiso
+quisimos
+quisisteis
+quisieron
+querré
+querrás
+querrá
+querremos
+querréis
+querrán
+querría
+querrías
+querría
+querríamos
+querríais
+querrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+quitar
+abnehmen, ausziehen, entfernen
+0
+quitarse
+sich ausziehen
+0
+recibir
+bekommen, erhalten
+0
+recordar
+erinnern, sich erinnern
+3
+repetir
+wiederholen
+1
+repitiendo
+repetido
+repito
+repites
+repite
+repetimos
+repetís
+repiten
+repetía
+repetías
+repetía
+repetíamos
+repetíais
+repetían
+repetí
+repetiste
+repitió
+repetimos
+repetisteis
+repitieron
+repetiré
+repetirás
+repetirá
+repetiremos
+repetiréis
+repetirán
+repetiría
+repetirías
+repetiría
+repetiríamos
+repetiríais
+repetirían
+repita
+repitas
+repita
+repitamos
+repitáis
+repitan
+
+
+
+
+
+
+
+
+
+
+
+
+
+repite
+repita
+repitamos
+
+repitan
+resolver
+lösen
+1
+resolviendo
+resolvido
+resuelvo
+resuelves
+resuelve
+resolvemos
+resolvéis
+resuelven
+resolvía
+resolvías
+resolvía
+resolvíamos
+resolvíais
+resolvían
+resolví
+resolviste
+resolvió
+resolvimos
+resolvisteis
+resolvieron
+resolveré
+resolverás
+resolverá
+resolveremos
+resolveréis
+resolverán
+resolvería
+resolverías
+resolvería
+resolveríamos
+resolveríais
+resolverían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reír
+lachen
+1
+riendo
+reido
+río
+ríes
+ríe
+reímos
+reís
+ríen
+reía
+reías
+reía
+reíamos
+reíais
+reían
+reí
+reíste
+río
+reímos
+reísteis
+rieron
+reíré
+reírás
+reírá
+reíremos
+reíréis
+reírán
+reíría
+reírías
+reíría
+reíríamos
+reíríais
+reírían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ríe
+ría
+riamos
+reíd
+rían
+romper
+zerstören
+1
+rompiendo
+roto
+rompo
+rompes
+rompe
+rompemos
+rompeis
+rompen
+rompía
+rompías
+rompía
+rompíamos
+rompíais
+rompían
+rompí
+rompiste
+rompió
+rompimos
+rompisteis
+rompieron
+romperé
+romperás
+romperá
+romperemos
+romperéis
+romperán
+rompería
+romperías
+rompería
+romperíamos
+romperíais
+romperían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+saber
+wissen, können; schmecken
+1
+sabiendo
+sabido
+sé
+sabes
+sabe
+sabemos
+sabéis
+saben
+sabía
+sabías
+sabía
+sabíamos
+sabíais
+sabían
+supe
+supiste
+supo
+supimos
+supisteis
+supieron
+sabré
+sabrás
+sabrá
+sabremos
+sabréis
+sabrán
+sabría
+sabrías
+sabría
+sabríamos
+sabríais
+sabrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+sacudir
+rütteln, schütteln
+0
+salir
+gehen, ausgehen; abfahren
+1
+saliendo
+salido
+salgo
+sales
+sale
+salimos
+salís
+salen
+salía
+salías
+salía
+salíamos
+salíais
+salían
+salí
+saliste
+salió
+salimos
+salisteis
+salieron
+saldré
+saldrás
+saldrá
+saldremos
+saldréis
+saldrán
+saldría
+saldrías
+saldría
+saldríamos
+saldríais
+saldrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+sal
+salga
+salgamos
+salid
+salgan
+saltar
+springen, überspringen
+0
+saludar
+begrüßen, grüßen, salutieren
+0
+seguir
+folgen, fortsetzen; weiterfahren
+1
+siguiendo
+seguido
+sigo
+sigues
+sigue
+seguimos
+seguís
+siguen
+seguía
+seguías
+seguía
+seguíamos
+seguíais
+seguían
+seguí
+seguiste
+siguió
+seguimos
+seguisteis
+siguieron
+seguiré
+seguirás
+seguirá
+seguiremos
+seguiréis
+seguirán
+seguiría
+seguirías
+seguiría
+seguiríamos
+seguiríais
+seguirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+sigue
+siga
+sigamos
+seguid
+sigan
+ser
+sein
+1
+siendo
+sido
+soy
+eres
+es
+somos
+sois
+son
+era
+eras
+era
+eramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+sere
+seras
+sera
+seremos
+sereis
+seran
+seria
+serias
+seria
+seriamos
+seriais
+serian
+sea
+seas
+sea
+seamos
+seais
+sean
+fuera
+fueras
+fuera
+fueramos
+fuerais
+fueran
+
+
+
+
+
+
+
+se
+sea
+seamos
+sed
+sean
+servir
+servieren
+1
+sirviendo
+servido
+sirvo
+sirves
+sirve
+servimos
+servís
+sirven
+servía
+servías
+servía
+servíamos
+servíais
+servían
+serví
+serviste
+sirvió
+servimos
+servisteis
+sirvieron
+sirviere
+sirvieres
+sirviere
+sirviéremos
+sirviereis
+sirvieren
+serviría
+servirías
+serviría
+serviríamos
+serviríais
+servirían
+sirva
+sirvas
+sirva
+sirvamos
+sirváis
+sirvan
+
+
+
+
+
+
+
+
+
+
+
+
+
+sirve
+sirva
+sirvamos
+servid
+sirvan
+sonar
+klingen, läuten
+3
+sorprender
+überraschen
+0
+soñar
+träumen
+3
+tañer
+spielen, läuten, (Instrumente!)
+16
+tener
+haben, besitzen
+1
+teniendo
+tenido
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenía
+tenías
+tenía
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendría
+tendríamos
+tendríais
+tendrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ten
+tenga
+tengamos
+tened
+tengan
+tomar
+nehmen, trinken
+0
+trabajar
+arbeiten
+0
+traer
+bringen, herbringen
+1
+trayendo
+traido
+traigo
+traes
+trae
+traemos
+traéis
+traen
+traía
+traías
+traía
+traíamos
+traíais
+traían
+traje
+trajiste
+trajo
+trajimos
+trajisteis
+trajeron
+traeré
+traerás
+traerá
+traeremos
+traeréis
+traerán
+traería
+traerías
+traería
+traeríamos
+traeríais
+traerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+trae
+traiga
+traigamos
+traed
+traigan
+utilizar
+verwenden
+8
+vencer
+besiegen, siegen
+10
+vender
+verkaufen
+0
+venir
+kommen
+1
+viniendo
+venido
+vengo
+vienes
+viene
+venimos
+venís
+vienen
+venía
+venías
+venía
+veníamos
+veníais
+venían
+vine
+viniste
+vino
+vinimos
+vinisteis
+vinieron
+vendré
+vendrás
+vendrá
+vendremos
+vendréis
+vendrán
+vendría
+vendrías
+vendría
+vendríamos
+vendríais
+vendrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ven
+venga
+vengamos
+venid
+vengan
+visitar
+besuchen
+0
+vivir
+leben
+0
+volar
+fliegen
+3
+volver
+drehen, umkehren, zurückkehren
+1
+volviendo
+vuelto
+vuelvo
+vuelves
+vuelve
+volvemos
+volveis
+vuelven
+volvía
+volvías
+volvía
+volvíamos
+volvíais
+volvían
+volví
+volviste
+volvió
+volvimos
+volvisteis
+volvieron
+volveré
+volverás
+volverá
+volveremos
+volveréis
+volverán
+volvería
+volverías
+volvería
+volveríamos
+volveríais
+volverían
+vuelva
+vuelvas
+vuelva
+volvamos
+volváis
+vuelvan
+
+
+
+
+
+
+
+
+
+
+
+
+
+vuelve
+vuelva
+
+
+vuelvan
diff --git a/kverbos/kverbos/data/en/Makefile.am b/kverbos/kverbos/data/en/Makefile.am
new file mode 100644
index 00000000..1322fea9
--- /dev/null
+++ b/kverbos/kverbos/data/en/Makefile.am
@@ -0,0 +1,4 @@
+verbos_DATA = verbos.verbos
+
+verbosdir = $(kde_datadir)/kverbos/data/en
+
diff --git a/kverbos/kverbos/data/en/verbos.verbos b/kverbos/kverbos/data/en/verbos.verbos
new file mode 100644
index 00000000..62bc04a6
--- /dev/null
+++ b/kverbos/kverbos/data/en/verbos.verbos
@@ -0,0 +1,2371 @@
+abandonar
+to abandon
+0
+abrir
+to open
+1
+abriendo
+abierto
+abro
+abres
+abre
+abrimos
+abrís
+abren
+abría
+abrías
+abría
+abríamos
+abríais
+abrían
+abrí
+abriste
+abrió
+abrimos
+abristeis
+abrieron
+abriré
+abrirás
+abrirá
+abriremos
+abriréis
+abrirán
+abriría
+abrirías
+abriría
+abriríamos
+abriríais
+abrirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+acostarse
+to go to bed
+0
+acostumbrarse
+to get used to something
+0
+afeitar
+to shave
+0
+afeitarse
+to shave oneself
+0
+almacenar
+to store
+0
+almorzar
+to have lunch
+3
+andar
+to walk
+1
+andando
+andado
+ando
+andas
+anda
+andamos
+andais
+andan
+andaba
+andabas
+andaba
+andábamos
+andabais
+andaban
+anduve
+anduviste
+anduvo
+anduvimos
+anduvisteis
+anduvieron
+andaré
+andarás
+andará
+andaremos
+andaréis
+andarán
+andaría
+andarías
+andaría
+andaríamos
+andaríais
+andarían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+apostar
+to bid, to bet on
+3
+aprender
+to learn
+0
+asombrar
+to amaze, to astonish
+0
+asombrarse
+to be amazed, to be astonished
+0
+atacar
+to attack
+6
+ausentarse
+to absent oneself
+0
+averiguar
+to find out
+9
+bailar
+to dance
+0
+barrer
+to sweep
+0
+bañarse
+to bathe (oneself)
+0
+caber
+to fit
+1
+cabiendo
+cabido
+quepo
+cabes
+cabe
+cabemos
+cabéis
+caben
+cabía
+cabías
+cabía
+cabíamos
+cabíais
+cabían
+cupe
+cupiste
+cupo
+cupimos
+cupisteis
+cupieron
+cabré
+cabrás
+cabrá
+cabremos
+cabréis
+cabrán
+cabría
+cabrías
+cabría
+cabríamos
+cabríais
+cabrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+caer
+to fall
+1
+cayendo
+caído
+caigo
+caes
+cae
+caemos
+caéis
+caen
+caía
+caías
+caía
+caíamos
+caíais
+caían
+caí
+caíste
+cayó
+caímos
+caísteis
+cayeron
+caeré
+caerás
+caerá
+caeremos
+caeréis
+caerán
+caería
+caerías
+caería
+caeríamos
+caeríais
+caerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+calcular
+to calculate, to compute
+0
+cantar
+to sing
+0
+cazar
+to hunt
+8
+cenar
+to have dinner
+0
+cerrar
+to close, to shut, to shut down
+2
+coger
+to catch, to seize
+11
+comer
+to eat
+0
+comprar
+to buy, to purchase
+0
+comprender
+to understand, to realize
+0
+conducir
+to drive
+1
+conduciendo
+conducido
+conduzco
+conduces
+conduce
+conducimos
+conducís
+conducen
+conducía
+conducías
+conducía
+conducíamos
+conducíais
+conducían
+conduje
+condujiste
+condujo
+condujimos
+condujisteis
+condujieron
+conduciré
+conducirás
+conducirá
+conduciremos
+conduciréis
+conducirán
+conduciría
+conducirías
+conduciría
+conduciríamos
+conduciríais
+conducirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+conduce
+conduzca
+conduzcamos
+conducid
+conduzcan
+conocer
+to know, to meet
+1
+conociendo
+conocido
+conozco
+conoces
+conoce
+conocemos
+conocéis
+conocen
+conocía
+conocías
+conocía
+conocíamos
+conocíais
+conocían
+conocí
+conociste
+conoció
+conocimos
+conocisteis
+conocieron
+conoceré
+conocerás
+conocerá
+conoceremos
+conoceréis
+conocerán
+conocería
+conocerías
+conocería
+conoceríamos
+conoceríais
+conocerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+considerar
+to consider
+0
+contar
+to count, to tell
+3
+contestar
+to answer, to reply
+0
+continuar
+to continue, to proceed, to resume
+15
+costar
+to cost
+3
+dar
+to give
+1
+dando
+dado
+doy
+das
+da
+damos
+dais
+dan
+daba
+dabas
+daba
+dabamos
+dabais
+daban
+di
+diste
+dio
+dimos
+disteis
+dieron
+daré
+darás
+dará
+daremos
+daréis
+darán
+daría
+darías
+daría
+daríamos
+daríais
+darían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+deber
+to must
+0
+decepcionar
+to disappoint
+0
+decir
+to say, to tell
+1
+diciendo
+dicho
+digo
+dices
+dice
+decimos
+decís
+dicen
+decía
+decías
+decía
+decíamos
+decíais
+decían
+dije
+dijiste
+dijo
+dijimos
+dijisteis
+dijeron
+diré
+dirás
+dirá
+diremos
+diréis
+dirán
+diría
+dirías
+diría
+diríamos
+diríais
+dirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+delinquir
+to offend
+13
+demostrar
+to demonstrate, to prove
+3
+desear
+to desire, to wishen
+0
+devolver
+to give back, to return
+1
+devolviendo
+devolvido
+vuelvo
+vuelves
+vuelve
+volvemos
+volvéis
+vuelven
+devolvía
+devolvías
+devolvía
+devolvíamos
+devolvíais
+devolvían
+devolví
+devolviste
+devolvió
+devolvimos
+devolvisteis
+devolvieron
+devolveré
+devolverás
+devolverá
+devolveremos
+devolveréis
+devolverán
+devolvería
+devolverías
+devolvería
+devolveríamos
+devolveríais
+devolverían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+vuelve
+vuelva
+volvamos
+volved
+vuelvan
+disculpar
+to apologize
+0
+discutir
+to argue, to discuss
+0
+disfrutar
+to enjoy
+0
+disgustar
+to disgruntle, to dissatisfy
+0
+distinguir
+to discriminate, to distinguish
+12
+dormir
+to sleep
+1
+durmiendo
+dormido
+duermo
+duermes
+duerme
+dormimos
+dormís
+duermen
+dormía
+dormías
+dormía
+dormíamos
+dormíais
+dormían
+dormí
+dormiste
+durmió
+dormimos
+dormisteis
+durmieron
+dormiré
+dormirás
+dormirá
+dormiremos
+dormiréis
+dormirán
+dormiría
+dormirías
+dormiría
+dormiríamos
+dormiríais
+dormirían
+duerma
+duermas
+duerma
+durmamos
+durmáis
+duerman
+
+
+
+
+
+
+
+
+
+
+
+
+
+duerme
+duerma
+durmamos
+dormid
+duerman
+ducharse
+to take a shower
+0
+encontrar
+to find
+3
+encontrarse
+to encounter, to meet
+3
+entender
+to understand
+2
+enviar
+to envoy, to send, to ship
+14
+escoger
+to choose
+11
+escribir
+to write
+1
+escribiendo
+escrito
+escribo
+escribes
+escribe
+escribimos
+escribís
+escriben
+escribía
+escribías
+escribía
+escribíamos
+escribíais
+escribían
+escribí
+escribiste
+escribió
+escribimos
+escribisteis
+escribieron
+escribiré
+escribirás
+escribirá
+escribiremos
+escribiréis
+escribirán
+escribiría
+escribirías
+escribiría
+escribiríamos
+escribiríais
+escribirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+escuchar
+to listen
+0
+esperar
+to await, to expect, to hope, to wait
+0
+estar
+to be
+1
+estando
+estado
+estoy
+estas
+esta
+estamos
+estais
+estan
+estaba
+estabas
+estaba
+estabamos
+estabais
+estaban
+estuve
+estuviste
+estuvo
+estuvimos
+estuvisteis
+estuvieron
+estare
+estaras
+estara
+estaremos
+estareis
+estaran
+estaria
+estarias
+estaria
+estariamos
+estariais
+estarian
+este
+estes
+este
+estemos
+esteis
+esten
+estuviera
+estuvieras
+estuviera
+estuvieramos
+estuvierais
+estuvieran
+
+
+
+
+
+
+
+esta
+este
+estemos
+estad
+esten
+estudiar
+to study, to learn
+0
+fijar
+fo fix
+0
+fumar
+to smoke
+0
+ganar
+to earn, to gain, to win
+0
+haber
+to catch
+1
+habiendo
+habido
+he
+has
+ha
+hemos
+habéis
+han
+había
+habías
+había
+habíamos
+habíais
+habían
+hube
+hubiste
+hubo
+hubimos
+hubisteis
+hubieron
+habré
+habrás
+habrá
+habremos
+habréis
+habrán
+habría
+habrías
+habría
+habríamos
+habríais
+habrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+hablar
+to discuss, to speak, to talk
+0
+hacer
+to do, to make
+1
+haciendo
+hecho
+hago
+haces
+hace
+hacemos
+hacéis
+hacen
+hacía
+hacías
+hacía
+hacíamos
+hacíais
+hacían
+hice
+hiciste
+hizo
+hicimos
+hicisteis
+hicieron
+haré
+harás
+hará
+haremos
+haréis
+harán
+haría
+harías
+haría
+haríamos
+haríais
+harían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+haz
+haga
+hagamos
+haced
+hagan
+ir
+to go
+1
+yendo
+ido
+voy
+vas
+va
+vamos
+vais
+van
+iba
+ibas
+iba
+íbamos
+ibais
+iban
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+iré
+irás
+irá
+iremos
+irés
+irán
+iría
+irías
+iría
+iríamos
+iríais
+irían
+vaya
+vayas
+vaya
+vayamos
+vayáis
+vayan
+fuera
+fueras
+fuera
+fuéramos
+fuerais
+fueran
+
+
+
+
+
+
+
+ve
+vaya
+vayamos
+id
+vayan
+jugar
+to play
+4
+lastimarse
+to hurt oneself
+0
+leer
+to read
+1
+leyendo
+leído
+leo
+lees
+lee
+leemos
+leéis
+leen
+leí
+leíste
+leyó
+leímos
+leísteis
+leyeron
+leí
+leiste
+leió
+leimos
+leisteis
+leieron
+leeré
+leerás
+leerá
+leeremos
+leeréis
+leerán
+leería
+leerías
+leería
+leeríamos
+leeríais
+leerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+levantarse
+to arise, to get up
+0
+limpiar
+to clean, to cleanse, to wipe
+0
+llamar
+to beckon, to call
+0
+llamarse
+to be called
+0
+llegar
+to arrive
+7
+llevar
+to carry
+0
+llover
+to rain
+3
+manejar
+to manage, to wield
+0
+meter
+to put
+0
+mirar
+to look at
+0
+morder
+to bite
+3
+mostrar
+to display, to show
+3
+mover
+to budge, to move
+3
+nadar
+to swim
+0
+necesitar
+to necessitate, to need
+0
+observar
+to observe
+0
+oír
+to hear
+1
+oyendo
+oído
+oigo
+oyes
+oye
+oímos
+oís
+oyen
+oía
+oías
+oía
+oíamos
+oíais
+oían
+oí
+oíste
+oyó
+oímos
+oísteis
+oyeron
+oíré
+oírás
+oírá
+oíremos
+oíréis
+oírán
+oíría
+oírías
+oíría
+oíríamos
+oíríais
+oírían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+oye
+oiga
+oigamos
+oid
+oigan
+pagar
+to pay
+7
+parecer
+to look, to seem
+1
+pareciendo
+parecido
+parezco
+pareces
+parece
+parecemos
+parecéis
+parecen
+parecía
+parecías
+parecía
+parecíamos
+parecíais
+parecían
+parecí
+pareciste
+pareció
+parecimos
+parecisteis
+parecieron
+pareceré
+parecerás
+parecerá
+pareceremos
+pareceréis
+parecerán
+parecería
+parecerías
+parecería
+pareceríamos
+pareceríais
+parecerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+parece
+parezca
+parezcamos
+pareced
+parezcan
+pasar
+to forward, to happen, to pass
+0
+pedir
+to ask for, to demand, to request
+1
+pidiendo
+pedido
+pido
+pides
+pide
+pedimos
+pedís
+piden
+pedía
+pedías
+pedía
+pedíamos
+pedíais
+pedían
+pedí
+pediste
+pidió
+pedimos
+pedisteis
+pidieron
+pidiere
+pidieres
+pidiere
+pidiéremos
+pidiereis
+pidieren
+pediría
+pedirías
+pediría
+pediríamos
+pediríais
+pedirían
+pida
+pidas
+pida
+pidamos
+pidáis
+pidan
+pidiera
+pidieras
+pidiera
+pidiéramos
+pidierais
+pidieran
+
+
+
+
+
+
+
+pide
+pida
+pidamos
+pedid
+pidan
+peinar
+to comb
+0
+pensar
+to cogitate, to think
+2
+poder
+to be able to, may
+1
+pudiendo
+podido
+puedo
+puedes
+puede
+podemos
+podéis
+pueden
+podía
+podías
+podía
+podíamos
+podíais
+podían
+pude
+pudiste
+pudo
+pudimos
+pudisteis
+pudieron
+podré
+podrás
+podrá
+podremos
+podréis
+podrán
+podría
+podrías
+podría
+podríamos
+podríais
+podrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+poner
+to lay, to put
+1
+poniendo
+puesto
+pongo
+pones
+pone
+ponemos
+ponéis
+ponen
+ponía
+ponías
+ponía
+poníamos
+poníais
+ponían
+puse
+pusiste
+puso
+pusimos
+pusisteis
+pusieron
+pondré
+pondrás
+pondrá
+pondremos
+pondréis
+pondrán
+pondría
+pondrías
+pondría
+pondríamos
+pondríais
+pondrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+pon
+ponga
+pongamos
+poned
+pongan
+practicar
+to practice
+6
+preparar
+to get ready, to prepare
+0
+presumir
+to presume
+0
+probar
+to prove, to test, to try
+3
+programar
+to program
+0
+prometer
+to promise
+0
+quejarse
+to complain
+0
+querer
+to want
+1
+queriendo
+querido
+quiero
+quieres
+quiere
+queremos
+queréis
+quieren
+quería
+querías
+quería
+queríamos
+queríais
+querían
+quise
+quisiste
+quiso
+quisimos
+quisisteis
+quisieron
+querré
+querrás
+querrá
+querremos
+querréis
+querrán
+querría
+querrías
+querría
+querríamos
+querríais
+querrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+quitar
+to remove, to take away
+0
+quitarse
+to remove, to take rid of
+0
+recibir
+to receive, to welcome
+0
+recordar
+to remember, to remind
+3
+repetir
+to repeat, to redo
+1
+repitiendo
+repetido
+repito
+repites
+repite
+repetimos
+repetís
+repiten
+repetía
+repetías
+repetía
+repetíamos
+repetíais
+repetían
+repetí
+repetiste
+repitió
+repetimos
+repetisteis
+repitieron
+repetiré
+repetirás
+repetirá
+repetiremos
+repetiréis
+repetirán
+repetiría
+repetirías
+repetiría
+repetiríamos
+repetiríais
+repetirían
+repita
+repitas
+repita
+repitamos
+repitáis
+repitan
+
+
+
+
+
+
+
+
+
+
+
+
+
+repite
+repita
+repitamos
+
+repitan
+resolver
+to solve
+1
+resolviendo
+resolvido
+resuelvo
+resuelves
+resuelve
+resolvemos
+resolvéis
+resuelven
+resolvía
+resolvías
+resolvía
+resolvíamos
+resolvíais
+resolvían
+resolví
+resolviste
+resolvió
+resolvimos
+resolvisteis
+resolvieron
+resolveré
+resolverás
+resolverá
+resolveremos
+resolveréis
+resolverán
+resolvería
+resolverías
+resolvería
+resolveríamos
+resolveríais
+resolverían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reír
+to laugh
+1
+riendo
+reido
+río
+ríes
+ríe
+reímos
+reís
+ríen
+reía
+reías
+reía
+reíamos
+reíais
+reían
+reí
+reíste
+río
+reímos
+reísteis
+rieron
+reíré
+reírás
+reírá
+reíremos
+reíréis
+reírán
+reíría
+reírías
+reíría
+reíríamos
+reíríais
+reírían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ríe
+ría
+riamos
+reíd
+rían
+romper
+to break, to crash
+1
+rompiendo
+roto
+rompo
+rompes
+rompe
+rompemos
+rompeis
+rompen
+rompía
+rompías
+rompía
+rompíamos
+rompíais
+rompían
+rompí
+rompiste
+rompió
+rompimos
+rompisteis
+rompieron
+romperé
+romperás
+romperá
+romperemos
+romperéis
+romperán
+rompería
+romperías
+rompería
+romperíamos
+romperíais
+romperían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+saber
+to know
+1
+sabiendo
+sabido
+sé
+sabes
+sabe
+sabemos
+sabéis
+saben
+sabía
+sabías
+sabía
+sabíamos
+sabíais
+sabían
+supe
+supiste
+supo
+supimos
+supisteis
+supieron
+sabré
+sabrás
+sabrá
+sabremos
+sabréis
+sabrán
+sabría
+sabrías
+sabría
+sabríamos
+sabríais
+sabrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+sacudir
+to shake
+0
+salir
+to exit, to leave, to quit
+1
+saliendo
+salido
+salgo
+sales
+sale
+salimos
+salís
+salen
+salía
+salías
+salía
+salíamos
+salíais
+salían
+salí
+saliste
+salió
+salimos
+salisteis
+salieron
+saldré
+saldrás
+saldrá
+saldremos
+saldréis
+saldrán
+saldría
+saldrías
+saldría
+saldríamos
+saldríais
+saldrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+sal
+salga
+salgamos
+salid
+salgan
+saltar
+to bounce, to jump, to leap
+0
+saludar
+to greet, to salute
+0
+seguir
+to continue, to follow
+1
+siguiendo
+seguido
+sigo
+sigues
+sigue
+seguimos
+seguís
+siguen
+seguía
+seguías
+seguía
+seguíamos
+seguíais
+seguían
+seguí
+seguiste
+siguió
+seguimos
+seguisteis
+siguieron
+seguiré
+seguirás
+seguirá
+seguiremos
+seguiréis
+seguirán
+seguiría
+seguirías
+seguiría
+seguiríamos
+seguiríais
+seguirían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+sigue
+siga
+sigamos
+seguid
+sigan
+ser
+to be
+1
+siendo
+sido
+soy
+eres
+es
+somos
+sois
+son
+era
+eras
+era
+eramos
+erais
+eran
+fui
+fuiste
+fue
+fuimos
+fuisteis
+fueron
+sere
+seras
+sera
+seremos
+sereis
+seran
+seria
+serias
+seria
+seriamos
+seriais
+serian
+sea
+seas
+sea
+seamos
+seais
+sean
+fuera
+fueras
+fuera
+fueramos
+fuerais
+fueran
+
+
+
+
+
+
+
+se
+sea
+seamos
+sed
+sean
+servir
+to serve
+1
+sirviendo
+servido
+sirvo
+sirves
+sirve
+servimos
+servís
+sirven
+servía
+servías
+servía
+servíamos
+servíais
+servían
+serví
+serviste
+sirvió
+servimos
+servisteis
+sirvieron
+sirviere
+sirvieres
+sirviere
+sirviéremos
+sirviereis
+sirvieren
+serviría
+servirías
+serviría
+serviríamos
+serviríais
+servirían
+sirva
+sirvas
+sirva
+sirvamos
+sirváis
+sirvan
+
+
+
+
+
+
+
+
+
+
+
+
+
+sirve
+sirva
+sirvamos
+servid
+sirvan
+sonar
+to ring, to sound
+3
+sorprender
+to surprise
+0
+soñar
+to dream
+3
+tañer
+to play an instrument
+16
+tener
+to have
+1
+teniendo
+tenido
+tengo
+tienes
+tiene
+tenemos
+tenéis
+tienen
+tenía
+tenías
+tenía
+teníamos
+teníais
+tenían
+tuve
+tuviste
+tuvo
+tuvimos
+tuvisteis
+tuvieron
+tendré
+tendrás
+tendrá
+tendremos
+tendréis
+tendrán
+tendría
+tendrías
+tendría
+tendríamos
+tendríais
+tendrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ten
+tenga
+tengamos
+tened
+tengan
+tomar
+to drink, to take
+0
+trabajar
+to work
+0
+traer
+to bring
+1
+trayendo
+traido
+traigo
+traes
+trae
+traemos
+traéis
+traen
+traía
+traías
+traía
+traíamos
+traíais
+traían
+traje
+trajiste
+trajo
+trajimos
+trajisteis
+trajeron
+traeré
+traerás
+traerá
+traeremos
+traeréis
+traerán
+traería
+traerías
+traería
+traeríamos
+traeríais
+traerían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+trae
+traiga
+traigamos
+traed
+traigan
+utilizar
+to use
+8
+vencer
+to surmount
+10
+vender
+to sell
+0
+venir
+to come
+1
+viniendo
+venido
+vengo
+vienes
+viene
+venimos
+venís
+vienen
+venía
+venías
+venía
+veníamos
+veníais
+venían
+vine
+viniste
+vino
+vinimos
+vinisteis
+vinieron
+vendré
+vendrás
+vendrá
+vendremos
+vendréis
+vendrán
+vendría
+vendrías
+vendría
+vendríamos
+vendríais
+vendrían
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ven
+venga
+vengamos
+venid
+vengan
+visitar
+to visit
+0
+vivir
+to leave
+0
+volar
+to fly
+3
+volver
+to return, to revert
+1
+volviendo
+vuelto
+vuelvo
+vuelves
+vuelve
+volvemos
+volveis
+vuelven
+volvía
+volvías
+volvía
+volvíamos
+volvíais
+volvían
+volví
+volviste
+volvió
+volvimos
+volvisteis
+volvieron
+volveré
+volverás
+volverá
+volveremos
+volveréis
+volverán
+volvería
+volverías
+volvería
+volveríamos
+volveríais
+volverían
+vuelva
+vuelvas
+vuelva
+volvamos
+volváis
+vuelvan
+
+
+
+
+
+
+
+
+
+
+
+
+
+vuelve
+vuelva
+
+
+vuelvan
diff --git a/kverbos/kverbos/deu16.png b/kverbos/kverbos/deu16.png
new file mode 100644
index 00000000..cffa0b5d
--- /dev/null
+++ b/kverbos/kverbos/deu16.png
Binary files differ
diff --git a/kverbos/kverbos/icons/Makefile.am b/kverbos/kverbos/icons/Makefile.am
new file mode 100644
index 00000000..a4b97f06
--- /dev/null
+++ b/kverbos/kverbos/icons/Makefile.am
@@ -0,0 +1 @@
+KDE_ICON=AUTO
diff --git a/kverbos/kverbos/icons/cr16-action-kverbosuser.png b/kverbos/kverbos/icons/cr16-action-kverbosuser.png
new file mode 100644
index 00000000..8f69e2b9
--- /dev/null
+++ b/kverbos/kverbos/icons/cr16-action-kverbosuser.png
Binary files differ
diff --git a/kverbos/kverbos/icons/hi128-app-kverbos.png b/kverbos/kverbos/icons/hi128-app-kverbos.png
new file mode 100644
index 00000000..2ad40f98
--- /dev/null
+++ b/kverbos/kverbos/icons/hi128-app-kverbos.png
Binary files differ
diff --git a/kverbos/kverbos/icons/hi16-app-kverbos.png b/kverbos/kverbos/icons/hi16-app-kverbos.png
new file mode 100644
index 00000000..8baafb1c
--- /dev/null
+++ b/kverbos/kverbos/icons/hi16-app-kverbos.png
Binary files differ
diff --git a/kverbos/kverbos/icons/hi22-app-kverbos.png b/kverbos/kverbos/icons/hi22-app-kverbos.png
new file mode 100644
index 00000000..a7d8b6a4
--- /dev/null
+++ b/kverbos/kverbos/icons/hi22-app-kverbos.png
Binary files differ
diff --git a/kverbos/kverbos/icons/hi32-app-kverbos.png b/kverbos/kverbos/icons/hi32-app-kverbos.png
new file mode 100644
index 00000000..032a2d34
--- /dev/null
+++ b/kverbos/kverbos/icons/hi32-app-kverbos.png
Binary files differ
diff --git a/kverbos/kverbos/icons/hi48-app-kverbos.png b/kverbos/kverbos/icons/hi48-app-kverbos.png
new file mode 100644
index 00000000..9503d947
--- /dev/null
+++ b/kverbos/kverbos/icons/hi48-app-kverbos.png
Binary files differ
diff --git a/kverbos/kverbos/icons/hisc-app-kverbos.svgz b/kverbos/kverbos/icons/hisc-app-kverbos.svgz
new file mode 100644
index 00000000..15a148ae
--- /dev/null
+++ b/kverbos/kverbos/icons/hisc-app-kverbos.svgz
Binary files differ
diff --git a/kverbos/kverbos/kerfassen.cpp b/kverbos/kverbos/kerfassen.cpp
new file mode 100644
index 00000000..ea646886
--- /dev/null
+++ b/kverbos/kverbos/kerfassen.cpp
@@ -0,0 +1,512 @@
+/***************************************************************************
+ kerfassen.cpp - description
+ -------------------
+ begin : Sat Dec 15 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 "kerfassen.h"
+
+#include <qlineedit.h>
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qpushbutton.h>
+#include <qtabwidget.h>
+//#include <qvaluelist.h>
+
+#include <kmessagebox.h>
+
+//#include "verbspanish.h"
+
+// Die Konstruktoren sollen sicherstellen, dass am Anfang die Karteikarten und
+// die Eingabefelder fr Gerund und Partizip nicht aktiviert sind.
+// Das Dialogfeld in den Zustand nicht gendert versetzen.
+KErfassen::KErfassen(spanishVerbList& l, int pos, QWidget* parent, const char* name, bool modal, WFlags fl)
+: QErfassen(parent, name, modal, fl), liste(l)
+{
+ formEdit[0][0] = EditYo2_1;
+ formEdit[1][0] = EditTu2_1;
+ formEdit[2][0] = EditEl2_1;
+ formEdit[3][0] = EditNosotros2_1;
+ formEdit[4][0] = EditVosotros2_1;
+ formEdit[5][0] = EditEllos2_1;
+ formEdit[0][1] = EditYo2_2;
+ formEdit[1][1] = EditTu2_2;
+ formEdit[2][1] = EditEl2_2;
+ formEdit[3][1] = EditNosotros2_2;
+ formEdit[4][1] = EditVosotros2_2;
+ formEdit[5][1] = EditEllos2_2;
+ formEdit[0][2] = EditYo2_3;
+ formEdit[1][2] = EditTu2_3;
+ formEdit[2][2] = EditEl2_3;
+ formEdit[3][2] = EditNosotros2_3;
+ formEdit[4][2] = EditVosotros2_3;
+ formEdit[5][2] = EditEllos2_3;
+ formEdit[0][3] = EditYo2_4;
+ formEdit[1][3] = EditTu2_4;
+ formEdit[2][3] = EditEl2_4;
+ formEdit[3][3] = EditNosotros2_4;
+ formEdit[4][3] = EditVosotros2_4;
+ formEdit[5][3] = EditEllos2_4;
+ formEdit[0][4] = EditYo2_5;
+ formEdit[1][4] = EditTu2_5;
+ formEdit[2][4] = EditEl2_5;
+ formEdit[3][4] = EditNosotros2_5;
+ formEdit[4][4] = EditVosotros2_5;
+ formEdit[5][4] = EditEllos2_5;
+ formEdit[0][5] = EditYo2_6;
+ formEdit[1][5] = EditTu2_6;
+ formEdit[2][5] = EditEl2_6;
+ formEdit[3][5] = EditNosotros2_6;
+ formEdit[4][5] = EditVosotros2_6;
+ formEdit[5][5] = EditEllos2_6;
+ formEdit[0][6] = EditYo2_7;
+ formEdit[1][6] = EditTu2_7;
+ formEdit[2][6] = EditEl2_7;
+ formEdit[3][6] = EditNosotros2_7;
+ formEdit[4][6] = EditVosotros2_7;
+ formEdit[5][6] = EditEllos2_7;
+ formEdit[0][7] = 0;
+ formEdit[1][7] = 0;
+ formEdit[2][7] = 0;
+ formEdit[3][7] = 0;
+ formEdit[4][7] = 0;
+ formEdit[5][7] = 0;
+ formEdit[0][8] = EditYo2_8;
+ formEdit[1][8] = EditTu2_8;
+ formEdit[2][8] = EditEl2_8;
+ formEdit[3][8] = EditNosotros2_8;
+ formEdit[4][8] = EditVosotros2_8;
+ formEdit[5][8] = EditEllos2_8;
+ if ((-1 == pos) || (pos >= (int)liste.count()))
+ position = liste.end();
+ else
+ position = liste.at(pos);
+ changed = false;
+ verbToWidget();
+ // einige Buttonbeschriftungen richtigstellen
+ ButtonN->setText("");
+ ButtonA->setText("");
+ ButtonE->setText("");
+ ButtonI->setText("");
+ ButtonO->setText("");
+ ButtonU->setText("");
+ TextTu1->setText("t");
+ TextTu2->setText("t");
+ TextTu3->setText("t");
+ TextTu4->setText("t");
+ TextTu5->setText("t");
+ TextTu6->setText("t");
+ TextTu7->setText("t");
+ TextTu8->setText("t");
+ ComboBoxTypen->changeItem("gu > g", 9);
+ TabWidgetFormas->setCurrentPage(0);
+ EditVerbo->setFocus();
+ verbToWidget();
+}
+
+KErfassen::~KErfassen()
+{
+}
+
+// Die Eingabefelder fr das Gerund und das Partizip werden deaktiviert
+// ebenso die Karteikarten, der Radiobutton wird zurckgesetzt
+void KErfassen::deaktivieren()
+{
+ if (position == liste.end())
+ ComboBoxTypen->setCurrentItem(REGULAR);
+ else
+ ComboBoxTypen->setCurrentItem((*position).getGroup());
+ TabWidgetFormas->setEnabled(false);
+ qWarning("desaktiviert");
+ TabWidgetFormas->setCurrentPage(0);
+ EditGerundio->setEnabled(false);
+ EditParticipio->setEnabled(false);
+ EditGerundio->setText("");
+ EditParticipio->setText("");
+ clearAllPages();
+}
+
+// Die Eingabefelder fr das Gerund und das Partizip werden aktiviert
+// ebenso die Karteikarten, der Radiobutton wird gesetzt
+void KErfassen::aktivieren()
+{
+ ComboBoxTypen->setCurrentItem(IRREGULAR);
+ TabWidgetFormas->setEnabled(true);
+ TabWidgetFormas->setCurrentPage(0);
+ EditGerundio->setEnabled(true);
+ EditParticipio->setEnabled(true);
+}
+
+// lscht die Eingabefelder der ersten Karteikarte fr die Formen
+void KErfassen::clearPage(int s)
+{
+ for (int i=0; i<6; i++)
+ formEdit[i][s]->setText("");
+}
+
+void KErfassen::clearAllPages()
+{
+ for (int i = presente; i<=subPasado; i++)
+ clearPage(i);
+ clearPage(imperativo);
+}
+
+// Lscht die Inhalte aller Datenfeldler des Dialoges.
+void KErfassen::clearAll()
+{
+ EditVerbo->setText("");
+ EditAleman->setText("");
+ // Die Eingabefelder sollen wieder deaktiviert werden. Dabei werden sie auch gelscht.
+ deaktivieren();
+ qWarning("clearAll deaktiviert");
+}
+
+bool KErfassen::wasChanged()
+{
+ return changed;
+}
+
+// prft, ob der Fensterinhalt gendert wurde
+bool KErfassen::widgetChanged()
+{
+ bool result = true;
+ if (position != liste.end())
+ {
+ // Das Verb an der aktuellen Position ist nicht leer. Ist es gleich dem Verb
+ // im Widget, dann gab es keine nderung.
+ if ((*position).allEqual(verbFromWidget()))
+ result = false;
+ }
+ else
+ {
+ // Die aktuelle Position ist leer. Ist das Verb im Widget leer, dann erfolgte
+ // keine nderung.
+ if (verbFromWidget().isEmpty())
+ result = false;
+ };
+ return result;
+}
+
+// -----------------------------------------------
+// Hier werden die Slots der Klasse implementiert.
+// During the following passage the slots of this class are implemented.
+// -----------------------------------------------
+
+// the type of the verb was changed
+void KErfassen::slotTypChanged(int i)
+{
+ if (IRREGULAR == i)
+ {
+ aktivieren();
+ }
+ else
+ {
+ deaktivieren();
+qWarning("slotTypeChanged deaktiviert");
+ }
+}
+
+// Die folgenden Slots lschen eine Seite der Karteikarten oder auch
+// gleich alle Karten auf einmal.
+void KErfassen::slotClearPage1()
+{
+ clearPage(presente);
+}
+
+void KErfassen::slotClearPage2()
+{
+ clearPage(imperfecto);
+}
+
+void KErfassen::slotClearPage3()
+{
+ clearPage(indefinido);
+}
+
+void KErfassen::slotClearPage4()
+{
+ clearPage(futuro);
+}
+
+void KErfassen::slotClearPage5()
+{
+ clearPage(condicional);
+}
+
+void KErfassen::slotClearPage6()
+{
+ clearPage(subPresente);
+}
+
+void KErfassen::slotClearPage7()
+{
+ clearPage(subPasado);
+}
+
+void KErfassen::slotClearPage8()
+{
+ clearPage(imperativo);
+}
+
+void KErfassen::slotClearAll()
+{
+ clearAll();
+}
+
+void KErfassen::slotDlgEnde()
+{
+ // Der Dialog wird beendet, nun muss geprft werden, ob das Verb in den
+ // Dialogfeldern ein neues oder gendertes Verb ist. Dazu wird das Verb aus den
+ // Dialogfeldern geholt und mit dem Verb an der aktuellen Listenposition
+ // verglichen.
+ if (widgetChanged())
+ {
+ int willErfassen = KMessageBox::warningYesNoCancel(this,
+ i18n("The current verb is not in the list yet.\nDo you want to add it?"),
+ i18n("Warning"),i18n("Add"),i18n("Do Not Add"));
+ switch (willErfassen)
+ {
+ case KMessageBox::Yes : // YES
+ position = verbErfassen();
+ case KMessageBox::No : // NO
+ done(0);
+ break;
+ default : // wirkt wie CANCEL
+ break;
+ };
+ }
+ else
+ done(0);
+}
+
+// Ein Verb wurde eingegeben und die Eingabe mit dem
+// weiter-Button beendet.
+void KErfassen::slotWeiter()
+{
+ if ( widgetChanged() )
+ {
+ position = verbErfassen();
+ };
+ // es mssen alle Eingabefelder wieder gelscht werden oder das Verb an der aktuellen
+ // Position wird in den Dialog geladen und den Eingabefokus
+ // erhlt das Feld fr das spanische Wort
+ if (position == liste.end())
+ {
+ position = liste.begin();
+ }
+ else
+ {
+ position++;
+ };
+ verbToWidget();
+ TabWidgetFormas->setCurrentPage(0);
+ EditVerbo->setFocus();
+} // slotWeiter
+
+// Die Eingabeposition in der Liste muss eine Position weiter nach vorne rutschen.
+void KErfassen::slotZurueck()
+{
+ if ( widgetChanged() )
+ {
+ position = verbErfassen();
+ };
+ // es mssen alle Eingabefelder wieder gelscht werden oder es muss das Verb an
+ // der Position in den Dialog geladen werden und den Eingabefokus
+ // erhlt das Feld fr das spanische Wort
+ if (position == liste.begin())
+ {
+ position = liste.end();
+ }
+ else
+ {
+ position--;
+ };
+ verbToWidget();
+ TabWidgetFormas->setCurrentPage(0);
+ EditVerbo->setFocus();
+} // slotZurueck
+
+// The dilog shows a verb but this verb shouldn't be changed. The user wants to
+// enter a new verb. So he can use this button to get an empty dialog window for his
+// new verb
+void KErfassen::slotNewVerb()
+{
+ if ( widgetChanged() )
+ position = verbErfassen();
+ position = liste.end();
+ verbToWidget();
+ TabWidgetFormas->setCurrentPage(0);
+ EditVerbo->setFocus();
+}
+
+void KErfassen::slotN()
+{
+ QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
+ if (pl)
+ pl->insert("");
+}
+
+void KErfassen::slotA()
+{
+ QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
+ if (pl)
+ pl->insert("");
+}
+
+void KErfassen::slotE()
+{
+ QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
+ if (pl)
+ pl->insert("");
+}
+
+void KErfassen::slotI()
+{
+ QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
+ if (pl)
+ pl->insert("");
+}
+
+void KErfassen::slotO()
+{
+ QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
+ if (pl)
+ pl->insert("");
+}
+
+void KErfassen::slotU()
+{
+ QLineEdit* pl = dynamic_cast<QLineEdit*>(focusWidget());
+ if (pl)
+ pl->insert("");
+}
+
+// A verb that is in the dialog should be addded to the list.
+// - if it is completely new verb then the verb should be added at its alphabetical position
+// - if there is a verb which is equal to the new verb then a dialog asks whether the
+// verb should be added again or replaced or if the operation shoul be canceled.
+spanishVerbList::Iterator KErfassen::verbErfassen()
+{
+ verbSpanish v = verbFromWidget();
+ spanishVerbList::Iterator it = liste.begin();
+ if (liste.isEmpty())
+ {
+ // The list was empty until now
+ it = liste.append(v);
+ changed = true;
+ }
+ else
+ {
+ while ((it != liste.end()) && (*it < v))
+ it++;
+ if ((it == liste.end()) || !(*it == v))
+ {
+ // Das Verb v wurde nicht in der Liste gefunden.
+ it = liste.insert(it, v);
+ changed = true;
+ }
+ else
+ {
+ // Das Verb wurde in der Liste gefunden.
+ switch (KMessageBox::warningYesNoCancel(this,
+ 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'."),
+ i18n("Warning"), i18n("Replace"), i18n("Do Not Replace")))
+ {
+ case KMessageBox::Yes: // the verb at the position is replaced by v.
+ *it = v;
+ changed = true;
+ break;
+ case KMessageBox::No: // the verb v is added as a new verb
+ it = liste.insert(it, v);
+ changed = true;
+ break;
+ default:
+ // nothing is done the list remains unchanged.
+ {};
+ };
+ };
+ };
+ return it;
+} // VerbErfassen
+
+// The information in the dialog is read and stored in an verb object and then returned
+verbSpanish KErfassen::verbFromWidget()
+{
+ verbSpanish v;
+ v.setSpanish(EditVerbo->text().simplifyWhiteSpace());
+ v.setForeign(EditAleman->text().simplifyWhiteSpace());
+ if (ComboBoxTypen->currentItem()!=IRREGULAR)
+ {
+ // regelmiges Verb - Endungstyp feststellen -> fertig
+ v.setGroup(ComboBoxTypen->currentItem());
+ }
+ else
+ {
+ // unregelmiges Verb - alle Formen bertragen -> fertig
+ v.setGroup(IRREGULAR);
+ v.setGerund(EditGerundio->text().simplifyWhiteSpace());
+ v.setPartizip(EditParticipio->text().simplifyWhiteSpace());
+ // die anderen Verbformen fr die Zeiten bertragen.
+ for (int i=presente; i<=subPasado; i++)
+ for (int j = yo; j<=ellos; j++)
+ v.setForm(i, j, formEdit[j][i]->text().simplifyWhiteSpace());
+ for (int j = yo; j<=ellos; j++)
+ v.setForm(imperativo, j, formEdit[j][imperativo]->text().simplifyWhiteSpace());
+ };
+ return v;
+}
+
+// The verb at the position it should be displaied in the dialog
+void KErfassen::verbToWidget()
+{
+ if (position == liste.end())
+ {
+ clearAll();
+ }
+ else
+ {
+ verbSpanish v = *position;
+ EditVerbo->setText(v.getSpanish());
+ EditAleman->setText(v.getForeign());
+ ComboBoxTypen->setCurrentItem(v.getGroup());
+ if (v.isGroupVerb())
+ {
+ deaktivieren();
+qWarning("verbTowidget deaktiviert");
+ }
+ else
+ {
+ // this is an irregular verb: bring all the forms to the dialog widget
+ aktivieren();
+ EditGerundio->setText(v.getGerund());
+ EditParticipio->setText(v.getPartizip());
+ // die anderen Verbformen fr die Zeiten bertragen.
+ for (int i=presente; i<=subPasado; i++)
+ for (int j = yo; j<=ellos; j++)
+ formEdit[j][i]->setText(v.getForm(i, j));
+ for (int j = yo; j<=ellos; j++)
+ formEdit[j][imperativo]->setText(v.getForm(imperativo, j));
+ };
+ };
+}
+
+// The dialog works on his own copy of the verblist. So after the end of the dialog
+// the caling function has to fetch the list from the dialog with this function.
+spanishVerbList KErfassen::getList()
+{
+ return liste;
+}
+
+
+
diff --git a/kverbos/kverbos/kerfassen.h b/kverbos/kverbos/kerfassen.h
new file mode 100644
index 00000000..7a8f2fc6
--- /dev/null
+++ b/kverbos/kverbos/kerfassen.h
@@ -0,0 +1,148 @@
+/***************************************************************************
+ kerfassen.h - description
+ -------------------
+ begin : Sat Dec 15 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KERFASSEN_H
+#define KERFASSEN_H
+
+#include <klocale.h>
+
+#include "qerfassen.h"
+#include "verbspanish.h"
+
+class QLineEdit;
+
+
+/** This class overloads the class QErfassen which was created with the Qt-designer.
+ * The dialog is used to edit existing verbs and to add new verbs.
+ *
+ *@author Arnold Kraschinski
+ */
+
+class KErfassen : public QErfassen {
+public:
+ /** An die Dialogklasse wird ein Zeiger auf eine Verbliste bergeben, damit
+ * Verben in die Liste eingefgt werden knnen. Es wird auch ein Iterator bergeben, der
+ * anzeigt, wo mit dem editieren begonnen werden soll.
+ */
+ KErfassen(spanishVerbList& l, int pos = -1, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0);
+ /** der Destruktor */
+ virtual ~KErfassen();
+ /** Gibt zurck, ob durch den Ablauf des Dialoges eine nderung an der
+ * bearbeiteten Verbliste entstanden ist (list = true).
+ * Wird als Parameter false bergeben, erfhrt man, ob das Fenster des Dialoges
+ * gendert wurde.
+ */
+ bool wasChanged();
+ /** The dialog works on his own copy of the verblist. So after the end of the dialog
+ * the caling function has to fetch the list from the dialog with this function.
+ */
+ spanishVerbList getList();
+
+private:
+ /** Ein Verb befindet sich in den Eingabefeldern des Dialoges und
+ * dieses soll nun in die Liste aufgenommen werden.
+ */
+ spanishVerbList::Iterator verbErfassen();
+ /** The verb in the edit boxes is transfered to a verbSpanish object
+ */
+ verbSpanish verbFromWidget();
+ /** Ein Verb aus der aktuellen Listenposition soll in dem Dialog dargestellt
+ * werden.
+ */
+ void verbToWidget();
+ /** Deaktiviert die Eingabefelder fr die Gerund-Form und fr das Partizip
+ * und die Karteikarten fr die ganzen Formen. Auerdem wird der Radiobutton
+ * wieder auf den Ausgangszustand zurckgesetzt.
+ */
+ void deaktivieren();
+ /** Aktiviert die Eingabefelder fr die Gerund-Form und fr das Partizip
+ * und die Karteikarten fr die ganzen Formen. Auerdem wird der Radiobutton
+ * in den gesetzten Zustand gebracht.
+ */
+ void aktivieren();
+ /** In dem Dialog sollen ein Teil der Eingabefelder oder aber alle
+ * Eingabefelder gelscht werden.
+ */
+ void clearPage(int s);
+ void clearAllPages();
+ void clearAll();
+ /** Es wird geprft, ob der Inhalt des Eingabefensters verndert wurde.
+ */
+ bool widgetChanged();
+
+public slots:
+ /** Dieser Slot bearbeitet den Wechsel am RadioButtonIrregular
+ * Wird der Knopf ausgewhlt, dann mssen alle Felder fr die
+ * unregelmigen Formen aktiviert werden.
+ * Wird der Button gelscht, dann mssen die Felder deaktiviert
+ * werden.
+ */
+ // virtual void slotToggleIrregular(bool b);
+ virtual void slotTypChanged(int);
+ /** Die folgenden Slots werden von den einzelnen Lschen-Buttons des
+ * Dialoges aufgerufen.
+ */
+ virtual void slotClearPage1();
+ virtual void slotClearPage2();
+ virtual void slotClearPage3();
+ virtual void slotClearPage4();
+ virtual void slotClearPage5();
+ virtual void slotClearPage6();
+ virtual void slotClearPage7();
+ virtual void slotClearPage8();
+ virtual void slotClearAll();
+ /** Wird aufgerufen, wenn der 'beenden'-Button gedrckt wurde.
+ */
+ virtual void slotDlgEnde();
+ /** Die Eingabe eines Verbes wurde abgeschlossen und es wurde der
+ * weiter Button gedrckt, um weitere Verben einzugeben.
+ */
+ virtual void slotWeiter();
+ /** Es wurde an einer Position in der Liste der zurck-Button bettigt.
+ * Das gerade eingegebene Verb muss in die Liste bernommen werden und der
+ * Positionszeiger in der Liste muss eine Position nach hinten rcken, falls
+ * es ein Verb weiter vorne in der Liste gibt. Dieses Verb muss eventuell in
+ * den Dialog geladen werden.
+ */
+ virtual void slotZurueck();
+ /** The dilog shows a verb but this verb shouldn't be changed. The user wants to
+ * enter a new verb. So he can use this button to get an empty dialog window for his
+ * new verb
+ */
+ virtual void slotNewVerb();
+ /** Die folgenden Slots werden aufgerufen, wenn ein Button mit einem
+ * spanischen Sonderzeichen gedrckt wird.
+ * Das Zeichen wird dann dem Eingabefeld, das den Focus hat zugefgt.
+ */
+ virtual void slotN();
+ virtual void slotA();
+ virtual void slotE();
+ virtual void slotI();
+ virtual void slotO();
+ virtual void slotU();
+
+private:
+ /** Der Zeiger auf das Dokumenten-Objekt des Programmes. */
+ spanishVerbList liste;
+ spanishVerbList::Iterator position;
+ /** changed zeigt an, ob etwas gendert wurde. */
+ bool changed;
+ /** Are pointers to the GUI elements for an easier use */
+ QLineEdit* formEdit[6][MAX_TIEMPOS];
+};
+
+#endif
diff --git a/kverbos/kverbos/kfeeder16.png b/kverbos/kverbos/kfeeder16.png
new file mode 100644
index 00000000..70a99207
--- /dev/null
+++ b/kverbos/kverbos/kfeeder16.png
Binary files differ
diff --git a/kverbos/kverbos/kfeedercontrol.cpp b/kverbos/kverbos/kfeedercontrol.cpp
new file mode 100644
index 00000000..daa4b9ab
--- /dev/null
+++ b/kverbos/kverbos/kfeedercontrol.cpp
@@ -0,0 +1,140 @@
+/***************************************************************************
+ kfeedercontrol.cpp - description
+ -------------------
+ begin : Wed Apr 17 2002
+ copyright : (C) 2002 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 "kfeedercontrol.h"
+
+#include <kapplication.h>
+#include <kstandarddirs.h>
+
+KFeederControl::KFeederControl(int ID, bool splash, bool automatic)
+{
+ QString f = KStandardDirs::findExe("kfeeder");
+ QString s;
+ s.setNum(ID);
+ childFeeder << f;
+ if (splash)
+ childFeeder << "-s" << "yes";
+ else
+ childFeeder << "-s" << "no";
+ if (automatic)
+ childFeeder << "-m" << "automatic";
+ else
+ childFeeder << "-m" << "triggered";
+ if (!childFeeder.start())
+ active = false;
+ else
+ {
+ feederID.setNum(childFeeder.pid());
+ feederID = "KFeeder-" + feederID;
+
+ dcop = kapp->dcopClient();
+ dcop->attach();
+ appId = dcop->registerAs("KVerbos");
+ active = true;
+ };
+}
+
+KFeederControl::~KFeederControl()
+{
+}
+
+// resets the KFeeder
+bool KFeederControl::reset()
+{
+ if (active)
+ {
+ QByteArray data; // "raw support" for data
+ QDataStream arg(data, IO_WriteOnly); // "container" provides
+ // easy access to data
+ int a_number = 1;
+ arg << a_number; // put information on the
+ // "support" in the "container"
+ lastResult = dcop->send(feederID, // identify the recipient
+ "kfeeder", //hierarchically designate
+ // the targeted object
+ "reset()", // signature of the method
+ // that will handle sent data
+ data); // the data
+ };
+ return active && lastResult;
+}
+
+bool KFeederControl::addOne()
+{
+ if (active)
+ {
+ QByteArray data; // "raw support" for data
+ QDataStream arg(data, IO_WriteOnly); // "container" provides
+ // easy access to data
+ int a_number = 1;
+ arg << a_number; // put information on the
+ // "support" in the "container"
+ lastResult = dcop->send(feederID, // identify the recipient
+ "kfeeder", //hierarchically designate
+ // the targeted object
+ "addOne()", // signature of the method
+ // that will handle sent data
+ data); // the data
+ };
+ return active && lastResult;
+}
+
+bool KFeederControl::addN(int n)
+{
+ if (active)
+ {
+ QByteArray data; // "raw support" for data
+ QDataStream arg(data, IO_WriteOnly); // "container" provides
+ // easy access to data
+ int a_number = n;
+ arg << a_number; // put information on the
+ // "support" in the "container"
+ lastResult = dcop->send(feederID, // identify the recipient
+ "kfeeder", // hierarchically designate
+ // the targeted object
+ "addN(int)", // signature of the method
+ // that will handle sent data
+ data); // the data
+ };
+ return active && lastResult;
+}
+
+// sets the type of food movement. 'true' the food is moved automatically.
+// 'false' it is necessary to trigger the food movement. */
+bool KFeederControl::setAutomatic(bool a)
+{
+ if (active)
+ {
+ QByteArray data; // "raw support" for data
+ QDataStream arg(data, IO_WriteOnly); // "container" provides
+ // easy access to data
+ int num;
+ if (a)
+ num = 1; // put information on the
+ else
+ num = 0;
+ arg << num;
+ // "support" in the "container"
+ lastResult = dcop->send(feederID, // identify the recipient
+ "kfeeder", //hierarchically designate
+ // the targeted object
+ "setAutomatic(int)", // signature of the method
+ // that will handle sent data
+ data); // the data
+ };
+ return active && lastResult;
+}
diff --git a/kverbos/kverbos/kfeedercontrol.h b/kverbos/kverbos/kfeedercontrol.h
new file mode 100644
index 00000000..9617aa18
--- /dev/null
+++ b/kverbos/kverbos/kfeedercontrol.h
@@ -0,0 +1,58 @@
+/***************************************************************************
+ kfeedercontrol.h - description
+ -------------------
+ begin : Wed Apr 17 2002
+ copyright : (C) 2002 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KFEEDERCONTROL_H
+#define KFEEDERCONTROL_H
+
+#include <kprocess.h>
+#include <dcopclient.h>
+
+
+/** This class is used to control the KFeeder.
+ *@author Arnold Kraschinski
+ */
+
+class KFeederControl {
+public:
+ KFeederControl(int ID, bool splash, bool automatic);
+ ~KFeederControl();
+ /** resets the KFeeder */
+ bool reset();
+ /** sets the type of food movement. 'true' the food is moved automatically.
+ * 'false' it is necessary to trigger the food movement. */
+ bool setAutomatic(bool a);
+ /** sends one Point to the KFeeder */
+ bool addOne();
+ /** sends n points to the KFeeder */
+ bool addN(int n);
+ /** returns if the KProcess is still active. This is useful right after the start to
+ * see if it was successful
+ */
+ bool isActive() { return active; }
+ /** returns the last result of the latest dcop operation */
+ bool getLastResult() { return lastResult; }
+private:
+ KProcess childFeeder;
+ QCString feederID;
+ bool active;
+ bool lastResult;
+
+ QCString appId;
+ DCOPClient* dcop;
+};
+
+#endif
diff --git a/kverbos/kverbos/kresult.cpp b/kverbos/kverbos/kresult.cpp
new file mode 100644
index 00000000..eeaedb6b
--- /dev/null
+++ b/kverbos/kverbos/kresult.cpp
@@ -0,0 +1,95 @@
+/***************************************************************************
+ kresult.cpp - description
+ -------------------
+ begin : Sat Jan 5 2002
+ copyright : (C) 2002 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 "kresult.h"
+#include <qlabel.h>
+#include <qtable.h>
+#include <qlistview.h>
+#include <qvaluestack.h>
+
+#include <klocale.h>
+
+KResult::KResult(KVerbosUser* pU, QWidget* parent, const char* name, bool modal, WFlags fl )
+: QResult(parent, name, modal, fl)
+{
+ int sessions;
+ QString date[10];
+ int result[10][2];
+ pU->getResults(sessions, date, result);
+ QString s;
+ s.setNum(sessions);
+ TextLabelSessions->setText(s);
+ TextLabelUser->setText(pU->getName());
+ TableResult->horizontalHeader()->setLabel(1, i18n("trained"));
+ TableResult->horizontalHeader()->setLabel(2, i18n("correct in %"));
+ TableResult->horizontalHeader()->setLabel(0, i18n("date"));
+ for (int row=0; row<10; row++)
+ {
+ TableResult->setText(row, 0, date[row]);
+ TableResult->setText(row, 1, s.setNum(result[row][1])+i18n(" verbs"));
+ TableResult->setText(row, 2, s.setNum(result[row][0])+"%");
+ };
+ TableResult->adjustColumn(0);
+ TableResult->adjustColumn(1);
+ TableResult->adjustColumn(2);
+
+ // Die Spaltenbreiten anpassen
+ ListViewVerben->setColumnWidthMode(0, QListView::Maximum);
+ ListViewVerben->setColumnWidthMode(1, QListView::Maximum);
+
+ verbenListe* pVL = pU->getListe();
+ verbenListe::Iterator it;
+ QValueStack<QString> right;
+ QValueStack<QString> wrong;
+ for (it = pVL->begin(); it!=pVL->end(); ++it)
+ {
+ if ((*it).status == RICHTIGGEMACHT)
+ right.push((*it).verb);
+ else
+ if ((*it).status == FEHLERHAFT)
+ wrong.push((*it).verb);
+ };
+ while (!right.isEmpty() && !wrong.isEmpty())
+ {
+ QListViewItem* pItem;
+ pItem = new QListViewItem( ListViewVerben, right.pop(), wrong.pop());
+ ListViewVerben->insertItem(pItem);
+ };
+ while (!right.isEmpty())
+ {
+ QListViewItem* pItem;
+ pItem = new QListViewItem( ListViewVerben, right.pop(), "");
+ ListViewVerben->insertItem(pItem);
+ };
+ while (!wrong.isEmpty())
+ {
+ QListViewItem* pItem;
+ pItem = new QListViewItem( ListViewVerben, "", wrong.pop());
+ ListViewVerben->insertItem(pItem);
+ };
+}
+
+KResult::~KResult()
+{
+}
+
+void KResult::slotDlgEnde()
+{
+ done(0);
+}
+
+
diff --git a/kverbos/kverbos/kresult.h b/kverbos/kverbos/kresult.h
new file mode 100644
index 00000000..bcf54f97
--- /dev/null
+++ b/kverbos/kverbos/kresult.h
@@ -0,0 +1,39 @@
+/***************************************************************************
+ kresult.h - description
+ -------------------
+ begin : Sat Jan 5 2002
+ copyright : (C) 2002 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KRESULT_H
+#define KRESULT_H
+
+#include "qresult.h"
+#include "kverbosuser.h"
+
+/**In a dialog window the number of training sessions and the results of the
+ *latest 10 sessions in progress bars are displayed.
+ *@author Arnold Kraschinski
+ */
+
+class KResult : public QResult {
+public:
+ KResult(KVerbosUser* pU, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~KResult();
+public slots:
+ /** Wird durch den OK-Button aufgerufen und beendet den Dialog.
+ */
+ virtual void slotDlgEnde();
+};
+
+#endif
diff --git a/kverbos/kverbos/kstartuplogo.cpp b/kverbos/kverbos/kstartuplogo.cpp
new file mode 100644
index 00000000..40569b0b
--- /dev/null
+++ b/kverbos/kverbos/kstartuplogo.cpp
@@ -0,0 +1,42 @@
+/***************************************************************************
+ kstartuplogo.cpp - description
+ -------------------
+ begin : Fri Dec 14 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 "kstartuplogo.h"
+#include <kapplication.h>
+#include <kstandarddirs.h>
+#include <kglobalsettings.h>
+
+KStartupLogo::KStartupLogo(QWidget * parent, const char *name)
+: QWidget(parent,name,WStyle_Customize | WStyle_NoBorder )
+{
+ QPixmap pm;
+ pm.load(locate("appdata", "pics/startuplogo.png"));
+ setBackgroundPixmap(pm);
+ QRect desk = KGlobalSettings::splashScreenDesktopGeometry();
+ setGeometry(desk.center().x()-pm.width()/2, desk.center().y()-pm.height()/2,
+ pm.width(),pm.height());
+}
+
+KStartupLogo::~KStartupLogo(){
+}
+
+bool KStartupLogo::event(QEvent* ev){
+ raise();
+ return QWidget::event(ev);
+}
+
+#include "kstartuplogo.moc"
diff --git a/kverbos/kverbos/kstartuplogo.h b/kverbos/kverbos/kstartuplogo.h
new file mode 100644
index 00000000..792e9272
--- /dev/null
+++ b/kverbos/kverbos/kstartuplogo.h
@@ -0,0 +1,37 @@
+/***************************************************************************
+ kstartuplogo.h - description
+ -------------------
+ begin : Fri Dec 14 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSTARTUPLOGO_H
+#define KSTARTUPLOGO_H
+
+#include <qwidget.h>
+
+/**This class creates the splash screen at the beginning of the program.
+ *@author Arnold Kraschinski
+ */
+
+class KStartupLogo : public QWidget {
+ Q_OBJECT
+public:
+ KStartupLogo(QWidget *parent=0, const char *name=0);
+ ~KStartupLogo();
+protected:
+ virtual bool event(QEvent*);
+};
+
+
+#endif
diff --git a/kverbos/kverbos/kverbedit.cpp b/kverbos/kverbos/kverbedit.cpp
new file mode 100644
index 00000000..b0d4352e
--- /dev/null
+++ b/kverbos/kverbos/kverbedit.cpp
@@ -0,0 +1,152 @@
+/***************************************************************************
+ kverbedit.cpp - description
+ -------------------
+ begin : Sat Dec 15 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 <qlistview.h>
+
+#include "kverbedit.h"
+#include "kerfassen.h"
+
+/** An die Dialogklasse wird direkt der Zeiger auf die Verbliste bergeben, damit
+ * die Liste der Verben bearbeitet werden kann. Zu Beginn mssen alle Verben
+ * aus der Liste in eine dialogeigene Liste und die QListView bertragen werden.
+ */
+KVerbEdit::KVerbEdit(spanishVerbList& l, QWidget* parent /*= 0*/, const char* name /*= 0*/, bool modal /*= FALSE*/, WFlags fl /*= 0*/)
+: QVerbEdit(parent, name, modal, fl), list(l)
+{
+ // Die Spaltenbreiten anpassen
+ ListView1->setColumnWidthMode(0, QListView::Manual);
+ ListView1->setColumnWidthMode(1, QListView::Manual);
+ int br = width() / 20 * 9;
+ QString brstr;
+ brstr.setNum(br);
+ ListView1->setColumnWidth(0, br);
+ ListView1->setColumnWidth(1, br);
+ // Eine Kopie der Liste erstellen und die Liste in die Ansicht bringen
+ changed = false;
+ listToView();
+}
+
+KVerbEdit::~KVerbEdit()
+{
+}
+
+// kopiert die Liste in die ListView.
+void KVerbEdit::listToView()
+{
+ ListView1->clear();
+ if (!list.isEmpty())
+ {
+ spanishVerbList::Iterator it;
+ for (it = list.begin(); it != list.end(); ++it)
+ {
+ QListViewItem* pItem;
+ pItem = new QListViewItem( ListView1, (*it).getSpanish(), (*it).getForeign());
+ ListView1->insertItem(pItem);
+ };
+ };
+}
+
+
+// !!SLOTS!! Ab hier werden die slots der Klasse implementiert. !!SLOTS!!
+
+// Wird durch den OK-Button aufgerufen und beendet den Dialog.
+// �derungen werden bernommen.
+void KVerbEdit::slotDlgEnde()
+{
+ done(0);
+}
+
+// Wird durch den Cancel-Button aufgerufen und beendet den Dialog ohne
+// �derungen zu bernehmen.
+void KVerbEdit::slotCancel()
+{
+ done(0);
+}
+
+// Ein Verb in der Liste bearbeiten oder neue Verben in die Liste aufnehmen.
+// Feststellen welches Verb in der Liste markiert ist und dieses Verb aus der Liste suchen.
+// An den Dialog wird ein Listeniterator bergeben.
+void KVerbEdit::slotEditVerb()
+{
+ QListViewItem* pi = ListView1->selectedItem();
+ // it's a sorted list, so binary search works.
+ // v is not a real verb it is only used for the search. v doesn't have any forms but
+ // that isn't important to compare.
+ int m = -1;
+ if (pi != 0)
+ {
+ verbSpanish v;
+ v.setSpanish(pi->text(0));
+ v.setForeign(pi->text(1));
+ int left = 0;
+ int right = list.count() -1;
+ m = 0;
+ while (!(v == list[m])&&(left <= right))
+ {
+ m = (left + right) / 2;
+ if (v < list[m])
+ {
+ right = m - 1;
+ }
+ else
+ {
+ left = m + 1;
+ };
+ };
+ // It shouldn't occur that the verb doesn't exist.
+ if (!(v == list[m]))
+ m = -1;
+ };
+ KErfassen* pDlgErfassen = new KErfassen(list, m, this, "erfassen", true);
+ pDlgErfassen->exec();
+ changed = changed || pDlgErfassen->wasChanged();
+ if (pDlgErfassen->wasChanged())
+ {
+ list = pDlgErfassen->getList();
+ listToView();
+ };
+ delete pDlgErfassen;
+ pDlgErfassen = 0;
+}
+
+// Das in der Listenansicht ausgew�lte Verb wird gel�cht.
+void KVerbEdit::slotDelete()
+{
+ QListViewItem* pi = ListView1->selectedItem();
+ if (0 != pi)
+ {
+ // Das Listenelement hersuchen
+ bool found = false;
+ spanishVerbList::Iterator it = list.begin();
+ while ((it != list.end()) && (!found))
+ {
+ if (((*it).getSpanish() == pi->text(0)) && ((*it).getForeign() == pi->text(1)))
+ {
+ found = true;
+ }
+ else
+ it++;
+ };
+ if (found)
+ {
+ list.remove(it);
+ // Das Verb auch aus der Listenansicht streichen
+ ListView1->takeItem(pi);
+ changed = true;
+ };
+ };
+}
diff --git a/kverbos/kverbos/kverbedit.h b/kverbos/kverbos/kverbedit.h
new file mode 100644
index 00000000..23057ed1
--- /dev/null
+++ b/kverbos/kverbos/kverbedit.h
@@ -0,0 +1,74 @@
+/***************************************************************************
+ kverbedit.h - description
+ -------------------
+ begin : Sat Dec 15 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KVERBEDIT_H
+#define KVERBEDIT_H
+
+#include "qverbedit.h"
+#include "kverbosdoc.h"
+
+/**
+ * In dieser Klasse geht es darum die Liste der Verben zu editieren, nicht
+ * gewnschte Eintragungen zu lschen, weitere Eintragungen zu ergnzen
+ * nderungen an den Eintragungen vorzunehmen.
+ *
+ *@author Arnold Kraschinski
+ */
+
+class KVerbEdit : public QVerbEdit {
+public:
+ /** An die Dialogklasse wird direkt die Verbliste bergeben, damit
+ * die Liste der Verben bearbeitet werden kann.
+ */
+ KVerbEdit(spanishVerbList& l, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0);
+ ~KVerbEdit();
+ /** kopiert die Liste in die ListView. */
+ void listToView();
+ /** Die Liste aus der Dialogklasse holen. */
+ spanishVerbList getList() { return list; }
+ /** returns if the list in the dialog has been changed */
+ bool wasChanged() const { return changed; }
+
+public slots:
+ /** Wird durch den OK-Button aufgerufen und beendet den Dialog. nderungen
+ * werden bernommen.
+ */
+ virtual void slotDlgEnde();
+ /** Wird durch den Cancel-Button aufgerufen und beendet den Dialog ohne
+ * nderungen zu bernehmen.
+ */
+ virtual void slotCancel();
+ /** Ist ein Verb in der Listenansicht ausgewhlt, dann wird der Dialog
+ * KErfassen mit diesem Verb gestartet, ansonsten leer. Es knnen neue
+ * Verben eingegeben werden oder alte verndert werden.
+ */
+ virtual void slotEditVerb();
+ /** Das in der Listenansicht ausgewhlte Verb wird gelscht. */
+ virtual void slotDelete();
+
+private:
+ /** Der Zeiger auf die Liste im Dokument.
+ */
+ spanishVerbList list;
+ /** zeigt an, ob der momentane Inhalt der Felder des Dialoges schon
+ * in die Liste aufgenommen wurde, das ist wichtig, um beim Schlieen
+ * keine Informationen zu verlieren.
+ */
+ bool changed;
+};
+
+#endif
diff --git a/kverbos/kverbos/kverbos.cpp b/kverbos/kverbos/kverbos.cpp
new file mode 100644
index 00000000..2a5198cf
--- /dev/null
+++ b/kverbos/kverbos/kverbos.cpp
@@ -0,0 +1,757 @@
+/***************************************************************************
+ kverbos.cpp - description
+ -------------------
+ begin : Fre Dez 14 19:28:09 CET 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 files for QT
+#include <qprinter.h>
+#include <qcheckbox.h>
+#include <qradiobutton.h>
+
+// include files for KDE
+#include <kfiledialog.h>
+#include <kinputdialog.h>
+#include "kstartuplogo.h"
+#include <kstandarddirs.h>
+#include <kstatusbar.h>
+
+// application specific includes
+#include "kverbos.h"
+#include "kverbosview.h"
+
+// my includes
+#include "kerfassen.h"
+#include "kverbedit.h"
+#include "kverbosoptions.h"
+#include "kresult.h"
+#include "kfeedercontrol.h"
+#include "prefs.h"
+
+// ID Nummern fr die Statuszeile
+#define ID_STATUS_MSG 1
+#define ID_TRAINED_MSG 2
+#define ID_CORRECT_MSG 3
+#define ID_VERBS_MSG 4
+#define ID_USERNAME_MSG 5
+
+int KVerbosApp::kverbosCounter = 0;
+
+KVerbosApp::KVerbosApp(QWidget* , const char* name):KMainWindow (0, name)
+{
+ // als erstes das Logo starten
+ KStartupLogo* start_logo = new KStartupLogo(0);
+ start_logo->show();
+ start_logo->raise();
+
+ // die Instanzen von kverbos zhlen
+ kverbosCounter++;
+
+ config=kapp->config();
+
+ ///////////////////////////////////////////////////////////////////
+ // call inits to invoke all other construction parts
+ initStatusBar();
+ initActions();
+ initDocument();
+ initView();
+
+ readOptions();
+
+ ///////////////////////////////////////////////////////////////////
+ // disable actions at startup
+ // Mir ist nicht klar, warum die Autoren des Frameworks diese
+ // Menuoptionen deaktivieren.
+ // Ich werde hier jedenfalls gleich einmal einige auskommentieren.
+ // fileSave->setEnabled(false);
+ // fileSaveAs->setEnabled(false);
+ filePrint->setEnabled(false);
+ editCut->setEnabled(false);
+ editCopy->setEnabled(false);
+ editPaste->setEnabled(false);
+ userResults->setEnabled(false);
+
+ // El programa ha ledo las opciones del programa. Entonces puedo iniciar el objeto
+ // por la control de KFeeder.
+ if (useKFeeder)
+ {
+ kfeederControl = new KFeederControl(kverbosCounter, showKFeederSplash, automaticKFeeder);
+ useKFeeder = kfeederControl->isActive();
+ if (!useKFeeder)
+ {
+ // the KFeeder didn't start so it isn't installed. Delete the control object
+ delete kfeederControl;
+ kfeederControl = 0;
+ };
+ }
+ else
+ kfeederControl = 0;
+
+ // das Logo wieder lschen
+ delete start_logo;
+}
+
+KVerbosApp::~KVerbosApp()
+{
+ // den Instanzenzhler zurcksetzen
+ kverbosCounter--;
+ if (kfeederControl)
+ {
+ disconnect(view, SIGNAL(informKFeeder(int)), this, SLOT(slotFeedIt(int)));
+ delete kfeederControl;
+ kfeederControl = 0;
+ };
+}
+
+void KVerbosApp::initActions()
+{
+ fileNewWindow = new KAction(i18n("New &Window"), "window_new.png", 0, this, SLOT(slotFileNewWindow()), actionCollection(),"file_new_window");
+ fileNew = KStdAction::openNew(this, SLOT(slotFileNew()), actionCollection());
+ fileOpen = KStdAction::open(this, SLOT(slotFileOpen()), actionCollection());
+ fileOpenRecent = KStdAction::openRecent(this, SLOT(slotFileOpenRecent(const KURL&)), actionCollection());
+ fileOpenStandard = new KAction(i18n("Open &Standard Verb File"), "fileopen.png", 0, this, SLOT(slotFileOpenStandard()), actionCollection(),"file_open_standard");
+ fileSave = KStdAction::save(this, SLOT(slotFileSave()), actionCollection());
+ fileSaveAs = KStdAction::saveAs(this, SLOT(slotFileSaveAs()), actionCollection());
+ fileClose = KStdAction::close(this, SLOT(slotFileClose()), actionCollection());
+ filePrint = KStdAction::print(this, SLOT(slotFilePrint()), actionCollection());
+ fileQuit = KStdAction::quit(this, SLOT(slotFileQuit()), actionCollection());
+ editCut = KStdAction::cut(this, SLOT(slotEditCut()), actionCollection());
+ editCopy = KStdAction::copy(this, SLOT(slotEditCopy()), actionCollection());
+ editPaste = KStdAction::paste(this, SLOT(slotEditPaste()), actionCollection());
+ editErfassen = new KAction(i18n("E&nter New Verb..."), 0, 0, this, SLOT(slotEditErfassen()), actionCollection(),"edit_erfassen");
+ editBearbeiten = new KAction(i18n("&Edit Verb List..."), 0, 0, this, SLOT(slotEditBearbeiten()), actionCollection(), "edit_bearbeiten");
+
+ settingOptions = new KAction(i18n("&Configure KVerbos..."), 0, 0, this, SLOT(slotSettingsOptions()), actionCollection(), "settings_options");
+ userUsername = new KAction(i18n("&Username..."), 0, 0, this, SLOT(slotSettingsUsername()), actionCollection(), "user_username");
+ userResults = new KAction(i18n("&Results"), 0, 0, this, SLOT(slotUserResults()), actionCollection(), "user_results");
+
+ fileNewWindow->setToolTip(i18n("Opens a new application window"));
+ fileOpenStandard->setToolTip(i18n("Opens the standard KVerbos verb file"));
+ fileNew->setToolTip(i18n("Creates a new document"));
+ fileOpen->setToolTip(i18n("Opens an existing document"));
+ fileOpenRecent->setToolTip(i18n("Opens a recently used file"));
+ fileSave->setToolTip(i18n("Saves the actual document"));
+ fileSaveAs->setToolTip(i18n("Saves the actual document as..."));
+ fileClose->setToolTip(i18n("Closes the actual document"));
+ filePrint ->setToolTip(i18n("Prints out the actual document"));
+ fileQuit->setToolTip(i18n("Quits the application"));
+ editCut->setToolTip(i18n("Cuts the selected section and puts it to the clipboard"));
+ editCopy->setToolTip(i18n("Copies the selected section to the clipboard"));
+ editPaste->setToolTip(i18n("Pastes the clipboard contents to actual position"));
+ editErfassen->setToolTip(i18n("Add new verbs."));
+ editBearbeiten->setToolTip(i18n("Edit the list of verbs."));
+ settingOptions->setToolTip(i18n("Change some options of the program"));
+ userUsername->setToolTip(i18n("Enter your name as the username"));
+ userResults->setToolTip(i18n("These are your latest results."));
+
+ // icons
+ editBearbeiten->setIcon("edit.png");
+ editErfassen->setIcon("editclear.png");
+ settingOptions->setIcon("configure.png");
+ userUsername->setIcon("kverbosuser.png");
+ userResults->setIcon("kverbosuser.png");
+
+ setupGUI();
+}
+
+
+void KVerbosApp::initStatusBar()
+{
+ ///////////////////////////////////////////////////////////////////
+ // STATUSBAR
+ // TODO: add your own items you need for displaying current application status.
+ statusBar()->insertItem(i18n("Ready."), ID_STATUS_MSG);
+ statusBar()->insertItem(i18n("Trained: 0"), ID_TRAINED_MSG);
+ statusBar()->insertItem(i18n("Correct: 0"), ID_CORRECT_MSG);
+ statusBar()->insertItem(i18n("Number of verbs: 0"), ID_VERBS_MSG);
+ statusBar()->insertItem(i18n("User: nobody"), ID_USERNAME_MSG);
+}
+
+void KVerbosApp::initDocument()
+{
+ doc = new KVerbosDoc(this);
+ doc->newDocument();
+ connect(doc, SIGNAL(anzahlVerbenGeaendert(int)), this, SLOT(slotStatusVerbMsg(int)));
+ connect(this, SIGNAL(testAnzahl(int)), this, SLOT(slotStatusVerbMsg(int)));
+}
+
+void KVerbosApp::initView()
+{
+ ////////////////////////////////////////////////////////////////////
+ // create the main widget here that is managed by KTMainWindow's view-region and
+ // connect the widget to your document to display document contents.
+
+ view = new KVerbosView(this);
+ doc->addView(view);
+ setCentralWidget(view);
+ setCaption(doc->URL().fileName(),false);
+ //
+ connect(view, SIGNAL(numberTrainedChanged(int)), this, SLOT(slotStatusTrainedMsg(int)));
+ connect(view, SIGNAL(numberCorrectChanged(int)), this, SLOT(slotStatusCorrectMsg(int)));
+ connect(view, SIGNAL(informKFeeder(int)), this, SLOT(slotFeedIt(int)));
+}
+
+void KVerbosApp::openDocumentFile(const KURL& url)
+{
+ slotStatusMsg(i18n("Opening file..."));
+
+ doc->openDocument( url);
+ fileOpenRecent->addURL( url );
+ slotStatusMsg(i18n("Ready."));
+}
+
+
+KVerbosDoc* KVerbosApp::getDocument() const
+{
+ return doc;
+}
+
+void KVerbosApp::saveOptions()
+{
+ fileOpenRecent->saveEntries(config,"Recent Files");
+
+ // Meine eigenen Optionen
+ // Die zum Lernen ausgewhlten Zeiten
+ config->setGroup("tiempos");
+ QString key;
+ for (int i = presente; i<MAX_TIEMPOS; i++)
+ {
+ key.setNum(i);
+ QString options = timeOptions[i][0] ? "true " : "false ";
+ options = timeOptions[i][1] ? options + "true " : options + "false ";
+ options = timeOptions[i][2] ? options + "true" : options + "false";
+ config->writeEntry(key, options);
+ };
+ // den Korrekturmodus abspeichern
+ config->setGroup("correction mode");
+ config->writeEntry("strict", correctStrict);
+ // Abspeichern, ob der KFeeder benutzt werden soll
+ config->setGroup("use of KFeeder");
+ config->writeEntry("kfeeder", useKFeeder);
+ config->writeEntry("kfeederSplash", showKFeederSplash);
+ config->writeEntry("kfeederAutomatic", automaticKFeeder);
+}
+
+
+void KVerbosApp::readOptions()
+{
+ // initialize the recent file list
+ fileOpenRecent->loadEntries(config,"Recent Files");
+
+ // Meine eigenen Optionen
+ // Die zum Lernen ausgewhlten Zeiten
+ config->setGroup("tiempos");
+ QString key;
+ for (int i = presente; i<MAX_TIEMPOS; i++)
+ {
+ key.setNum(i);
+ QString options = config->readEntry ( key, "true false false");
+ int pos1 = 0;
+ int pos2 = options.find (' ', pos1, false);
+ timeOptions[i][0] = (options.left(pos2) == "true") ? true : false;
+ pos1 = pos2 + 1;
+ pos2 = options.find (' ', pos1, false);
+ timeOptions[i][1] = (options.mid(pos1,pos2-pos1) == "true") ? true : false;
+ timeOptions[i][2] = (options.right(options.length()-pos2-1) == "true") ? true : false;
+ };
+ // Solange einige Zeiten nicht fertig sind werden die hier auf false gesetzt.
+ /*TODO*/
+ for (int i = subPresente; i<MAX_TIEMPOS; i++)
+ {
+ timeOptions[i][0] = false;
+ timeOptions[i][1] = false;
+ timeOptions[i][2] = false;
+ };
+ // Korrekturmodus
+ config->setGroup("correction mode");
+ correctStrict = config->readBoolEntry("strict", false);
+ // Nutzung des KFeeders
+ config->setGroup("use of KFeeder");
+ useKFeeder = config->readBoolEntry("kfeeder", true);
+ showKFeederSplash = config->readBoolEntry("kfeederSplash", false);
+ automaticKFeeder = config->readBoolEntry("kfeederAutomatic", true);
+}
+
+void KVerbosApp::saveProperties(KConfig *_cfg)
+{
+ if(doc->URL().fileName()!=i18n("Untitled") && !doc->isModified())
+ {
+ // saving to tempfile not necessary
+
+ }
+ else
+ {
+ KURL url=doc->URL();
+ _cfg->writePathEntry("filename", url.url());
+ _cfg->writeEntry("modified", doc->isModified());
+ QString tempname = kapp->tempSaveName(url.url());
+ QString tempurl= KURL::encode_string(tempname);
+ KURL _url(tempurl);
+ doc->saveDocument(_url);
+ }
+}
+
+
+void KVerbosApp::readProperties(KConfig* _cfg)
+{
+ QString filename = _cfg->readPathEntry("filename");
+ KURL url(filename);
+ bool modified = _cfg->readBoolEntry("modified", false);
+ if(modified)
+ {
+ bool canRecover;
+ QString tempname = kapp->checkRecoverFile(filename, canRecover);
+ KURL _url(tempname);
+ if(canRecover)
+ {
+ doc->openDocument(_url);
+ doc->setModified();
+ setCaption(_url.fileName(),true);
+ QFile::remove(tempname);
+ }
+ }
+ else
+ {
+ if(!filename.isEmpty())
+ {
+ doc->openDocument(url);
+ setCaption(url.fileName(),false);
+ }
+ }
+}
+
+bool KVerbosApp::queryClose()
+{
+ return doc->saveModified();
+}
+
+bool KVerbosApp::queryExit()
+{
+ saveOptions();
+ return true;
+}
+
+/////////////////////////////////////////////////////////////////////
+// SLOT IMPLEMENTATION
+/////////////////////////////////////////////////////////////////////
+
+void KVerbosApp::slotFileNewWindow()
+{
+ slotStatusMsg(i18n("Opening a new application window..."));
+
+ KVerbosApp *new_window= new KVerbosApp();
+ new_window->show();
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotFileNew()
+{
+ slotStatusMsg(i18n("Creating new document..."));
+
+ if(!doc->saveModified())
+ {
+ // here saving wasn't successful
+
+ }
+ else
+ {
+ doc->newDocument();
+ setCaption(doc->URL().fileName(), false);
+ }
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotFileOpen()
+{
+ slotStatusMsg(i18n("Opening file..."));
+
+ if(!doc->saveModified())
+ {
+ // here saving wasn't successful
+
+ }
+ else
+ {
+ KURL url=KFileDialog::getOpenURL(QString::null,
+ i18n("*|All Files"), this, i18n("Open File"));
+ if(!url.isEmpty())
+ {
+ doc->openDocument(url);
+ // Die zu bearbeitende Datei in dem Dokument setzen
+ doc->setURL(url);
+ setCaption(url.fileName(), false);
+ fileOpenRecent->addURL( url );
+ }
+ }
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotFileOpenRecent(const KURL& url)
+{
+ slotStatusMsg(i18n("Opening file..."));
+
+ if(!doc->saveModified())
+ {
+ // here saving wasn't successful
+ }
+ else
+ {
+ doc->openDocument(url);
+ doc->setURL(url);
+ setCaption(url.fileName(), false);
+ }
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotFileOpenStandard()
+{
+ slotStatusMsg(i18n("Opening file..."));
+ QString userLanguage = Prefs::userLanguage();
+ if(!doc->saveModified())
+ {
+ // here saving wasn't successful
+
+ }
+ else
+ {
+ KURL url(locate("appdata", "data/"+userLanguage+"/verbos.verbos"));
+ if(!url.isEmpty())
+ {
+ doc->openDocument(url);
+ // Die zu bearbeitende Datei in dem Dokument setzen
+ doc->setURL(url);
+ setCaption(url.fileName(), false);
+ fileOpenRecent->addURL( url );
+ }
+ }
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotFileSave()
+{
+ slotStatusMsg(i18n("Saving file..."));
+ if (doc->URL().fileName() == i18n("Untitled"))
+ {
+ // Hier liegt ein Fall vor, der zu "Save as ... " gehrt.
+ slotFileSaveAs();
+ }
+ else
+ {
+ doc->saveDocument(doc->URL());
+ };
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotFileSaveAs()
+{
+ slotStatusMsg(i18n("Saving file with a new filename..."));
+
+ KURL url=KFileDialog::getSaveURL(QDir::currentDirPath(),
+ i18n("*|All Files"), this, i18n("Save As"));
+ if(!url.isEmpty())
+ {
+ doc->saveDocument(url);
+ fileOpenRecent->addURL(url);
+ setCaption(url.fileName(),doc->isModified());
+ }
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotFileClose()
+{
+ slotStatusMsg(i18n("Closing file..."));
+
+ close();
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotFilePrint()
+{
+ slotStatusMsg(i18n("Printing..."));
+
+ QPrinter printer;
+ if (printer.setup(this))
+ {
+ view->print(&printer);
+ }
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotFileQuit()
+{
+ slotStatusMsg(i18n("Exiting..."));
+ saveOptions();
+ // close the first window, the list makes the next one the first again.
+ // This ensures that queryClose() is called on each window to ask for closing
+ KMainWindow* w;
+ // In der Dokumentation konnte ich leider nicht finden, wozu diese memberliste gut ist.
+ if(memberList)
+ {
+ for(w=memberList->first(); w!=0; w=memberList->next())
+ {
+ // only close the window if the closeEvent is accepted. If the user presses Cancel on the saveModified() dialog,
+ // the window and the application stay open.
+ if(!w->close())
+ break;
+ }
+ }
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotEditCut()
+{
+ slotStatusMsg(i18n("Cutting selection..."));
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotEditCopy()
+{
+ slotStatusMsg(i18n("Copying selection to clipboard..."));
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotEditPaste()
+{
+ slotStatusMsg(i18n("Inserting clipboard contents..."));
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+void KVerbosApp::slotStatusMsg(const QString &text)
+{
+ ///////////////////////////////////////////////////////////////////
+ // change status message permanently
+ statusBar()->clear();
+ statusBar()->changeItem(text, ID_STATUS_MSG);
+}
+
+// Gibt die Anzahl der Verben in der Statuszeile aus
+void KVerbosApp::slotStatusVerbMsg(int n)
+{
+ QString s;
+ s.setNum(n,10);
+ s = i18n("Number of verbs: ") + s;
+ statusBar()->changeItem(s, ID_VERBS_MSG);
+}
+
+// Gibt die Anzahl der gebten Verben in der Statuszeile aus.
+void KVerbosApp::slotStatusTrainedMsg(int n)
+{
+ QString s;
+ s.setNum(n,10);
+ s = i18n("Trained: ") + s;
+ statusBar()->changeItem(s, ID_TRAINED_MSG);
+}
+
+// Gibt die Anzahl der richtig gebten Verben aus.
+void KVerbosApp::slotStatusCorrectMsg(int n)
+{
+ QString s;
+ s.setNum(n,10);
+ s = i18n("Correct: ") + s;
+ statusBar()->changeItem(s, ID_CORRECT_MSG);
+}
+
+// ffnet einen Dialog mit dem neue Verben erfasst werden knnen.
+void KVerbosApp::slotEditErfassen()
+{
+ spanishVerbList* pList = getDocument()->getList();
+ KErfassen* pDlgErfassen = new KErfassen(*pList, -1, this, "erfassen", true);
+ pDlgErfassen->exec();
+ if (pDlgErfassen->wasChanged())
+ {
+ *pList = pDlgErfassen->getList();
+ doc->setModified();
+ };
+ delete pDlgErfassen;
+ pDlgErfassen = 0;
+ // Anzahl in der Statuszeile anpassen
+ emit testAnzahl(doc->getAnzahl());
+}
+
+// ffnet einen Dialog mit dem die Verbliste bearbeitet werden kann.
+void KVerbosApp::slotEditBearbeiten()
+{
+ KVerbEdit* pDlgEdit = new KVerbEdit(*(getDocument()->getList()), this, "edit the verbs", true);
+ pDlgEdit->exec();
+ if (pDlgEdit->wasChanged())
+ {
+ doc->setModified(true);
+ *(getDocument()->getList()) = pDlgEdit->getList();
+ }
+ delete pDlgEdit;
+ pDlgEdit = 0;
+ // Anzahl in der Statuszeile anpassen
+ emit testAnzahl(doc->getAnzahl());
+}
+
+void KVerbosApp::slotSettingsOptions()
+{
+ KVerbosOptions* pDlgEdit = new KVerbosOptions(this, "bearbeiten", true);
+ pDlgEdit->CheckBox1_1->setChecked(timeOptions[presente][0]);
+ pDlgEdit->CheckBox2_1->setChecked(timeOptions[presente][1]);
+ pDlgEdit->CheckBox3_1->setChecked(timeOptions[presente][2]);
+ //
+ pDlgEdit->CheckBox1_2->setChecked(timeOptions[1][0]);
+ pDlgEdit->CheckBox2_2->setChecked(timeOptions[1][1]);
+ pDlgEdit->CheckBox3_2->setChecked(timeOptions[1][2]);
+ //
+ pDlgEdit->CheckBox1_3->setChecked(timeOptions[2][0]);
+ pDlgEdit->CheckBox2_3->setChecked(timeOptions[2][1]);
+ //
+ pDlgEdit->CheckBox1_4->setChecked(timeOptions[3][0]);
+ pDlgEdit->CheckBox2_4->setChecked(timeOptions[3][1]);
+ pDlgEdit->CheckBox3_4->setChecked(timeOptions[3][2]);
+ //
+ pDlgEdit->CheckBox1_5->setChecked(timeOptions[4][0]);
+ pDlgEdit->CheckBox2_5->setChecked(timeOptions[4][1]);
+ pDlgEdit->CheckBox3_5->setChecked(timeOptions[4][2]);
+ //
+ pDlgEdit->CheckBox1_6->setChecked(timeOptions[5][0]);
+ pDlgEdit->CheckBox2_6->setChecked(timeOptions[5][1]);
+ pDlgEdit->CheckBox3_6->setChecked(timeOptions[5][2]);
+ //
+ pDlgEdit->CheckBox1_7->setChecked(timeOptions[6][0]);
+ pDlgEdit->CheckBox2_7->setChecked(timeOptions[6][1]);
+ pDlgEdit->CheckBox3_7->setChecked(timeOptions[6][2]);
+ //
+ pDlgEdit->CheckBox1_8->setChecked(timeOptions[subFuturo][0]);
+ pDlgEdit->CheckBox2_8->setChecked(timeOptions[subFuturo][1]);
+ pDlgEdit->CheckBox3_8->setChecked(timeOptions[subFuturo][2]);
+ //
+ pDlgEdit->CheckBox1_9->setChecked(timeOptions[imperativo][0]);
+ //
+ pDlgEdit->RadioStrictCorr->setChecked(correctStrict);
+ pDlgEdit->RadioIgnoreAcc->setChecked(!correctStrict);
+ //
+ pDlgEdit->CheckBoxKFeeder->setChecked(useKFeeder);
+ if (!useKFeeder)
+ {
+ pDlgEdit->CheckBoxSplash->setDisabled(true);
+ pDlgEdit->CheckBoxMode->setDisabled(true);
+ };
+ pDlgEdit->CheckBoxSplash->setChecked(showKFeederSplash);
+ pDlgEdit->CheckBoxMode->setChecked(automaticKFeeder);
+ //
+ if (pDlgEdit->exec() == 1)
+ {
+ timeOptions[presente][0] = pDlgEdit->CheckBox1_1->isChecked();
+ timeOptions[presente][1] = pDlgEdit->CheckBox2_1->isChecked();
+ timeOptions[presente][2] = pDlgEdit->CheckBox3_1->isChecked();
+ //
+ timeOptions[1][0] = pDlgEdit->CheckBox1_2->isChecked();
+ timeOptions[1][1] = pDlgEdit->CheckBox2_2->isChecked();
+ timeOptions[1][2] = pDlgEdit->CheckBox3_2->isChecked();
+ //
+ timeOptions[2][0] = pDlgEdit->CheckBox1_3->isChecked();
+ timeOptions[2][1] = pDlgEdit->CheckBox2_3->isChecked();
+ //
+ timeOptions[3][0] = pDlgEdit->CheckBox1_4->isChecked();
+ timeOptions[3][1] = pDlgEdit->CheckBox2_4->isChecked();
+ timeOptions[3][2] = pDlgEdit->CheckBox3_4->isChecked();
+ //
+ timeOptions[4][0] = pDlgEdit->CheckBox1_5->isChecked();
+ timeOptions[4][1] = pDlgEdit->CheckBox2_5->isChecked();
+ timeOptions[4][2] = pDlgEdit->CheckBox3_5->isChecked();
+ //
+ timeOptions[5][0] = pDlgEdit->CheckBox1_6->isChecked();
+ timeOptions[5][1] = pDlgEdit->CheckBox2_6->isChecked();
+ timeOptions[5][2] = pDlgEdit->CheckBox3_6->isChecked();
+ //
+ timeOptions[6][0] = pDlgEdit->CheckBox1_7->isChecked();
+ timeOptions[6][1] = pDlgEdit->CheckBox2_7->isChecked();
+ timeOptions[6][2] = pDlgEdit->CheckBox3_7->isChecked();
+ //
+ timeOptions[subFuturo][0] = pDlgEdit->CheckBox1_8->isChecked();
+ timeOptions[subFuturo][1] = pDlgEdit->CheckBox2_8->isChecked();
+ timeOptions[subFuturo][2] = pDlgEdit->CheckBox3_8->isChecked();
+ //
+ timeOptions[imperativo][0] = pDlgEdit->CheckBox1_9->isChecked();
+ //
+ correctStrict = pDlgEdit->RadioStrictCorr->isChecked();
+ //
+ showKFeederSplash = pDlgEdit->CheckBoxSplash->isChecked();
+ // testen ob die Art der Futteranimationen gendert werden soll. Diese soll nur gendert
+ // werden, wenn der KFeeder luft und auch weiterhin laufen soll.
+
+ if ((automaticKFeeder != pDlgEdit->CheckBoxMode->isChecked()) && useKFeeder &&
+ (pDlgEdit->CheckBoxKFeeder->isChecked() == true))
+ {
+ kfeederControl->setAutomatic(pDlgEdit->CheckBoxMode->isChecked());
+ };
+ automaticKFeeder = pDlgEdit->CheckBoxMode->isChecked();
+ // prfen, ob der KFeeder angehalten oder gestartet werden soll.
+ if ((pDlgEdit->CheckBoxKFeeder->isChecked() == true) && (!useKFeeder))
+ {
+ // kfeeder starten
+ if (kfeederControl == 0)
+ kfeederControl = new KFeederControl(kverbosCounter, showKFeederSplash, automaticKFeeder);
+ }
+ else
+ if ((pDlgEdit->CheckBoxKFeeder->isChecked() == false) && (useKFeeder))
+ {
+ // kfeeder anhalten
+ disconnect(view, SIGNAL(informKFeeder(int)), this, SLOT(slotFeedIt(int)));
+ delete kfeederControl;
+ kfeederControl = 0;
+ };
+ useKFeeder = pDlgEdit->CheckBoxKFeeder->isChecked();
+ };
+ delete pDlgEdit;
+ pDlgEdit = 0;
+}
+
+void KVerbosApp::getTimeOptions(bool op[][3])
+{
+ for (int i=0; i<MAX_TIEMPOS; i++)
+ for (int j=0; j<MAX_SUBTYPES; j++)
+ op[i][j] = timeOptions[i][j];
+}
+
+void KVerbosApp::slotSettingsUsername()
+{
+ bool ok;
+ QString n = KInputDialog::getText(i18n("Enter User Name"), i18n("Please enter your name:"),
+ QString::null , &ok, this).simplifyWhiteSpace();
+ if (ok)
+ {
+ statusBar()->changeItem(i18n("user: ") + n, ID_USERNAME_MSG);
+ doc->setNewUser(n);
+ userResults->setEnabled(true);
+ if (kfeederControl != 0)
+ kfeederControl->reset();
+ }
+}
+
+void KVerbosApp::slotUserResults()
+{
+ KResult* pDlgResult = new KResult(doc->getUser(), this, "username", true);
+ pDlgResult->exec();
+}
+
+void KVerbosApp::slotFeedIt(int n)
+{
+ if (useKFeeder && (kfeederControl != 0))
+ kfeederControl->addN(n);
+}
+
+#include "kverbos.moc"
diff --git a/kverbos/kverbos/kverbos.desktop b/kverbos/kverbos/kverbos.desktop
new file mode 100644
index 00000000..30777f4c
--- /dev/null
+++ b/kverbos/kverbos/kverbos.desktop
@@ -0,0 +1,75 @@
+# KDE Config File
+[Desktop Entry]
+Type=Application
+Exec=kverbos -caption "%c" %i %m
+Icon=kverbos
+DocPath=kverbos/index.html
+Comment=
+Comment[bn]=মন্তব্য
+Comment[sl]=Periodna tabela elementov
+Terminal=false
+Name=Kverbos
+Name[ar]=افعال ك
+Name[bn]=কে-ভার্বোস
+Name[hi]=के-वर्बोस
+Name[hr]=KVerbos
+Name[it]=KVerbos
+Name[ne]=केडीई भर्बोस
+Name[pt_BR]=KVerbos
+Name[ta]=கேவர்போஸ்
+GenericName=Study Spanish Verbforms
+GenericName[af]=Leer Spaanse Werkwoordvorme
+GenericName[ar]=دراسة تصريف الأفعال الأسبانيّة
+GenericName[be]=Вывучэнне іспанскіх дзеяслоўных формаў
+GenericName[bg]=Форми на глаголи на испански
+GenericName[bn]=স্প্যানিশ ক্রিয়ারূপ শিখুন
+GenericName[bs]=Naučite španske glagole
+GenericName[ca]=Estudia les formes verbals de l'espanyol
+GenericName[cs]=Španělské slovesné tvary
+GenericName[csb]=Ùczba zjinak szpańsczëch czasników
+GenericName[cy]=Astudio Berfau Sbaeneg
+GenericName[da]=Spanske verber
+GenericName[de]=Spanische Verbformen üben
+GenericName[el]=Μελετήστε Ισπανικά ρήματα
+GenericName[eo]=Studado de hispanaj verboformoj
+GenericName[es]=Estudiar las formas verbales del español
+GenericName[et]=Hispaania tegusõnade õppimine
+GenericName[eu]=Ikasi gaztelerako aditz-formak
+GenericName[fa]=بررسی شکل فعلهای اسپانیایی
+GenericName[fi]=Opiskele espanjan verbimuotoja
+GenericName[fr]=Étude des formes verbales espagnoles
+GenericName[ga]=Scrúdaigh briathra Spáinnise
+GenericName[gl]=Verbos do Castelán
+GenericName[he]=לימוד צורות פעלים בספרדית
+GenericName[hi]=स्टडी स्पेनिश वेबफ़ॉर्म
+GenericName[hr]=Učenje glagolskih oblika španjolskog jezika
+GenericName[hu]=Spanyol igeragozás
+GenericName[is]=Læra spánskar sagnir
+GenericName[it]=Studia i verbi spagnoli
+GenericName[ja]=スペイン語の動詞の活用を学習
+GenericName[ka]=ესპანურ ზმნათა ფორმების შესწავლა
+GenericName[km]=សិក្សា​ទម្រង់​ករិយាសព្ទ​អេស្ប៉ាញ
+GenericName[lt]=Ispanų kalbos veiksmažodžių formų studijavimas
+GenericName[mk]=Учете шпански глаголски форми
+GenericName[nb]=Studer spanske verbformer
+GenericName[nds]=Spaansche Verben lehren
+GenericName[ne]=स्पानिश क्रिया फर्म पढ्नुहोस्
+GenericName[nl]=Oefen Spaanse werkwoordvormen
+GenericName[nn]=Studer spansk verbbøying
+GenericName[pl]=Nauka odmiany hiszpańskich czasowników
+GenericName[pt]=Verbos em Espanhol
+GenericName[pt_BR]=Estudo das formas verbais do Espanhol
+GenericName[ru]=Изучение испанских глаголов
+GenericName[sk]=Štúdium slovesných foriem španielštiny
+GenericName[sl]=Učenje španskih glagolskih oblik
+GenericName[sr]=Учење шпанских глаголских облика
+GenericName[sr@Latn]=Učenje španskih glagolskih oblika
+GenericName[sv]=Studera spanska verbformer
+GenericName[ta]= ஸ்பானிஷ் வினை வடிவங்களை படி
+GenericName[tg]=Омӯзиши шаклҳои феълҳои испанӣ
+GenericName[tr]=İspanyolca Yüklem Biçimlerine Çalış
+GenericName[uk]=Вивчення форм іспанських дієслів
+GenericName[vi]=Học Dạng động từ Tây Ban Nha
+GenericName[zh_CN]=学习西班牙语动词形式
+GenericName[zh_TW]=學習西班牙語的動詞形態
+Categories=Qt;KDE;Education;Languages;
diff --git a/kverbos/kverbos/kverbos.h b/kverbos/kverbos/kverbos.h
new file mode 100644
index 00000000..b31bf12a
--- /dev/null
+++ b/kverbos/kverbos/kverbos.h
@@ -0,0 +1,249 @@
+/***************************************************************************
+ kverbos.h - description
+ -------------------
+ begin : Fre Dez 14 19:28:09 CET 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KVERBOS_H
+#define KVERBOS_H
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// include files for Qt
+
+// include files for KDE
+#include <kapplication.h>
+#include <kmainwindow.h>
+#include <kaction.h>
+
+// include files for the application
+#include "verbspanish.h"
+
+// forward declaration of the KVerbos classes
+class KVerbosDoc;
+class KVerbosView;
+class KErfassen;
+class KVerbEdit;
+class KFeederControl;
+
+/**
+ * The base class for KVerbos application windows. It sets up the main
+ * window and reads the config file as well as providing a menubar, toolbar
+ * and statusbar. An instance of KVerbosView creates your center view, which is connected
+ * to the window's Doc object.
+ * KVerbosApp reimplements the methods that KMainWindow provides for main window handling and supports
+ * full session management as well as using KActions.
+ * @see KMainWindow
+ * @see KApplication
+ * @see KConfig
+ *
+ * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.
+ * @version KDevelop version 1.2 code generation
+ */
+class KVerbosApp : public KMainWindow
+{
+ Q_OBJECT
+
+ friend class KVerbosView;
+
+ public:
+ /** construtor of KVerbosApp, calls all init functions to create the application.
+ */
+ KVerbosApp(QWidget* parent=0, const char* name=0);
+ ~KVerbosApp();
+ /** opens a file specified by commandline option
+ */
+ void openDocumentFile(const KURL& url/*=0*/);
+ /** returns a pointer to the current document connected to the KTMainWindow instance and is used by
+ * the View class to access the document object's methods
+ */
+ KVerbosDoc *getDocument() const;
+ /** returns the array with the time options
+ */
+ void getTimeOptions(bool op[][3]);
+ bool doitStrict() const { return correctStrict; }
+
+ protected:
+ /** save general Options like all bar positions and status as well as the geometry and the recent file list to the configuration
+ * file
+ */
+ void saveOptions();
+ /** read general Options again and initialize all variables like the recent file list
+ */
+ void readOptions();
+ /** initializes the KActions of the application */
+ void initActions();
+ /** sets up the statusbar for the main window by initialzing a statuslabel.
+ */
+ void initStatusBar();
+ /** initializes the document object of the main window that is connected to the view in initView().
+ * @see initView();
+ */
+ void initDocument();
+ /** creates the centerwidget of the KTMainWindow instance and sets it as the view
+ */
+ void initView();
+ /** queryClose is called by KTMainWindow on each closeEvent of a window. Against the
+ * default implementation (only returns true), this calles saveModified() on the document object to ask if the document shall
+ * be saved if Modified; on cancel the closeEvent is rejected.
+ * @see KTMainWindow#queryClose
+ * @see KTMainWindow#closeEvent
+ */
+ virtual bool queryClose();
+ /** queryExit is called by KTMainWindow when the last window of the application is going to be closed during the closeEvent().
+ * Against the default implementation that just returns true, this calls saveOptions() to save the settings of the last window's
+ * properties.
+ * @see KTMainWindow#queryExit
+ * @see KTMainWindow#closeEvent
+ */
+ virtual bool queryExit();
+ /** saves the window properties for each open window during session end to the session config file, including saving the currently
+ * opened file by a temporary filename provided by KApplication.
+ * @see KTMainWindow#saveProperties
+ */
+ virtual void saveProperties(KConfig *_cfg);
+ /** reads the session config file and restores the application's state including the last opened files and documents by reading the
+ * temporary files saved by saveProperties()
+ * @see KTMainWindow#readProperties
+ */
+ virtual void readProperties(KConfig *_cfg);
+
+ signals:
+ /** Dieses Signal zeigt dem Dokument an, dass die Statuszeile mit der richtigen
+ * Verbanzahl aktualisiert werden sollte.
+ */
+ void testAnzahl(int);
+ public slots:
+ /** open a new application window by creating a new instance of KVerbosApp */
+ void slotFileNewWindow();
+ /** clears the document in the actual view to reuse it as the new document */
+ void slotFileNew();
+ /** open a file and load it into the document*/
+ void slotFileOpen();
+ /** opens a file from the recent files menu */
+ void slotFileOpenRecent(const KURL& url);
+ /** opens the standard verb file that is delivered with KVerbos. */
+ void slotFileOpenStandard();
+ /** save a document */
+ void slotFileSave();
+ /** save a document by a new filename*/
+ void slotFileSaveAs();
+ /** asks for saving if the file is modified, then closes the actual file and window*/
+ void slotFileClose();
+ /** print the actual file */
+ void slotFilePrint();
+ /** closes all open windows by calling close() on each memberList item until the list is empty, then quits the application.
+ * If queryClose() returns false because the user canceled the saveModified() dialog, the closing breaks.
+ */
+ void slotFileQuit();
+ /** put the marked text/object into the clipboard and remove
+ * it from the document
+ */
+ void slotEditCut();
+ /** put the marked text/object into the clipboard
+ */
+ void slotEditCopy();
+ /** paste the clipboard into the document
+ */
+ void slotEditPaste();
+ /** changes the statusbar contents for the standard label permanently, used to indicate
+ * current actions.
+ * @param text the text that is displayed in the statusbar
+ */
+ void slotStatusMsg(const QString &text);
+ /** Gibt die Anzahl der Verben in der Statuszeile aus */
+ void slotStatusVerbMsg(int);
+ /** Gibt die Anzahl der gebten Verben in der Statuszeile aus.
+ */
+ void slotStatusTrainedMsg(int);
+ /** Gibt die Anzahl der richtig eingegebenen Verben in der Statuszeile aus.
+ */
+ void slotStatusCorrectMsg(int);
+ /** ffnet einen Dialog mit dem neue Verben erfasst werden knnen.
+ */
+ void slotEditErfassen();
+ /** ffnet einen Dialog, der die Liste der Verben anzeigt. Die Verbliste
+ * kann dann bearbeitet werden, Verben lschen, Verben hinzufgen, Eintrge
+ * verndern.
+ */
+ void slotEditBearbeiten();
+ /** Opens a dialog. The user can select which times should be trained.
+ */
+ void slotSettingsOptions();
+ /** Opens a dialog. The user can insert his name. Then a user object will be created
+ */
+ void slotSettingsUsername();
+ void slotFeedIt(int n);
+ /** Opens a dialog and shows the user his latest ten results. */
+ void slotUserResults();
+
+ private:
+ /** the configuration object of the application */
+ KConfig *config;
+ /** in this array are the times stored that should be learned
+ */
+ bool timeOptions[MAX_TIEMPOS][MAX_SUBTYPES];
+ /** If 'correctStrict' is true then every missing accent is regarded as an error.
+ * If 'correctStrict' is false the program doesn't care about missing accents
+ */
+ bool correctStrict;
+ /** If 'useKFeeder' is true then the KFeeder is used to show the results
+ */
+ bool useKFeeder;
+ /** Is 'true' if the splash screen of the KFeeder should be displayed */
+ bool showKFeederSplash;
+ /** Is 'true' if automatic food animations are uses for the KFeeder */
+ bool automaticKFeeder;
+ KFeederControl* kfeederControl;
+ /** view is the main widget which represents your working area. The View
+ * class should handle all events of the view widget. It is kept empty so
+ * you can create your view according to your application's needs by
+ * changing the view class.
+ */
+ KVerbosView *view;
+ /** doc represents your actual document and is created only once. It keeps
+ * information such as filename and does the serialization of your files.
+ */
+ KVerbosDoc *doc;
+
+ // KAction pointers to enable/disable actions
+ KPopupMenu* menuUser;
+ KAction* fileNewWindow;
+ KAction* fileNew;
+ KAction* fileOpen;
+ KRecentFilesAction* fileOpenRecent;
+ KAction* fileOpenStandard;
+ KAction* fileSave;
+ KAction* fileSaveAs;
+ KAction* fileClose;
+ KAction* filePrint;
+ KAction* fileQuit;
+ KAction* editCut;
+ KAction* editCopy;
+ KAction* editPaste;
+ KAction* editErfassen;
+ KAction* editBearbeiten;
+ KAction* settingOptions;
+ KAction* userUsername;
+ KAction* userResults;
+
+
+
+ static int kverbosCounter;
+};
+
+#endif // KVERBOS_H
diff --git a/kverbos/kverbos/kverbos.kcfg b/kverbos/kverbos/kverbos.kcfg
new file mode 100644
index 00000000..c6ee326b
--- /dev/null
+++ b/kverbos/kverbos/kverbos.kcfg
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
+ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+ <kcfgfile name="kverbosrc"/>
+ <group name="Language">
+ <entry name="UserLanguage" type="String">
+ <label>The language selected by the user</label>
+ <code>
+ KConfigBase *globalConf = KGlobal::config();
+ globalConf->setGroup("Locale");
+ QString m_language = globalConf->readEntry("Language", "en");
+ //keep only the first 2 characters
+ m_language = m_language.left(2);
+ kdDebug()&lt;&lt; m_language &lt;&lt;endl;
+ //later, scan for present languages
+ if (m_language!="de")
+ m_language = "en";
+ </code>
+ <default code="true">m_language</default>
+ </entry>
+ </group>
+</kcfg>
diff --git a/kverbos/kverbos/kverbosdoc.cpp b/kverbos/kverbos/kverbosdoc.cpp
new file mode 100644
index 00000000..9e4cc408
--- /dev/null
+++ b/kverbos/kverbos/kverbosdoc.cpp
@@ -0,0 +1,782 @@
+/***************************************************************************
+ kverbosdoc.cpp - description
+ -------------------
+ begin : Fre Dez 14 19:28:09 CET 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 eines Standardheaders
+#include <iostream>
+#include <ctime>
+#include <cstdlib>
+
+// include files for Qt
+#include <qmessagebox.h>
+
+// include files for KDE
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kio/netaccess.h>
+
+// application specific includes
+#include "verbspanish.h"
+#include "kverbosdoc.h"
+#include "kverbosview.h"
+#include "kverbosuser.h"
+
+
+
+
+QPtrList<KVerbosView> *KVerbosDoc::pViewList = 0L;
+
+KVerbosDoc::KVerbosDoc(QWidget *parent, const char *name) : QObject(parent, name)
+{
+ if(!pViewList)
+ {
+ pViewList = new QPtrList<KVerbosView>();
+ };
+ pViewList->setAutoDelete(true);
+ // Zufallsgenerator mit einem seed-Wert versorgen
+ srand((unsigned int)time((time_t *)NULL));
+ // Den Zeiger auf einen Benutzer initialisieren
+ benutzer = new KVerbosUser(getList(), DEFAULTUSER);
+}
+
+KVerbosDoc::~KVerbosDoc()
+{
+ if (benutzer != 0)
+ {
+ int result, number;
+ pViewList->first()->userChanged(result, number);
+ benutzer->saveUser(result, number);
+ delete benutzer;
+ benutzer = 0;
+ };
+ verbList2.clear();
+}
+
+void KVerbosDoc::addView(KVerbosView *view)
+{
+ pViewList->append(view);
+ connect(this, SIGNAL(changeView()), view, SLOT(zeigeVerb()));
+}
+
+void KVerbosDoc::removeView(KVerbosView *view)
+{
+ pViewList->remove(view);
+}
+
+void KVerbosDoc::setURL(const KURL &url)
+{
+ doc_url=url;
+}
+
+const KURL& KVerbosDoc::URL() const
+{
+ return doc_url;
+}
+
+void KVerbosDoc::slotUpdateAllViews(KVerbosView *sender)
+{
+ KVerbosView *w;
+ if(pViewList)
+ for(w=pViewList->first(); w!=0; w=pViewList->next())
+ if(w!=sender)
+ w->repaint();
+}
+
+bool KVerbosDoc::saveModified()
+{
+ bool completed=true;
+
+ if(modified)
+ {
+ KVerbosApp *win=(KVerbosApp *) parent();
+ int want_save = KMessageBox::warningYesNoCancel(win,
+ i18n("The current file has been modified.\nDo you want to save it?"),
+ i18n("Warning"),KStdGuiItem::save(),KStdGuiItem::discard());
+ switch(want_save)
+ {
+ // ich habe die Nummern gegenber den originalen Nummern in der case-Anweisung
+ // vertauscht, weil die originalen Nummern verkehrt zugeordnet sind!.
+ // In der Dokumentation zu KMessageBox kann man die richtige Zuordnung der Buttons finden.
+ case 2: // CANCEL
+ completed=false;
+ break;
+ case 3: // YES
+ if (doc_url.fileName() == i18n("Untitled"))
+ {
+ win->slotFileSaveAs();
+ }
+ else
+ {
+ saveDocument(URL());
+ };
+
+ deleteContents();
+ completed=true;
+ break;
+ case 4: // NO
+ setModified(false);
+ deleteContents();
+ completed=true;
+ break;
+ default: // Verhalten wie CANCEL
+ completed=false;
+ break;
+ }
+ }
+
+ return completed;
+}
+
+void KVerbosDoc::closeDocument()
+{
+ deleteContents();
+}
+
+bool KVerbosDoc::newDocument()
+{
+ // Die Verbenlist wird gelscht, damit sie sicher leer ist.
+ verbList2.clear();
+
+ modified=false;
+ doc_url.setFileName(i18n("Untitled"));
+ emit anzahlVerbenGeaendert(getAnzahl());
+ return true;
+}
+
+bool KVerbosDoc::openDocument(const KURL& url, const char *format /*=0*/)
+{
+ bool b = false;
+ QString tmpfile;
+ KIO::NetAccess::download( url, tmpfile );
+
+ QFile file(url.path());
+ if ( file.open(IO_ReadOnly) ) { // file opened successfully
+ deleteContents();
+ if ((url.fileName().right(4) == "html")||(url.fileName().right(3) == "htm"))
+ {
+ // qWarning("ffnen eines HTML-files");
+ b = openDocHTML(file);
+ }
+ else
+ {
+ // qWarning("ffnen eines .verbos-files");
+ b = openDocVERBOS(file);
+ };
+ file.close();
+ // Liste der Verben sortieren
+ spanishVerbList vl;
+ spanishVerbList::Iterator it1 = verbList2.begin();
+ spanishVerbList::Iterator it2;
+ while (it1 != verbList2.end())
+ {
+ it2 = vl.begin();
+ bool inserted = false;
+ while (it2 != vl.end())
+ {
+ if (*it1 < *it2)
+ {
+ vl.insert(it2, *it1);
+ inserted = true;
+ it2 = vl.end();
+ }
+ else
+ it2++;
+ };
+ if (!inserted)
+ vl.insert(it2, *it1);
+ it1++;
+ };
+ verbList2.clear();
+ verbList2 = vl;
+ benutzer->fillList(getList());
+ emit changeView();
+ };
+
+ KIO::NetAccess::removeTempFile( tmpfile );
+
+ modified=false;
+ emit anzahlVerbenGeaendert(getAnzahl());
+ return b;
+}
+
+// Liesteine Datei als HTML-Dokument ein
+bool KVerbosDoc::openDocHTML(QFile &f)
+{
+ bool result = true;
+ QTextStream t( &f ); // use a text stream
+ int count1;
+ int count2;
+ QString s;
+ QString v[3];
+ QString forms[60];
+ verbSpanish NewVerb;
+ while (!f.atEnd())
+ {
+ count1 = 0;
+ // drei einlesen, das sind der Infinitiv, die deutsche Bedeutung, und der Typ
+ while ((count1<3) && (!f.atEnd()))
+ {
+ s = t.readLine();
+ if (s.left(9) == "<td width")
+ {
+ int a = s.find('>', 22, true);
+ a++;
+ int e = s.find('<', a, true);
+ v[count1] = s.mid(a, e-a);
+ count1++;
+ };
+ }; // while ((count1<3) && (!f.atEnd()))
+ if (3 == count1)
+ {
+ NewVerb.setSpanish(v[0]);
+ NewVerb.setForeign(v[1]);
+ if (v[2] != "unregelm&auml;&szlig;ig")
+ {
+ // read a regular or a group verb
+ int g = 0;
+ if (v[2] == "regelm&auml;&szlig;ig")
+ g = 0;
+ else if (v[2] == "&lt;e &gt; ie&gt;")
+ g = 2;
+ else if (v[2] == "&lt;o &gt; ue&gt;")
+ g = 3;
+ else if (v[2] == "&lt;u &gt; ue&gt;")
+ g = 4;
+ else if (v[2] == "&lt;e &gt; i&gt;")
+ g = 5;
+ else if (v[2] == "&lt;c &gt; qu&gt;")
+ g = 6;
+ else if (v[2] == "&lt;g &gt; gu&gt;")
+ g = 7;
+ else if (v[2] == "&lt;z &gt; c&gt;")
+ g = 8;
+ else if (v[2] == "&lt;gu &gt; g&gt;")
+ g = 9;
+ else if (v[2] == "&lt;c &gt; z&gt;")
+ g = 10;
+ else if (v[2] == "&lt;g &gt; j&gt;")
+ g = 11;
+ else if (v[2] == "&lt;gu &gt; g&gt;")
+ g = 12;
+ else if (v[2] == "&lt;qu &gt; c&gt;")
+ g = 13;
+ else if (v[2] == "&lt;accent like 'enviar'&gt;")
+ g = 14;
+ else if (v[2] == "&lt;accent like 'continuar&gt;")
+ g = 15;
+ else if (v[2] == "&lt;missing i&gt;")
+ g = 16;
+ else
+ result = false;
+ NewVerb.setGroup(g);
+ }
+ else
+ {
+ // ein unregelmiges Verb
+ NewVerb.setGroup(IRREGULAR);
+ // weitere 60 Zeilen einlesen, das sind die ganzen Formen
+ count2 = 0;
+ while ((count2<60) && (!f.atEnd()))
+ {
+ s = t.readLine();
+ if ((s.left(4) == "<td>") && (s != "<td></td><td></td><td></td><td></td><td></td></tr><tr>"))
+ {
+ int a = s.find('>', 2, true);
+ a++;
+ int e = s.find('<', a, true);
+ forms[count2] = s.mid(a, e-a);
+ count2++;
+ if (14 == count2)
+ {
+ forms[count2] = "participio";
+ count2++;
+ };
+ };
+ }; // while ((count2<60) && (!f.atEnd()))
+ int i;
+ // den ersten Tabellenteil bertragen
+ for (i=0; (i<30) && (i<count2); i++)
+ {
+ int a = i % 5;
+ int b = i / 5;
+ // In der fnften ( a == 4 ) Spalte stehen die Gerundform und das Partizip
+ if (a == 4)
+ {
+ if (b == 0)
+ NewVerb.setGerund(forms[i]);
+ if (b == 3)
+ NewVerb.setPartizip(forms[i]);
+ }
+ else
+ {
+ // kommt ein Leerzeichen vor, muss man die Form aufteilen: In das
+ // Reflexivpronomen und das eigentliche Verb
+ if (forms[i].find(' ') >= 0)
+ {
+ NewVerb.setForm(a, b, forms[i].right(forms[i].length()-forms[i].find(' ')-1));
+ }
+ else
+ {
+ NewVerb.setForm(a, b, forms[i]);
+ }
+ };
+ };
+ // den zweiten Tabellenteil bertragen
+ for (i=0; (i<30) && (i+30<count2); i++)
+ {
+ int a = i % 5 + 4;
+ int b = i / 5;
+ // In der Spalte 3 der zweiten Tabellenhlfte steht der subjuntivo futuro,
+ // den ich vergessen habe und der deshalb zur Zeit ausgelassen wird.
+ int offs = 30;
+ // kommt ein Leerzeichen vor, muss man die Form aufteilen: In das
+ // Reflexivpronomen und das eigentliche Verb
+ if (forms[i+offs].find(' ') >= 0)
+ {
+ NewVerb.setForm(a, b, forms[i+offs].right(forms[i+offs].length()-forms[i+offs].find(' ')-1));
+ }
+ else
+ {
+ NewVerb.setForm(a, b, forms[i+offs]);
+ };
+ };
+ }; // if (v[2] == "unregelm&auml;&szlig;ig")
+ appendVerb(NewVerb, false); // an die Liste anhngen
+ };
+ }; // while (!f.atEnd())
+ emit anzahlVerbenGeaendert(getAnzahl());
+ return result;
+}
+
+bool KVerbosDoc::openDocVERBOS(QFile &f)
+{
+ QTextStream t( &f ); // use a text stream
+ int count;
+ QString v[3];
+ while (!f.atEnd())
+ {
+ count = 0;
+ // drei einlesen, das sind der Infinitiv, die deutsche Bedeutung, und der Typ
+ while ((count<3) && (!f.atEnd()))
+ {
+ v[count] = t.readLine();
+ count++;
+ }; // while ((count<3) && (!f.atEnd()))
+ if (3 == count)
+ {
+ verbSpanish NewVerb;
+ NewVerb.setSpanish(v[0]);
+ NewVerb.setForeign(v[1]);
+ int g = v[2].toInt();
+ if (IRREGULAR != g)
+ {
+ // ein regelmiges Verb
+ NewVerb.setGroup(g);
+ }
+ else
+ {
+ // ein unregelmiges Verb
+ NewVerb.setGroup(IRREGULAR);
+ // erst den Gerund und das Partizip einlesen und dann die restlichen Formen.
+ NewVerb.setGerund(t.readLine());
+ NewVerb.setPartizip(t.readLine());
+ count = 0;
+ for (int i = presente; i <= imperativo; i++)
+ for (int j = yo; j <= ellos; j++)
+ if (!f.atEnd())
+ {
+ NewVerb.setForm(i, j, t.readLine());
+ count++;
+ };
+ if (count < 54)
+ {
+ QMessageBox mb("kverbos warning", "An uncomplete verb has been found in the file",
+ QMessageBox::Warning, 1, 0, 0, 0);
+ mb.exec();
+ //qWarning("Ein unvollstndiges Verb kam vor!");
+ };
+ };
+ appendVerb(NewVerb, false); // an die Liste anhngen
+ };
+ }; // while (!f.atEnd())
+ emit anzahlVerbenGeaendert(getAnzahl());
+ return true;
+}
+
+// sichert die Datei. Die Verben werden in einer Datei im HTML Format gespeichert.
+bool KVerbosDoc::saveDocument(const KURL& url, const char *format /*=0*/)
+{
+ bool b = false;
+ QFile file(url.path());
+ if ( file.open(IO_WriteOnly) )
+ { // file opened successfully
+ if ((url.fileName().right(4) == "html")||(url.fileName().right(3) == "htm"))
+ {
+ // qWarning("als HTML speichern");
+ b = saveDocHTML(file);
+ }
+ else
+ {
+ // qWarning("als .verbos speichern");
+ b = saveDocVERBOS(file);
+ };
+ };
+ file.close();
+ modified=false;
+ return b;
+}
+
+// Die Verben als HTML-Datei abspeichern
+bool KVerbosDoc::saveDocHTML(QFile &f)
+{
+ bool good = true;
+ QTextStream t( &f ); // use a text stream
+ // Den Anfang der HTML Datei schreiben
+ t << "<html>" << endl;
+ t << "<head>" << endl;
+ t << "<title>verbos espa&ntilde;oles</title>" << endl;
+ t << "<style type=\"text/css\">" << endl;
+ t << "<!--" << endl;
+ t << "h1 { font-size:48pt; color:#FF0000; font-family:sans-serif; text-align:center; }" << endl;
+ t << ".n { font-size:12pt; color:#000000; font-family:sans-serif; margin:0pt; }" << endl;
+ t << ".v { font-size:16pt; color:#0000ff; font-family:sans-serif; }" << endl;
+ t << ".r { font-size:16pt; color:#b0b0ff; font-family:sans-serif; }" << endl;
+ t << ".t { background-color:#f0f0f0; padding:4pt; font-size:12pt; color:#000000; font-family:sans-serif; margin:0pt; }" << endl;
+ t << "td { background-color:#ffffff; padding:4pt; font-size:12pt; color:#000000; font-family:sans-serif; margin:0pt; }" << endl;
+ t << "//-->" << endl;
+ t << "</style>" << endl;
+ t << "</head>" << endl;
+ t << "<body>" << endl;
+ t << "<h1>verbos espa&ntilde;oles</h1>" << endl;
+ t << "<p class=\"n\">";
+ t << "Als regelm&auml;&szlig;ig gelten in diesem Programm alle Verben, die sich " << endl;
+ t << "ohne geringste Abweichung an das Konjugationsschema fr die Verben mit den " << endl;
+ t << "Endungen -ar, -er und -ir halten. Die Gruppenverben, die auch eine gewisse " << endl;
+ t << "Regelm&auml;&szlig;keit f&uuml;r eine Gruppe von Verben erkennen lassen, " << endl;
+ t << "m&uuml;ssen als unregelm&auml;&szlig;ige eingegeben werden. </p>" << endl;
+ t << "<p class=\"n\">";
+ t << "Die Formen des 'subjuntivo futuro' werden einstweilen nicht mit in das " << endl;
+ t << "Programm aufgenommen. </p>" << endl;
+ t << "<p class=\"n\">";
+ t << "Diese Datei wurde automatisch durch das Programm KVerbos erstellt. Die " << endl;
+ t << "Verben wurden dabei in einem Format ausgegeben, die das Programm auch " << endl;
+ t << "wieder einlesen kann. Deshalb sollten an der Datei keine &Auml;nderungen " << endl;
+ t << "vorgenommen werden. Durch &Auml;nderungen kann die Datei f&uuml;r das Programm " << endl;
+ t << "unlesbar werden. <br></p>" << endl;
+ // Die Verbenliste in die Datei schreiben.
+ if (verbList2.isEmpty())
+ {
+ t << "<p class=\"n\">Es wurden keine Verben eingegeben.</p>" << endl;
+ }
+ else
+ {
+ spanishVerbList::Iterator it;
+ for (it = verbList2.begin(); it != verbList2.end(); ++it)
+ {
+ // erst die spanische und die deutsche Bedeutung abspeichern und den Typ
+ t << "<hr color=#000000 size=3 noshade>" << endl;
+ t << "<table width=100% border=\"0\"><tr>" << endl;
+ t << "<td width=37% class=\"v\">" << (*it).getSpanish() << "</td>" << endl;
+ t << "<td width=37% class=\"v\">" << (*it).getForeign() << "</td>" << endl;
+ if ((*it).isGroupVerb())
+ {
+ t << "<td width=26% class=\"r\">";
+ switch ((*it).getGroup())
+ {
+ case 0:
+ t << "regelm&auml;&szlig;ig</td>" << endl; break;
+ case 2:
+ t << "&lt;e &gt; ie&gt;</td>" << endl; break;
+ case 3:
+ t << "&lt;o &gt; ue&gt;</td>" << endl; break;
+ case 4:
+ t << "&lt;u &gt; ue&gt;</td>" << endl; break;
+ case 5:
+ t << "&lt;e &gt; i&gt;</td>" << endl; break;
+ case 6:
+ t << "&lt;c &gt; qu&gt;</td>" << endl; break;
+ case 7:
+ t << "&lt;g &gt; gu&gt;</td>" << endl; break;
+ case 8:
+ t << "&lt;z &gt; c&gt;</td>" << endl; break;
+ case 9:
+ t << "&lt;gu &gt; g&gt;</td>" << endl; break;
+ case 10:
+ t << "&lt;c &gt; z&gt;</td>" << endl; break;
+ case 11:
+ t << "&lt;g &gt; j&gt;</td>" << endl; break;
+ case 12:
+ t << "&lt;gu &gt; g&gt;</td>" << endl; break;
+ case 13:
+ t << "&lt;qu &gt; c&gt;</td>" << endl; break;
+ case 14:
+ t << "&lt;accent like 'enviar'&gt;</td>" << endl; break;
+ case 15:
+ t << "&lt;accent like 'continuar&gt;</td>" << endl; break;
+ case 16:
+ t << "&lt;missing i&gt;</td>" << endl; break;
+ default:
+ good = false;
+ //qWarning("Error! Wrong group!!");
+ };
+ }
+ else
+ {
+ t << "<td width=26% class=\"r\">unregelm&auml;&szlig;ig</td>" << endl;
+ };
+ t << "</tr></table>" << endl;
+ // Im Falle eines unregelmigen Verbes, die Formen sichern
+ if ((*it).isGroupVerb() == false)
+ {
+ t << "<table width=100% border=\"0\">" << endl;
+ t << "<colgroup><col width=20%><col width=20%><col width=20%><col width=20%><col width=20%></colgroup>" << endl;
+ // erster Teil der Tabelle
+ t << "<tr>" << endl;
+ t << "<td class=\"t\">presente</td>" << endl;
+ t << "<td class=\"t\">imperfecto</td>" << endl;
+ t << "<td class=\"t\">indefinido</td>" << endl;
+ t << "<td class=\"t\">futuro</td>" << endl;
+ t << "<td class=\"t\">gerundio</td>" << endl;
+ t << "</tr>" << endl;
+ int i;
+ for (i = yo; i <= ellos; i++)
+ {
+ t << "<tr>" << endl;
+ for (int j = presente; j <= futuro; j++)
+ {
+ // Formen presente, imperfecto, indefinido, futuro
+ t << "<td>";
+ if ((*it).isReflexiv())
+ t << (*it).getRefPron(i) << ' ';
+ t << (*it).getForm(j, i) << "</td>" << endl;
+ };
+ // Sonderformen gerundio und participo
+ switch (i)
+ {
+ case 0:
+ t << "<td>" << (*it).getGerund() << "</td>" << endl;
+ break;
+ case 2:
+ t << "<td class=\"t\">" << "participo</td>" << endl;
+ break;
+ case 3:
+ t << "<td>" << (*it).getPartizip() << "</td>" << endl;
+ break;
+ default:
+ t << "<td></td>" << endl;
+ }
+ t << "</tr>" << endl;
+ }
+ t << "<tr>" << endl;
+ t << "<td></td><td></td><td></td><td></td><td></td>";
+ t << "</tr>";
+ // zweiter Teil der Tabelle
+ t << "<tr>" << endl;
+ t << "<td class=\"t\">condicional</td>" << endl;
+ t << "<td class=\"t\">subjuntivo presente</td>" << endl;
+ t << "<td class=\"t\">subjuntivo imperfecto</td>" << endl;
+ t << "<td class=\"t\">subjuntivo futuro</td>" << endl;
+ t << "<td class=\"t\">imperativo</td>" << endl;
+ t << "</tr>" << endl;
+ for (i = yo; i <= ellos; i++)
+ {
+ t << "<tr>" << endl;
+ for (int j = condicional; j <= imperativo; j++)
+ {
+ // Formen condicional, subjuntivo presente, subjuntivo imperfecto
+ // subjuntivo futuro, imperativo
+ t << "<td>";
+ if ((*it).isReflexiv())
+ t << (*it).getRefPron(i) << ' ';
+ t << (*it).getForm(j, i) << "</td>" << endl;
+ };
+ t << "</tr>" << endl;
+ }
+ t << "</table>" << endl;
+ }
+ t << "<p></p>" << endl;
+ };
+ };
+ // Das Ende der HTML Datei anfgen.
+ t << "</body>" << endl;
+ t << "</html>" << endl;
+ return good;
+}
+
+bool KVerbosDoc::saveDocVERBOS(QFile &f)
+{
+ QTextStream t( &f ); // use a text stream
+ // Die Verbenliste in die Datei schreiben.
+ if (verbList2.isEmpty())
+ {
+ t << "Es wurden keine Verben eingegeben." << endl;
+ }
+ else
+ {
+ spanishVerbList::Iterator it;
+ for (it = verbList2.begin(); it!=verbList2.end(); ++it)
+ {
+ // erst die spanische und die deutsche Bedeutung abspeichern und den Typ
+ t << (*it).getSpanish() << endl;
+ t << (*it).getForeign() << endl;
+ t << (*it).getGroup() << endl;
+ // Im Falle eines unregelmigen Verbes, die Formen sichern
+ if ((*it).isGroupVerb() == false)
+ {
+ t << (*it).getGerund() << endl;
+ t << (*it).getPartizip() << endl;
+ for (int j = presente; j <= imperativo; j++)
+ {
+ for (int i = yo; i <= ellos; i++)
+ {
+ t << (*it).getForm(j, i) << endl;
+ };
+ };
+ };
+ };
+ };
+ return true;
+}
+
+void KVerbosDoc::deleteContents()
+{
+ verbList2.clear();
+ emit anzahlVerbenGeaendert(getAnzahl());
+}
+
+// Ein Verb wird der Liste hinzugefgt.
+void KVerbosDoc::appendVerb(const verbSpanish v, bool emitStatus /*= true*/)
+{
+ verbList2.append(v);
+ if (emitStatus)
+ emit anzahlVerbenGeaendert(getAnzahl());
+}
+
+// es wird geprft, ob die Liste leer ist.
+bool KVerbosDoc::isEmpty() const
+{
+ return verbList2.isEmpty();
+}
+
+// Gibt die Liste des Dokumentes zurck.
+spanishVerbList* KVerbosDoc::getList()
+{
+ return &verbList2;
+}
+
+// Diese Funktion ist auch die einzige ber die diese Abfrage luft, deshalb erhlt sie auch
+// die Aufgabe eine Auswahl anzuregen.
+// Reihenfolge in dem Stringfeld: yo, tu, el, nosotros, vosotros, ellos, aleman, espanol
+// Wird "- - - - - -" zurckgegeben, dann gibt es kein Verb in der Liste. Normalerweise
+// wird die spanische Verbform zurckgegeben.
+QString KVerbosDoc::getAuswahl(QString s[][3], int &t)
+{
+ bool verbOK = true;
+ // feststellen, wie viele aktivierte Zeiten in den Optionen vorhanden sind
+ int ti[MAX_TIEMPOS*MAX_SUBTYPES], ty[MAX_TIEMPOS*MAX_SUBTYPES];
+ bool op[MAX_TIEMPOS][MAX_SUBTYPES];
+ int zeitenZahl = 0;
+ KVerbosApp *app = dynamic_cast<KVerbosApp*>(parent());
+ if (app) {
+ app->getTimeOptions(op);
+ }
+ for (int i=0; i<MAX_TIEMPOS; i++)
+ for (int j=0; j<MAX_SUBTYPES; j++)
+ if (op[i][j])
+ {
+ ti[zeitenZahl] = i;
+ ty[zeitenZahl] = j;
+ zeitenZahl++;
+ };
+ if ((0 == verbList2.count()) || (0 == zeitenZahl))
+ {
+ // Die Liste ist leer oder keine Zeit ist ausgewhlt.
+ for (int i=0; i<PERSONEN+1; i++)
+ {
+ s[i][0] = "- - - - - -";
+ s[i][1] = "- - - - - -";
+ s[i][2] = "- - - - - -";
+ t = 0;
+ };
+ }
+ else
+ {
+ spanishVerbList::Iterator it = findVerb(benutzer->suggestVerb());
+ if (it == verbList2.end())
+ {
+ it = verbList2.at(rand() % verbList2.count());
+ };
+ zeitenZahl = rand() % zeitenZahl;
+ // die deutsche und die spanische Form bernehmen
+ s[6][0] = (*it).getSpanish();
+ s[6][1] = (*it).getForeign();
+ // die einzelnen Formen zusammenstellen
+ for (int i=0; i<PERSONEN; i++)
+ {
+ verbOK = verbOK && (*it).getForm(ti[zeitenZahl], i, ty[zeitenZahl], s[i]);
+ };
+ t = ti[zeitenZahl] + ty[zeitenZahl]*MAX_TIEMPOS;
+ };
+ if (!verbOK)
+ {
+ QMessageBox mb("kverbos warning", "There is a problem with the verb " + s[6][0] +
+ ".\nPlease check the verb in the edit dialog.", QMessageBox::Warning, 1, 0, 0, 0);
+ mb.exec();
+ for (int i=0; i<PERSONEN+1; i++)
+ {
+ s[i][0] = "- - - - - -";
+ s[i][1] = "- - - - - -";
+ s[i][2] = "- - - - - -";
+ t = 0;
+ };
+ };
+ return s[6][1];
+}
+
+spanishVerbList::Iterator KVerbosDoc::findVerb(const QString& s)
+{
+ spanishVerbList::Iterator it = verbList2.begin();
+ while ((it != verbList2.end()) && (!((*it) == s)))
+ it++;
+ return it;
+}
+
+void KVerbosDoc::solved(const bool b)
+{
+ if (benutzer!=0)
+ if (b)
+ benutzer->right();
+ else
+ benutzer->wrong();
+}
+
+// sets a new user name, and deletes the old one. If the old one is differet from
+// the default name'-------' then some information is stored about the user. The
+// Program look if some information about the user is stored.
+void KVerbosDoc::setNewUser(const QString n)
+{
+ if (0 != benutzer)
+ {
+ int result, number;
+ pViewList->first()->userChanged(result, number);
+ benutzer->saveUser(result, number);
+ delete benutzer;
+ };
+ // prfen ob ber den Nutzer schon was gespeichert ist.
+ benutzer = new KVerbosUser(getList(), n);
+}
+
+#include "kverbosdoc.moc"
diff --git a/kverbos/kverbos/kverbosdoc.h b/kverbos/kverbos/kverbosdoc.h
new file mode 100644
index 00000000..f23033c7
--- /dev/null
+++ b/kverbos/kverbos/kverbosdoc.h
@@ -0,0 +1,165 @@
+/***************************************************************************
+ kverbosdoc.h - description
+ -------------------
+ begin : Fre Dez 14 19:28:09 CET 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KVERBOSDOC_H
+#define KVERBOSDOC_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// include files for QT
+#include <qfile.h>
+
+// include files for KDE
+#include <kurl.h>
+
+// include files des Projektes
+#include "verbspanish.h"
+
+// forward declaration of the Kverbos classes
+class KVerbosView;
+class KVerbosUser;
+
+
+/**
+ * KVerbosDoc provides a document object for a document-view model.
+ *
+ * The KVerbosDoc class provides a document object that can be used in conjunction with
+ * the classes KVerbosApp and KVerbosView to create a document-view model for standard KDE
+ * applications based on KApplication and KMainWindow. Thereby, the document object
+ * is created by the KVerbosApp instance and contains the document structure with the
+ * according methods for manipulation of the document data by KVerbosView objects. Also,
+ * KVerbosDoc contains the methods for serialization of the document data from and to files.
+ *
+ * Die Dokumentenklasse hlt eine Liste der verfgbaren Verben vor. Aus dieser Liste wird
+ * eines ausgewhlt, das gelernt werden soll. Die View-Klasse kann dieses Verb abfragen und
+ * in dem Lernfenster darstellen.
+ * Es gibt einige Situationen, die eine neuen Wahl dieses Verbes erforderlich machen:
+ * - zu Beginn des Programms, wenn die Klasse gebildet wird
+ * - wenn eine neue Verbendatei geladen wird
+ * - wenn die View-Klasse eine neue Wahl anfordert
+ * die View-Klasse merkt sich die Anzahl der richtig gelsten Verben.
+ *
+ * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.
+ * @version KDevelop version 1.2 code generation
+ */
+class KVerbosDoc : public QObject
+{
+ Q_OBJECT
+ public:
+ /**
+ * Constructor for the fileclass of the application
+ */
+ KVerbosDoc(QWidget *parent, const char *name=0);
+ /**
+ * Destructor for the fileclass of the application
+ */
+ ~KVerbosDoc();
+
+ /** adds a view to the document which represents the document contents. Usually this is your main view. */
+ void addView(KVerbosView *view);
+ /** removes a view from the list of currently connected views */
+ void removeView(KVerbosView *view);
+ /** sets the modified flag for the document after a modifying action on the view connected to the document.*/
+ void setModified(bool _m=true){ modified=_m; }
+ /** returns if the document is modified or not. Use this to determine if your document needs saving by the user on closing.*/
+ bool isModified(){ return modified; }
+ /** "save modified" - asks the user for saving if the document is modified */
+ bool saveModified();
+ /** deletes the document's contents */
+ void deleteContents();
+ /** initializes the document generally */
+ bool newDocument();
+ /** closes the acutal document */
+ void closeDocument();
+ /** loads the document by filename and format and emits the updateViews() signal
+ * Es werden bei der Datei die beiden Formate HTML-Datei und reine Textdatei unter-
+ * schieden
+ */
+ bool openDocument(const KURL& url, const char *format=0);
+ bool openDocHTML(QFile &f);
+ bool openDocVERBOS(QFile &f);
+ /** saves the document under filename and format.
+ * Die Datei kann wahlweise im HTML-Format oder als normale Textdatei abgespeichert
+ * werden. Die HTML-Datei ist umfangreicher, weil der formatierende HTML-Code
+ * ergnzt werden muss.
+ */
+ bool saveDocument(const KURL& url, const char *format=0);
+ bool saveDocHTML(QFile &f);
+ bool saveDocVERBOS(QFile &f);
+ /** sets a new user name, and deletes the old one. If the old one is different from
+ * the default name DEFAULTUSER then some information is stored about the user. The
+ * Program look if some information about the user is stored.
+ */
+ void setNewUser(const QString n);
+ /** returns a pointer to the actual user object */
+ KVerbosUser* getUser() { return benutzer; }
+ /** returns the KURL of the document */
+ const KURL& URL() const;
+ /** sets the URL of the document */
+ void setURL(const KURL& url);
+ /** es wird ein Verb der Liste hinzugefgt, ist emitStatus = true, wird auch
+ * die Statuszeile entsprechend angepasst.
+ */
+ void appendVerb(const verbSpanish v, bool emitStatus = true);
+ /** prft, ob die Liste des Dokumentes leer ist */
+ bool isEmpty() const;
+ /** Gibt einen Zeiger auf die Verbliste des Dokumentes zurck */
+ spanishVerbList* getList();
+ /** Gibt die Anzahl der Verben im Dokument zurck */
+ int getAnzahl() const { return verbList2.count(); }
+ /** Gibt die gewhlte Zeit, die Formen des Verbes dazu und den spanischen
+ * und deutschen Infinitiv zurck
+ */
+ QString getAuswahl(QString s[][3], int &t);
+ /** feedback from the view class about the solution */
+ void solved(const bool b);
+ private:
+ /** searches the verb given as a string in the list and returns a pointer to the verb */
+ spanishVerbList::Iterator findVerb(const QString& s);
+
+ signals:
+ /** wird emittiert, wenn sich die Anzahl der Verben im Dokument verndert hat */
+ void anzahlVerbenGeaendert( int );
+ void changeView();
+
+ public slots:
+ /**
+ * calls repaint() on all views connected to the document object and is called by the view by which the document has been changed.
+ * As this view normally repaints itself, it is excluded from the paintEvent.
+ */
+ void slotUpdateAllViews(KVerbosView *sender);
+
+ public:
+ /**
+ * the list of the views currently connected to the document
+ */
+ static QPtrList<KVerbosView> *pViewList;
+
+ private:
+ /**
+ * the modified flag of the current document
+ */
+ bool modified;
+ KURL doc_url;
+ /** Die Liste der Verben */
+ spanishVerbList verbList2;
+ KVerbosUser* benutzer;
+};
+
+#endif // KVERBOSDOC_H
diff --git a/kverbos/kverbos/kverbosoptions.cpp b/kverbos/kverbos/kverbosoptions.cpp
new file mode 100644
index 00000000..872888ea
--- /dev/null
+++ b/kverbos/kverbos/kverbosoptions.cpp
@@ -0,0 +1,60 @@
+/***************************************************************************
+ kverbosoptions.cpp - description
+ -------------------
+ begin : Sat Dec 15 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 "qlabel.h"
+#include "qcheckbox.h"
+#include "kverbosoptions.h"
+
+KVerbosOptions::KVerbosOptions( QWidget* parent /*= 0*/, const char* name /*= 0*/, bool modal /*= FALSE*/, WFlags fl /*= 0*/ )
+: QVerbosOptions(parent, name, modal, fl)
+{
+ // some times are disabled because they aren't ready yet.
+ LabelSubPasado->setEnabled(false);
+ LabelSubPresente->setEnabled(false);
+ LabelSubFuturo->setEnabled(false);
+ LabelImperativo->setEnabled(false);
+ CheckBox1_6->setEnabled(false);
+ CheckBox2_6->setEnabled(false);
+ CheckBox3_6->setEnabled(false);
+ CheckBox1_7->setEnabled(false);
+ CheckBox2_7->setEnabled(false);
+ CheckBox3_7->setEnabled(false);
+ CheckBox1_8->setEnabled(false);
+ CheckBox2_8->setEnabled(false);
+ CheckBox3_8->setEnabled(false);
+ CheckBox1_9->setEnabled(false);
+}
+
+KVerbosOptions::~KVerbosOptions()
+{
+}
+
+
+
+// Wird durch den OK-Button aufgerufen und beendet den Dialog. nderungen
+// werden bernommen.
+void KVerbosOptions::slotDlgEnde()
+{
+ done(1);
+}
+
+// Wird durch den Cancel-Button aufgerufen und beendet den Dialog ohne
+// nderungen zu bernehmen.
+void KVerbosOptions::slotCancel()
+{
+ done(0);
+}
diff --git a/kverbos/kverbos/kverbosoptions.h b/kverbos/kverbos/kverbosoptions.h
new file mode 100644
index 00000000..2293fac4
--- /dev/null
+++ b/kverbos/kverbos/kverbosoptions.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+ kverbosoptions.h - description
+ -------------------
+ begin : Sat Dec 15 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KVERBOSOPTIONS_H
+#define KVERBOSOPTIONS_H
+
+#include "qverbosoptions.h"
+
+/** Eine Klasse des KVerbos Projektes. Dadurch wird der Optionendialog bereitgestellt.
+ * In diesem Dialog knnen die Zeitstufen, die gelernt werden sollen ausgewhlt werden.
+ *@author Arnold Kraschinski
+ */
+
+class KVerbosOptions : public QVerbosOptions {
+public:
+ KVerbosOptions( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~KVerbosOptions();
+
+public slots:
+ /** Wird durch den OK-Button aufgerufen und beendet den Dialog. nderungen
+ * werden bernommen.
+ */
+ virtual void slotDlgEnde();
+ /** Wird durch den Cancel-Button aufgerufen und beendet den Dialog ohne
+ * nderungen zu bernehmen.
+ */
+ virtual void slotCancel();
+};
+
+#endif
diff --git a/kverbos/kverbos/kverbosui.rc b/kverbos/kverbos/kverbosui.rc
new file mode 100644
index 00000000..8d73a490
--- /dev/null
+++ b/kverbos/kverbos/kverbosui.rc
@@ -0,0 +1,32 @@
+<!DOCTYPE kpartgui>
+<kpartgui name="kverbos" version="6">
+<MenuBar>
+ <Menu name="file"><text>&amp;File</text>
+ <Action name="file_open_standard" append="new_merge"/>
+ <Action name="file_new_window"/>
+ </Menu>
+ <Menu name="edit"><text>&amp;Edit</text>
+ <Action name="edit_erfassen"/>
+ <Action name="edit_bearbeiten"/>
+ </Menu>
+ <Menu name="settings"><text>&amp;Settings</text>
+ <Action name="settings_options" append="configure_merge"/>
+ </Menu>
+ <Menu name="user"><text>&amp;User</text>
+ <Action name="user_username"/>
+ <Action name="user_results"/>
+ </Menu>
+</MenuBar>
+<ToolBar name="mainToolBar" noMerge="1"><text>Main Toolbar</text>
+ <Action name="file_new" />
+ <Action name="file_open" />
+ <Action name="file_save" />
+ <Action name="file_print" />
+ <Separator/>
+ <Action name="edit_cut" />
+ <Action name="edit_copy" />
+ <Action name="edit_paste" />
+</ToolBar>
+
+</kpartgui>
+
diff --git a/kverbos/kverbos/kverbosuser.cpp b/kverbos/kverbos/kverbosuser.cpp
new file mode 100644
index 00000000..7d7d19d0
--- /dev/null
+++ b/kverbos/kverbos/kverbosuser.cpp
@@ -0,0 +1,264 @@
+/***************************************************************************
+ kverbosuser.cpp - description
+ -------------------
+ begin : Tue Dec 18 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 "kverbosuser.h"
+
+#include <cstdlib>
+#include <qfile.h>
+#include <qdatetime.h>
+
+#include <kstandarddirs.h>
+
+
+bool eintrag::operator== (const eintrag& e) const
+{
+ return (verb == e.verb);
+}
+
+KVerbosUser::KVerbosUser(spanishVerbList* pL, QString n/*=DEFAULTUSER*/)
+: name(n), auswahl(""), sessions(0)
+{
+ // try to read the user-information if there is one.
+ int pos;
+ while ((pos = n.find(' ')) != -1)
+ n.replace(pos, 1, "_");
+ QFile file(locateLocal("data", "/kverbos/data/"+name+".kverbos"));
+ if ( file.open(IO_ReadOnly) )
+ {
+ QString s;
+ QTextStream t( &file );
+ name = t.readLine();
+ s = t.readLine(); sessions = s.toInt();
+ for (int i=0; i<MAX_RESULTS; i++)
+ {
+ date[i] = t.readLine();
+ s = t.readLine(); result[i][0] = s.toInt();
+ s = t.readLine(); result[i][1] = s.toInt();
+ };
+ while (!file.atEnd())
+ {
+ eintrag e;
+ e.verb = t.readLine();
+ s = t.readLine(); e.status = s.toInt();
+ s = t.readLine(); e.right = s.toInt();
+ s = t.readLine(); e.wrong = s.toInt();
+ if (e.status == 1)
+ e.counter = STAY_IN_R_LIST;
+ else
+ e.counter = 0;
+ e.used = false;
+ it = liste.find(e);
+ if (liste.end() == it)
+ liste.append(e);
+ };
+ file.close();
+ }
+ else
+ for (int i=0; i<MAX_RESULTS; i++)
+ {
+ date[i] = "";
+ result[i][0] = result[i][1] = 0;
+ };
+ fillList(pL);
+ it = liste.begin();
+ sessions = (sessions + 1) & 1073741823;
+}
+
+KVerbosUser::~KVerbosUser()
+{
+}
+
+// used zeigt an, ob dieses Verb in der Verbenliste des Hauptprogrammes vorkommt.
+// Hier werden die Verben des Hauptprogrammes bertragen, deshalb bekommen alle Elemente
+// used = true. Es k�nen aus der Benutzerinformation aber schon Verben in der Liste sein,
+// die nicht in der Verbendatei des Hauptprogrammes vorkommen. Diese Verben erhalten alle
+// used=false am Anfang. Wird ein Verb also in der Liste gefunden, dann muss zur Sicherheiet
+// used=true gesetzt werden.
+void KVerbosUser::fillList(spanishVerbList* pL)
+{
+ deaktivieren();
+ for (spanishVerbList::Iterator it2 = pL->begin(); it2 != pL->end(); ++it2)
+ {
+ eintrag elem;
+ elem.verb = (*it2).getSpanish();
+ elem.right = elem.wrong = elem.counter = elem.status = 0;
+ elem.used = true;
+ it = liste.find(elem);
+ if (liste.end() == it)
+ liste.append(elem);
+ else
+ (*it).used = true;
+ };
+}
+
+// alle Verben werden auf nicht genutzt gesetzt.
+void KVerbosUser::deaktivieren()
+{
+ verbenListe::Iterator zeig;
+ for (zeig=liste.begin(); zeig!=liste.end(); ++zeig)
+ (*zeig).used = false;
+}
+
+// tests if verbs that have status RICHTIGGEMACHT have to get the status UNGELERNT.
+// And calculates the kumulus of the verbs that have status UNGELERNT and FEFHLERHAFT.
+// Der kumulus ist ein gewichteter Z�ler fr die Auswahl des Verbes. Fehlerhafte Verben
+// haben ein gr�eres Gewicht und kommen deshalb eher wieder an die Reihe.
+void KVerbosUser::updateKumulus()
+{
+ int k = 0;
+ kumulus = 0;
+ verbenListe::Iterator zeig;
+ for (zeig=liste.begin(); zeig!=liste.end(); ++zeig)
+ {
+ if ((*zeig).status == RICHTIGGEMACHT)
+ {
+ if ((*zeig).used && ((*zeig).counter>1))
+ (*zeig).counter--;
+ else
+ (*zeig).status--;
+ };
+ if ((*zeig).used && ((*zeig).status < RICHTIGGEMACHT))
+ {
+ kumulus = k;
+ if ((*zeig).status == UNGELERNT)
+ k = ((*zeig).right < (*zeig).wrong) ? k+2 : k+1;
+ else
+ k += ((*zeig).wrong) * FALSCHGEWICHT;
+ (*zeig).counter = k;
+ };
+ };
+}
+
+// selects a verb out of the verbs that are in the U and F list. That means a
+// verb that hasn't been studied yet or one that was wrong.
+QString KVerbosUser::suggestVerb()
+{
+ auswahl = "";
+ it = liste.end();
+ updateKumulus();
+ if ((kumulus == 0) && !liste.isEmpty())
+ {
+ verbenListe::Iterator zeig;
+ for (zeig=liste.begin(); zeig!=liste.end(); ++zeig)
+ (*zeig).status = 0;
+ // rekursiver Aufruf. Es ist kein Problem, weil die Liste nicht leer ist und alle
+ // Elemente den status 0 bekommen haben, also kann eine Auswahl stattfinden.
+ auswahl = suggestVerb();
+ };
+ if (kumulus != 0)
+ {
+ // RAND_MAX ist auf meinem System 231;
+ int i = rand() % kumulus;
+ verbenListe::Iterator zeig = liste.begin();
+ while ((zeig != liste.end()) && (((*zeig).status==RICHTIGGEMACHT)||((*zeig).counter < i)))
+ zeig++;
+ auswahl = (*zeig).verb;
+ it = zeig;
+ };
+ return auswahl;
+}
+
+// The solution for the suggested verb was right. Now the verb should be deleted from
+// the list of unstudied verbs but added to the list with the right verbs.
+void KVerbosUser::right()
+{
+ if (!auswahl.isEmpty())
+ {
+ (*it).right = ((*it).right+1) & MAX_WERT;
+ if ((*it).wrong > 0)
+ (*it).wrong--;
+ if ((*it).status < RICHTIGGEMACHT)
+ (*it).status++;
+ if ((*it).status == RICHTIGGEMACHT)
+ (*it).counter = STAY_IN_R_LIST;
+ };
+}
+
+// The opposite function to the above one. The solution was wrong and the verb has to
+// be moved to the list with the wrong verbs.
+void KVerbosUser::wrong()
+{
+ if (!auswahl.isEmpty())
+ {
+ (*it).wrong = ((*it).wrong+1) & MAX_WERT;
+ if ((*it).right > 0)
+ (*it).right--;
+ if ((*it).status > FEHLERHAFT)
+ (*it).status--;
+ };
+}
+
+// Saves all the user information to the $KDEHOME/apps/kverbos/data/username.kverbos file
+bool KVerbosUser::saveUser(const int& res, const int& num)
+{
+ bool re = false;
+ if (name != DEFAULTUSER)
+ {
+ int pos;
+ while ((pos = name.find(' ')) != -1)
+ name.replace(pos, 1, "_");
+ QFile file(locateLocal("data", "/kverbos/data/"+name+".kverbos"));
+ if ( file.open(IO_WriteOnly) )
+ {
+ QTextStream t( &file );
+ t << name << endl;
+ sessions = (num == 0) ? sessions - 1 : sessions;
+ t << sessions << endl;
+ int j = (num == 0) ? 0 : 1;
+ for (int i=j; i<MAX_RESULTS; i++)
+ {
+ t << date[i] << endl;
+ t << result[i][0] << endl;
+ t << result[i][1] << endl;
+ };
+ if (j == 1)
+ {
+ QDate d = QDate::currentDate();
+ t << d.toString() << endl;
+ t << res << endl;
+ t << num << endl;
+ };
+ for (it=liste.begin(); it!=liste.end(); ++it)
+ {
+ if ((*it).status != UNGELERNT)
+ {
+ t << (*it).verb << endl;
+ t << (*it).status << endl << (*it).right << endl << (*it).wrong << endl;
+ };
+ };
+ re = true;
+ file.close();
+ };
+ };
+ return re;
+}
+
+bool KVerbosUser::getResults(int& s, QString d[], int r[][2])
+{
+ s = sessions;
+ for (int i=0; i<MAX_RESULTS; i++)
+ {
+ d[i] = date[i];
+ for (int j=0; j<2; j++)
+ r[i][j] = result[i][j];
+ };
+ return true;
+}
+
+
+
+
diff --git a/kverbos/kverbos/kverbosuser.h b/kverbos/kverbos/kverbosuser.h
new file mode 100644
index 00000000..47312c10
--- /dev/null
+++ b/kverbos/kverbos/kverbosuser.h
@@ -0,0 +1,118 @@
+/***************************************************************************
+ kverbosuser.h - description
+ -------------------
+ begin : Tue Dec 18 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KVERBOSUSER_H
+#define KVERBOSUSER_H
+
+#include "verbspanish.h"
+
+// Der maximale Wert fr den falsch bzw. richtig Zhler
+#define MAX_WERT 32767
+// Die maximale Anzahl von Anfragen, die ein Verb in der Richtig-Liste verbleibt.
+#define STAY_IN_R_LIST 25
+#define FEHLERHAFT -1
+#define UNGELERNT 0
+#define RICHTIGGEMACHT 1
+#define FALSCHGEWICHT 2
+#define DEFAULTUSER "------"
+#define MAX_RESULTS 10
+
+/** Datenstruktur fr ein Verb in den Listen
+ * right - gibt an, wie oft das Verb schon richtig eingegeben wurde.
+ * wrong - gibt an, wie oft das Verb schon falsch eingegeben wurde.
+ * counter - ist der Zhler fr die aufsummierte Gewichtung der Verben bei Verben in den
+ * ungelernten bzw. falschen Listen. In der Liste der richtig gelernten Verben
+ * ist das ein Zhler, der angibt, wie lange das Verb in der Liste bleiben kann.
+ * used - zeigt an, ob das Verb in der Verbendatei des Hauptprogrammes vorkommt.
+ * status - zeigt an, ob das Verb noch nicht gebt wurde (status = 0), ob es zuletzt falsch
+ * eingegeben wurde (status = -1) oder zuletzt richtig (status = 1)
+ */
+class eintrag
+{
+public:
+ bool operator== (const eintrag& e) const;
+ QString verb;
+ int right;
+ int wrong;
+ int counter;
+ int status;
+ bool used;
+};
+
+typedef QValueList<eintrag> verbenListe;
+
+/** This class holds information about an user of the program. It stores lists of
+ * verbs. One list for the words that are in the opened verb file and aren't traines yet.
+ * Another list for the words that have been correct. This verbs are stored in the
+ * list to present them more rarely to the user. The third list are for verbs entered with
+ * errors. This verbs are presented to the user with a greater probability.
+ *
+ *@author Arnold Kraschinski
+ */
+class KVerbosUser {
+public:
+ KVerbosUser(spanishVerbList* pL, QString n=DEFAULTUSER);
+ ~KVerbosUser();
+ /** fills the lists with the verbs that are in the verb list of the main program */
+ void fillList(spanishVerbList* pL);
+ /** returns the user name */
+ QString getName() { return name; }
+ /** marks all verbs in the R(right) and the F(false) list as unused. That means they can't
+ * be a suggestion. This are probably verbs that are stored user data but at the moment
+ * they aren't in the used verb list.
+ */
+ void deaktivieren();
+ /** calculates the Kumulus for the list with the verbs that aren't studied yet and
+ * for the list with the verbs that have been wrong. */
+ void updateKumulus();
+ /** selects a verb out of the verbs that are in the U and F list. That means a
+ * verb that hasn't been studied yet or one that was wrong. */
+QString suggestVerb();
+ /** The solution for the suggested verb was right. Now the verb should be deleted from
+ * the list of unstudied verbs but added to the list with the right verbs.
+ */
+ void right();
+ /** The opposite function to the above one. The solution was wrong and the verb has to
+ * be moved to the list with the wrong verbs.
+ */
+ void wrong();
+ /** Saves all the user information to the $KDEHOME/apps/kverbos/data/username.kverbos file */
+ bool saveUser(const int& res, const int& num);
+ /** Retrieve the old results and the number of sessions */
+ bool getResults(int& s, QString d[], int r[][2]);
+ /** returns a pointer to the users verb list */
+ verbenListe* getListe() { return &liste; }
+
+private:
+ /** name of the user */
+ QString name;
+ /** the list of the verbs that the user has workes with */
+ verbenListe liste;
+ /** this is the latest selected verb of the list */
+ QString auswahl;
+ /** die aufaddierte Summe der gewichteten Verben */
+ int kumulus;
+ /** an Iterator for the verb list */
+ verbenListe::Iterator it;
+ /** the number of training sessions that the user has made */
+ int sessions;
+ /** The results of the last ten seccions */
+ QString date[MAX_RESULTS];
+ int result[MAX_RESULTS][2];
+};
+
+#endif
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 mssen 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 gelscht, 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 nchste 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 geprft 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 Lsung soll in dem Fenster prsentiert 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, rckgngig 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 fr 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 prfen, 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"
diff --git a/kverbos/kverbos/kverbosview.h b/kverbos/kverbos/kverbosview.h
new file mode 100644
index 00000000..cfc4c702
--- /dev/null
+++ b/kverbos/kverbos/kverbosview.h
@@ -0,0 +1,148 @@
+/***************************************************************************
+ kverbosview.h - description
+ -------------------
+ begin : Fre Dez 14 19:28:09 CET 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KVERBOSVIEW_H
+#define KVERBOSVIEW_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// include files for Qt
+#include "qlernen.h"
+
+// weitere include-Files fr das Programm
+#include "kverbos.h"
+
+// forward-Deklaration der Klasse. Whrend man die API-Dokumentation erstellt,
+// muss diese Zeile auskommentiert werden, weil sonst der falsche Text als Beschreibung
+// der Klasse erkannt wird.
+//class KVerbosDoc;
+
+/** The KVerbosView class provides the view widget for the KVerbosApp instance.
+ * The View instance inherits QWidget as a base class and represents the view object of a KTMainWindow. As KVerbosView is part of the
+ * docuement-view model, it needs a reference to the document object connected with it by the KVerbosApp class to manipulate and display
+ * the document structure provided by the KVerbosDoc class.
+ *
+ * Diese Klasse soll folgende Funktionen erfllen:
+ * - sie soll das momentan ausgewhlte Verb vom Dokument holen.
+ * Diese Information enthlt die spanische und deutsche Bedeutung des Verbes, die Zeit, die
+ * momentan getestet werden soll, und alle Verbformen, die zu dieser Zeit gehren.
+ * - die Klasse nimmt die Eingaben des Benutzers entgegen und prft anschlieend, ob die Ein-
+ * gaben richtig sind.
+ * - Die Informationen, wie viele Verben richtig gebt und wie viele falsch gebt wurden, soll
+ * direkt in dieser Klasse gespeichert werden und nicht im Dokument.
+ * - Die Klasse meldet an das Dokument, wenn es Zeit ist sich ein neues Verb zu suchen.
+ * Das ist in folgenden Fllen ntig:
+ * - wenn die Klasse zum ersten Mal gestartet wird und ein erstes Verb eingestellt werden
+ * soll.
+ * - wenn ein neues Dokument mit Verben geladen wird.
+ * - wenn der Benutzer die Formen richtig eingegeben hat.
+ * - wenn ihm nichts mehr einfllt und er weiter will.
+ *
+ * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.
+ * @version KDevelop version 0.4 code generation
+ */
+class KVerbosView : public QLernen /*QWidget*/
+{
+ Q_OBJECT
+public:
+ /** Constructor for the main view */
+ KVerbosView(QWidget *parent = 0, const char *name=0);
+ /** Destructor for the main view */
+ ~KVerbosView();
+
+ /** returns a pointer to the document connected to the view instance. Mind that this method requires a KVerbosApp instance as a parent
+ * widget to get to the window document pointer by calling the KVerbosApp::getDocument() method.
+ *
+ * @see KVerbosApp#getDocument
+ */
+ KVerbosDoc* getDocument() const;
+
+ /** contains the implementation for printing functionality */
+ void print(QPrinter *pPrinter);
+ /** This funktion erases all accents from the letters of a string
+ */
+ QString deleteAccents(const QString& s) const;
+ /** 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. r1 is the training results and r2 is the number of the trained verbs.
+ */
+ int userChanged(int& r1, int& r2);
+
+public slots:
+ /** Die folgenden Slots werden aufgerufen, wenn ein Button mit einem
+ * spanischen Sonderzeichen gedrckt wird.
+ * Das Zeichen wird dann dem Eingabefeld, das den Focus hat zugefgt.
+ */
+ virtual void slotN();
+ virtual void slotA();
+ virtual void slotE();
+ virtual void slotI();
+ virtual void slotO();
+ virtual void slotU();
+ /** all the LineEdits will be cleared
+ */
+ virtual void slotClearAll();
+ /** if the verb is already corrected (corrected == true) then the font is
+ * set to the normal font
+ */
+ virtual void slotFont();
+ /** if the time is a progressiv or a perfect form the input of the yo-Editbox
+ * which contains the gerund or the partizip is copied into the others.
+ */
+ virtual void slotCopyText();
+ /** Die Ansicht wird aufgefordert sich das aktuelle Verb vom Dokument zu holen
+ * sich eine Zeit auszuwhlen und dann das Verb in dem Fenster zum ben bereitzustellen
+ */
+ virtual void zeigeVerb();
+ /** Es soll ein anderes Verb zum Lernen ausgewhlt werden, das momentan eingegebene wird
+ nicht gewertet.
+ */
+ virtual void slotWeiter();
+ /** The input should be corrected.
+ */
+ virtual void slotCorregir();
+ /** The solution should be shown in the window
+ */
+ virtual void slotSolution();
+
+
+signals:
+ void numberTrainedChanged(int);
+ void numberCorrectChanged(int);
+ void informKFeeder(int);
+
+private:
+ /** the following variables store the information about the actual verb. The information
+ * is obtained from the doc.
+ */
+ QString espanol;
+ QString aleman;
+ int zeitAuswahl;
+ QString formen[7][3];
+ /** tells if the actual input already has been correced by using the button */
+ bool corrected;
+ /** Are pointers to the GUI elements for an easier use */
+ QLineEdit* formEdit[6][3];
+ /** the number of verbs that habe been correct */
+ int enteredCorrect;
+ /** the number of all verbs that have been trained */
+ int verbsTrained;
+};
+
+#endif // KVERBOSVIEW_H
diff --git a/kverbos/kverbos/main.cpp b/kverbos/kverbos/main.cpp
new file mode 100644
index 00000000..297e3756
--- /dev/null
+++ b/kverbos/kverbos/main.cpp
@@ -0,0 +1,74 @@
+/***************************************************************************
+ main.cpp - description
+ -------------------
+ begin : Fre Dez 14 19:28:09 CET 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 <kcmdlineargs.h>
+#include <kaboutdata.h>
+
+#include "kverbos.h"
+
+static const char description[] =
+ I18N_NOOP("KVerbos");
+
+static KCmdLineOptions options[] =
+{
+ { "+[File]", I18N_NOOP("File to open"), 0 },
+ KCmdLineLastOption
+ // INSERT YOUR COMMANDLINE OPTIONS HERE
+};
+
+
+
+int main(int argc, char *argv[])
+{
+
+ KAboutData aboutData( "kverbos", I18N_NOOP("KVerbos"),
+ VERSION, description, KAboutData::License_GPL,
+ "(c) 2001, Arnold Kraschinski", 0, 0, "arnold.k67@gmx.de");
+ aboutData.addAuthor("Arnold Kraschinski",0, "arnold.k67@gmx.de");
+ aboutData.addCredit("David Vignoni", I18N_NOOP("svg icon"), "david80v@tin.it");
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
+
+ KApplication app;
+
+ if (app.isRestored())
+ {
+ RESTORE(KVerbosApp);
+ }
+ else
+ {
+ KVerbosApp *kverbos = new KVerbosApp();
+ kverbos->show();
+
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ if (args->count())
+ {
+ kverbos->openDocumentFile(args->url(0));
+ }
+ else
+ {
+ // Meiner Meinung nach geh�t die folgende Zeile nicht hier hin, weil hier das
+ // Programm durchl�ft, wenn kein Dateiname ber die Kommandozeile eingegeben
+ // worden ist.
+ // kverbos->openDocumentFile();
+ }
+ args->clear();
+ }
+
+ return app.exec();
+}
diff --git a/kverbos/kverbos/prefs.kcfgc b/kverbos/kverbos/prefs.kcfgc
new file mode 100644
index 00000000..1c3e4d3e
--- /dev/null
+++ b/kverbos/kverbos/prefs.kcfgc
@@ -0,0 +1,6 @@
+# Code generation options for kconfig_compiler
+File=kverbos.kcfg
+IncludeFiles=kdebug.h
+ClassName=Prefs
+Singleton=true
+Mutators=true \ No newline at end of file
diff --git a/kverbos/kverbos/qerfassen.ui b/kverbos/kverbos/qerfassen.ui
new file mode 100644
index 00000000..90465a19
--- /dev/null
+++ b/kverbos/kverbos/qerfassen.ui
@@ -0,0 +1,2796 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>QErfassen</class>
+<comment>Dialog des kverbos Projektes.
+Der Dialog mit dem ein neutes Verb erfasst
+und in die Liste aufgenommen wird.
+</comment>
+<author>Arnold Kraschinski</author>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>QErfassen</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>598</width>
+ <height>477</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Enter New Verb or Edit Existing Verb</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout49</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout111_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVerbo</cstring>
+ </property>
+ <property name="text">
+ <string>Verb:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignLeft</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVerbo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextAleman</cstring>
+ </property>
+ <property name="text">
+ <string>In the foreign language:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditAleman</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout46</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>regular</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>irregular</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>e &gt; ie</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>o &gt; ue</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>u &gt; ue</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>e &gt; i</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>c &gt; qu</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>g &gt; gu</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>z &gt; c</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>gu &gt; gu</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>c &gt; z</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>g &gt; j</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>gu &gt; g</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>qu &gt; c</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>accent like 'enviar'</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>accent like 'continuar'</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>missing i</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ComboBoxTypen</cstring>
+ </property>
+ <property name="backgroundOrigin">
+ <enum>ParentOrigin</enum>
+ </property>
+ <property name="editable">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout112</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextGerundio</cstring>
+ </property>
+ <property name="text">
+ <string>gerundio:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditGerundio</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextParticipio</cstring>
+ </property>
+ <property name="text">
+ <string>participio:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditParticipio</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>TabWidgetFormas</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabPresente</cstring>
+ </property>
+ <attribute name="title">
+ <string>presente</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout70_3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout69_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13_6_4_2_3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextYo1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>yo:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTu1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tu:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEl1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>el/ella/usted:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextNosotros1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>nosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVosotros1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>vosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEllos1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>ellos/ellas/ustedes:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14_6_4_2_3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo2_1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu2_1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl2_1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros2_1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros2_1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos2_1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout45_4_2_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonSeiteLoeschen1</cstring>
+ </property>
+ <property name="text">
+ <string>Clear Page</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer_p</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabImperfecto</cstring>
+ </property>
+ <attribute name="title">
+ <string>imperfecto</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout68_3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout67_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13_6_5_2_3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextYo2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>yo:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTu2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tu:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEl2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>el/ella/usted:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextNosotros2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>nosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVosotros2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>vosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEllos2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>ellos/ellas/ustedes:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14_6_5_2_3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout45_5_2_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonSeiteLoeschen2</cstring>
+ </property>
+ <property name="text">
+ <string>Clear Page</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer_im</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabIndefinido</cstring>
+ </property>
+ <attribute name="title">
+ <string>indefinido</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout66_3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout65_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13_6_6_2_3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextYo3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>yo:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTu3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tu:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEl3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>el/ella/usted:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextNosotros3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>nosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVosotros3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>vosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEllos3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>ellos/ellas/ustedes:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14_6_6_2_3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo2_3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu2_3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl2_3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros2_3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros2_3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos2_3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout45_6_2_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonSeiteLoeschen3</cstring>
+ </property>
+ <property name="text">
+ <string>Clear Page</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer_i</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabFuturo</cstring>
+ </property>
+ <attribute name="title">
+ <string>futuro</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout64_3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout63_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13_6_7_2_3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextYo4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>yo:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTu4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tu:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEl4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>el/ella/usted:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextNosotros4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>nosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVosotros4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>vosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEllos4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>ellos/ellas/ustedes:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14_6_7_2_3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo2_4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu2_4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl2_4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros2_4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros2_4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos2_4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout45_7_2_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonSeiteLoeschen4</cstring>
+ </property>
+ <property name="text">
+ <string>Clear Page</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer_f</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabCondicional</cstring>
+ </property>
+ <attribute name="title">
+ <string>condicional</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout62_3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout61_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13_6_8_2_4</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextYo5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>yo:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTu5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tu:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEl5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>el/ella/usted:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextNosotros5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>nosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVosotros5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>vosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEllos5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>ellos/ellas/ustedes:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14_6_8_2_4</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo2_5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu2_5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl2_5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros2_5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros2_5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos2_5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout45_8_2_4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonSeiteLoeschen5</cstring>
+ </property>
+ <property name="text">
+ <string>Clear Page</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer_c</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabSubPresente</cstring>
+ </property>
+ <attribute name="title">
+ <string>subjuntivo presente</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout60_3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout_sp</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout_p_6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextYo6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>yo:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTu6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tu:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEl6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>el/ella/usted:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextNosotros6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>nosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVosotros6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>vosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEllos6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>ellos/ellas/ustedes:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout_e_6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo2_6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu2_6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl2_6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros2_6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros2_6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos2_6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout45_8_2_3_5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonSeiteLoeschen6</cstring>
+ </property>
+ <property name="text">
+ <string>Clear Page</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer_sp</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabSubPasado</cstring>
+ </property>
+ <attribute name="title">
+ <string>subjuntivo pasado</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout58_3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout_spa</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout_p_7</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextYo7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>yo:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTu7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tu:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEl7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>el/ella/usted:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextNosotros7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>nosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVosotros7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>vosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEllos7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>ellos/ellas/ustedes:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout_e_7</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo2_7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu2_7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl2_7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros2_7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros2_7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos2_7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout45_8_2_3_2_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonSeiteLoeschen7</cstring>
+ </property>
+ <property name="text">
+ <string>Clear Page</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer_spa</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabImperativo</cstring>
+ </property>
+ <attribute name="title">
+ <string>imperativo</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout47</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout46</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout55_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout_p_8</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextYo8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>yo:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTu8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tu:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEl8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>el/ella/usted:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextNosotros8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>nosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVosotros8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>vosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEllos8</cstring>
+ </property>
+ <property name="text">
+ <string>ellos:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout_e_8</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo2_8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu2_8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl2_8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros2_8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros2_8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos2_8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout45_8_2_3_3_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonSeiteLoeschen8</cstring>
+ </property>
+ <property name="text">
+ <string>Clear Page</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer_imp</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout18</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonN</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>n</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonA</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>a</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonE</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>e</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonI</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>i</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonO</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>o</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonU</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>u</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout48</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonLoeschen</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Clear All</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>PushZurueck</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Back</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>PushWeiter</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Next</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>PushNewVerb</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>PushBeenden</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>ButtonN</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotN()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonSeiteLoeschen1</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotClearPage1()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonSeiteLoeschen2</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotClearPage2()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonSeiteLoeschen3</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotClearPage3()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonSeiteLoeschen4</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotClearPage4()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonSeiteLoeschen5</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotClearPage5()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonSeiteLoeschen6</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotClearPage6()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonSeiteLoeschen7</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotClearPage7()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonSeiteLoeschen8</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotClearPage8()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonLoeschen</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotClearAll()</slot>
+ </connection>
+ <connection>
+ <sender>PushZurueck</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotZurueck()</slot>
+ </connection>
+ <connection>
+ <sender>PushWeiter</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotWeiter()</slot>
+ </connection>
+ <connection>
+ <sender>PushBeenden</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotDlgEnde()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonE</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotE()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonI</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotI()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonO</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotO()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonU</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotU()</slot>
+ </connection>
+ <connection>
+ <sender>ComboBoxTypen</sender>
+ <signal>highlighted(int)</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotTypChanged(int)</slot>
+ </connection>
+ <connection>
+ <sender>ButtonA</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotA()</slot>
+ </connection>
+ <connection>
+ <sender>PushNewVerb</sender>
+ <signal>clicked()</signal>
+ <receiver>QErfassen</receiver>
+ <slot>slotNewVerb()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">qerfassen.ui.h</include>
+</includes>
+<slots>
+ <slot>slotNewVerb()</slot>
+ <slot>slotA()</slot>
+ <slot>slotClearAll()</slot>
+ <slot>slotClearPage1()</slot>
+ <slot>slotClearPage2()</slot>
+ <slot>slotClearPage3()</slot>
+ <slot>slotClearPage4()</slot>
+ <slot>slotClearPage5()</slot>
+ <slot>slotClearPage6()</slot>
+ <slot>slotClearPage7()</slot>
+ <slot>slotClearPage8()</slot>
+ <slot>slotDlgEnde()</slot>
+ <slot>slotE()</slot>
+ <slot>slotI()</slot>
+ <slot>slotN()</slot>
+ <slot>slotO()</slot>
+ <slot>slotTypChanged( int )</slot>
+ <slot>slotU()</slot>
+ <slot>slotWeiter()</slot>
+ <slot>slotZurueck()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kverbos/kverbos/qlernen.ui b/kverbos/kverbos/qlernen.ui
new file mode 100644
index 00000000..9b4b1d33
--- /dev/null
+++ b/kverbos/kverbos/qlernen.ui
@@ -0,0 +1,1021 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>QLernen</class>
+<comment>It is the main wiget of the kverbos project.
+The user learns with this GUI.</comment>
+<author>Arnold Kraschinski</author>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>QLernen</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>592</width>
+ <height>447</height>
+ </rect>
+ </property>
+ <property name="iconText">
+ <string></string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout13</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVerbo</cstring>
+ </property>
+ <property name="text">
+ <string>Verb:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVerbo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextAleman</cstring>
+ </property>
+ <property name="text">
+ <string>In the foreign language:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditAleman</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTiempo2</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>70</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Time</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTiempo</cstring>
+ </property>
+ <property name="text">
+ <string>presente</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout17</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextYo</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>yo:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextTu</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tu:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEl</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>el/ella/usted:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextNosotros</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>nosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextVosotros</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>vosotros:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextEllos</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>ellos/ellas/ustedes:</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo1</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu1</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl1</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros1</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros1</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos1</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout15</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditYo3</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditTu3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEl3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditNosotros3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditVosotros3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>EditEllos3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout18</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonN</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>n</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonA</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>a</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonE</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>e</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonI</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>i</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonO</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>o</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonU</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>u</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout15</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextErgebnis</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Result:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QProgressBar">
+ <property name="name">
+ <cstring>ProgressBar</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="progress">
+ <number>0</number>
+ </property>
+ <property name="centerIndicator">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>PixmapLabel1</cstring>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonLoeschen</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Clear All</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonKorrektur</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Correct</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonSolution</cstring>
+ </property>
+ <property name="text">
+ <string>Solution</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonWeiter</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>110</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Continue</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="64187">789ced9dd772e448b2a6efe729da0677636b3899d0b0637b41adb5e6da5e848406925aacedbb9fc8f81da86215ab9bc9e96a66f570dcd8531f010442f81f1e2a93fff5afdfcef7777efbd77ffde3e696dd16e23791b3ebdffe25ef9ae6e9fffcdffffdfffef1cf7034fa2d887e1b8f3def37ef9fffeb1fff2c8e7e13bf39a3d18885b1e5b3819329b7023c1e85d194cb2be230b4cf977703fb53ae96c17e1af229779be0201dc9293bd7c4721cd8eb747f188cb5bd7e6f791c7a6366d35bb7ecfb2a5453661e388cbc917dfe9938f190de96e5208c71bdd596432f89529b3ef21b9afbc736ff287f188d7c5b9e56598efafb5b499c82b31dcb71308aecf3ce2d384c3d5bfec61bd896bf38b59c7a5e64cbe3dc8043ee85f6fa8965d65f2f8e89fdc83e2f713f0b82c8a6df3660f3bcbdbfeb2cf3208c6c7a2db32c86eb8bc492f2b3625986c2b3e5e9d4c0f67a73412c3ddb1edd02b1f2842d3fea4b0551047f38049bfb6dfb764bc40a2c5bcb3a88713f0bc1e63af2574d793c0a9208fe568043edd9f62eacbf8dc7e6baf5cfea026cdacf729310d3fd0cf77bd188f2c307b6e59113cb7ec0d09ef28a9883b9f5f771d0b3b4f53b0e07be261668afae1918f5370247a601edf5da72d45fef5a6219d9fa6c2ec191efdbf270a41f9bebf6fe12ef8ffbfa653ed8dc6ffdaf190f8cfa7bb09c040acf737760bcef191c79a83f161007e4ffd5c0f0a7c872da3fdf22bd74b85e1287286f69f530669e823f8a2570a023b40fcac3ccfdd69fd96460abdf261dd8a6d7d603dbfc96560f63dea75f5e136b3047fa3c1ce17dad03ee9f672d7184fc7762607bbd45fa221ce3f92618d8fa4f9983fbf277923842fd37d6bfc7b2bf9f33620fdcdc83a3107ae2c89feaaf8ba79e63db7f714eec834bdb5f8c753486bf73ebbf9ee93f63f8c3e1c0b63dab04dc978fdbfaf6c6fdfded1d7108767607c6f3f760f33e9bbfd6b6afe7f5f7b7e1c0f09f7be288d8d69fe7f7d7c5027114dbf62f1a70c47d5b1fc2faa717f4d7c522711c5bff706c3c31af4bc0cd233862f0a7c6f6ff5e345c7f009bf42d67b67ff54cff1cdbf66b9ec0e6ba6589fc2421c3f56a6560eb8fcd2e318fe18f48cff44e3efa1bab072f1deedf20a6fb1b1bcf3cd6b3b34d2ce8fac1c0d69f1c94870fd7f706c6f51d6209aead5e3d11a9c0d67783f44d7f1edbfeabd92156e00ee597f138407ef72dab50c7b67f63568ffe281a819bcd81d1bf583df97ee4c5880fe5c0b63e5aab4fdf442f5ccf178925ded7dafeccb8838ffbcb0c1c07949f73e230b4fe2f6c7bfb5114c4d0676c3931ee61fd33b7e5f5535f07d63ff33d70300217c84f1a45894d4fde12c7e08e81e304efebac5e7c162509c60b07e0380cf0fe35cbbcbf9ec9816dfd4f143866181f39d61f7c11a574ffeec0d01bcaa7a35160ebbb1c13f3c4faef04f9d3b1c4788ddbf705e34826e8ff6cff15f8914a507f77e05804680f9bbea95c8debe519381618df4dac3f18f949bcaf2c885580fe3e26d6897dbfb0e3b7208a4789f5bf890027e3d0b67761eb2f88e371027f5b01271eae4ff8c0367fc5067180f1e3c4f6274162d247fcbf2496189f4e50fea47f3eb7f519a4e118f5935b7f0f58cf8d1dbf043c0e12c4d76460e4c7f61781887de4d7d9230e71ff04f527cdfdd0830f4e22c49f0af5ad630eff7089cd75f497b6bca1294d84f1aa1d9f86e324c1f3b96d0fd35bf214e36b5b1fa1196d85363fe53e38918817cad6bf918b40ff2ac7e058a6e85f25384991be6bf31f2689c078abb3e50d5353227b3fdf1ed8e64f1e83639da2bf5c009be7d1bfdb781b9a780fff502be040517f7d40acd19f76c81f376caf57cfe038467a933b6285f2cb5370324ed15fdafe2634f118fd6b774f2ce0fff2029c7874bf1dcf84261ea3ffac8f883d7026c07dfaf284989e97e7c47e6aebcb7d20d611e633a81fd5a7277af6d11f670931e9294b07467e47e03efd1aedab4d7cc678ee6860eb6ff2129c04a9f58789034e4788c7ee3d318d3fa4f5a768d4df5f27e094fa6fc73e1f4de3bd4d9fef0f6caf6babdfc88b8204fdb3ed7fcce029417fcd8f06b6fededd110bf4a739d2f71345e3191bcfa2d0b4b0cd9f1b834dc0b6fa63b63e8cb773a4c7d606b6f7b38a5880f966cf789f8bf2995f40af0dde1fa521f99f9d9f45719f9e2a7ac6f34e4a4ce9b3febac4f572191c31f867bd004e3cf883b4e3dd28e9f3d35d132bf0e4199ca4a9cd5fad88598a7862fddd6497eee76a60dbbe726360e8c327d6b82ef607b6d739ea2b8d646afdaf457b9af924fa1307edc7fae79dc381f13cdec7229edaebda231660272296e81f24a5977094272b88458af173da33437ddbf156c48d87223ed6c463b00a06b6f9d757c41ee2419112a7894dbf867ff24452fa747f9ac2bf951dbf47a24f5f2403dbf4eb43620fd7eb8381a1df3b62aa4f8df695fd7571401c80db436206fd689f98a7367fec8858c29fb48ddf91ead3e37bc43ee235df250ec08e3b30e62f1e31a5d79e112bb457b30a4e13e8db45fde921fd25624a9f3f118748bf5c214e48afc7c4e40f153d9f8e98ad3f69df178f4c7a980f9e1087182f48461c51fec7c40af5534b709f5eb14e9c603c39a988fbfec0c6fb786c1469d3e7ab03237ebac409e2b7c2f3de70ff1d7142f73b03dbfb6be2d40cd12dc7c4027a5156afb1df3f2f34718ae77540ccd03f6511b148d07f3a3da3fc137a3e25bd97284fd0a7cf6f8919d2e70f03637c5e130bf89f13134bbc8fa1be8354c3dfb58de77168fc0ffd8f47cc29fde7816dfa4a0e6cdb436f83d380c17fac7fc4517fdd4988055879c4122c89fbe759036663f84f66e39b192dd0f37c91989e67e5c08857f09738f5e11f25ea3335f509ff447d33339ec575bc9f99e6b2e56dadfe626e5ad8fa37b77a89c5d4036cfb76c43e5dc7fba5c99ff5a7e2129c3286786be7cbb1d127ae0bf8bf9ad6987dbfd54fac87f9c42db1a0f17601363584fed11f18fd8dd5573232f50dbd56c47a8cf8b2d87384f68dc0a6866c7dd736de9ad10fe9bdb5e3a92430e9617c68f39f84b1c078a2b5f13c99ca0beb93bbc492aeef809311e281b0fa33d33585f897dbfe2e31f36bac57e577c4343eac3bb0197fa23db6c1267e607ec1c129e953ef8399cf119f43e214edd5e1fd6944f1be6ec07d7e32d4576a9ec77af61a7100e636fe27cc9407fe67eb3f31b333c4b76a0c360112eb39d65f12650a88fab6fa4fcc7c005cdbf16c6ac6ffcce62fb7ed9d7a11a3fe59804d0ee06f0e31437fe8daf2a7be7923980d0c7fda039b0069f5e0daf64e8dbeb19e57756036c27837b3f59b464c7194cfc62f53bb9ac19f37c18ca1ff28907eca62d45f65fb17e3eda1b0f9c914988f38f468fd25e56944e35d17ccc7dca69733e208f9d7b63e5311c5183faa55b0c931da1ff913a6bd6cfbe74760ee71c403abff549af062f5c40e07b6f92b2760d3be581f59017305fd17b6bf4a4d7cc5f88edf13d3f3ce09d80c2f30df43fb29ce99adcf0eac8334c0fc01f9d33c10181fdaf1aea9fd94c31f56c07cc4d05ed63fd9d8d4a86595f58cfb45cf1c5c5d818dc17ff6c13c14580f39208e84f527d7b63ff34cfac87f4bccc125f2e7f118ed595d130b89f1b5edaf981fd27e4f8ef79b7887f9878bf7f9e6798c47ecf89699f885facc42e214ebadfc113c6d415b1f7bc40afa730fc17d7ab5d5170b235adf721db0e911b01ea2c1a6c6d1de289fa90d86f1bdf50f16f5d7f331983361fbc3a226d6a8ffd2f66f2c3666af573760e12bdbde2eca67d4ccadffba76fcc5a6fd09f67b2ec09c0bf4cf31b11098efa1be999961c01f4fc0d31ab47c35b0bd3f47fd332ed1fe2eea8b7389f41b172ce8fecaea9f093e86ff158238407be7365e31254602fb45b6ffe32391e27969eb8b8fa76fb0f9f7c1c213568fa5ad2feea509fa17f7186cae63be23887d619faf6c7fc84d7fe5dbebe20a6c7204ffa3eb2210601b5f79106b5aef5d06b304fd6f710ee629f2d366c40c5cb9e03e3d07e9854ca3bf902b3d432f590c363580f5bf7b624aaf18814588fe9e5b7f37bd173dcf72b0791ef3e12de28823fd43b0995060be62fb3f1ef7ed5372620f5c3d8145cc313f3fe819cf33942fe9efaf8f897de8a594e0fe7985f64a99447fd15c834d0dd9faedd0be8c537f5edc80452a6d7a8eed5f3837d7317fb1fae262ba2262f3b30a3625c4f8f27660c4f77a60ac7fd9f9b4f15e4dfd858d37dcf4bf58efab4270a27c8ccfe19fca94c8ea31877f2ae9a37d3a3bfee07a341a613c82fc1935439f8e7d9f3097697fba031b7d62ff75995810dbf70913adc09d8d97c21b8dc6c89f076623c407cdc0a644d0c70e58c4f0ffdced5962bdca8eaf856fd2c37831000feb7f0a6cde8ff9b81c18e3e71a2c94447d8ec072246dfe98ed5f45301a633cc8d7887dda8f5e049bf761fd6b0b6c3c08ef477903e3afb89fae0b057f63562f221c051ed6f7f7c17d7fc2ea81d1ff26c45a62bed0804d7eb1de3b210ed09f390fc409cacbec785144a3d843f91e8839f6b3eb55b0a96fcccfe97a9f7e23893d69cbc7acbe453c12d89f739e8815eaa744fdc49187f5fcf69838c2fa797e0d36fd89bd5f4760d323209ee37d267aa1fddd7362ea0f0bd46f2c39eaa3b0fa16c938c2fe2c3f059beac7fa0afcc50c40d17f3beb60531e5b1fdaf6b722158184bff08131dedc274ea1bfb221e6d02b43795299a2bfe40bc49cda0fe563267f889f05718cfdb67a09ccfaf9a6d5bf093f0cfbbb39ea9bb390e68bf0576e5a04f58bfa1146ff88f7f007616ac87286f634a31194cf41fbc820447bf03330d7c2b66fbe01363586f1494dccf0bea602cb58221e7ac409f1e1c0d86fb2f142a834c17e860ec146f1880fd0ab32fe8bf1f12a718ae70bdb1f096dea03f1ff0a2cc6f0f71ce5d7325588ef56af7214a4d8ef604fc4b41edfe5c41afb0b6d0a8e68ffac4bc08243bf5d4c2c88a3816dfd65fb60c9f07ebd43cc15e217de3f16345ee297c402fee74e8825d2e709b186de26b760531f187fdafa945ee8d17ec52a7180f31f5d0836f9c77cec026c5240fb2c13533c2dec784efa52288c779f88293fb98d2f32182becdf4a942f4853eaff0ec1c6bf10dfcf8995827e919f3010d81f77f1fe305434fe3d01f7fd8b98109b1cd8fae3c44a21de5afdcac8d7e8ffbbbd8111cf8ec0a603c77ef3e9c0b6fc93061c45d81f51684f331ec17a62f500161ae3ab09eadba84d62be83fa8e147187fa8d8300e7a5262dd8cc7f6cfbaa126cca67f3d36862ade04ff0d724a078a63607863e1ce231caa3d6893d9c0753284f927a01d66b51fe645a63b63fb07a966910e1fc551112c7380f567803c39faf89539c7fe90e89359d773ae8d9875ecec0e188f87c60d4470d8e47d8afc83330a3f3070af561269cf09f12fa48d55861fd16ccfaf23a67c4a187fe6e8738a1fc77c40cf1ae2b88e9fc93da1818e5d9ef19f92f0538a4f350a2ee19d715da972509ae1f409f66b689f9708efe84f7cf176ecf789e6d138fc1626d609c37bc27f6507fe27660c4b78cd8a7f3419bc401b8ca06b6fee5e4c474dec185fff0c4c77a5e41d7d324b0edad9fc166c681f8b44c1c61fdabb0f14a8a3eff5d46ec819be381319f5c20a6fc36ddc0186f4403a37db688e93c52b54b1c211ed6fdf518d7ebcd81a1b7dd81b19fb74d9ce0baa888531feb6167c402f3ab0c7a17cc0b11bf24d8f827c6ef8a3841ff5ec37f85f215e69be8bf65df7ece053195df391fd8969fed12d3f92ee111c7682fa68929ff594b9c82d9c5c0981ff6e931945f5f0e8cebab0363bed7a72fe87c51d033d663f429b1f4a107bfe700fd753830d6ff4f8815eecffae7e9bc89b81918fe7e078ee8fc890c07467f56128f03cc4724b187f32f0ee53f8a038c47157182f31c4e3630d65711ef643c42fb2a7a1f8f30fe12d083f905e28d46ffaafaf6619c58201eb233e2be7e368915fcb98889a9fc593330c667a80fd5979f49e231957f6560bc5f107bc46a60ab777630b0ad1fb14decd3fd5b0363ffe07c60ac9ff7d703a4277606c6fd0c1c0721ce3f9d128718df890de208eb5d0ee5374e69fc45e54d53ec8f68c4372519fa7f017fd0fdfb26e82f743aa6f564b49f368ac37e1afa17134d31feca8f892385f300d69fd5a82f5f258853f8879460d301e2fc155d37111ae74f1ec17dfac2b6bf1a0fedb1474ced51296281f164730636f9c1fe62491c2bac075aff3093a714fd5b13812315e23cd603381e87d84fbb26f630dfafaf887d8cc7145d3713189cbfb905f7efcf4f891385f3688fc40ce311c7f63fca37fe8ef72f80231a5fd478de8f697fbcce8943b4b74079fcc4c3791b96118774bef59238c27ab5d8238e311e740a623a5fe8a2fda607cea0f7317182fd1717f5e9338df57f97de67265058df477dfa2a457905da370839fa478efc9be111e9710236e5417f5612c7984fc8056286f96ff1dc33ce2f5507c41cfe2eefc189863fb823702ae0ffae3730d603c7c4b43f2735b1267fa5f44d7cb2ef531d319d9776a93cdcc7faba5b1007d89fa817c192f613e436b1c47ca1c806b6ef9b2c83a71e64eb87d237f589f938ead78ce7697e007f0d6389f14076454ce78f33e8214c4638ef2e9f88c788e7f27160aca73e137b68af02e509d300f12c47fd8482ce27d53e7138025f10d3f9d61cfe1499f119fc17e945c918e7bd2a461cc11f73e839e201ad9f6be27efd1dfe1c8918eb63f598381943afa381317ef106c6f98c9298d6a7cb4db0a961cc4f513f71a8515e8df4e26884789da13c7142fb37dd25b1a2f350285f9c26a8bf7c9558a1bfd22e9879888f12e58d4d7d62fd6a9738c2fe5997824d7f88f9293daf38adefef0e8cfd54412c14ce47dbf1914ac200fac9236285f2f113705fbef692d8437c553b60d33f60bcd4104b9c2f93949e293fe2dffac0189f41df66be84f31112fdcfb4bbc1fe1dda3791b47f538d8835c60319e54f098d78d3b30437f9c018ffc11fd3688cf1400b7f4e4d7f0eff417da5e918f323b5464ce77de522b1847ed40dd84c80d03fef10c7d41fa3bc69dfff352d319dc7e84e887dac2765943e4fe8bc59051621d6bf6bf8572a3df43f7a8938c17e0c477f9f4e4b6cdfc78825da3bbf2056a80f66e75bcaf496e82ff270609cef407fc14c7f8ffc4f88133a5fe412d3f8a9833f33c6303ec87d628efd5cb94bace9f329d01be31e9d77a3ebd3157efb3cea9f8918fbcf134abf8f1f4d434ce56b3831958f436fdcf82fc693185f70d3def007c44f9ed2f96ab54d2c705e856d104becd757fbc48ace93209e7316e03c778bf6e03cc17e6f47cf738efdbb62b967f42f1dda939bee1de74be00fd30d039cf70d89b5c6791dc41b6ea6cb385f00ff9e6e77a17f2666fdf9f81be200e7099c11b1c2fe13db21d6a8df02fe224c7f8af808bd0b31c67e9e8a8963b4a746fc15a63d305f5d24e618efa92762cabf443c93ccc778a8f07bc6f921817824c508f53dc97be6187f16c4949f9ad21301f6d3b305628dfa6fe8ba1e6bac6fec13471afa873e55dfff55a80fe3d0d8efcfd05e4ad2fa6b05fd2a5322acff1c13f7fd4d0d36ed837881e7759f7e0d3d6b26517f453030d6b7a0372d04d6ff27d7c412ebdd12fdb7e9fdb01ea8505eddbfafe60363bc66eb578ffae7278b6039c27aed646160ccc7edfc438f3947bcca73b0f4683fff10dcd7a7b6f1437b2cc2fc54ee13d3e7077406367a46fc38001b07437c3c1e18e7452ec19261bf9639e0e907f4ecf5d1c0586f39218e70dde103a3bd8fc07d7e2b94c7e7745e4a17c429f613ab6db0f12fe43f1f18f1ed82d883deda0d622a4f85faf125ad0fc98a58a23df3126c6604d89fbb23a6f50bd5738af2484e4c7aaacf8915d6131bcabf0e35e65394be16dafaabb6fea703339dc0e74197c07c4ce7ff917e2068bf5fd7c431f603f227e214e3538dfc057df9d4e9c0b6be2694be99b1d9fcba9bc463cce7ddad8111dfb67b86fef367625a9f75faf4023acfde738cfe46c6c41af5d1c2bfa7cb89a83f7abfa911b427bddfe81ffe6ee703da8c4fd17fa83de288fa9355628ef35c12fe1eca18e3695d12d37ecc242356b43f87f28426ff68bf1b62ca6f05ff36ad87fca8c581b1ff6be39f8ea218eb11ed2a7142bc32303e8f03bd4766408178360133093d32f84324c408f5fd0896b47f53ed0d8cf1f7397112e0f32428af990ec35fcb536289fa76afc1a604384f72411ca13f52a8bf98d1faa683f2c422417ed80231e5af3a235623f82bf41ecbd118ebabc70343dfa703e37d63e204eb51fa8938457974d533f6e39420a6f9ba46fdc66a8cfdb8c98438c1fcdcdd20d6d85face06fb1f137ac4f52fe86fab821a6fa1087c4d4debae704f1bdb8254ec1ca8ef77562f48cf54bb467d2d79f1a11ab918d97fa915853fd1d0d8cf10bda27e9eb4f9d0f8cfabb1c18eb4d4bc463d43f5b1c18f1e06160ccb76e8903ac5f64636201bd647dfa12eb3b7907362310f4b7a7c4b4dfe42a705fbfee02b1f1305bbe6660f41757c431ea5bba0343df3531d56f55102bf49f0acf9be885f95886f64d7bff74568825d5ff19b109b9b63ed0bf18efa2fae6c4c108e7611de2680cff730746ffca0646ffa58953f85b4def33fd2dce3b3c138fd1ff6ae82b9d7a9c2d5f4a9c205eb88bc4bd7fd1f39a69acbfdbf191199e78c88f4c89239c4fa99f8919f454a2fda7e373ac0faf114bcccfd9cac0e82f6f8815c6f305f4c84c0447fcd8210e30ff53f7c494ff6a6b60ac8f1f113394a73c1f18e7851431a7f2ed0d8cf642f9cce83cc4fc06fae67df9b3b581b19f027d71d5ef8f9e1307e04a12d3f8a4e8ef4fe1cf4ecf1ce37d8dfe8df7f9afea81313ea906c67895f237fd8d7d7e6d609c87eb8805956f7760e417f142981913f4e80d8cf25f10735a6f1a116bb41743fb89fe7dd522b100f39581b13eb23530de7f402cc135fa6769f482f1ec03b18ffaafef07c6fae7e3c0585f447e653f3ed731b1427b1494bef12fec7f72629fe6074bc494ffcc1918f333cacff437f67a3630deb73130fa0b46acc07a7d60e817e32925fd11fc15f953263f980fb5c421f577cfc4e40f7a9398de27ae8915d5af1e18efdf1b18fddb23b10657e8afb5a0cf2f08e8454b9fcebbb5c4146ff28a3805b70b3de3fc48fe40cc711e2747ffac9587fe30af0786fef78969bea8d19e7aaa70cbe7c454ffce8498f27f70eb3a2eb3c6e7cc842b5de56a3773f30fb6c22dddcaadddc66ddf689d3b71afdceb9f6a37eead7be7debb0f6fb07bf7d17d729fcd3337eec21fdaa2bbe42ebb2beeea9b6ccd5d7737dc4d776b4e6cdbdd7177dd3d77df3df8603b748fdc63f7c43d75cf66b653f7fc9bf6be702fdd913b7e87792ec682811bba911b1b4bdc747ecc711dc7610e7784231de5e80fb5ccc99dc2299dcaa99de64dd63a9d33f9b9e62e3857ceb573e3dc1abb1bec76e0af7f7fe3dc3b0f33a4fee83c39cf6fb40567d15972969d9539b15567cd5977369c4d67cbd9fe50db71769d3d67df39700e9da399ecd039764ebe6b9553e7cc39772e66b473e7d2c13c6bec788eef04c64227726227991b4bcd6063fa0917ce8499067da4293369c858ce0a56be25e7ac6415ab7fbed659e3dcb19675c626f6bf5ffebfffd797df5fb16b67c26edeaa7576cbeed83d7bf803bb37f6c89ed8335b608b73614b6c99adcc93d6d92a5b7b9bdf7ced41ce115bffb655d806db645befb06db603adb35db6c7f68d1db04376c48e3f5ce35f6bfd849db233935bf5a176ce2ed825cb9df4cd6d35fa4bb43e669e51b1ff060b5838a3d623165b35df19fbf2fffd7fbffa97f34c5a5f9a13335a67094bcd3470fad9b48fb4e907c5e454ebb37b3f575c7faf759e1995ceeabd072fb46e9fe7392f9c8097bce2f587ebfc53ebf3a1f55ed5775fa9fee1a5dee751ebbce12deff8845f7da439bbfc9adf7c6afdefa1757ecbef8cddfe8db5feaddaef0682de3fb5fe0b6addd8742c7fc0efe764243ff75ae70fc61e8d3df1e7f9d73a5f9821f5d7c6f05f7e1ebe56fca7d67f49adab69749faed4d9e8fed1f17dceb5ce17f9125fe62b7cc5fc7b952fcebbd6678deb7cedbb88fe72a6fea9f55f5ceb0cd15df175631b6ec2378ddf7e80f12dbe3daf5ae7cf7c87eff23dbecf0fa66dc00ff911df755c33a23ffe9b69fddbd5b96f63fce77cfdd7d6bab273f71363a7fc8c9ff30b7ef92136e2e339d5bac77d1ef090473cb65a4f782a5ce108c61fe654ebddec63f821aebf54f9e77cfd6fa675663f0826849042fd6c9ffd1d6fbe994fad0b2db2ef732b7251ccb3d6a771fdcdf625ae7f1dc3bf9dafcfed9edba7d667d1bad57b292a518b46b43fdb6f7fe0cd73aa75a3e843d189177915574ecd9fe6760cff43ad8bebe98ff8f6dacbf9fad723f7973b709f5aff9b68ddeafd46dc8a3b71ff57e9fb85377f6afdf76ae71debf0efda5fff76e4fe0bccd7c58378144fe2592c7ca82d8a25b1fceb68dda87d45ac8a35b12edabf3abe4fb52e36c4a6d812db1f6a3b6257ec7dbd0ecf9fc5be3810877d4ec5913816275f5a6a1eb5fedada9c381567e25c5c88cb6f223be2fad76bef2f353fe7f3f54fadff7a5a172331fd0b0bd3bf82f091164ebf47fde59e9b48443acda374a56bffdf91ecd7d1bae4eea214524a25b5cc642e0b59caeaa5d65fecafff48f573aa7559cb46b6b2e3625693931ffd5e5ecd9cd6b5bc91b7f3ad75a3ee956f7e6346f2e6ae83bf762cefdec83b792f1fe4a37cfa507b960b72f1a5d6e5925c369a5991abc6d6ccbfd6e5c61c6bbdfb5aeb72536ec96db963149ec95db927f7e581d17bf695dabf1fc3bfb6d73ebf5a3f9447f2589ecc6ca7f24c9ecb8b577e7f2947affcfef76d24a7df6df5aecfbe48ffb5cfbe18adcf3e9fddfab1d6c58d0cc48a0c65f85d7437f15d467f5d74375a8f652253e52ae7438d29aec4d75a575229a555c6d6546eac60ebaa54d52fa375ae6ad5a856756aa2aed4b5d1ba5637ea56eeabbbefb4feed69f86f57eae652ebea5ecdf2095e32f5687e9ed4f3abbf5f508bef6925b5c456d5f2ece74bd48a5afd2ead35b52e6ab5319b9927367fa475b5a5b6d58eda55bbaf8ce76d7c577b6a5f1da84375f453ed589dc8589daa3375ae2e3ed42ed5488dbfd1baa77ca7c649787eab02e5b352c979d7faf0ecb50a55a4a6df20961a8d6bedaa5b75237371fe45ebc39edb8f62fb1ccfd7e749eb9abed96926e3d3efd2f9362dad75a6f37758a1cbd7b46ee2f79aaeb4ed3d7e347bd78d6e75a727facad8b5be313f7fbedd388ebe95b1bed3f7f653c91f68fa413feaa7976378fe6c6cf8d4003f9ef21cc7f5a0d7babba09ff5825e945b7a492f1ba54f8c5d4f956ef57eab575e68fddbddf497ba9fdb3d37bdaad7f4bade98c936f596d1d3b6de310a7db6bfd9b5ffddb3bfdfd707e6bf87866649734f1fe9e39fed097f6cfae4a5d6a7b374b1a24ff5993ed717fad2d8297ef79de2a51e89528fa7df5b3afd2e32fb19903fdfb6983bbf5aff83f9d6dc6addb4fb920e752437a7dfdb3955ba4ee59e19c7e7da95fb992bd5775abffb616c9f63ad67ce6cb59931f3c333e1ec6632337590e98c991f9d65e6df7956389b599955598d28ff76633773a775c964d664adb8cdba0c65bf32766db8cd6e5ecedc613c67fbd36fb3c96eb3bb9ff4199974feb49eddbf25e7d9fd3c6a3d7b701733e3a77a317bca9eb30571992d9ad9ba99b1674bd972b662f47ea06e33cc125f1fc3dffd78beeeac646bd9fa1cd846b6f91ead1b8f37d13bdbce76b2dd6c6faa75f3b36fff65e27976981d65c7d9097e3f8bcd9fd6b3536367d97976915d6617b6e42363e3cccbfc2cd0a7afaeefd96fb3e1791666d17f82d6b3384bd8d1db2c4b73f767b7dfec5acf9d9ce55cdde52297b95237b93623f754a53233b17e21cf4c7ceff2dcb4fda3bb9417af7eceedfb3d38abf5bcccabbc9e0b6bf236ef3eb5fed2be8deba2ca5fcbeb86a85e8beb5fb49e5ffd67683dbfce6ff2db37da5d7e9f3fe48f3fd19ef2e719b4eeb3ab7c215fcc979c89dcce97b3e77c255f514dbe6ac6eea989e76dbe26375528f7749caf333fdfc837bf99af7f1fdbbfda73cbb7f2ed7c672e6c37dfcbf7dfa575a3e2fc203fcc8f72a3cefc243fcdcff2f3fc62aaf5fc321fe5e3dcc358ff53eb7f7badfb799087f69bf9fed0f2288ff3244f0bf7a79953b059e7eb052f843329a4735fa84217995ec9564d6c9fa89b222f8a5c15a57e2eaaa22e1a73b51dcecdbd617ffdefa0f56904cfea4c179d3e34ea3e2f26c555715ddc98df67c5ad99b91f64ef9897cda1d68d768bbbe2be7828be5a79289e8a67518b9bd7945e2cb0fd62b158e4a513fd67ccd773bf589af91cc34f33b5512ccfa2f562a5582dd68a75f7d9687e83f9c566b195af17dbd9812c8bc2fcec644bc56e91e5bcd82b44b15f1c7c355fffc3fdf5e2b0382a8e8b9339b0d3e2ac387f9fd6f586f1f98bcccc628acefc5cf2891c4d23f934b217a3623c7b549f57ad3325c3c22bfcafb41e14e1ab315d1651111749914ead744be7a7182bf9dc697df6138a3fc94a31bbd64be95ce7c65b4b55ea322b73e7deb92f8bb22cabb22e9bb2cd9fdda5b22d3b33b3e7bff33db2afccd7cb4979555e97377360b7e55d79ffa9f53fd27a71c776cb07e30b8fe5d3f48ef2b95cb0df8efec2a6fbebe562b9542e972be58afa49ff2b57d9a85cfbd4fa9fa575ecb995ebe546b9596e95dbe54eb95bee95fbe54179581e95c745539e485e9e9667e65fe7e5c5abdf55f1c3fd75abf5db39b177697d3a5b2f2fcb51392ebde2466fa8e7d2cfea322843f3fba88ccba44c2bb772fe067b6ed67fd46e65faad8a970b9599a457d2fc5b55fa6b0f936195315ee55551955555d53fd1aaaaa9da4fadffb95a2fb2aa2b8fab4975555d5737c56e755bdd55f7d543be5e3d56a67f2f44f55c4dbfbfe6fbb334bfbbbf3e7f5aaf16ed1ef99b4d6f645a3d574bd572b552addab9bb568f7a2fcba657abb56a9dbb98bbcf92aa51d046b5f9d14a37b9d8fa56ebfab2daae768a7b5155bbec8c9d557bd5bea87aefd2a7fa54d4d5413153bff6efd8f43c7c75581d55c7d5c987da6975569dff1db46e7cf5a1baa82eab91aaab71e5557e1554611555b1dcd28bee4395e4cbeeb3f3a3f3f03fdc5f9f37ad57e93bd6e1cd48bd766ba76635ff7a6fcdfe5ed4b256b59e7dcfad5aacb33aaf8b99adacab6fd3aaebba7145ddce66e689ae9e7cab75b1525fa9ddcceea64f3fe9c2ceea6b10936a2b6bb3f6fbf7ff5cadd737f56d7d57dfd70f1f6a8ff553fdfc4b6b7df8ec8bbb983dd40b052f7829eb4555d74bf57291d52bf56abd5634ce15d5fd8fcec3ff607ffd53ebbfa3f5f57aa3deacb766b2ed7aa7defd4eeb7bf57e7d501fce6807f5517dfcbdd68bf8eb13b13dd727a2ae4febb3faecaf54bad5fa797d515fd6a37afca1e6d57e1dfc1db44ef5ba5887755425755c2775dab88de3dc9707f5aafbe5d31d3f3e0fffeafefabc695d6e362cbf98cd1ade884636aad1c5b8c99afccb953234bf2f9ab2a99a3a3f9931d5a6690b976d4d3f113e836d355df39d1e9a2bae66fd74acfddb706973fda6efa05ac95ab5d5bcf5bb8bfe64ad37b7cd5d73df3c348f1f6a4fcd73b3f077d0fa97efa53123f6a762ad596c969ae566a559cd5f7ecbec8c9f5f9f37ad3bebcd9a586cd69b8d196db3d96ab69b9d6ae5c56f779bcdecb8d96bf6bff9fd1fd94173d81c59adcfdabe5bcdf12b5a3f694edfb37bcdaa5f42eb67cd7973d15c36a30fb571e335fe2fadf51f7c0755ceb347f9dadad1cbefa5f9c3fdf579db737befdf6e6c02fcbcfafbf0b52b7ffcb71b7f15ad67a7a26e22fd97ced2bfd17adc244ddaba1f6a4ecb5afeab6bfdc7df2dc96ebefbfdb77ff7e50ff6d78bc356b4b2557360dae424fbd4fa2c5ab79f6fbd64bb6dfe313affa2f5b668cbb6fa50abdbe6d7d7fa3bffc6d39b3ebfdeb66dd74ee6c4baf64a3cb4d7ed4d7bdbde7da8ddb70fede3dc6b7daf7d32f6dccef2b742fe746b173fb5fee7697dd6ef8c9ee5f3ebed52bbdcaeb4ab73606bed7abb314fdf0f3fdf5a9ffefdc676d3d856bbddeeb4bb1f647bedfea7d6ff5cadbfd966fcfc7abbf4fab7187d84a98df6e053eb6fd2fa9ee34fff72e3f453d8eda1e3bae9c798e3b6470efbd4fa8fec2f1bc3bfe9f3eb9f5afff5b43efdf45a7bdc9e4c3fbbf6c17f91d97eceed53eb3fb299b41ebc47ebdfedb9fdcefefaa7d67f2dad8b15c72f16dad3f68c1dbf27c54fadff95f6ef9ca579775c7f35c67f6afd97d2ba89e736a29fb7174ef493be79e253eb7faafdbb6769de3c5f7f3943ff7e9ffd53eb9f5affd4fa4fb5d9b5fece75f8afa3faf771fe81dd7f6afdd7d1ba6eda4b9ef3bc1db5e3d6fbf059faa7d6df647fd1dadcb0b3f683cfc1cca9d6c543eb37611bb4e1479a5868a3369e27adb7499b766ee7f2aa733e5cdfdf69bd631def44937ea475b2539dcefdee3d7f4deb2799d57ae3dcb1d6a8fd2d76953dcca4f55ba3e4fb37d96397b74b5df1d1354226baa23d90755776555777cd875adb75dda469f3749aaf994c35c7ddd5f75aefaedfa5f53568bdbbe96ebbbbeebebbe75bb3ffd5a99f69dd0373bbc7eea97bee16bac50fb5a56eb95be956bbb5ae981b5bef369cab6ed3b9ebb67edf98d76d3977cebd3393d69da76edb79c64f6ff877ff1be799aeef388bdd6eb7d7ed7707736087dd51773c4f5aef4ebad3ee6c463bef2eba4bfbfd5764d3efc7ea46ddb8f3d8da6cd679dd43e75bad075dd8455d3c879674e9c4358ec7267c223ed4e4f4cfa34cb2493e29e6c8cab26d9c3a9e546f31e7aa58759fdd9b37d9a2bb34a927cddb8ea4bacb936e32995ccd8d5d4f6e26b793bbc9fde4e183ed71f234793675b3f00e5b9c2c55e94b9b2c4f56de69abfffcfffffd8fff01a92c3e50</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>ButtonLoeschen</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotClearAll()</slot>
+ </connection>
+ <connection>
+ <sender>EditAleman</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditYo1</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditYo2</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditTu1</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditTu2</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditTu3</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditEl1</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditEl2</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditEl3</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditNosotros1</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditNosotros2</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditNosotros3</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditVosotros1</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditVosotros2</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditVosotros3</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditEllos1</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditEllos2</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>EditEllos3</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonN</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotN()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonA</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotA()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonE</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotE()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonI</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotI()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonU</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotU()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonO</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotO()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonKorrektur</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotCorregir()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonSolution</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotSolution()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonWeiter</sender>
+ <signal>clicked()</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotWeiter()</slot>
+ </connection>
+ <connection>
+ <sender>EditYo3</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotCopyText()</slot>
+ </connection>
+ <connection>
+ <sender>EditYo3</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>QLernen</receiver>
+ <slot>slotFont()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>EditAleman</tabstop>
+ <tabstop>EditYo1</tabstop>
+ <tabstop>EditYo2</tabstop>
+ <tabstop>EditYo3</tabstop>
+ <tabstop>EditTu1</tabstop>
+ <tabstop>EditTu2</tabstop>
+ <tabstop>EditTu3</tabstop>
+ <tabstop>EditEl1</tabstop>
+ <tabstop>EditEl2</tabstop>
+ <tabstop>EditEl3</tabstop>
+ <tabstop>EditNosotros1</tabstop>
+ <tabstop>EditNosotros2</tabstop>
+ <tabstop>EditNosotros3</tabstop>
+ <tabstop>EditVosotros1</tabstop>
+ <tabstop>EditVosotros2</tabstop>
+ <tabstop>EditVosotros3</tabstop>
+ <tabstop>EditEllos1</tabstop>
+ <tabstop>EditEllos2</tabstop>
+ <tabstop>EditEllos3</tabstop>
+ <tabstop>ButtonN</tabstop>
+ <tabstop>ButtonA</tabstop>
+ <tabstop>ButtonE</tabstop>
+ <tabstop>ButtonI</tabstop>
+ <tabstop>ButtonO</tabstop>
+ <tabstop>ButtonU</tabstop>
+ <tabstop>ButtonLoeschen</tabstop>
+ <tabstop>ButtonKorrektur</tabstop>
+ <tabstop>ButtonSolution</tabstop>
+ <tabstop>ButtonWeiter</tabstop>
+</tabstops>
+<slots>
+ <slot>slotA()</slot>
+ <slot>slotClearAll()</slot>
+ <slot>slotCopyText()</slot>
+ <slot>slotCorregir()</slot>
+ <slot>slotE()</slot>
+ <slot>slotFont()</slot>
+ <slot>slotI()</slot>
+ <slot>slotN()</slot>
+ <slot>slotO()</slot>
+ <slot>slotSolution()</slot>
+ <slot>slotTextCopy(QString)</slot>
+ <slot>slotU()</slot>
+ <slot>slotWeiter()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kverbos/kverbos/qresult.ui b/kverbos/kverbos/qresult.ui
new file mode 100644
index 00000000..a8e93bb0
--- /dev/null
+++ b/kverbos/kverbos/qresult.ui
@@ -0,0 +1,275 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>QResult</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>QResult</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>714</width>
+ <height>420</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="caption">
+ <string>Results of Training Sessions</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout8</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextUser</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>User:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabelUser</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="frameShape">
+ <enum>Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="text">
+ <string>nobody</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextSession</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Number of training sessions:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabelSessions</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="frameShape">
+ <enum>Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="text">
+ <string>5</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTable">
+ <property name="name">
+ <cstring>TableResult</cstring>
+ </property>
+ <property name="numRows">
+ <number>10</number>
+ </property>
+ <property name="numCols">
+ <number>3</number>
+ </property>
+ </widget>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Right</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Wrong</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>ListViewVerben</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>PushOK</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>PushOK</sender>
+ <signal>clicked()</signal>
+ <receiver>QResult</receiver>
+ <slot>slotDlgEnde()</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>slotDlgEnde()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kverbos/kverbos/qverbedit.ui b/kverbos/kverbos/qverbedit.ui
new file mode 100644
index 00000000..f16b76de
--- /dev/null
+++ b/kverbos/kverbos/qverbedit.ui
@@ -0,0 +1,196 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>QVerbEdit</class>
+<comment>Ein Dialog des kverbos Projektes.
+Die im Programm verfühbaren Verben
+werden in der Listenansicht ausgegeben
+und können bearbeitet werden.</comment>
+<author>Arnold Kraschinski</author>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>QVerbEdit</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>588</width>
+ <height>482</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Verb List</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonDelete</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonOK</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonEdit</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Edit</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QListView" row="0" column="0">
+ <column>
+ <property name="text">
+ <string>Spanish Verb</string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Foreign Language</string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>ListView1</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="397">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022230543251d2e253d856405e5b4340320007195215c900058160d502aa68c06069b1855fd5b6bcd0500ae904334</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="412">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d85640565033000719541dcb434183711c205098015a3015a8829a3017a8925a201aa8bd55a73010064165746</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>ButtonDelete</sender>
+ <signal>clicked()</signal>
+ <receiver>QVerbEdit</receiver>
+ <slot>slotDelete()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonOK</sender>
+ <signal>clicked()</signal>
+ <receiver>QVerbEdit</receiver>
+ <slot>slotDlgEnde()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>QVerbEdit</receiver>
+ <slot>slotCancel()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonEdit</sender>
+ <signal>clicked()</signal>
+ <receiver>QVerbEdit</receiver>
+ <slot>slotEditVerb()</slot>
+ </connection>
+ <connection>
+ <sender>ListView1</sender>
+ <signal>doubleClicked(QListViewItem*)</signal>
+ <receiver>QVerbEdit</receiver>
+ <slot>slotEditVerb()</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>slotEditVerb()</slot>
+ <slot>slotCancel()</slot>
+ <slot>slotDelete()</slot>
+ <slot>slotDlgEnde()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kverbos/kverbos/qverbosoptions.ui b/kverbos/kverbos/qverbosoptions.ui
new file mode 100644
index 00000000..da432531
--- /dev/null
+++ b/kverbos/kverbos/qverbosoptions.ui
@@ -0,0 +1,1228 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>QVerbosOptions</class>
+<comment>Dieser Dialog gehört zum KVerbos Projekt.
+Damit können einige Einstellungen zum
+Programm verändert werden, z.B welche
+Zeiten geübt werden sollen und welche nicht.</comment>
+<author>Arnold Kraschinski</author>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>QVerbosOptions</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>536</width>
+ <height>642</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout12</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Select Times</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout10</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelTiempos</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>tiempos</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelPresente</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>presente</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelImperfecto</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>imperfecto</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelIndefinido</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>indefinido</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelFuturo</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>futuro</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelCondicional</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>condicional</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelSubPresente</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>subjuntivo presente</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelSubPasado</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>subjuntivo pasado</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelSubFuturo</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>subjuntivo futuro</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelImperativo</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>imperativo</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelNormal</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>normal</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1_1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1_4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1_5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1_6</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1_7</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1_8</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox1_9</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer12</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout12</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelProgresivo</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>progresivo</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox2_1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox2_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox2_4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox2_5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox2_6</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox2_7</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox2_8</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout10</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>LabelPerfecto</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>perfecto</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox3_1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox3_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox3_4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox3_5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox3_6</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox3_7</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>CheckBox3_8</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer14</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup1</cstring>
+ </property>
+ <property name="title">
+ <string>Select Correction Mode</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>RadioStrictCorr</cstring>
+ </property>
+ <property name="text">
+ <string>Correct strictly</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>RadioIgnoreAcc</cstring>
+ </property>
+ <property name="text">
+ <string>Ignore accents</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBoxKFeeder</cstring>
+ </property>
+ <property name="title">
+ <string>Control of KFeeder</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>Layout10</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer row="0" column="1">
+ <property name="name">
+ <cstring>Spacer11_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>CheckBoxSplash</cstring>
+ </property>
+ <property name="text">
+ <string>Show splash screen</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>CheckBoxKFeeder</cstring>
+ </property>
+ <property name="text">
+ <string>Using KFeeder</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>CheckBoxMode</cstring>
+ </property>
+ <property name="text">
+ <string>Move food automatically</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonCerrar</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>ButtonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>ButtonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>QVerbosOptions</receiver>
+ <slot>slotCancel()</slot>
+ </connection>
+ <connection>
+ <sender>ButtonCerrar</sender>
+ <signal>clicked()</signal>
+ <receiver>QVerbosOptions</receiver>
+ <slot>slotDlgEnde()</slot>
+ </connection>
+ <connection>
+ <sender>CheckBoxKFeeder</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CheckBoxSplash</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>CheckBoxKFeeder</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CheckBoxMode</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>slotDlgEnde()</slot>
+ <slot>slotCancel()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kverbos/kverbos/span16.png b/kverbos/kverbos/span16.png
new file mode 100644
index 00000000..276232e7
--- /dev/null
+++ b/kverbos/kverbos/span16.png
Binary files differ
diff --git a/kverbos/kverbos/startuplogo.png b/kverbos/kverbos/startuplogo.png
new file mode 100644
index 00000000..77c580b0
--- /dev/null
+++ b/kverbos/kverbos/startuplogo.png
Binary files differ
diff --git a/kverbos/kverbos/startuplogo.svgz b/kverbos/kverbos/startuplogo.svgz
new file mode 100644
index 00000000..1671c39f
--- /dev/null
+++ b/kverbos/kverbos/startuplogo.svgz
Binary files differ
diff --git a/kverbos/kverbos/user.png b/kverbos/kverbos/user.png
new file mode 100644
index 00000000..666d0641
--- /dev/null
+++ b/kverbos/kverbos/user.png
Binary files differ
diff --git a/kverbos/kverbos/verbspanish.cpp b/kverbos/kverbos/verbspanish.cpp
new file mode 100644
index 00000000..8f292419
--- /dev/null
+++ b/kverbos/kverbos/verbspanish.cpp
@@ -0,0 +1,943 @@
+/***************************************************************************
+ verbspanish.cpp - description
+ -------------------
+ begin : Sun Dec 23 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 "verbspanish.h"
+
+// include files for Qt
+
+// application specific includes
+
+endingsArray verbSpanish::verbEndings = { { {"o", "as", "a", "amos", "is", "an"}, /* presente */
+ {"o", "es", "e", "emos", "is", "en"},
+ {"o", "es", "e", "imos", "s", "en"}},
+ { {"aba", "abas", "aba", "bamos", "abais", "aban"}, /*imperfecto */
+ {"a", "as", "a", "amos", "ais", "an"},
+ {"a", "as", "a", "amos", "ais", "an"}},
+ { {"", "aste", "", "amos", "asteis", "aron"}, /* indefinido */
+ {"", "iste", "i", "imos", "isteis", "ieron"},
+ {"", "iste", "i", "imos", "isteis", "ieron"}},
+ { {"", "s", "", "emos", "is", "n"}, /* futuro */
+ {"", "s", "", "emos", "is", "n"},
+ {"", "s", "", "emos", "is", "n"}},
+ { {"a", "as", "a", "amos", "ais", "an"}, /* condicional */
+ {"a", "as", "a", "amos", "ais", "an"},
+ {"a", "as", "a", "amos", "ais", "an"}},
+ { {"e", "es", "e", "emos", "is", "en"}, /* subjuntivo presente */
+ {"a", "as", "a", "amos", "is", "an"},
+ {"a", "as", "a", "amos", "is", "an"}},
+ { {"-", "-", "-", "-", "-", "-"}, /* subjuntivo pasado */
+ {"-", "-", "-", "-", "-", "-"},
+ {"-", "-", "-", "-", "-", "-"}},
+ { {"%", "%", "%", "%", "%", "%"}, /* subjuntivo futuro */
+ {"%", "%", "%", "%", "%", "%"},
+ {"%", "%", "%", "%", "%", "%"}},
+ { {"+", "+", "+", "+", "+", "+"}, /* imperativo */
+ {"+", "+", "+", "+", "+", "+"},
+ {"+", "+", "+", "+", "+", "+"}}
+ };
+
+QString verbSpanish::refPron[PERSONEN] = {"me", "te", "se", "nos", "os", "se"};
+QString verbSpanish::estar[MAX_TIEMPOS][PERSONEN] =
+ { {"estoy", "ests", "est", "estamos", "estis", "estn"},
+ {"estaba", "estabas", "estaba", "estbamos", "estabais", "estaban"},
+ {"estuve", "estuviste", "estuvo", "estuvimos", "estuvisteis", "estuvieron"},
+ {"estar", "estars", "estar", "estaremos", "estaris", "estarn"},
+ {"estara", "estara", "estara", "estaramos", "estaras", "estaran"},
+ {"est", "ests", "est", "estemos", "estis", "estn"},
+ {"estuviera o estuviese", "estuvieras o stuvieses", "estuviera o estuviese",
+ "estuviramos o estuvisemos", "estuvierais o estuvieseis", "estuvieran o estuviesen"},
+ {"estuviere", "estuvieres", "estuviere", "estuviremos", "estuviereis", "estuvieren"},
+ {"", "est", "est", "estemos", "estad", "estn"}
+ };
+
+QString verbSpanish::haber[MAX_TIEMPOS][PERSONEN] =
+ { {"he", "has", "ha", "hemos", "habis", "han"},
+ {"haba", "habas", "haba", "habamos", "habais", "haban"},
+ {"hube", "hubiste", "hubo", "hubimos", "hubisteis", "hubieron"},
+ {"habr", "habrs", "habr", "habremos", "habris", "habrn"},
+ {"habra", "habras", "habra", "habramos", "habrais", "habran"},
+ {"haya", "hayas", "haya", "hayamos", "hayis", "hayan"},
+ {"hubiera o hubiese", "hubieras o hubieses", "hubiera o hubiese",
+ "hubiramos o hubisemos", "hubierais o hubieseis", "hubieran o hubiesen"},
+ {"hubiere", "hubieres", "hubiere", "hubiremos", "hubiereis", "hubieren"},
+ {"", "he", "haya", "hayamos", "habed", "hayan"}
+ };
+
+QString verbSpanish::timeNames[MAX_TIEMPOS*MAX_SUBTYPES] =
+ {"presente", "imperfecto", "indefinido", "futuro", "condicional",
+ "subjuntivo presente", "subjuntivo pasado", "subjuntivo futuro", "imperativo",
+ "presente progresivo", "imperfecto progresivo", "indefinido progresivo", "futuro progresivo", "condicional progresivo",
+ "subjuntivo presente progresivo", "subjuntivo pasado progresivo", "subjuntivo futuro progresivo", "error:form doesn't exist",
+ "presente perfecto", "imperfecto perfecto", "error:form doesn't exist", "futuro perfecto", "condicional perfecto",
+ "subjuntivo presente perfecto", "subjuntivo pasado perfecto", "subjuntivo futuro perfecto", "error:form doesn't exist",
+ };
+
+QString verbSpanish::groupNames[MAX_GRUPPEN] =
+ {"regular", "irregular", "e > ie", "o > ue", "u > ue", "e > i",
+ "c > qu", "g > gu", "z > c", "gu > g", "c > z", "g > j",
+ "gu > g", "qu > c", "accent like 'enviar'",
+ "accent like 'continuar'", "missing i"};
+
+
+int verbSpanish::maxTiempos = MAX_TIEMPOS;
+int verbSpanish::maxSubtypes = MAX_SUBTYPES;
+int verbSpanish::persons = PERSONEN;
+int verbSpanish::maxForms = MAX_TIEMPOS * MAX_SUBTYPES;
+
+
+verbSpanish::verbSpanish()
+{
+ foreign = "";
+ spanish = "";
+ gerund = "";
+ partizip = "";
+ group = REGULAR;
+ conjugated = false;
+ error = false;
+ int z;
+ int p;
+ for (z = presente; z <= imperativo; z++)
+ {
+ for (p = yo; p <= ellos; p++)
+ {
+ forms[z][p] = "";
+ };
+ };
+}
+
+verbSpanish::verbSpanish(const verbSpanish& v)
+{
+ foreign = v.foreign;
+ spanish = v.spanish;
+ group = v.group;
+ if (IRREGULAR != group)
+ {
+ gerund = "";
+ partizip = "";
+ conjugated = false;
+ error = v.error;
+ int z;
+ int p;
+ for (z = presente; z <= imperativo; z++)
+ for (p = yo; p <= ellos; p++)
+ forms[z][p] = "";
+ }
+ else
+ {
+ gerund = v.gerund;
+ partizip = v.partizip;
+ error = v.error;
+ conjugated = v.conjugated;
+ int z;
+ int p;
+ for (z = presente; z <= imperativo; z++)
+ for (p = yo; p <= ellos; p++)
+ forms[z][p] = v.forms[z][p];
+ };
+}
+
+verbSpanish::~verbSpanish()
+{
+ // momentan hat die Klasse gar keine dynamisch erstellten
+ // Elemente, insofern ist auch der Destruktor recht arbeitslos
+}
+
+verbSpanish& verbSpanish::operator= (const verbSpanish& v)
+{
+ if (this == &v)
+ return *this; // Selbstzuweisung abfangen
+ foreign = v.foreign;
+ spanish = v.spanish;
+ group = v.group;
+ error = v.error;
+ if (group != IRREGULAR)
+ {
+ gerund = "";
+ partizip = "";
+ conjugated = false;
+ int z;
+ int p;
+ for (z = presente; z <= imperativo; z++)
+ for (p = yo; p <= ellos; p++)
+ forms[z][p] = "";
+ }
+ else
+ {
+ gerund = v.gerund;
+ partizip = v.partizip;
+ conjugated = v.conjugated;
+ int z;
+ int p;
+ for (z = presente; z <= imperativo; z++)
+ for (p = yo; p <= ellos; p++)
+ forms[z][p] = v.forms[z][p];
+ };
+ return *this;
+}
+
+// Der Vergleichsoperator prft, ob zwei verb-Objekte das gleiche Verb meinen. Dazu
+// werden die spanische und die fremdsprachliche Form geprft.
+bool verbSpanish::operator== (const verbSpanish& v) const
+{
+ return ((spanish == v.spanish) && vergleich(foreign, v.foreign));
+}
+
+// prft ob der QString mit der spanischen Form bereinstimmt.
+bool verbSpanish::operator== (const QString& s) const
+{
+ return (spanish == s);
+}
+
+// prft die alphabetische Reihenfolge zweier Verben, dabei werden die spanischen Verben als
+// Vergleichskriterium verwendet.
+bool verbSpanish::operator< (const verbSpanish& v) const
+{
+ return (spanish < v.spanish) || ((spanish == v.spanish) && (foreign < v.foreign));
+}
+
+
+// Vergleicht die beiden Verbobjekte komplett, mit allen Formen und Feldern.
+bool verbSpanish::allEqual(verbSpanish v)
+{
+ bool result = ((spanish == v.spanish) && (foreign == v.foreign) && (group == v.group));
+ if (result && (IRREGULAR == group))
+ {
+ if (!conjugated)
+ conjugateAll();
+ if (v.conjugated)
+ v.conjugateAll();
+ result = ((delAutoForm(gerund) == delAutoForm(v.gerund)) && (delAutoForm(partizip) == delAutoForm(v.partizip)));
+ if (result)
+ {
+ int z;
+ int p;
+ for (z = presente; z <= imperativo; z++)
+ for (p = yo; p <= ellos; p++)
+ if (delAutoForm(forms[z][p]) != delAutoForm(v.forms[z][p]))
+ result = false;
+ };
+ };
+ return result;
+}
+
+// prft, ob alle Stringfelder des Objektes leere Strings sind.
+bool verbSpanish::isEmpty() const
+{
+ bool result = (spanish.isEmpty() && foreign.isEmpty());
+ if (result && (IRREGULAR == group))
+ {
+ result = (gerund.isEmpty() && partizip.isEmpty());
+ if (result)
+ {
+ int z;
+ int p;
+ for (z = presente; z <= imperativo; z++)
+ for (p = yo; p <= ellos; p++)
+ if (!forms[z][p].isEmpty())
+ result = false;
+ };
+ };
+ return result;
+}
+
+// Gibt den Verbstamm zurck. Dazu werden die letzten beiden Zeichen abgetrennt,
+// handelt es sich um ein reflexives Verb, dann sind es vier Zeichen.
+// Hier werden auch die Stammvernderungen der Gruppenverben durchgefhrt.
+QString verbSpanish::getStem() const
+{
+ int ab = 2;
+ if (isReflexiv())
+ ab += 2;
+ QString s = spanish;
+ s.truncate(s.length()-ab);
+ return s;
+}
+
+// gibt das Verb in der nicht spanischen Sprache zurck
+QString verbSpanish::getForeign() const
+{
+ return foreign;
+}
+
+// Setzt die nicht-spanische Bedeutung des Verbes. Dabei werden alle fhrenden und
+// folgenden whitespaces gelscht und alle im string enthaltenen whitespaces zu einem
+// Leerzeichen umgewandelt.
+// Die Funktion hat den Nebeneffekt, dass auch der String aus dem aufrufenden Program-
+// code umgewandelt wird.
+// Es wird nicht geprft, ob der string keine Leerzeichen mehr enthlt, denn das
+// drfte eigentlich nicht vorkommen.
+void verbSpanish::setForeign(const QString &s)
+{
+ foreign = s.simplifyWhiteSpace();
+}
+
+// gibt das Verb auf spanisch zurck
+QString verbSpanish::getSpanish() const
+{
+ return spanish;
+}
+
+// Setzt die spanische Bedeutung des Verbes.
+// Siehe auch die Bemerkungen zur Arbeitsweise der Funktionbei der setForeign Funktion.
+void verbSpanish::setSpanish(const QString &s)
+{
+ spanish = s.simplifyWhiteSpace();
+}
+
+// gibt die Gerundform des Verbes zurck. Dabei gilt: Alle Gruppenverben haben einen
+// regelmigen Gerund. Nur die irregulren Verben haben eventuell auch eine andere Gerundform
+QString verbSpanish::getGerund()
+{
+ if (!conjugated)
+ conjugateAll();
+ return delAutoForm(gerund);
+}
+
+// setzt die Gerundform des Verbes
+// Siehe auch die Bemerkungen zur Arbeitsweise der Funktionbei der setForeign Funktion.
+void verbSpanish::setGerund(const QString &s)
+{
+ gerund = s.simplifyWhiteSpace();
+}
+
+// gibt die Partizipform der Verbes zurck.Dabei gilt: Alle Gruppenverben haben ein
+// regelmiges Partizip. Nur die irregulren Verben haben eventuell auch eine andere Partizipform
+QString verbSpanish::getPartizip()
+{
+ if (!conjugated)
+ conjugateAll();
+ return delAutoForm(partizip);
+}
+
+// setzt die Partizipform der Verbes
+// Siehe auch die Bemerkungen zur Arbeitsweise der Funktionbei der setForeign Funktion.
+void verbSpanish::setPartizip(const QString &s)
+{
+ partizip = s.simplifyWhiteSpace();
+}
+
+// gibt die Endung des Verbes zurck.
+endings verbSpanish::getEnding(bool& good)
+{
+ if (spanish.isEmpty())
+ return empty;
+ endings en = empty;
+ QString endung = "";
+ if (isReflexiv())
+ {
+ endung = spanish.mid(spanish.length()-4, 2);
+ }
+ else
+ {
+ endung = spanish.right(2);
+ };
+ if (endung == "ar")
+ {
+ en = ar;
+ }
+ else
+ if ((endung == "ir")||(endung == "r"))
+ {
+ en = ir;
+ }
+ else
+ if (endung == "er")
+ {
+ en = er;
+ }
+ else
+ {
+ good = false;
+ // qWarning("The class verb couldn't find the ending of the verb " + spanish + ".");
+ };
+ return en;
+}
+
+// gibt zurck, ob das Verb reflexiv ist. Dazu werden die letzten beiden Zeichen
+// untersucht. Sind diese beiden 'se', dann ist es ein reflexives Verb.
+bool verbSpanish::isReflexiv() const
+{
+ return (spanish.right(2) == "se");
+}
+
+// gibt das Reflexivpronomen zurck, das zu der angegebenen Person gehrt.
+QString verbSpanish::getRefPron(int i)
+{
+ return refPron[i];
+}
+
+// prft, ob es ein unregelmiges Verb ist
+bool verbSpanish::isGroupVerb()
+{
+ return (IRREGULAR != group);
+}
+
+// setzen, ob ein Verb regelmig oder unregelmig ist
+void verbSpanish::setGroup(const int g)
+{
+ group = g;
+}
+
+// Gibt die angeforderte Verbform des Verbes zurck, die durch die Zeit t,
+// die Person p und den Untertyp typ angegeben wird. Mit dieser Funktion knnen auch
+// die zusammengesetzten Zeitforms erfragt werden.
+// parts[0] = ref. Pron. part[1] = Hilfsverb parts[2] = verb
+bool verbSpanish::getForm(int t, int p, int typ, QString parts[])
+{
+ bool good = !error;
+ if (good)
+ {
+ if (!conjugated)
+ good = conjugateAll();
+ // sich um das Reflexivpronomen kmmern
+ if (isReflexiv())
+ {
+ parts[0] = getRefPron(p);
+ }
+ else
+ parts[0] = "";
+ // die anderen Teile der Form sammeln
+ switch (typ)
+ {
+ // die normale Zeitenbildung: kein Hilfsverb, Zeitform
+ case 0:
+ parts[1] = "";
+ parts[2] = forms[t][p];
+ break;
+ // die Verlaufsform der Zeitenbildung
+ case 1:
+ parts[1] = estar[t][p];
+ parts[2] = gerund;
+ break;
+ // die Perfektform der Zeitenbildung
+ case 2:
+ parts[1] = haber[t][p];
+ parts[2] = partizip;
+ break;
+ default:
+ good = false;
+ };
+ // Das '#' bei den automatisch erstellten Formen lschen.
+ parts[2] = delAutoForm(parts[2]);
+ };
+ return good;
+}
+
+// Eine berladene Funktion, die einen String zurckgibt.
+QString verbSpanish::getForm(int t, int p)
+{
+ QString st[3];
+ if (getForm(t, p, normal, st))
+ return st[2];
+ return "";
+}
+
+// setzt die angegebene Verbform mit int als Parameter
+// Siehe auch die Bemerkungen zur Arbeitsweise der Funktion bei der setForeign Funktion.
+void verbSpanish::setForm(int t, int p, QString s)
+{
+ forms[t][p] = s.simplifyWhiteSpace();
+}
+
+// bildet die Formen, d.h. hngt die Endungen an den unvernderlichen
+// Teil an.
+// Die Form muss bisher ein leerer String sein.
+bool verbSpanish::conjugateTime(const int t, const QString &s)
+{
+ bool good = true;
+ for (int i = yo; i <=ellos; i++)
+ {
+ if (forms[t][i].isEmpty())
+ {
+ forms[t][i] = s + verbEndings[t][getEnding(good)][i]+'#';
+ if (group > IRREGULAR)
+ good = groupVerb(forms[t][i], t, i);
+ };
+ };
+ return good;
+}
+
+// bildet die Formen des Prsens
+// dazu wird an den Verbstamm die entsprechende Endung angehngt
+bool verbSpanish::conjugatePresente()
+{
+ QString s = getStem();
+ return conjugateTime(presente, s);
+}
+
+// bildet die Formen des Imperfecto
+// dazu wird an den Verbstamm die entsprechende Endung angehngt
+bool verbSpanish::conjugateImperfecto()
+{
+ QString s = getStem();
+ return conjugateTime(imperfecto, s);
+}
+
+// bildet die Formen des Indefinido
+// dazu wird an den Verbstamm die entsprechende Endung angehngt
+bool verbSpanish::conjugateIndefinido()
+{
+ QString s = getStem();
+ return conjugateTime(indefinido, s);
+}
+
+// bildet die Formen des Futuro
+// dazu wird die entsprechende Endung an den Infinitiv angehngt. Bei den reflexiven
+// Verben muss das 'se' abgetrennt werden.
+bool verbSpanish::conjugateFuturo()
+{
+ QString s = getSpanish();
+ if (isReflexiv())
+ s = s.left(s.length()-2);
+ return conjugateTime(futuro, s);
+}
+
+// bildet die Formen des Conditional
+// diese Formen werden ebenfalls vom Infinitiv des Verbes abgeleitet
+bool verbSpanish::conjugateCondicional()
+{
+ QString s = getSpanish();
+ if (isReflexiv())
+ s = s.left(s.length()-2);
+ return conjugateTime(condicional, s);
+}
+
+// IM ctor der Optionen-Klasse und beim Lesen der Optionen werden die nicht
+// fertigen Zeiten abegewhlt. NIcht vergessen!
+bool verbSpanish::conjugateSubPresente()
+{
+ // qWarning("Not yet implemented.");
+ return true;
+}
+
+bool verbSpanish::conjugateSubPasado()
+{
+ // qWarning("Not yet implemented.");
+ return true;
+}
+
+bool verbSpanish::conjugateImperativo()
+{
+ // qWarning("Not yet implemented.");
+ return true;
+}
+
+// konjugiert alle Zeitenformen
+bool verbSpanish::conjugateAll()
+{
+ bool good = true;
+ good = good && conjugatePresente();
+ good = good && conjugateImperfecto();
+ good = good && conjugateIndefinido();
+ good = good && conjugateFuturo();
+ good = good && conjugateCondicional();
+ good = good && conjugateSubPresente();
+ good = good && conjugateSubPasado();
+ good = good && conjugateImperativo();
+ if (partizip.isEmpty())
+ {
+ partizip = getStem();
+ switch (getEnding(good))
+ {
+ case ar:
+ partizip += "ado#";
+ break;
+ case er:
+ case ir:
+ partizip += "ido#";
+ break;
+ default:
+ good = false;
+ };
+ };
+ if (gerund.isEmpty())
+ {
+ gerund = getStem();
+ switch (getEnding(good))
+ {
+ case ar:
+ gerund += "ando#";
+ break;
+ case er:
+ case ir:
+ // Bei den Verben der Gruppe 16 fllt das i weg.
+ if (getGroup() == 16)
+ gerund += "endo#";
+ else
+ {
+ // Bei Verben der Gruppe 5 ndert sich der Stamm fr den Gerund
+ if (getGroup() == 5)
+ {
+ int pos = gerund.findRev("e");
+ if (pos>=0)
+ {
+ gerund.replace(pos, 1, "i");
+ };
+ }
+ gerund += "iendo#";
+ };
+ break;
+ default:
+ good = false;
+ };
+ };
+ conjugated = true;
+ error = !good;
+ return good;
+}
+
+// Stringvergleich, bei dem es nur auf hnlich Bestandteile ankommt.
+// Bestandteile sind durch Komma getrennt.
+bool verbSpanish::vergleich(const QString& s1, const QString& s2) const
+{
+ bool gleich=false;
+ unsigned int l=0;
+ int r=s1.find(",", l);
+ while ((l<s1.length()) && (false==gleich))
+ {
+ if (-1 == r)
+ r = s1.length();
+ if (s2.find(s1.mid(l, r-l).simplifyWhiteSpace(), 0) != -1)
+ {
+ gleich = true;
+ }
+ else
+ {
+ l = r+1;
+ r=s1.find(",", l);
+ };
+ };
+ return gleich;
+}
+
+// returns true if the form is automatic generated and has a '#' on the right end.
+bool verbSpanish::isAutoForm(QString& s) const
+{
+ if ("#" == s.right(1))
+ return true;
+ return false;
+}
+
+// lscht das '#' einer automatisch generierten Form
+QString verbSpanish::delAutoForm(QString s) const
+{
+ if (isAutoForm(s))
+ s = s.left(s.length()-1);
+ return s;
+}
+
+// does the changes for group verbs
+// The verbs are divided in several groups:
+// 0 -> regular
+// 1 -> irregular
+// 2 -> <e -> ie>
+// 3 -> <o -> ue>
+// 4 -> <u -> ue>
+// 5 -> <e -> i>
+// 6 -> <c -> qu>
+// 7 -> <g -> gu>
+// 8 -> <z -> c>
+// 9 -> <gu -> g>
+// 10 -> <c -> z>
+// 11 -> <g -> j>
+// 12 -> <gu -> g>
+// 13 -> <qu -> c>
+// 14 -> <accent like 'enviar'>
+// 15 -> <accent like 'continuar'>
+// 16 -> <missing i>
+//
+bool verbSpanish::groupVerb(QString &s, int time/*=-1*/, int person/*=-1*/)
+{
+ bool good = true;
+ int pos;
+ switch (group)
+ {
+ case 2: // <e -> ie>
+ // betrifft den Presente und den Subjuntivo Presente und einige Imperativformen
+ // dabei jeweils die Personen 1-3 im Singular und die 3. Person Plural.
+ // Subjuntivo Presente wird hier nicht bearbeitet, weil der von der ersten Person
+ // Singular abgeleitet wird und die sollte schon richtig sein.
+ if ((presente == time) || (imperativo == time))
+ {
+ if ((nosotros != person) && (vosotros != person))
+ {
+ pos = s.findRev("e");
+ if (pos>=0)
+ s.replace(pos, 1, "ie");
+ };
+ };
+ break;
+ case 3: // <o -> ue>
+ // betrifft den Presente und den Subjuntivo Presente und einige Imperativformen
+ // dabei jeweils die Personen 1-3 im Singular und die 3. Person Plural.
+ // Subjuntivo Presente wird hier nicht bearbeitet, weil der von der ersten Person
+ // Singular abgeleitet wird und die sollte schon richtig sein.
+ if ((presente == time) || (imperativo == time))
+ {
+ if ((nosotros != person) && (vosotros != person))
+ {
+ pos = s.findRev("o", -3);
+ if (pos>=0)
+ s.replace(pos, 1, "ue");
+ };
+ };
+ break;
+ case 4: // <u -> ue>
+ // betrifft den Presente und den Subjuntivo Presente und einige Imperativformen
+ // dabei jeweils die Personen 1-3 im Singular und die 3. Person Plural.
+ // Subjuntivo Presente wird hier nicht bearbeitet, weil der von der ersten Person
+ // Singular abgeleitet wird und die sollte schon richtig sein.
+ if ((presente == time) || (imperativo == time))
+ {
+ if ((nosotros != person) && (vosotros != person))
+ {
+ pos = s.findRev("u");
+ if (pos>=0)
+ s.replace(pos, 1, "ue");
+ };
+ };
+ break;
+ case 5: // <e -> i>
+ // Betrifft Prsens (1.-3. Pers Singular und 3. Person Plural)
+ // die Gerundform, die wird allerdings nicht hier behandelt, sondern in conjugateAll()
+ // indefinido 3. Person Sg und Pl.
+ // alle subjuntivo Formen und den imperativo
+ if ((presente == time) && (person != nosotros) && (person != vosotros))
+ {
+ QString st = getStem();
+ pos = st.findRev("e");
+ if (pos>=0)
+ {
+ st.replace(pos, 1, "i");
+ s = st + verbEndings[time][getEnding(good)][person];
+ };
+ }
+ else
+ if ((indefinido == time) && ((el == person)||(ellos == person)))
+ {
+ QString st = getStem();
+ pos = st.findRev("e");
+ if (pos>=0)
+ {
+ st.replace(pos, 1, "i");
+ s = st + verbEndings[time][getEnding(good)][person];
+ };
+ }
+ else
+ if (imperativo == time)
+ {
+ good = false;
+ // qWarning("Imperativo for group verbs isn't ready.");
+ };
+ break;
+ case 6: // <c -> qu> (vor e wird c zu qu)
+ pos = s.findRev("ce");
+ if (pos>=0)
+ s.replace(pos, 2, "que");
+ else
+ {
+ pos = s.findRev("c");
+ if (pos>=0)
+ s.replace(pos, 2, "qu");
+ }
+ break;
+ case 7: // <g -> gu> (vor e wird g zu gu)
+ pos = s.findRev("ge");
+ if (pos>=0)
+ s.replace(pos, 2, "gue");
+ else
+ {
+ pos = s.findRev("g");
+ if (pos>=0)
+ s.replace(pos, 2, "gu");
+ }
+ break;
+ case 8: // <z -> c> (vor e wird z zu c)
+ pos = s.findRev("ze");
+ if (pos>=0)
+ s.replace(pos, 2, "ce");
+ else
+ {
+ pos = s.findRev("z");
+ if (pos>=0)
+ s.replace(pos, 2, "c");
+ }
+ break;
+ case 9: // <gu -> g> (vor e wird gu zu g)
+ pos = s.findRev("gue");
+ if (pos>=0)
+ s.replace(pos, 3, "ge");
+ else
+ {
+ pos = s.findRev("gu");
+ if (pos>=0)
+ s.replace(pos, 3, "g");
+ }
+ break;
+ case 10: // <c -> z> (vor o und a wird c zu z)
+ pos = s.findRev("co");
+ if (pos>=0)
+ s.replace(pos, 2, "zo");
+ else
+ {
+ pos = s.findRev("ca");
+ if (pos>=0)
+ s.replace(pos, 2, "za");
+ };
+ break;
+ case 11: // <g -> j> (vor o und a wird g zu j)
+ pos = s.findRev("ga");
+ if (pos>=0)
+ s.replace(pos, 2, "ja");
+ else
+ {
+ pos = s.findRev("go");
+ if (pos>=0)
+ s.replace(pos, 2, "jo");
+ };
+ break;
+ case 12: // <gu -> g> (vor o und a wird gu zu g)
+ pos = s.findRev("guo");
+ if (pos>=0)
+ s.replace(pos, 3, "go");
+ else
+ {
+ pos = s.findRev("gua");
+ if (pos>=0)
+ s.replace(pos, 3, "ga");
+ };
+ break;
+ case 13: // <qu -> c> (vor o und a wird qu zu c)
+ pos = s.findRev("quo");
+ if (pos>=0)
+ s.replace(pos, 3, "co");
+ else
+ {
+ pos = s.findRev("qua");
+ if (pos>=0)
+ s.replace(pos, 3, "ca");
+ };
+ break;
+ case 14: // <accent like 'enviar'>
+ // nderungen betreffen die Prsensformen auer nosotros und vosotros. Auerdem den
+ // Subjuntivo presente, der von der 1.Person singular abgeleitet wird und daher hier nicht
+ // behandelt werden muss. Des Weiteren sind einige Imperativformen betroffen.
+ if (presente == time)
+ {
+ switch (person)
+ {
+ case yo:
+ s = s.left(s.length()-3) + "o#";
+ break;
+ case tu:
+ s = s.left(s.length()-4) + "as#";
+ break;
+ case el:
+ s = s.left(s.length()-3) + "a#";
+ break;
+ case ellos:
+ s = s.left(s.length()-4) + "an#";
+ break;
+ default:
+ {};
+ };
+ }
+ else
+ if (imperativo == time)
+ {
+ switch (person)
+ {
+ case tu:
+ s = s.left(s.length()-3) + "a#";
+ break;
+ case el:
+ s = s.left(s.length()-3) + "e#";
+ break;
+ case ellos:
+ s = s.left(s.length()-4) + "en#";
+ break;
+ default:
+ {};
+ };
+ };
+ break;
+ case 15: // <accent like 'continuar'>
+ // nderungen betreffen die Prsensformen auer nosotros und vosotros. Auerdem den
+ // Subjuntivo presente, der von der 1.Person singular abgeleitet wird und daher hier nicht
+ // behandelt werden muss. Des Weiteren sind einige Imperativformen betroffen.
+ if (presente == time)
+ {
+ switch (person)
+ {
+ case yo:
+ s = s.left(s.length()-3) + "o#";
+ break;
+ case tu:
+ s = s.left(s.length()-4) + "as#";
+ break;
+ case el:
+ s = s.left(s.length()-3) + "a#";
+ break;
+ case ellos:
+ s = s.left(s.length()-4) + "an#";
+ break;
+ default:
+ {};
+ };
+ }
+ else
+ if (imperativo == time)
+ {
+ switch (person)
+ {
+ case tu:
+ s = s.left(s.length()-3) + "a#";
+ break;
+ case el:
+ s = s.left(s.length()-3) + "e#";
+ break;
+ case ellos:
+ s = s.left(s.length()-4) + "en#";
+ break;
+ default:
+ {};
+ };
+ };
+ break;
+ case 16: // <missing i>
+ // nderungen betreffen die Gerund-Form, den Indefinido in der 3. Person Singular
+ // und Plural und den Subjuntivo Pasado. Hier wird der Subjuntivo nicht bearbeitet,
+ // weil er von der 3. Person des Indefinido abgeleitet wird. Diese Form sollte bereits
+ // gendert sein. Ebenso wird der Gerund in der ConjugateAll()-Funktion behandelt.
+ if ("i#" == s.right(3))
+ {
+ s = s.left(s.length()-3) + "#";
+ }
+ else
+ if ("ieron#" == s.right(6))
+ {
+ s = s.left(s.length()-6) + "eron#";
+ };
+ break;
+ default:
+ good = false;
+ };
+ return good;
+}
+
+
+
diff --git a/kverbos/kverbos/verbspanish.h b/kverbos/kverbos/verbspanish.h
new file mode 100644
index 00000000..8b7cf7b1
--- /dev/null
+++ b/kverbos/kverbos/verbspanish.h
@@ -0,0 +1,301 @@
+/***************************************************************************
+ verbspanish.h - description
+ -------------------
+ begin : Sun Dec 23 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef VERBSPANISH_H
+#define VERBSPANISH_H
+
+// include qt-Header
+#include <qvaluelist.h>
+
+#define MAX_TIEMPOS 9
+#define MAX_SUBTYPES 3
+#define PERSONEN 6
+#define MAX_GRUPPEN 17
+#define REGULAR 0
+#define IRREGULAR 1
+#define VERBMUSTER 3
+
+enum endings {ar, er, ir, empty};
+// dummy1 to dummy3 are standing for forms that aren't possible
+enum timeTypes {presente, imperfecto, indefinido, futuro, condicional, subPresente,
+ subPasado, subFuturo, imperativo,
+ presentePro, imperfectoPro, indefinidoPro, futuroPro, condicionalPro,
+ subPresentePro, subPasadoPro, subFuturoPro, dummy2,
+ presentePer, imperfectoPer, dummy1, futuroPer, condicionalPer,
+ subPresentePer, subPasadoPer, subFuturoPre, dummy3
+ };
+enum timeSubTypes {normal, progresivo, perfecto};
+enum persons {yo, tu, el, nosotros, vosotros, ellos};
+
+typedef QString formArray[MAX_TIEMPOS][PERSONEN];
+typedef QString endingsArray[MAX_TIEMPOS][VERBMUSTER][PERSONEN];
+
+/** This class contains all the information belonging to one verb:
+ *
+ * - the foreign and the spanish meaning
+ * - the form of the gerund and the participle
+ * - the different time forms of the verb
+ * - if it is irregular or to which group the verb belongs
+ * - if the object already contains all the possible forms
+ *
+ * Some information belongs to all verbs. It is stored in static variables.
+ * - a lists of the regular endings
+ * - an array with the different reflexiv pronouns
+ * - forms of the verbs estar and haber that are needed for the gerund and the perfect
+ * form of a time.
+ *
+ * To the class belong some enums that are used in the class:
+ * endings are the differnet spanish verb endings, 0 = ar, 1 = er, 2 = ir.
+ * <pre>
+ * enum endings {ar, er, ir, empty};
+ * </pre>
+ *
+ * 'timeTypes' are the different spanish times. There are
+ * MAX_TIEMPOS (=9) * MAX_SUBTYPES (=3) = 27 different types. Types called 'dummyX'
+ * arent't existing but it is easier to use in the program.
+ * <pre>
+ * enum timeTypes {presente, imperfecto, indefinido, futuro, condicional, subPresente,
+ * subPasado, subFuturo, imperativo,
+ * presentePro, imperfectoPro, indefinidoPro, futuroPro, condicionalPro,
+ * subPresentePro, subPasadoPro, subFuturoPro, dummy2,
+ * presentePer, imperfectoPer, dummy1, futuroPer, condicionalPer,
+ * subPresentePer, subPasadoPer, subFuturoPre, dummy3
+ * };
+ * </pre>
+ *
+ * timeSubTypes seperates between a normal form of the time or a progressiv, or perfekt
+ * form of the time. The verb object only stores the gerund or the participle for this
+ * forms the rest can be found in static variables of the class.
+ * <pre>
+ * enum timeSubTypes {normal, progresivo, perfecto};
+ * </pre>
+ *
+ * Persons are the different grammatical persons including vosotros which is unusual
+ * in Latin America. (PERSONEN = 6)
+ * <pre>
+ * enum persons {yo, tu, el, nosotros, vosotros, ellos};
+ * </pre>
+ *
+ * The conjugated forms of the verb are stored in the array 'formArray'. The first index
+ * mentions the time and the second the person.
+ * <pre>
+ * typedef QString formArray[MAX_TIEMPOS][PERSONEN];
+ * </pre>
+ *
+ * The type 'endingsArray' stores the different endings. The first index means the time,
+ * the second the type of verb (-ar, -er, -ir) and the lase one is the person.
+ * <pre>
+ * typedef QString endingsArray[MAX_TIEMPOS][MAX_SUBTYPES][PERSONEN];
+ * </pre>
+ *
+ * The verbs are divided in several groups:
+ * 0 -> regular
+ * 1 -> irregular
+ * 2 -> <e -> ie>
+ * 3 -> <o -> ue>
+ * 4 -> <u -> ue>
+ * 5 -> <e -> i>
+ * 6 -> <c -> qu>
+ * 7 -> <g -> gu>
+ * 8 -> <z -> c>
+ * 9 -> <gu -> g>
+ * 10 -> <c -> z>
+ * 11 -> <g -> j>
+ * 12 -> <gu -> g>
+ * 13 -> <qu -> c>
+ * 14 -> <accent like 'enviar'>
+ * 15 -> <accent like 'continuar'>
+ * 16 -> \<missing i>
+ *@author Arnold Kraschinski
+ */
+
+class verbSpanish
+{
+public:
+ verbSpanish();
+ verbSpanish(const verbSpanish& v);
+ virtual ~verbSpanish();
+ verbSpanish& operator= (const verbSpanish& v);
+ /** If two verbs are compared only the foreign form and the spanish form are compared */
+ bool operator== (const verbSpanish& v) const;
+ /** This overloaded == operator compares the verb to a QString.
+ * Only the spanish meaning is compared.
+ */
+ bool operator== (const QString& s) const;
+ /** The spa/nisch forms of the verb are compared */
+ bool operator< (const verbSpanish& v) const;
+ /** Compares the verb objects completely, all forms and fields.
+ */
+ bool allEqual(verbSpanish v);
+ /** tests if the fields of the object contain only empty strings
+ */
+ bool isEmpty() const;
+ /** returns the foreign meaning of the verb
+ */
+ QString getForeign() const;
+ /** sets the foreign meaning of the verb
+ */
+ void setForeign(const QString &s);
+ /** returns the spanish meaning of the verb
+ */
+ QString getSpanish() const;
+ /** sets the spanish meaning of the verb
+ */
+ void setSpanish(const QString &s);
+ /** returns the gerund of the verb
+ */
+ QString getGerund();
+ /** sets the gerund form to the string given in s
+ */
+ void setGerund(const QString &s);
+ /** returns the particip of the verb
+ */
+ QString getPartizip();
+ /** sets the participe to the string given in s
+ */
+ void setPartizip(const QString &s);
+ /** returns if the verb belongs to one of the groups
+ */
+ bool isGroupVerb();
+ /** returns the group number to which the verb belongs
+ */
+ int getGroup() { return group; }
+ /** sets the field regular corresponding to b
+ */
+ void setGroup(const int g);
+ /** returns the desired verb form indicated by time, person and type. This means
+ * with this function complex forms like a progressise or a perfect form can be
+ * retrieved.
+ * The parts of the form a stored like this:
+ * parts[0] the reflexive pronoun
+ * parts[1} the auxiliary verb
+ * parts[2] the verb form
+ * The return value 'bool' indicates if the form could be formed.
+ */
+ bool getForm(int t, int p, int typ, QString parts[]);
+ /** returns the desired verb form indicated by time and person as a string
+ */
+ QString getForm(int t, int p);
+ /** sets the verb form that is indicated by time and person
+ */
+ void setForm(int t, int p, QString s);
+ /** The following function generates the regular verb forms. The forms can be
+ * generated time by time or all times in one step by using conjugateAll()
+ */
+ bool conjugateAll();
+ /** returns if the verb is a reflexive one
+ */
+ bool isReflexiv() const;
+ /** returns the reflexive pronoun that belongs to the person p
+ */
+ QString getRefPron(int p);
+ /** tests if the string is an automatic generated Form, that means the last char is '#' */
+ bool isAutoForm(QString& s) const;
+private:
+ bool conjugatePresente();
+ bool conjugateImperfecto();
+ bool conjugateIndefinido();
+ bool conjugateFuturo();
+ bool conjugateCondicional();
+ bool conjugateSubPresente();
+ bool conjugateSubPasado();
+ bool conjugateImperativo();
+ /** returns the verb stem
+ */
+ QString getStem() const;
+ /** returns the ending of the verb
+ */
+ endings getEnding(bool& good);
+ /** bildet die Formen, d.h. hngt die Endungen an den unvernderlichen
+ * Teil an.
+ * Die Form muss bisher ein leerer String sein. Anderenfalls wird angenommen, dass
+ * bereits eine gltige Form vorliegt und diese Form eine unregelmige Form ist, die
+ * nicht berschrieben werden soll.
+ */
+ bool conjugateTime(const int t, const QString &s);
+ /** Es wird verglichen, ob die beiden Strings gemeinsame Bestandteile haben. Also
+ * "gehen, laufen, springen" wird etwa mit "gehen, laufen" verglichen. Die Funktion
+ * gibt in so einem Fall 'true' zurck, auch wenn im zweiten String ein Teil
+ * fehlt. Das ist ntig, um zwei Verben als gleich zu erkennen, auch wenn bei einem
+ * mehr oder weniger deutsche Bedeutungen oder die Bedeutungen in anderer Reihenfolge
+ * angegeben sind.
+ */
+ bool vergleich(const QString& s1, const QString& s2) const;
+ /** Deletes the '#' character from autogenerated forms. */
+ QString delAutoForm(QString s) const;
+ /** does the changes for group verbs
+ */
+ bool groupVerb(QString &s, int time=-1, int person=-1);
+ /** the verb in the foreign language
+ */
+ QString foreign;
+ /** the spanish verb
+ */
+ QString spanish;
+ /** the gerund form of the verb
+ */
+ QString gerund;
+ /** the partizip form of the verb
+ */
+ QString partizip;
+ /** the array for all the different forms of the verb
+ */
+ formArray forms;
+ /** tells to which group the verb belongs
+ */
+ int group;
+ /** tells if all verbforms are present or if some are missing.
+ */
+ bool conjugated;
+ /** set to true if the class has found an error in the verb structure. */
+ bool error;
+
+ /** In this array all the different endings for all the different times
+ * are stored.
+ */
+ static endingsArray verbEndings;
+ /** the reflexive pronouns
+ */
+ static QString refPron[PERSONEN];
+public:
+ /** The forms of the verb estar. They are needed for the gerund form.
+ */
+ static QString estar[MAX_TIEMPOS][PERSONEN];
+ /** The forms of the verb haber. They are needed for perfect forms
+ */
+ static QString haber[MAX_TIEMPOS][PERSONEN];
+ /** This array contains the names of the time forms as strings
+ */
+ static QString timeNames[MAX_TIEMPOS*MAX_SUBTYPES];
+ /** This array contains the names of the different verb groups
+ */
+ static QString groupNames[MAX_GRUPPEN];
+ static int maxTiempos;
+ static int maxSubtypes;
+ static int persons;
+ static int maxForms;
+ /** The language that is selected at the moment. This selection affects all the instances
+ * of the class. */
+ static QString language;
+};
+
+/** Very often a list of verbs is needed. This is the type definition of a
+ * QValueList template with the verbSpanish type
+ */
+typedef QValueList<verbSpanish> spanishVerbList;
+
+#endif
diff --git a/kverbos/kverbos/version.h b/kverbos/kverbos/version.h
new file mode 100644
index 00000000..6c7c58c1
--- /dev/null
+++ b/kverbos/kverbos/version.h
@@ -0,0 +1,3 @@
+#ifndef KVERBOS_VERSION
+#define KVERBOS_VERSION "0.99"
+#endif