From ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeedu@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kverbos/AUTHORS | 1 + kverbos/COPYING | 341 +++ kverbos/ChangeLog | 0 kverbos/INSTALL | 167 ++ kverbos/Makefile.am | 5 + kverbos/kverbos/Makefile.am | 32 + kverbos/kverbos/banderas.png | Bin 0 -> 6451 bytes kverbos/kverbos/data/Makefile.am | 1 + kverbos/kverbos/data/de/Makefile.am | 4 + kverbos/kverbos/data/de/verbos.verbos | 2371 +++++++++++++++++ kverbos/kverbos/data/en/Makefile.am | 4 + kverbos/kverbos/data/en/verbos.verbos | 2371 +++++++++++++++++ kverbos/kverbos/deu16.png | Bin 0 -> 99 bytes kverbos/kverbos/icons/Makefile.am | 1 + kverbos/kverbos/icons/cr16-action-kverbosuser.png | Bin 0 -> 868 bytes kverbos/kverbos/icons/hi128-app-kverbos.png | Bin 0 -> 4989 bytes kverbos/kverbos/icons/hi16-app-kverbos.png | Bin 0 -> 549 bytes kverbos/kverbos/icons/hi22-app-kverbos.png | Bin 0 -> 690 bytes kverbos/kverbos/icons/hi32-app-kverbos.png | Bin 0 -> 1035 bytes kverbos/kverbos/icons/hi48-app-kverbos.png | Bin 0 -> 1637 bytes kverbos/kverbos/icons/hisc-app-kverbos.svgz | Bin 0 -> 1909 bytes kverbos/kverbos/kerfassen.cpp | 512 ++++ kverbos/kverbos/kerfassen.h | 148 ++ kverbos/kverbos/kfeeder16.png | Bin 0 -> 376 bytes kverbos/kverbos/kfeedercontrol.cpp | 140 ++ kverbos/kverbos/kfeedercontrol.h | 58 + kverbos/kverbos/kresult.cpp | 95 + kverbos/kverbos/kresult.h | 39 + kverbos/kverbos/kstartuplogo.cpp | 42 + kverbos/kverbos/kstartuplogo.h | 37 + kverbos/kverbos/kverbedit.cpp | 152 ++ kverbos/kverbos/kverbedit.h | 74 + kverbos/kverbos/kverbos.cpp | 757 ++++++ kverbos/kverbos/kverbos.desktop | 75 + kverbos/kverbos/kverbos.h | 249 ++ kverbos/kverbos/kverbos.kcfg | 24 + kverbos/kverbos/kverbosdoc.cpp | 782 ++++++ kverbos/kverbos/kverbosdoc.h | 165 ++ kverbos/kverbos/kverbosoptions.cpp | 60 + kverbos/kverbos/kverbosoptions.h | 44 + kverbos/kverbos/kverbosui.rc | 32 + kverbos/kverbos/kverbosuser.cpp | 264 ++ kverbos/kverbos/kverbosuser.h | 118 + kverbos/kverbos/kverbosview.cpp | 383 +++ kverbos/kverbos/kverbosview.h | 148 ++ kverbos/kverbos/main.cpp | 74 + kverbos/kverbos/prefs.kcfgc | 6 + kverbos/kverbos/qerfassen.ui | 2796 +++++++++++++++++++++ kverbos/kverbos/qlernen.ui | 1021 ++++++++ kverbos/kverbos/qresult.ui | 275 ++ kverbos/kverbos/qverbedit.ui | 196 ++ kverbos/kverbos/qverbosoptions.ui | 1228 +++++++++ kverbos/kverbos/span16.png | Bin 0 -> 98 bytes kverbos/kverbos/startuplogo.png | Bin 0 -> 11234 bytes kverbos/kverbos/startuplogo.svgz | Bin 0 -> 4525 bytes kverbos/kverbos/user.png | Bin 0 -> 210 bytes kverbos/kverbos/verbspanish.cpp | 943 +++++++ kverbos/kverbos/verbspanish.h | 301 +++ kverbos/kverbos/version.h | 3 + kverbos/subdirs | 1 + 60 files changed, 16540 insertions(+) create mode 100644 kverbos/AUTHORS create mode 100644 kverbos/COPYING create mode 100644 kverbos/ChangeLog create mode 100644 kverbos/INSTALL create mode 100644 kverbos/Makefile.am create mode 100644 kverbos/kverbos/Makefile.am create mode 100644 kverbos/kverbos/banderas.png create mode 100644 kverbos/kverbos/data/Makefile.am create mode 100644 kverbos/kverbos/data/de/Makefile.am create mode 100644 kverbos/kverbos/data/de/verbos.verbos create mode 100644 kverbos/kverbos/data/en/Makefile.am create mode 100644 kverbos/kverbos/data/en/verbos.verbos create mode 100644 kverbos/kverbos/deu16.png create mode 100644 kverbos/kverbos/icons/Makefile.am create mode 100644 kverbos/kverbos/icons/cr16-action-kverbosuser.png create mode 100644 kverbos/kverbos/icons/hi128-app-kverbos.png create mode 100644 kverbos/kverbos/icons/hi16-app-kverbos.png create mode 100644 kverbos/kverbos/icons/hi22-app-kverbos.png create mode 100644 kverbos/kverbos/icons/hi32-app-kverbos.png create mode 100644 kverbos/kverbos/icons/hi48-app-kverbos.png create mode 100644 kverbos/kverbos/icons/hisc-app-kverbos.svgz create mode 100644 kverbos/kverbos/kerfassen.cpp create mode 100644 kverbos/kverbos/kerfassen.h create mode 100644 kverbos/kverbos/kfeeder16.png create mode 100644 kverbos/kverbos/kfeedercontrol.cpp create mode 100644 kverbos/kverbos/kfeedercontrol.h create mode 100644 kverbos/kverbos/kresult.cpp create mode 100644 kverbos/kverbos/kresult.h create mode 100644 kverbos/kverbos/kstartuplogo.cpp create mode 100644 kverbos/kverbos/kstartuplogo.h create mode 100644 kverbos/kverbos/kverbedit.cpp create mode 100644 kverbos/kverbos/kverbedit.h create mode 100644 kverbos/kverbos/kverbos.cpp create mode 100644 kverbos/kverbos/kverbos.desktop create mode 100644 kverbos/kverbos/kverbos.h create mode 100644 kverbos/kverbos/kverbos.kcfg create mode 100644 kverbos/kverbos/kverbosdoc.cpp create mode 100644 kverbos/kverbos/kverbosdoc.h create mode 100644 kverbos/kverbos/kverbosoptions.cpp create mode 100644 kverbos/kverbos/kverbosoptions.h create mode 100644 kverbos/kverbos/kverbosui.rc create mode 100644 kverbos/kverbos/kverbosuser.cpp create mode 100644 kverbos/kverbos/kverbosuser.h create mode 100644 kverbos/kverbos/kverbosview.cpp create mode 100644 kverbos/kverbos/kverbosview.h create mode 100644 kverbos/kverbos/main.cpp create mode 100644 kverbos/kverbos/prefs.kcfgc create mode 100644 kverbos/kverbos/qerfassen.ui create mode 100644 kverbos/kverbos/qlernen.ui create mode 100644 kverbos/kverbos/qresult.ui create mode 100644 kverbos/kverbos/qverbedit.ui create mode 100644 kverbos/kverbos/qverbosoptions.ui create mode 100644 kverbos/kverbos/span16.png create mode 100644 kverbos/kverbos/startuplogo.png create mode 100644 kverbos/kverbos/startuplogo.svgz create mode 100644 kverbos/kverbos/user.png create mode 100644 kverbos/kverbos/verbspanish.cpp create mode 100644 kverbos/kverbos/verbspanish.h create mode 100644 kverbos/kverbos/version.h create mode 100644 kverbos/subdirs (limited to 'kverbos') diff --git a/kverbos/AUTHORS b/kverbos/AUTHORS new file mode 100644 index 00000000..3ea80210 --- /dev/null +++ b/kverbos/AUTHORS @@ -0,0 +1 @@ +Arnold Kraschinski diff --git a/kverbos/COPYING b/kverbos/COPYING new file mode 100644 index 00000000..54754ab4 --- /dev/null +++ b/kverbos/COPYING @@ -0,0 +1,341 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/kverbos/ChangeLog b/kverbos/ChangeLog new file mode 100644 index 00000000..e69de29b diff --git a/kverbos/INSTALL b/kverbos/INSTALL new file mode 100644 index 00000000..02a4a074 --- /dev/null +++ b/kverbos/INSTALL @@ -0,0 +1,167 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Type `make install' to install the programs and any data files and + documentation. + + 4. You can remove the program binaries and object files from the + source code directory by typing `make clean'. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/kverbos/Makefile.am b/kverbos/Makefile.am new file mode 100644 index 00000000..67ad0430 --- /dev/null +++ b/kverbos/Makefile.am @@ -0,0 +1,5 @@ +SUBDIRS = kverbos + +EXTRA_DIST = AUTHORS COPYING ChangeLog INSTALL README + +include ../admin/Doxyfile.am 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 Binary files /dev/null and b/kverbos/kverbos/banderas.png 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 Binary files /dev/null and b/kverbos/kverbos/deu16.png 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 Binary files /dev/null and b/kverbos/kverbos/icons/cr16-action-kverbosuser.png 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 Binary files /dev/null and b/kverbos/kverbos/icons/hi128-app-kverbos.png 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 Binary files /dev/null and b/kverbos/kverbos/icons/hi16-app-kverbos.png 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 Binary files /dev/null and b/kverbos/kverbos/icons/hi22-app-kverbos.png 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 Binary files /dev/null and b/kverbos/kverbos/icons/hi32-app-kverbos.png 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 Binary files /dev/null and b/kverbos/kverbos/icons/hi48-app-kverbos.png 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 Binary files /dev/null and b/kverbos/kverbos/icons/hisc-app-kverbos.svgz 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 +#include +#include +#include +#include +//#include + +#include + +//#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(focusWidget()); + if (pl) + pl->insert(""); +} + +void KErfassen::slotA() +{ + QLineEdit* pl = dynamic_cast(focusWidget()); + if (pl) + pl->insert(""); +} + +void KErfassen::slotE() +{ + QLineEdit* pl = dynamic_cast(focusWidget()); + if (pl) + pl->insert(""); +} + +void KErfassen::slotI() +{ + QLineEdit* pl = dynamic_cast(focusWidget()); + if (pl) + pl->insert(""); +} + +void KErfassen::slotO() +{ + QLineEdit* pl = dynamic_cast(focusWidget()); + if (pl) + pl->insert(""); +} + +void KErfassen::slotU() +{ + QLineEdit* pl = dynamic_cast(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 + +#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 Binary files /dev/null and b/kverbos/kverbos/kfeeder16.png 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 +#include + +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 +#include + + +/** 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 +#include +#include +#include + +#include + +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 right; + QValueStack 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 +#include +#include + +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 + +/**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 + +#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 +#include +#include + +// include files for KDE +#include +#include +#include "kstartuplogo.h" +#include +#include + +// 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; iwriteEntry(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; ireadEntry ( 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; isetGroup("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; ichangeItem(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 +#endif + +// include files for Qt + +// include files for KDE +#include +#include +#include + +// 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 @@ + + + + + + + + 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()<< m_language <<endl; + //later, scan for present languages + if (m_language!="de") + m_language = "en"; + + m_language + + + 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 +#include +#include + +// include files for Qt +#include + +// include files for KDE +#include +#include +#include + +// application specific includes +#include "verbspanish.h" +#include "kverbosdoc.h" +#include "kverbosview.h" +#include "kverbosuser.h" + + + + +QPtrList *KVerbosDoc::pViewList = 0L; + +KVerbosDoc::KVerbosDoc(QWidget *parent, const char *name) : QObject(parent, name) +{ + if(!pViewList) + { + pViewList = new QPtrList(); + }; + 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) == "', 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äßig") + { + // read a regular or a group verb + int g = 0; + if (v[2] == "regelmäßig") + g = 0; + else if (v[2] == "<e > ie>") + g = 2; + else if (v[2] == "<o > ue>") + g = 3; + else if (v[2] == "<u > ue>") + g = 4; + else if (v[2] == "<e > i>") + g = 5; + else if (v[2] == "<c > qu>") + g = 6; + else if (v[2] == "<g > gu>") + g = 7; + else if (v[2] == "<z > c>") + g = 8; + else if (v[2] == "<gu > g>") + g = 9; + else if (v[2] == "<c > z>") + g = 10; + else if (v[2] == "<g > j>") + g = 11; + else if (v[2] == "<gu > g>") + g = 12; + else if (v[2] == "<qu > c>") + g = 13; + else if (v[2] == "<accent like 'enviar'>") + g = 14; + else if (v[2] == "<accent like 'continuar>") + g = 15; + else if (v[2] == "<missing i>") + 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) == "") && (s != "")) + { + 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= 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= 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äß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 << "" << endl; + t << "" << endl; + t << "verbos españoles" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + t << "

verbos españoles

" << endl; + t << "

"; + t << "Als regelmäß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äßkeit für eine Gruppe von Verben erkennen lassen, " << endl; + t << "müssen als unregelmäßige eingegeben werden.

" << endl; + t << "

"; + t << "Die Formen des 'subjuntivo futuro' werden einstweilen nicht mit in das " << endl; + t << "Programm aufgenommen.

" << endl; + t << "

"; + 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 Änderungen " << endl; + t << "vorgenommen werden. Durch Änderungen kann die Datei für das Programm " << endl; + t << "unlesbar werden.

" << endl; + // 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 << "
" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + if ((*it).isGroupVerb()) + { + t << "" << endl; break; + case 2: + t << "<e > ie>" << endl; break; + case 3: + t << "<o > ue>" << endl; break; + case 4: + t << "<u > ue>" << endl; break; + case 5: + t << "<e > i>" << endl; break; + case 6: + t << "<c > qu>" << endl; break; + case 7: + t << "<g > gu>" << endl; break; + case 8: + t << "<z > c>" << endl; break; + case 9: + t << "<gu > g>" << endl; break; + case 10: + t << "<c > z>" << endl; break; + case 11: + t << "<g > j>" << endl; break; + case 12: + t << "<gu > g>" << endl; break; + case 13: + t << "<qu > c>" << endl; break; + case 14: + t << "<accent like 'enviar'>" << endl; break; + case 15: + t << "<accent like 'continuar>" << endl; break; + case 16: + t << "<missing i>" << endl; break; + default: + good = false; + //qWarning("Error! Wrong group!!"); + }; + } + else + { + t << "" << endl; + }; + t << "
" << (*it).getSpanish() << "" << (*it).getForeign() << ""; + switch ((*it).getGroup()) + { + case 0: + t << "regelmäßigunregelmäßig
" << endl; + // Im Falle eines unregelmigen Verbes, die Formen sichern + if ((*it).isGroupVerb() == false) + { + t << "" << endl; + t << "" << endl; + // erster Teil der Tabelle + t << "" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + int i; + for (i = yo; i <= ellos; i++) + { + t << "" << endl; + for (int j = presente; j <= futuro; j++) + { + // Formen presente, imperfecto, indefinido, futuro + t << "" << endl; + }; + // Sonderformen gerundio und participo + switch (i) + { + case 0: + t << "" << endl; + break; + case 2: + t << "" << endl; + break; + case 3: + t << "" << endl; + break; + default: + t << "" << endl; + } + t << "" << endl; + } + t << "" << endl; + t << ""; + t << ""; + // zweiter Teil der Tabelle + t << "" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + t << "" << endl; + for (i = yo; i <= ellos; i++) + { + t << "" << endl; + for (int j = condicional; j <= imperativo; j++) + { + // Formen condicional, subjuntivo presente, subjuntivo imperfecto + // subjuntivo futuro, imperativo + t << "" << endl; + }; + t << "" << endl; + } + t << "
presenteimperfectoindefinidofuturogerundio
"; + if ((*it).isReflexiv()) + t << (*it).getRefPron(i) << ' '; + t << (*it).getForm(j, i) << "" << (*it).getGerund() << "" << "participo" << (*it).getPartizip() << "
condicionalsubjuntivo presentesubjuntivo imperfectosubjuntivo futuroimperativo
"; + if ((*it).isReflexiv()) + t << (*it).getRefPron(i) << ' '; + t << (*it).getForm(j, i) << "
" << endl; + } + t << "

" << endl; + }; + }; + // Das Ende der HTML Datei anfgen. + t << "" << endl; + t << "" << 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(parent()); + if (app) { + app->getTimeOptions(op); + } + for (int i=0; isuggestVerb()); + 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; iright(); + 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 +#endif + +// include files for QT +#include + +// include files for KDE +#include + +// 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 *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 @@ + + + + &File + + + + &Edit + + + + &Settings + + + &User + + + + +Main Toolbar + + + + + + + + + + + + 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 +#include +#include + +#include + + +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; ibegin(); 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 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 + +// include files for Qt +#include +#include +#include +#include +#include +#include + + +// 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(focusWidget()); + if (pl) + { + pl->insert(""); + }; +} + +void KVerbosView::slotA() +{ + QLineEdit* pl = dynamic_cast(focusWidget()); + if (pl) + { + pl->insert(""); + }; +} + +void KVerbosView::slotE() +{ + QLineEdit* pl = dynamic_cast(focusWidget()); + if (pl) + { + pl->insert(""); + }; +} + +void KVerbosView::slotI() +{ + QLineEdit* pl = dynamic_cast(focusWidget()); + if (pl) + { + pl->insert(""); + }; +} + +void KVerbosView::slotO() +{ + QLineEdit* pl = dynamic_cast(focusWidget()); + if (pl) + { + pl->insert(""); + }; +} + +void KVerbosView::slotU() +{ + QLineEdit* pl = dynamic_cast(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(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(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 +#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 +#include + +#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 @@ + +QErfassen +Dialog des kverbos Projektes. +Der Dialog mit dem ein neutes Verb erfasst +und in die Liste aufgenommen wird. + +Arnold Kraschinski + + + QErfassen + + + + 0 + 0 + 598 + 477 + + + + Enter New Verb or Edit Existing Verb + + + + unnamed + + + 11 + + + 6 + + + + Layout49 + + + + unnamed + + + 0 + + + 6 + + + + Layout111_3 + + + + unnamed + + + 0 + + + 6 + + + + TextVerbo + + + Verb: + + + AlignVCenter|AlignLeft + + + + + + + EditVerbo + + + + + TextAleman + + + In the foreign language: + + + AlignVCenter|AlignRight + + + + + + + EditAleman + + + + + + + Layout46 + + + + unnamed + + + 0 + + + 6 + + + + + regular + + + + + irregular + + + + + e > ie + + + + + o > ue + + + + + u > ue + + + + + e > i + + + + + c > qu + + + + + g > gu + + + + + z > c + + + + + gu > gu + + + + + c > z + + + + + g > j + + + + + gu > g + + + + + qu > c + + + + + accent like 'enviar' + + + + + accent like 'continuar' + + + + + missing i + + + + ComboBoxTypen + + + ParentOrigin + + + false + + + + + Spacer1 + + + Horizontal + + + Expanding + + + + + + + Layout112 + + + + unnamed + + + 0 + + + 6 + + + + TextGerundio + + + gerundio: + + + AlignVCenter|AlignRight + + + + + + + EditGerundio + + + + + TextParticipio + + + participio: + + + AlignVCenter|AlignRight + + + + + + + EditParticipio + + + + + + + TabWidgetFormas + + + true + + + + tabPresente + + + presente + + + + unnamed + + + 11 + + + 6 + + + + Layout70_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout69_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout13_6_4_2_3 + + + + unnamed + + + 0 + + + 6 + + + + TextYo1 + + + + 110 + 0 + + + + yo: + + + + + TextTu1 + + + + 110 + 0 + + + + tu: + + + + + TextEl1 + + + + 110 + 0 + + + + el/ella/usted: + + + + + TextNosotros1 + + + + 110 + 0 + + + + nosotros: + + + + + TextVosotros1 + + + + 110 + 0 + + + + vosotros: + + + + + TextEllos1 + + + + 110 + 0 + + + + ellos/ellas/ustedes: + + + + + + + Layout14_6_4_2_3 + + + + unnamed + + + 0 + + + 6 + + + + EditYo2_1 + + + + 200 + 0 + + + + + + EditTu2_1 + + + + 200 + 0 + + + + + + EditEl2_1 + + + + 200 + 0 + + + + + + EditNosotros2_1 + + + + 200 + 0 + + + + + + EditVosotros2_1 + + + + 200 + 0 + + + + + + EditEllos2_1 + + + + 200 + 0 + + + + + + + + + + Layout45_4_2_3 + + + + unnamed + + + 0 + + + 6 + + + + ButtonSeiteLoeschen1 + + + Clear Page + + + + + Spacer_p + + + Horizontal + + + Expanding + + + + + + + + + + + tabImperfecto + + + imperfecto + + + + unnamed + + + 11 + + + 6 + + + + Layout68_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout67_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout13_6_5_2_3 + + + + unnamed + + + 0 + + + 6 + + + + TextYo2 + + + + 110 + 0 + + + + yo: + + + + + TextTu2 + + + + 110 + 0 + + + + tu: + + + + + TextEl2 + + + + 110 + 0 + + + + el/ella/usted: + + + + + TextNosotros2 + + + + 110 + 0 + + + + nosotros: + + + + + TextVosotros2 + + + + 110 + 0 + + + + vosotros: + + + + + TextEllos2 + + + + 110 + 0 + + + + ellos/ellas/ustedes: + + + + + + + Layout14_6_5_2_3 + + + + unnamed + + + 0 + + + 6 + + + + EditYo2_2 + + + + 200 + 0 + + + + + + EditTu2_2 + + + + 200 + 0 + + + + + + EditEl2_2 + + + + 200 + 0 + + + + + + EditNosotros2_2 + + + + 200 + 0 + + + + + + EditVosotros2_2 + + + + 200 + 0 + + + + + + EditEllos2_2 + + + + 200 + 0 + + + + + + + + + + Layout45_5_2_3 + + + + unnamed + + + 0 + + + 6 + + + + ButtonSeiteLoeschen2 + + + Clear Page + + + + + Spacer_im + + + Horizontal + + + Expanding + + + + + + + + + + + tabIndefinido + + + indefinido + + + + unnamed + + + 11 + + + 6 + + + + Layout66_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout65_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout13_6_6_2_3 + + + + unnamed + + + 0 + + + 6 + + + + TextYo3 + + + + 110 + 0 + + + + yo: + + + + + TextTu3 + + + + 110 + 0 + + + + tu: + + + + + TextEl3 + + + + 110 + 0 + + + + el/ella/usted: + + + + + TextNosotros3 + + + + 110 + 0 + + + + nosotros: + + + + + TextVosotros3 + + + + 110 + 0 + + + + vosotros: + + + + + TextEllos3 + + + + 110 + 0 + + + + ellos/ellas/ustedes: + + + + + + + Layout14_6_6_2_3 + + + + unnamed + + + 0 + + + 6 + + + + EditYo2_3 + + + + 200 + 0 + + + + + + EditTu2_3 + + + + 200 + 0 + + + + + + EditEl2_3 + + + + 200 + 0 + + + + + + EditNosotros2_3 + + + + 200 + 0 + + + + + + EditVosotros2_3 + + + + 200 + 0 + + + + + + EditEllos2_3 + + + + 200 + 0 + + + + + + + + + + Layout45_6_2_3 + + + + unnamed + + + 0 + + + 6 + + + + ButtonSeiteLoeschen3 + + + Clear Page + + + + + Spacer_i + + + Horizontal + + + Expanding + + + + + + + + + + + tabFuturo + + + futuro + + + + unnamed + + + 11 + + + 6 + + + + Layout64_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout63_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout13_6_7_2_3 + + + + unnamed + + + 0 + + + 6 + + + + TextYo4 + + + + 110 + 0 + + + + yo: + + + + + TextTu4 + + + + 110 + 0 + + + + tu: + + + + + TextEl4 + + + + 110 + 0 + + + + el/ella/usted: + + + + + TextNosotros4 + + + + 110 + 0 + + + + nosotros: + + + + + TextVosotros4 + + + + 110 + 0 + + + + vosotros: + + + + + TextEllos4 + + + + 110 + 0 + + + + ellos/ellas/ustedes: + + + + + + + Layout14_6_7_2_3 + + + + unnamed + + + 0 + + + 6 + + + + EditYo2_4 + + + + 200 + 0 + + + + + + EditTu2_4 + + + + 200 + 0 + + + + + + EditEl2_4 + + + + 200 + 0 + + + + + + EditNosotros2_4 + + + + 200 + 0 + + + + + + EditVosotros2_4 + + + + 200 + 0 + + + + + + EditEllos2_4 + + + + 200 + 0 + + + + + + + + + + Layout45_7_2_3 + + + + unnamed + + + 0 + + + 6 + + + + ButtonSeiteLoeschen4 + + + Clear Page + + + + + Spacer_f + + + Horizontal + + + Expanding + + + + + + + + + + + tabCondicional + + + condicional + + + + unnamed + + + 11 + + + 6 + + + + Layout62_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout61_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout13_6_8_2_4 + + + + unnamed + + + 0 + + + 6 + + + + TextYo5 + + + + 110 + 0 + + + + yo: + + + + + TextTu5 + + + + 110 + 0 + + + + tu: + + + + + TextEl5 + + + + 110 + 0 + + + + el/ella/usted: + + + + + TextNosotros5 + + + + 110 + 0 + + + + nosotros: + + + + + TextVosotros5 + + + + 110 + 0 + + + + vosotros: + + + + + TextEllos5 + + + + 110 + 0 + + + + ellos/ellas/ustedes: + + + + + + + Layout14_6_8_2_4 + + + + unnamed + + + 0 + + + 6 + + + + EditYo2_5 + + + + 200 + 0 + + + + + + EditTu2_5 + + + + 200 + 0 + + + + + + EditEl2_5 + + + + 200 + 0 + + + + + + EditNosotros2_5 + + + + 200 + 0 + + + + + + EditVosotros2_5 + + + + 200 + 0 + + + + + + EditEllos2_5 + + + + 200 + 0 + + + + + + + + + + Layout45_8_2_4 + + + + unnamed + + + 0 + + + 6 + + + + ButtonSeiteLoeschen5 + + + Clear Page + + + + + Spacer_c + + + Horizontal + + + Expanding + + + + + + + + + + + tabSubPresente + + + subjuntivo presente + + + + unnamed + + + 11 + + + 6 + + + + Layout60_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout_sp + + + + unnamed + + + 0 + + + 6 + + + + Layout_p_6 + + + + unnamed + + + 0 + + + 6 + + + + TextYo6 + + + + 110 + 0 + + + + yo: + + + + + TextTu6 + + + + 110 + 0 + + + + tu: + + + + + TextEl6 + + + + 110 + 0 + + + + el/ella/usted: + + + + + TextNosotros6 + + + + 110 + 0 + + + + nosotros: + + + + + TextVosotros6 + + + + 110 + 0 + + + + vosotros: + + + + + TextEllos6 + + + + 110 + 0 + + + + ellos/ellas/ustedes: + + + + + + + Layout_e_6 + + + + unnamed + + + 0 + + + 6 + + + + EditYo2_6 + + + + 200 + 0 + + + + + + EditTu2_6 + + + + 200 + 0 + + + + + + EditEl2_6 + + + + 200 + 0 + + + + + + EditNosotros2_6 + + + + 200 + 0 + + + + + + EditVosotros2_6 + + + + 200 + 0 + + + + + + EditEllos2_6 + + + + 200 + 0 + + + + + + + + + + Layout45_8_2_3_5 + + + + unnamed + + + 0 + + + 6 + + + + ButtonSeiteLoeschen6 + + + Clear Page + + + + + Spacer_sp + + + Horizontal + + + Expanding + + + + + + + + + + + tabSubPasado + + + subjuntivo pasado + + + + unnamed + + + 11 + + + 6 + + + + Layout58_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout_spa + + + + unnamed + + + 0 + + + 6 + + + + Layout_p_7 + + + + unnamed + + + 0 + + + 6 + + + + TextYo7 + + + + 110 + 0 + + + + yo: + + + + + TextTu7 + + + + 110 + 0 + + + + tu: + + + + + TextEl7 + + + + 110 + 0 + + + + el/ella/usted: + + + + + TextNosotros7 + + + + 110 + 0 + + + + nosotros: + + + + + TextVosotros7 + + + + 110 + 0 + + + + vosotros: + + + + + TextEllos7 + + + + 110 + 0 + + + + ellos/ellas/ustedes: + + + + + + + Layout_e_7 + + + + unnamed + + + 0 + + + 6 + + + + EditYo2_7 + + + + 200 + 0 + + + + + + EditTu2_7 + + + + 200 + 0 + + + + + + EditEl2_7 + + + + 200 + 0 + + + + + + EditNosotros2_7 + + + + 200 + 0 + + + + + + EditVosotros2_7 + + + + 200 + 0 + + + + + + EditEllos2_7 + + + + 200 + 0 + + + + + + + + + + Layout45_8_2_3_2_3 + + + + unnamed + + + 0 + + + 6 + + + + ButtonSeiteLoeschen7 + + + Clear Page + + + + + Spacer_spa + + + Horizontal + + + Expanding + + + + + + + + + + + tabImperativo + + + imperativo + + + + unnamed + + + 11 + + + 6 + + + + Layout47 + + + + unnamed + + + 0 + + + 6 + + + + Layout46 + + + + unnamed + + + 0 + + + 6 + + + + Layout55_3 + + + + unnamed + + + 0 + + + 6 + + + + Layout_p_8 + + + + unnamed + + + 0 + + + 6 + + + + TextYo8 + + + + 110 + 0 + + + + yo: + + + + + TextTu8 + + + + 110 + 0 + + + + tu: + + + + + TextEl8 + + + + 110 + 0 + + + + el/ella/usted: + + + + + TextNosotros8 + + + + 110 + 0 + + + + nosotros: + + + + + TextVosotros8 + + + + 110 + 0 + + + + vosotros: + + + + + TextEllos8 + + + ellos: + + + + + + + + + Layout_e_8 + + + + unnamed + + + 0 + + + 6 + + + + EditYo2_8 + + + + 200 + 0 + + + + + + EditTu2_8 + + + + 200 + 0 + + + + + + EditEl2_8 + + + + 200 + 0 + + + + + + EditNosotros2_8 + + + + 200 + 0 + + + + + + EditVosotros2_8 + + + + 200 + 0 + + + + + + EditEllos2_8 + + + + 200 + 0 + + + + + + + + + + Layout45_8_2_3_3_3 + + + + unnamed + + + 0 + + + 6 + + + + ButtonSeiteLoeschen8 + + + Clear Page + + + + + Spacer_imp + + + Horizontal + + + Expanding + + + + + + + + + + + + Layout18 + + + + unnamed + + + 0 + + + 6 + + + + Spacer1_2 + + + Horizontal + + + Expanding + + + + + ButtonN + + + + 50 + 32767 + + + + n + + + + + ButtonA + + + + 50 + 32767 + + + + a + + + + + ButtonE + + + + 50 + 32767 + + + + e + + + + + ButtonI + + + + 50 + 32767 + + + + i + + + + + ButtonO + + + + 50 + 32767 + + + + o + + + + + ButtonU + + + + 50 + 32767 + + + + u + + + + + + + Layout48 + + + + unnamed + + + 0 + + + 6 + + + + ButtonLoeschen + + + + 90 + 0 + + + + Clear All + + + + + Spacer13 + + + Horizontal + + + Expanding + + + + + PushZurueck + + + + 90 + 0 + + + + Back + + + + + PushWeiter + + + + 90 + 0 + + + + Next + + + + + PushNewVerb + + + + 90 + 0 + + + + New + + + + + PushBeenden + + + + 90 + 0 + + + + &OK + + + + + + + + + + + ButtonN + clicked() + QErfassen + slotN() + + + ButtonSeiteLoeschen1 + clicked() + QErfassen + slotClearPage1() + + + ButtonSeiteLoeschen2 + clicked() + QErfassen + slotClearPage2() + + + ButtonSeiteLoeschen3 + clicked() + QErfassen + slotClearPage3() + + + ButtonSeiteLoeschen4 + clicked() + QErfassen + slotClearPage4() + + + ButtonSeiteLoeschen5 + clicked() + QErfassen + slotClearPage5() + + + ButtonSeiteLoeschen6 + clicked() + QErfassen + slotClearPage6() + + + ButtonSeiteLoeschen7 + clicked() + QErfassen + slotClearPage7() + + + ButtonSeiteLoeschen8 + clicked() + QErfassen + slotClearPage8() + + + ButtonLoeschen + clicked() + QErfassen + slotClearAll() + + + PushZurueck + clicked() + QErfassen + slotZurueck() + + + PushWeiter + clicked() + QErfassen + slotWeiter() + + + PushBeenden + clicked() + QErfassen + slotDlgEnde() + + + ButtonE + clicked() + QErfassen + slotE() + + + ButtonI + clicked() + QErfassen + slotI() + + + ButtonO + clicked() + QErfassen + slotO() + + + ButtonU + clicked() + QErfassen + slotU() + + + ComboBoxTypen + highlighted(int) + QErfassen + slotTypChanged(int) + + + ButtonA + clicked() + QErfassen + slotA() + + + PushNewVerb + clicked() + QErfassen + slotNewVerb() + + + + qerfassen.ui.h + + + slotNewVerb() + slotA() + slotClearAll() + slotClearPage1() + slotClearPage2() + slotClearPage3() + slotClearPage4() + slotClearPage5() + slotClearPage6() + slotClearPage7() + slotClearPage8() + slotDlgEnde() + slotE() + slotI() + slotN() + slotO() + slotTypChanged( int ) + slotU() + slotWeiter() + slotZurueck() + + + 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 @@ + +QLernen +It is the main wiget of the kverbos project. +The user learns with this GUI. +Arnold Kraschinski + + + QLernen + + + + 0 + 0 + 592 + 447 + + + + + + + + unnamed + + + 11 + + + 6 + + + + Layout13 + + + + unnamed + + + 0 + + + 6 + + + + Layout11_2 + + + + unnamed + + + 0 + + + 6 + + + + TextVerbo + + + Verb: + + + AlignVCenter|AlignRight + + + + + + + EditVerbo + + + + 7 + 0 + 0 + 0 + + + + + 0 + 0 + + + + NoFocus + + + + + TextAleman + + + In the foreign language: + + + AlignVCenter|AlignRight + + + + + + + EditAleman + + + + 0 + 0 + + + + StrongFocus + + + + + + + Layout2 + + + + unnamed + + + 0 + + + 6 + + + + TextTiempo2 + + + + 70 + 32767 + + + + Time + + + + + TextTiempo + + + presente + + + + + + + Layout17 + + + + unnamed + + + 0 + + + 6 + + + + Layout13 + + + + unnamed + + + 0 + + + 6 + + + + TextYo + + + + 110 + 0 + + + + yo: + + + + + TextTu + + + + 110 + 0 + + + + tu: + + + + + TextEl + + + + 110 + 0 + + + + el/ella/usted: + + + + + TextNosotros + + + + 110 + 0 + + + + nosotros: + + + + + TextVosotros + + + + 110 + 0 + + + + vosotros: + + + + + TextEllos + + + + 110 + 0 + + + + ellos/ellas/ustedes: + + + + + + + Layout4 + + + + unnamed + + + 0 + + + 6 + + + + EditYo1 + + + + 50 + 32767 + + + + + + EditTu1 + + + + 50 + 32767 + + + + + + EditEl1 + + + + 50 + 32767 + + + + + + EditNosotros1 + + + + 50 + 32767 + + + + + + EditVosotros1 + + + + 50 + 32767 + + + + + + EditEllos1 + + + + 50 + 32767 + + + + + + + + Layout14 + + + + unnamed + + + 0 + + + 6 + + + + EditYo2 + + + + 200 + 0 + + + + + + EditTu2 + + + + 200 + 0 + + + + + + EditEl2 + + + + 200 + 0 + + + + + + EditNosotros2 + + + + 200 + 0 + + + + + + EditVosotros2 + + + + 200 + 0 + + + + + + EditEllos2 + + + + 200 + 0 + + + + + + + + Layout15 + + + + unnamed + + + 0 + + + 6 + + + + EditYo3 + + + + + EditTu3 + + + + 200 + 0 + + + + + + EditEl3 + + + + 200 + 0 + + + + + + EditNosotros3 + + + + 200 + 0 + + + + + + EditVosotros3 + + + + 200 + 0 + + + + + + EditEllos3 + + + + 200 + 0 + + + + + + + + + + Layout18 + + + + unnamed + + + 0 + + + 6 + + + + Spacer1 + + + Horizontal + + + Expanding + + + + + ButtonN + + + + 50 + 32767 + + + + n + + + + + ButtonA + + + + 50 + 32767 + + + + a + + + + + ButtonE + + + + 50 + 32767 + + + + e + + + + + ButtonI + + + + 50 + 32767 + + + + i + + + + + ButtonO + + + + 50 + 32767 + + + + o + + + + + ButtonU + + + + 50 + 32767 + + + + u + + + + + + + Layout15 + + + + unnamed + + + 0 + + + 6 + + + + TextErgebnis + + + + + + + Result: + + + AlignCenter + + + + + + + Spacer4 + + + Horizontal + + + Expanding + + + + + + + ProgressBar + + + Panel + + + Sunken + + + 1 + + + 0 + + + 0 + + + true + + + + + PixmapLabel1 + + + image0 + + + true + + + + + Layout11 + + + + unnamed + + + 0 + + + 6 + + + + ButtonLoeschen + + + + 110 + 0 + + + + Clear All + + + + + Spacer2 + + + Horizontal + + + Expanding + + + + + ButtonKorrektur + + + + 110 + 0 + + + + Correct + + + + + ButtonSolution + + + Solution + + + + + ButtonWeiter + + + + 110 + 0 + + + + Continue + + + + + + + + + + + 789ced9dd772e448b2a6efe729da0677636b3899d0b0637b41adb5e6da5e848406925aacedbb9fc8f81da86215ab9bc9e96a66f570dcd8531f010442f81f1e2a93fff5afdfcef7777efbd77ffde3e696dd16e23791b3ebdffe25ef9ae6e9fffcdffffdfffef1cf7034fa2d887e1b8f3def37ef9fffeb1fff2c8e7e13bf39a3d18885b1e5b3819329b7023c1e85d194cb2be230b4cf977703fb53ae96c17e1af229779be0201dc9293bd7c4721cd8eb747f188cb5bd7e6f791c7a6366d35bb7ecfb2a5453661e388cbc917dfe9938f190de96e5208c71bdd596432f89529b3ef21b9afbc736ff287f188d7c5b9e56598efafb5b499c82b31dcb71308aecf3ce2d384c3d5bfec61bd896bf38b59c7a5e64cbe3dc8043ee85f6fa8965d65f2f8e89fdc83e2f713f0b82c8a6df3660f3bcbdbfeb2cf3208c6c7a2db32c86eb8bc492f2b3625986c2b3e5e9d4c0f67a73412c3ddb1edd02b1f2842d3fea4b0551047f38049bfb6dfb764bc40a2c5bcb3a88713f0bc1e63af2574d793c0a9208fe568043edd9f62eacbf8dc7e6baf5cfea026cdacf729310d3fd0cf77bd188f2c307b6e59113cb7ec0d09ef28a9883b9f5f771d0b3b4f53b0e07be261668afae1918f5370247a601edf5da72d45fef5a6219d9fa6c2ec191efdbf270a41f9bebf6fe12ef8ffbfa653ed8dc6ffdaf190f8cfa7bb09c040acf737760bcef191c79a83f161007e4ffd5c0f0a7c872da3fdf22bd74b85e1287286f69f530669e823f8a2570a023b40fcac3ccfdd69fd96460abdf261dd8a6d7d603dbfc96560f63dea75f5e136b3047fa3c1ce17dad03ee9f672d7184fc7762607bbd45fa221ce3f92618d8fa4f9983fbf277923842fd37d6bfc7b2bf9f33620fdcdc83a3107ae2c89feaaf8ba79e63db7f714eec834bdb5f8c753486bf73ebbf9ee93f63f8c3e1c0b63dab04dc978fdbfaf6c6fdfded1d7108767607c6f3f760f33e9bbfd6b6afe7f5f7b7e1c0f09f7be288d8d69fe7f7d7c5027114dbf62f1a70c47d5b1fc2faa717f4d7c522711c5bff706c3c31af4bc0cd233862f0a7c6f6ff5e345c7f009bf42d67b67ff54cff1cdbf66b9ec0e6ba6589fc2421c3f56a6560eb8fcd2e318fe18f48cff44e3efa1bab072f1deedf20a6fb1b1bcf3cd6b3b34d2ce8fac1c0d69f1c94870fd7f706c6f51d6209aead5e3d11a9c0d67783f44d7f1edbfeabd92156e00ee597f138407ef72dab50c7b67f63568ffe281a819bcd81d1bf583df97ee4c5880fe5c0b63e5aab4fdf442f5ccf178925ded7dafeccb8838ffbcb0c1c07949f73e230b4fe2f6c7bfb5114c4d0676c3931ee61fd33b7e5f5535f07d63ff33d70300217c84f1a45894d4fde12c7e08e81e304efebac5e7c162509c60b07e0380cf0fe35cbbcbf9ec9816dfd4f143866181f39d61f7c11a574ffeec0d01bcaa7a35160ebbb1c13f3c4faef04f9d3b1c4788ddbf705e34826e8ff6cff15f8914a507f77e05804680f9bbea95c8debe519381618df4dac3f18f949bcaf2c885580fe3e26d6897dbfb0e3b7208a4789f5bf890027e3d0b67761eb2f88e371027f5b01271eae4ff8c0367fc5067180f1e3c4f6274162d247fcbf2496189f4e50fea47f3eb7f519a4e118f5935b7f0f58cf8d1dbf043c0e12c4d76460e4c7f61781887de4d7d9230e71ff04f527cdfdd0830f4e22c49f0af5ad630eff7089cd75f497b6bca1294d84f1aa1d9f86e324c1f3b96d0fd35bf214e36b5b1fa1196d85363fe53e38918817cad6bf918b40ff2ac7e058a6e85f25384991be6bf31f2689c078abb3e50d5353227b3fdf1ed8e64f1e83639da2bf5c009be7d1bfdb781b9a780fff502be040517f7d40acd19f76c81f376caf57cfe038467a933b6285f2cb5370324ed15fdafe2634f118fd6b774f2ce0fff2029c7874bf1dcf84261ea3ffac8f883d7026c07dfaf284989e97e7c47e6aebcb7d20d611e633a81fd5a7277af6d11f670931e9294b07467e47e03efd1aedab4d7cc678ee6860eb6ff2129c04a9f58789034e4788c7ee3d318d3fa4f5a768d4df5f27e094fa6fc73e1f4de3bd4d9fef0f6caf6babdfc88b8204fdb3ed7fcce029417fcd8f06b6fededd110bf4a739d2f71345e3191bcfa2d0b4b0cd9f1b834dc0b6fa63b63e8cb773a4c7d606b6f7b38a5880f966cf789f8bf2995f40af0dde1fa521f99f9d9f45719f9e2a7ac6f34e4a4ce9b3febac4f572191c31f867bd004e3cf883b4e3dd28e9f3d35d132bf0e4199ca4a9cd5fad88598a7862fddd6497eee76a60dbbe726360e8c327d6b82ef607b6d739ea2b8d646afdaf457b9af924fa1307edc7fae79dc381f13cdec7229edaebda231660272296e81f24a5977094272b88458af173da33437ddbf156c48d87223ed6c463b00a06b6f9d757c41ee2419112a7894dbf867ff24452fa747f9ac2bf951dbf47a24f5f2403dbf4eb43620fd7eb8381a1df3b62aa4f8df695fd7571401c80db436206fd689f98a7367fec8858c29fb48ddf91ead3e37bc43ee235df250ec08e3b30e62f1e31a5d79e112bb457b30a4e13e8db45fde921fd25624a9f3f118748bf5c214e48afc7c4e40f153d9f8e98ad3f69df178f4c7a980f9e1087182f48461c51fec7c40af5534b709f5eb14e9c603c39a988fbfec0c6fb786c1469d3e7ab03237ebac409e2b7c2f3de70ff1d7142f73b03dbfb6be2d40cd12dc7c4027a5156afb1df3f2f34718ae77540ccd03f6511b148d07f3a3da3fc137a3e25bd97284fd0a7cf6f8919d2e70f03637c5e130bf89f13134bbc8fa1be8354c3dfb58de77168fc0ffd8f47cc29fde7816dfa4a0e6cdb436f83d380c17fac7fc4517fdd4988055879c4122c89fbe759036663f84f66e39b192dd0f37c91989e67e5c08857f09738f5e11f25ea3335f509ff447d33339ec575bc9f99e6b2e56dadfe626e5ad8fa37b77a89c5d4036cfb76c43e5dc7fba5c99ff5a7e2129c3286786be7cbb1d127ae0bf8bf9ad6987dbfd54fac87f9c42db1a0f17601363584fed11f18fd8dd5573232f50dbd56c47a8cf8b2d87384f68dc0a6866c7dd736de9ad10fe9bdb5e3a92430e9617c68f39f84b1c078a2b5f13c99ca0beb93bbc492aeef809311e281b0fa33d33585f897dbfe2e31f36bac57e577c4343eac3bb0197fa23db6c1267e607ec1c129e953ef8399cf119f43e214edd5e1fd6944f1be6ec07d7e32d4576a9ec77af61a7100e636fe27cc9407fe67eb3f31b333c4b76a0c360112eb39d65f12650a88fab6fa4fcc7c005cdbf16c6ac6ffcce62fb7ed9d7a11a3fe59804d0ee06f0e31437fe8daf2a7be7923980d0c7fda039b0069f5e0daf64e8dbeb19e57756036c27837b3f59b464c7194cfc62f53bb9ac19f37c18ca1ff28907eca62d45f65fb17e3eda1b0f9c914988f38f468fd25e56944e35d17ccc7dca69733e208f9d7b63e5311c5183faa55b0c931da1ff913a6bd6cfbe74760ee71c403abff549af062f5c40e07b6f92b2760d3be581f59017305fd17b6bf4a4d7cc5f88edf13d3f3ce09d80c2f30df43fb29ce99adcf0eac8334c0fc01f9d33c10181fdaf1aea9fd94c31f56c07cc4d05ed63fd9d8d4a86595f58cfb45cf1c5c5d818dc17ff6c13c14580f39208e84f527d7b63ff34cfac87f4bccc125f2e7f118ed595d130b89f1b5edaf981fd27e4f8ef79b7887f9878bf7f9e6798c47ecf89699f885facc42e214ebadfc113c6d415b1f7bc40afa730fc17d7ab5d5170b235adf721db0e911b01ea2c1a6c6d1de289fa90d86f1bdf50f16f5d7f331983361fbc3a226d6a8ffd2f66f2c3666af573760e12bdbde2eca67d4ccadffba76fcc5a6fd09f67b2ec09c0bf4cf31b11098efa1be999961c01f4fc0d31ab47c35b0bd3f47fd332ed1fe2eea8b7389f41b172ce8fecaea9f093e86ff158238407be7365e31254602fb45b6ffe32391e27969eb8b8fa76fb0f9f7c1c213568fa5ad2feea509fa17f7186cae63be23887d619faf6c7fc84d7fe5dbebe20a6c7204ffa3eb2210601b5f79106b5aef5d06b304fd6f710ee629f2d366c40c5cb9e03e3d07e9854ca3bf902b3d432f590c363580f5bf7b624aaf18814588fe9e5b7f37bd173dcf72b0791ef3e12de28823fd43b0995060be62fb3f1ef7ed5372620f5c3d8145cc313f3fe819cf33942fe9efaf8f897de8a594e0fe7985f64a99447fd15c834d0dd9faedd0be8c537f5edc80452a6d7a8eed5f3837d7317fb1fae262ba2262f3b30a3625c4f8f27660c4f77a60ac7fd9f9b4f15e4dfd858d37dcf4bf58efab4270a27c8ccfe19fca94c8ea31877f2ae9a37d3a3bfee07a341a613c82fc1935439f8e7d9f3097697fba031b7d62ff75995810dbf70913adc09d8d97c21b8dc6c89f076623c407cdc0a644d0c70e58c4f0ffdced5962bdca8eaf856fd2c37831000feb7f0a6cde8ff9b81c18e3e71a2c94447d8ec072246dfe98ed5f45301a633cc8d7887dda8f5e049bf761fd6b0b6c3c08ef477903e3afb89fae0b057f63562f221c051ed6f7f7c17d7fc2ea81d1ff26c45a62bed0804d7eb1de3b210ed09f390fc409cacbec785144a3d843f91e8839f6b3eb55b0a96fcccfe97a9f7e23893d69cbc7acbe453c12d89f739e8815eaa744fdc49187f5fcf69838c2fa797e0d36fd89bd5f4760d323209ee37d267aa1fddd7362ea0f0bd46f2c39eaa3b0fa16c938c2fe2c3f059beac7fa0afcc50c40d17f3beb60531e5b1fdaf6b722158184bff08131dedc274ea1bfb221e6d02b43795299a2bfe40bc49cda0fe563267f889f05718cfdb67a09ccfaf9a6d5bf093f0cfbbb39ea9bb390e68bf0576e5a04f58bfa1146ff88f7f007616ac87286f634a31194cf41fbc820447bf03330d7c2b66fbe01363586f1494dccf0bea602cb58221e7ac409f1e1c0d86fb2f142a834c17e860ec146f1880fd0ab32fe8bf1f12a718ae70bdb1f096dea03f1ff0a2cc6f0f71ce5d7325588ef56af7214a4d8ef604fc4b41edfe5c41afb0b6d0a8e68ffac4bc08243bf5d4c2c88a3816dfd65fb60c9f07ebd43cc15e217de3f16345ee297c402fee74e8825d2e709b186de26b760531f187fdafa945ee8d17ec52a7180f31f5d0836f9c77cec026c5240fb2c13533c2dec784efa52288c779f88293fb98d2f32182becdf4a942f4853eaff0ec1c6bf10dfcf8995827e919f3010d81f77f1fe305434fe3d01f7fd8b98109b1cd8fae3c44a21de5afdcac8d7e8ffbbbd8111cf8ec0a603c77ef3e9c0b6fc93061c45d81f51684f331ec17a62f500161ae3ab09eadba84d62be83fa8e147187fa8d8300e7a5262dd8cc7f6cfbaa126cca67f3d36862ade04ff0d724a078a63607863e1ce231caa3d6893d9c0753284f927a01d66b51fe645a63b63fb07a966910e1fc551112c7380f567803c39faf89539c7fe90e89359d773ae8d9875ecec0e188f87c60d4470d8e47d8afc83330a3f3070af561269cf09f12fa48d55861fd16ccfaf23a67c4a187fe6e8738a1fc77c40cf1ae2b88e9fc93da1818e5d9ef19f92f0538a4f350a2ee19d715da972509ae1f409f66b689f9708efe84f7cf176ecf789e6d138fc1626d609c37bc27f6507fe27660c4b78cd8a7f3419bc401b8ca06b6fee5e4c474dec185fff0c4c77a5e41d7d324b0edad9fc166c681f8b44c1c61fdabb0f14a8a3eff5d46ec819be381319f5c20a6fc36ddc0186f4403a37db688e93c52b54b1c211ed6fdf518d7ebcd81a1b7dd81b19fb74d9ce0baa888531feb6167c402f3ab0c7a17cc0b11bf24d8f827c6ef8a3841ff5ec37f85f215e69be8bf65df7ece053195df391fd8969fed12d3f92ee111c7682fa68929ff594b9c82d9c5c0981ff6e931945f5f0e8cebab0363bed7a72fe87c51d033d663f429b1f4a107bfe700fd753830d6ff4f8815eecffae7e9bc89b81918fe7e078ee8fc890c07467f56128f03cc4724b187f32f0ee53f8a038c47157182f31c4e3630d65711ef643c42fb2a7a1f8f30fe12d083f905e28d46ffaafaf6619c58201eb233e2be7e368915fcb98889a9fc593330c667a80fd5979f49e231957f6560bc5f107bc46a60ab777630b0ad1fb14decd3fd5b0363ffe07c60ac9ff7d703a4277606c6fd0c1c0721ce3f9d128718df890de208eb5d0ee5374e69fc45e54d53ec8f68c4372519fa7f017fd0fdfb26e82f743aa6f564b49f368ac37e1afa17134d31feca8f892385f300d69fd5a82f5f258853f8879460d301e2fc155d37111ae74f1ec17dfac2b6bf1a0fedb1474ced51296281f164730636f9c1fe62491c2bac075aff3093a714fd5b13812315e23cd603381e87d84fbb26f630dfafaf887d8cc7145d3713189cbfb905f7efcf4f891385f3688fc40ce311c7f63fca37fe8ef72f80231a5fd478de8f697fbcce8943b4b74079fcc4c3791b96118774bef59238c27ab5d8238e311e740a623a5fe8a2fda607cea0f7317182fd1717f5e9338df57f97de67265058df477dfa2a457905da370839fa478efc9be111e9710236e5417f5612c7984fc8056286f96ff1dc33ce2f5507c41cfe2eefc189863fb823702ae0ffae3730d603c7c4b43f2735b1267fa5f44d7cb2ef531d319d9776a93cdcc7faba5b1007d89fa817c192f613e436b1c47ca1c806b6ef9b2c83a71e64eb87d237f589f938ead78ce7697e007f0d6389f14076454ce78f33e8214c4638ef2e9f88c788e7f27160aca73e137b68af02e509d300f12c47fd8482ce27d53e7138025f10d3f9d61cfe1499f119fc17e945c918e7bd2a461cc11f73e839e201ad9f6be27efd1dfe1c8918eb63f598381943afa381317ef106c6f98c9298d6a7cb4db0a961cc4f513f71a8515e8df4e26884789da13c7142fb37dd25b1a2f350285f9c26a8bf7c9558a1bfd22e9879888f12e58d4d7d62fd6a9738c2fe5997824d7f88f9293daf38adefef0e8cfd54412c14ce47dbf1914ac200fac9236285f2f113705fbef692d8437c553b60d33f60bcd4104b9c2f93949e293fe2dffac0189f41df66be84f31112fdcfb4bbc1fe1dda3791b47f538d8835c60319e54f098d78d3b30437f9c018ffc11fd3688cf1400b7f4e4d7f0eff417da5e918f323b5464ce77de522b1847ed40dd84c80d03fef10c7d41fa3bc69dfff352d319dc7e84e887dac2765943e4fe8bc59051621d6bf6bf8572a3df43f7a8938c17e0c477f9f4e4b6cdfc78825da3bbf2056a80f66e75bcaf496e82ff270609cef407fc14c7f8ffc4f88133a5fe412d3f8a9833f33c6303ec87d628efd5cb94bace9f329d01be31e9d77a3ebd3157efb3cea9f8918fbcf134abf8f1f4d434ce56b3831958f436fdcf82fc693185f70d3def007c44f9ed2f96ab54d2c705e856d104becd757fbc48ace93209e7316e03c778bf6e03cc17e6f47cf738efdbb62b967f42f1dda939bee1de74be00fd30d039cf70d89b5c6791dc41b6ea6cb385f00ff9e6e77a17f2666fdf9f81be200e7099c11b1c2fe13db21d6a8df02fe224c7f8af808bd0b31c67e9e8a8963b4a746fc15a63d305f5d24e618efa92762cabf443c93ccc778a8f07bc6f921817824c508f53dc97be6187f16c4949f9ad21301f6d3b305628dfa6fe8ba1e6bac6fec13471afa873e55dfff55a80fe3d0d8efcfd05e4ad2fa6b05fd2a5322acff1c13f7fd4d0d36ed837881e7759f7e0d3d6b26517f453030d6b7a0372d04d6ff27d7c412ebdd12fdb7e9fdb01ea8505eddbfafe60363bc66eb578ffae7278b6039c27aed646160ccc7edfc438f3947bcca73b0f4683fff10dcd7a7b6f1437b2cc2fc54ee13d3e7077406367a46fc38001b07437c3c1e18e7452ec19261bf9639e0e907f4ecf5d1c0586f39218e70dde103a3bd8fc07d7e2b94c7e7745e4a17c429f613ab6db0f12fe43f1f18f1ed82d883deda0d622a4f85faf125ad0fc98a58a23df3126c6604d89fbb23a6f50bd5738af2484e4c7aaacf8915d6131bcabf0e35e65394be16dafaabb6fea703339dc0e74197c07c4ce7ff917e2068bf5fd7c431f603f227e214e3538dfc057df9d4e9c0b6be2694be99b1d9fcba9bc463cce7ddad8111dfb67b86fef367625a9f75faf4023acfde738cfe46c6c41af5d1c2bfa7cb89a83f7abfa911b427bddfe81ffe6ee703da8c4fd17fa83de288fa9355628ef35c12fe1eca18e3695d12d37ecc242356b43f87f28426ff68bf1b62ca6f05ff36ad87fca8c581b1ff6be39f8ea218eb11ed2a7142bc32303e8f03bd4766408178360133093d32f84324c408f5fd0896b47f53ed0d8cf1f7397112e0f32428af990ec35fcb536289fa76afc1a604384f72411ca13f52a8bf98d1faa683f2c422417ed80231e5af3a235623f82bf41ecbd118ebabc70343dfa703e37d63e204eb51fa8938457974d533f6e39420a6f9ba46fdc66a8cfdb8c98438c1fcdcdd20d6d85face06fb1f137ac4f52fe86fab821a6fa1087c4d4debae704f1bdb8254ec1ca8ef77562f48cf54bb467d2d79f1a11ab918d97fa915853fd1d0d8cf10bda27e9eb4f9d0f8cfabb1c18eb4d4bc463d43f5b1c18f1e06160ccb76e8903ac5f64636201bd647dfa12eb3b7907362310f4b7a7c4b4dfe42a705fbfee02b1f1305bbe6660f41757c431ea5bba0343df3531d56f55102bf49f0acf9be885f95886f64d7bff74568825d5ff19b109b9b63ed0bf18efa2fae6c4c108e7611de2680cff730746ffca0646ffa58953f85b4def33fd2dce3b3c138fd1ff6ae82b9d7a9c2d5f4a9c205eb88bc4bd7fd1f39a69acbfdbf191199e78c88f4c89239c4fa99f8919f454a2fda7e373ac0faf114bcccfd9cac0e82f6f8815c6f305f4c84c0447fcd8210e30ff53f7c494ff6a6b60ac8f1f113394a73c1f18e7851431a7f2ed0d8cf642f9cce83cc4fc06fae67df9b3b581b19f027d71d5ef8f9e1307e04a12d3f8a4e8ef4fe1cf4ecf1ce37d8dfe8df7f9afea81313ea906c67895f237fd8d7d7e6d609c87eb8805956f7760e417f142981913f4e80d8cf25f10735a6f1a116bb41743fb89fe7dd522b100f39581b13eb23530de7f402cc135fa6769f482f1ec03b18ffaafef07c6fae7e3c0585f447e653f3ed731b1427b1494bef12fec7f72629fe6074bc494ffcc1918f333cacff437f67a3630deb73130fa0b46acc07a7d60e817e32925fd11fc15f953263f980fb5c421f577cfc4e40f7a9398de27ae8915d5af1e18efdf1b18fddb23b10657e8afb5a0cf2f08e8454b9fcebbb5c4146ff28a3805b70b3de3fc48fe40cc711e2747ffac9587fe30af0786fef78969bea8d19e7aaa70cbe7c454ffce8498f27f70eb3a2eb3c6e7cc842b5de56a3773f30fb6c22dddcaadddc66ddf689d3b71afdceb9f6a37eead7be7debb0f6fb07bf7d17d729fcd3337eec21fdaa2bbe42ebb2beeea9b6ccd5d7737dc4d776b4e6cdbdd7177dd3d77df3df8603b748fdc63f7c43d75cf66b653f7fc9bf6be702fdd913b7e87792ec682811bba911b1b4bdc747ecc711dc7610e7784231de5e80fb5ccc99dc2299dcaa99de64dd63a9d33f9b9e62e3857ceb573e3dc1abb1bec76e0af7f7fe3dc3b0f33a4fee83c39cf6fb40567d15972969d9539b15567cd5977369c4d67cbd9fe50db71769d3d67df39700e9da399ecd039764ebe6b9553e7cc39772e66b473e7d2c13c6bec788eef04c64227726227991b4bcd6063fa0917ce8499067da4293369c858ce0a56be25e7ac6415ab7fbed659e3dcb19675c626f6bf5ffebfffd797df5fb16b67c26edeaa7576cbeed83d7bf803bb37f6c89ed8335b608b73614b6c99adcc93d6d92a5b7b9bdf7ced41ce115bffb655d806db645befb06db603adb35db6c7f68d1db04376c48e3f5ce35f6bfd849db233935bf5a176ce2ed825cb9df4cd6d35fa4bb43e669e51b1ff060b5838a3d623165b35df19fbf2fffd7fbffa97f34c5a5f9a13335a67094bcd3470fad9b48fb4e907c5e454ebb37b3f575c7faf759e1995ceeabd072fb46e9fe7392f9c8097bce2f587ebfc53ebf3a1f55ed5775fa9fee1a5dee751ebbce12deff8845f7da439bbfc9adf7c6afdefa1757ecbef8cddfe8db5feaddaef0682de3fb5fe0b6addd8742c7fc0efe764243ff75ae70fc61e8d3df1e7f9d73a5f9821f5d7c6f05f7e1ebe56fca7d67f49adab69749faed4d9e8fed1f17dceb5ce17f9125fe62b7cc5fc7b952fcebbd6678deb7cedbb88fe72a6fea9f55f5ceb0cd15df175631b6ec2378ddf7e80f12dbe3daf5ae7cf7c87eff23dbecf0fa66dc00ff911df755c33a23ffe9b69fddbd5b96f63fce77cfdd7d6bab273f71363a7fc8c9ff30b7ef92136e2e339d5bac77d1ef090473cb65a4f782a5ce108c61fe654ebddec63f821aebf54f9e77cfd6fa675663f0826849042fd6c9ffd1d6fbe994fad0b2db2ef732b7251ccb3d6a771fdcdf625ae7f1dc3bf9dafcfed9edba7d667d1bad57b292a518b46b43fdb6f7fe0cd73aa75a3e843d189177915574ecd9fe6760cff43ad8bebe98ff8f6dacbf9fad723f7973b709f5aff9b68ddeafd46dc8a3b71ff57e9fb85377f6afdf76ae71debf0efda5fff76e4fe0bccd7c58378144fe2592c7ca82d8a25b1fceb68dda87d45ac8a35b12edabf3abe4fb52e36c4a6d812db1f6a3b6257ec7dbd0ecf9fc5be3810877d4ec5913816275f5a6a1eb5fedada9c381567e25c5c88cb6f223be2fad76bef2f353fe7f3f54fadff7a5a172331fd0b0bd3bf82f091164ebf47fde59e9b48443acda374a56bffdf91ecd7d1bae4eea214524a25b5cc642e0b59caeaa5d65fecafff48f573aa7559cb46b6b2e3625693931ffd5e5ecd9cd6b5bc91b7f3ad75a3ee956f7e6346f2e6ae83bf762cefdec83b792f1fe4a37cfa507b960b72f1a5d6e5925c369a5991abc6d6ccbfd6e5c61c6bbdfb5aeb72536ec96db963149ec95db927f7e581d17bf695dabf1fc3bfb6d73ebf5a3f9447f2589ecc6ca7f24c9ecb8b577e7f2947affcfef76d24a7df6df5aecfbe48ffb5cfbe18adcf3e9fddfab1d6c58d0cc48a0c65f85d7437f15d467f5d74375a8f652253e52ae7438d29aec4d75a575229a555c6d6546eac60ebaa54d52fa375ae6ad5a856756aa2aed4b5d1ba5637ea56eeabbbefb4feed69f86f57eae652ebea5ecdf2095e32f5687e9ed4f3abbf5f508bef6925b5c456d5f2ece74bd48a5afd2ead35b52e6ab5319b9927367fa475b5a5b6d58eda55bbaf8ce76d7c577b6a5f1da84375f453ed589dc8589daa3375ae2e3ed42ed5488dbfd1baa77ca7c649787eab02e5b352c979d7faf0ecb50a55a4a6df20961a8d6bedaa5b75237371fe45ebc39edb8f62fb1ccfd7e749eb9abed96926e3d3efd2f9362dad75a6f37758a1cbd7b46ee2f79aaeb4ed3d7e347bd78d6e75a727facad8b5be313f7fbedd388ebe95b1bed3f7f653c91f68fa413feaa7976378fe6c6cf8d4003f9ef21cc7f5a0d7babba09ff5825e945b7a492f1ba54f8c5d4f956ef57eab575e68fddbddf497ba9fdb3d37bdaad7f4bade98c936f596d1d3b6de310a7db6bfd9b5ffddb3bfdfd707e6bf87866649734f1fe9e39fed097f6cfae4a5d6a7b374b1a24ff5993ed717fad2d8297ef79de2a51e89528fa7df5b3afd2e32fb19903fdfb6983bbf5aff83f9d6dc6addb4fb920e752437a7dfdb3955ba4ee59e19c7e7da95fb992bd5775abffb616c9f63ad67ce6cb59931f3c333e1ec6632337590e98c991f9d65e6df7956389b599955598d28ff76633773a775c964d664adb8cdba0c65bf32766db8cd6e5ecedc613c67fbd36fb3c96eb3bb9ff4199974feb49eddbf25e7d9fd3c6a3d7b701733e3a77a317bca9eb30571992d9ad9ba99b1674bd972b662f47ea06e33cc125f1fc3dffd78beeeac646bd9fa1cd846b6f91ead1b8f37d13bdbce76b2dd6c6faa75f3b36fff65e27976981d65c7d9097e3f8bcd9fd6b3536367d97976915d6617b6e42363e3cccbfc2cd0a7afaeefd96fb3e1791666d17f82d6b3384bd8d1db2c4b73f767b7dfec5acf9d9ce55cdde52297b95237b93623f754a53233b17e21cf4c7ceff2dcb4fda3bb9417af7eceedfb3d38abf5bcccabbc9e0b6bf236ef3eb5fed2be8deba2ca5fcbeb86a85e8beb5fb49e5ffd67683dbfce6ff2db37da5d7e9f3fe48f3fd19ef2e719b4eeb3ab7c215fcc979c89dcce97b3e77c255f514dbe6ac6eea989e76dbe26375528f7749caf333fdfc837bf99af7f1fdbbfda73cbb7f2ed7c672e6c37dfcbf7dfa575a3e2fc203fcc8f72a3cefc243fcdcff2f3fc62aaf5fc321fe5e3dcc358ff53eb7f7badfb799087f69bf9fed0f2288ff3244f0bf7a79953b059e7eb052f843329a4735fa84217995ec9564d6c9fa89b222f8a5c15a57e2eaaa22e1a73b51dcecdbd617ffdefa0f56904cfea4c179d3e34ea3e2f26c555715ddc98df67c5ad99b91f64ef9897cda1d68d768bbbe2be7828be5a79289e8a67518b9bd7945e2cb0fd62b158e4a513fd67ccd773bf589af91cc34f33b5512ccfa2f562a5582dd68a75f7d9687e83f9c566b195af17dbd9812c8bc2fcec644bc56e91e5bcd82b44b15f1c7c355fffc3fdf5e2b0382a8e8b9339b0d3e2ac387f9fd6f586f1f98bcccc628acefc5cf2891c4d23f934b217a3623c7b549f57ad3325c3c22bfcafb41e14e1ab315d1651111749914ead744be7a7182bf9dc697df6138a3fc94a31bbd64be95ce7c65b4b55ea322b73e7deb92f8bb22cabb22e9bb2cd9fdda5b22d3b33b3e7bff33db2afccd7cb4979555e97377360b7e55d79ffa9f53fd27a71c776cb07e30b8fe5d3f48ef2b95cb0df8efec2a6fbebe562b9542e972be58afa49ff2b57d9a85cfbd4fa9fa575ecb995ebe546b9596e95dbe54eb95bee95fbe54179581e95c745539e485e9e9667e65fe7e5c5abdf55f1c3fd75abf5db39b177697d3a5b2f2fcb51392ebde2466fa8e7d2cfea322843f3fba88ccba44c2bb772fe067b6ed67fd46e65faad8a970b9599a457d2fc5b55fa6b0f936195315ee55551955555d53fd1aaaaa9da4fadffb95a2fb2aa2b8fab4975555d5737c56e755bdd55f7d543be5e3d56a67f2f44f55c4dbfbfe6fbb334bfbbbf3e7f5aaf16ed1ef99b4d6f645a3d574bd572b552addab9bb568f7a2fcba657abb56a9dbb98bbcf92aa51d046b5f9d14a37b9d8fa56ebfab2daae768a7b5155bbec8c9d557bd5bea87aefd2a7fa54d4d5413153bff6efd8f43c7c75581d55c7d5c987da6975569dff1db46e7cf5a1baa82eab91aaab71e5557e1554611555b1dcd28bee4395e4cbeeb3f3a3f3f03fdc5f9f37ad57e93bd6e1cd48bd766ba76635ff7a6fcdfe5ed4b256b59e7dcfad5aacb33aaf8b99adacab6fd3aaebba7145ddce66e689ae9e7cab75b1525fa9ddcceea64f3fe9c2ceea6b10936a2b6bb3f6fbf7ff5cadd737f56d7d57dfd70f1f6a8ff553fdfc4b6b7df8ec8bbb983dd40b052f7829eb4555d74bf57291d52bf56abd5634ce15d5fd8fcec3ff607ffd53ebbfa3f5f57aa3deacb766b2ed7aa7defd4eeb7bf57e7d501fce6807f5517dfcbdd68bf8eb13b13dd727a2ae4febb3faecaf54bad5fa797d515fd6a37afca1e6d57e1dfc1db44ef5ba5887755425755c2775dab88de3dc9707f5aafbe5d31d3f3e0fffeafefabc695d6e362cbf98cd1ade884636aad1c5b8c99afccb953234bf2f9ab2a99a3a3f9931d5a6690b976d4d3f113e836d355df39d1e9a2bae66fd74acfddb706973fda6efa05ac95ab5d5bcf5bb8bfe64ad37b7cd5d73df3c348f1f6a4fcd73b3f077d0fa97efa53123f6a762ad596c969ae566a559cd5f7ecbec8c9f5f9f37ad3bebcd9a586cd69b8d196db3d96ab69b9d6ae5c56f779bcdecb8d96bf6bff9fd1fd94173d81c59adcfdabe5bcdf12b5a3f694edfb37bcdaa5f42eb67cd7973d15c36a30fb571e335fe2fadf51f7c0755ceb347f9dadad1cbefa5f9c3fdf579db737befdf6e6c02fcbcfafbf0b52b7ffcb71b7f15ad67a7a26e22fd97ced2bfd17adc244ddaba1f6a4ecb5afeab6bfdc7df2dc96ebefbfdb77ff7e50ff6d78bc356b4b2557360dae424fbd4fa2c5ab79f6fbd64bb6dfe313affa2f5b668cbb6fa50abdbe6d7d7fa3bffc6d39b3ebfdeb66dd74ee6c4baf64a3cb4d7ed4d7bdbde7da8ddb70fede3dc6b7daf7d32f6dccef2b742fe746b173fb5fee7697dd6ef8c9ee5f3ebed52bbdcaeb4ab73606bed7abb314fdf0f3fdf5a9ffefdc676d3d856bbddeeb4bb1f647bedfea7d6ff5cadbfd966fcfc7abbf4fab7187d84a98df6e053eb6fd2fa9ee34fff72e3f453d8eda1e3bae9c798e3b6470efbd4fa8fec2f1bc3bfe9f3eb9f5afff5b43efdf45a7bdc9e4c3fbbf6c17f91d97eceed53eb3fb299b41ebc47ebdfedb9fdcefefaa7d67f2dad8b15c72f16dad3f68c1dbf27c54fadff95f6ef9ca579775c7f35c67f6afd97d2ba89e736a29fb7174ef493be79e253eb7faafdbb6769de3c5f7f3943ff7e9ffd53eb9f5affd4fa4fb5d9b5fece75f8afa3faf771fe81dd7f6afdd7d1ba6eda4b9ef3bc1db5e3d6fbf059faa7d6df647fd1dadcb0b3f683cfc1cca9d6c543eb37611bb4e1479a5868a3369e27adb7499b766ee7f2aa733e5cdfdf69bd631def44937ea475b2539dcefdee3d7f4deb2799d57ae3dcb1d6a8fd2d76953dcca4f55ba3e4fb37d96397b74b5df1d1354226baa23d90755776555777cd875adb75dda469f3749aaf994c35c7ddd5f75aefaedfa5f53568bdbbe96ebbbbeebebbe75bb3ffd5a99f69dd0373bbc7eea97bee16bac50fb5a56eb95be956bbb5ae981b5bef369cab6ed3b9ebb67edf98d76d3977cebd3393d69da76edb79c64f6ff877ff1be799aeef388bdd6eb7d7ed7707736087dd51773c4f5aef4ebad3ee6c463bef2eba4bfbfd5764d3efc7ea46ddb8f3d8da6cd679dd43e75bad075dd8455d3c879674e9c4358ec7267c223ed4e4f4cfa34cb2493e29e6c8cab26d9c3a9e546f31e7aa58759fdd9b37d9a2bb34a927cddb8ea4bacb936e32995ccd8d5d4f6e26b793bbc9fde4e183ed71f234793675b3f00e5b9c2c55e94b9b2c4f56de69abfffcfffffd8fff01a92c3e50 + + + + + ButtonLoeschen + clicked() + QLernen + slotClearAll() + + + EditAleman + textChanged(const QString&) + QLernen + slotFont() + + + EditYo1 + textChanged(const QString&) + QLernen + slotFont() + + + EditYo2 + textChanged(const QString&) + QLernen + slotFont() + + + EditTu1 + textChanged(const QString&) + QLernen + slotFont() + + + EditTu2 + textChanged(const QString&) + QLernen + slotFont() + + + EditTu3 + textChanged(const QString&) + QLernen + slotFont() + + + EditEl1 + textChanged(const QString&) + QLernen + slotFont() + + + EditEl2 + textChanged(const QString&) + QLernen + slotFont() + + + EditEl3 + textChanged(const QString&) + QLernen + slotFont() + + + EditNosotros1 + textChanged(const QString&) + QLernen + slotFont() + + + EditNosotros2 + textChanged(const QString&) + QLernen + slotFont() + + + EditNosotros3 + textChanged(const QString&) + QLernen + slotFont() + + + EditVosotros1 + textChanged(const QString&) + QLernen + slotFont() + + + EditVosotros2 + textChanged(const QString&) + QLernen + slotFont() + + + EditVosotros3 + textChanged(const QString&) + QLernen + slotFont() + + + EditEllos1 + textChanged(const QString&) + QLernen + slotFont() + + + EditEllos2 + textChanged(const QString&) + QLernen + slotFont() + + + EditEllos3 + textChanged(const QString&) + QLernen + slotFont() + + + ButtonN + clicked() + QLernen + slotN() + + + ButtonA + clicked() + QLernen + slotA() + + + ButtonE + clicked() + QLernen + slotE() + + + ButtonI + clicked() + QLernen + slotI() + + + ButtonU + clicked() + QLernen + slotU() + + + ButtonO + clicked() + QLernen + slotO() + + + ButtonKorrektur + clicked() + QLernen + slotCorregir() + + + ButtonSolution + clicked() + QLernen + slotSolution() + + + ButtonWeiter + clicked() + QLernen + slotWeiter() + + + EditYo3 + textChanged(const QString&) + QLernen + slotCopyText() + + + EditYo3 + textChanged(const QString&) + QLernen + slotFont() + + + + EditAleman + EditYo1 + EditYo2 + EditYo3 + EditTu1 + EditTu2 + EditTu3 + EditEl1 + EditEl2 + EditEl3 + EditNosotros1 + EditNosotros2 + EditNosotros3 + EditVosotros1 + EditVosotros2 + EditVosotros3 + EditEllos1 + EditEllos2 + EditEllos3 + ButtonN + ButtonA + ButtonE + ButtonI + ButtonO + ButtonU + ButtonLoeschen + ButtonKorrektur + ButtonSolution + ButtonWeiter + + + slotA() + slotClearAll() + slotCopyText() + slotCorregir() + slotE() + slotFont() + slotI() + slotN() + slotO() + slotSolution() + slotTextCopy(QString) + slotU() + slotWeiter() + + + 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 @@ + +QResult + + + QResult + + + + 0 + 0 + 714 + 420 + + + + + 5 + 5 + 0 + 0 + + + + Results of Training Sessions + + + + unnamed + + + 11 + + + 6 + + + + Layout8 + + + + unnamed + + + 0 + + + 6 + + + + Layout13 + + + + unnamed + + + 0 + + + 6 + + + + Spacer3_2 + + + Horizontal + + + Expanding + + + + + TextUser + + + + 1 + 1 + 0 + 0 + + + + + 1 + + + + User: + + + AlignVCenter|AlignRight + + + + + + + TextLabelUser + + + + 1 + + + + Panel + + + Sunken + + + nobody + + + + + TextSession + + + + 1 + + + + Number of training sessions: + + + AlignVCenter|AlignRight + + + + + + + TextLabelSessions + + + + 1 + + + + Panel + + + Sunken + + + 5 + + + + + Spacer4 + + + Horizontal + + + Expanding + + + + + + + Layout7 + + + + unnamed + + + 0 + + + 6 + + + + TableResult + + + 10 + + + 3 + + + + + + Right + + + true + + + true + + + + + Wrong + + + true + + + true + + + + ListViewVerben + + + + + + + Layout13 + + + + unnamed + + + 0 + + + 6 + + + + Spacer3 + + + Horizontal + + + Expanding + + + + + PushOK + + + &OK + + + + + + + + + + + PushOK + clicked() + QResult + slotDlgEnde() + + + + slotDlgEnde() + + + 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 @@ + +QVerbEdit +Ein Dialog des kverbos Projektes. +Die im Programm verfühbaren Verben +werden in der Listenansicht ausgegeben +und können bearbeitet werden. +Arnold Kraschinski + + + QVerbEdit + + + + 0 + 0 + 588 + 482 + + + + Edit Verb List + + + + unnamed + + + 11 + + + 6 + + + + Layout2 + + + + unnamed + + + 0 + + + 6 + + + + Layout1 + + + + unnamed + + + 0 + + + 6 + + + + ButtonDelete + + + &Delete + + + + + Spacer1 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + ButtonOK + + + &OK + + + + + ButtonEdit + + + &Edit + + + + + ButtonCancel + + + &Cancel + + + + + + + + Spanish Verb + + + image0 + + + true + + + true + + + + + Foreign Language + + + image1 + + + true + + + true + + + + ListView1 + + + + + + + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022230543251d2e253d856405e5b4340320007195215c900058160d502aa68c06069b1855fd5b6bcd0500ae904334 + + + 789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d85640565033000719541dcb434183711c205098015a3015a8829a3017a8925a201aa8bd55a73010064165746 + + + + + ButtonDelete + clicked() + QVerbEdit + slotDelete() + + + ButtonOK + clicked() + QVerbEdit + slotDlgEnde() + + + ButtonCancel + clicked() + QVerbEdit + slotCancel() + + + ButtonEdit + clicked() + QVerbEdit + slotEditVerb() + + + ListView1 + doubleClicked(QListViewItem*) + QVerbEdit + slotEditVerb() + + + + slotEditVerb() + slotCancel() + slotDelete() + slotDlgEnde() + + + 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 @@ + +QVerbosOptions +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. +Arnold Kraschinski + + + QVerbosOptions + + + + 0 + 0 + 536 + 642 + + + + Options + + + + unnamed + + + 11 + + + 6 + + + + Layout12 + + + + unnamed + + + 0 + + + 6 + + + + GroupBox1 + + + Select Times + + + + unnamed + + + 11 + + + 6 + + + + Layout11 + + + + unnamed + + + 0 + + + 6 + + + + Layout10 + + + + unnamed + + + 0 + + + 6 + + + + LabelTiempos + + + + 0 + 28 + + + + tiempos + + + + + LabelPresente + + + + 0 + 28 + + + + presente + + + + + LabelImperfecto + + + + 0 + 28 + + + + imperfecto + + + + + LabelIndefinido + + + + 0 + 28 + + + + indefinido + + + + + LabelFuturo + + + + 0 + 28 + + + + futuro + + + + + LabelCondicional + + + + 0 + 28 + + + + condicional + + + + + LabelSubPresente + + + true + + + + 0 + 28 + + + + subjuntivo presente + + + + + LabelSubPasado + + + true + + + + 0 + 28 + + + + subjuntivo pasado + + + + + LabelSubFuturo + + + true + + + + 0 + 28 + + + + subjuntivo futuro + + + + + LabelImperativo + + + true + + + + 0 + 28 + + + + imperativo + + + + + Spacer11 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + Layout11 + + + + unnamed + + + 0 + + + 6 + + + + LabelNormal + + + + 0 + 28 + + + + normal + + + + + CheckBox1_1 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox1_2 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox1_3 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox1_4 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox1_5 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox1_6 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox1_7 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox1_8 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox1_9 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + Spacer12 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + Layout12 + + + + unnamed + + + 0 + + + 6 + + + + LabelProgresivo + + + + 0 + 28 + + + + progresivo + + + + + CheckBox2_1 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox2_2 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox2_3 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox2_4 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox2_5 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox2_6 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox2_7 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox2_8 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + Spacer9 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + Spacer13 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + Layout10 + + + + unnamed + + + 0 + + + 6 + + + + LabelPerfecto + + + + 0 + 28 + + + + perfecto + + + + + CheckBox3_1 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox3_2 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + TextLabel1 + + + + 0 + 28 + + + + + + + + + CheckBox3_4 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox3_5 + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox3_6 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox3_7 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + CheckBox3_8 + + + true + + + + 1 + 1 + 0 + 0 + + + + + 0 + 28 + + + + + + + + + Spacer10 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + Spacer14 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + + + + + ButtonGroup1 + + + Select Correction Mode + + + + unnamed + + + 11 + + + 6 + + + + Layout9 + + + + unnamed + + + 0 + + + 6 + + + + RadioStrictCorr + + + Correct strictly + + + true + + + + + RadioIgnoreAcc + + + Ignore accents + + + + + + + + + GroupBoxKFeeder + + + Control of KFeeder + + + + unnamed + + + 11 + + + 6 + + + + Layout10 + + + + unnamed + + + 0 + + + 6 + + + + Spacer11_2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + CheckBoxSplash + + + Show splash screen + + + + + CheckBoxKFeeder + + + Using KFeeder + + + + + CheckBoxMode + + + Move food automatically + + + + + + + + + Layout8 + + + + unnamed + + + 0 + + + 6 + + + + Spacer8_2 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + ButtonCerrar + + + &OK + + + + + ButtonCancel + + + &Cancel + + + + + + + + + + + ButtonCancel + clicked() + QVerbosOptions + slotCancel() + + + ButtonCerrar + clicked() + QVerbosOptions + slotDlgEnde() + + + CheckBoxKFeeder + toggled(bool) + CheckBoxSplash + setEnabled(bool) + + + CheckBoxKFeeder + toggled(bool) + CheckBoxMode + setEnabled(bool) + + + + slotDlgEnde() + slotCancel() + + + diff --git a/kverbos/kverbos/span16.png b/kverbos/kverbos/span16.png new file mode 100644 index 00000000..276232e7 Binary files /dev/null and b/kverbos/kverbos/span16.png differ diff --git a/kverbos/kverbos/startuplogo.png b/kverbos/kverbos/startuplogo.png new file mode 100644 index 00000000..77c580b0 Binary files /dev/null and b/kverbos/kverbos/startuplogo.png differ diff --git a/kverbos/kverbos/startuplogo.svgz b/kverbos/kverbos/startuplogo.svgz new file mode 100644 index 00000000..1671c39f Binary files /dev/null and b/kverbos/kverbos/startuplogo.svgz differ diff --git a/kverbos/kverbos/user.png b/kverbos/kverbos/user.png new file mode 100644 index 00000000..666d0641 Binary files /dev/null and b/kverbos/kverbos/user.png 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 regular +// 1 -> irregular +// 2 -> ie> +// 3 -> ue> +// 4 -> ue> +// 5 -> i> +// 6 -> qu> +// 7 -> gu> +// 8 -> c> +// 9 -> g> +// 10 -> z> +// 11 -> j> +// 12 -> g> +// 13 -> c> +// 14 -> +// 15 -> +// 16 -> +// +bool verbSpanish::groupVerb(QString &s, int time/*=-1*/, int person/*=-1*/) +{ + bool good = true; + int pos; + switch (group) + { + case 2: // 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: // 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: // 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: // 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: // 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: // 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: // 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: // 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: // 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: // 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: // 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: // 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: // + // 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: // + // 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: // + // 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 + +#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. + *
+  *  enum endings {ar, er, ir, empty};
+  *  
+ * + * '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. + *
+  *  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
+  *               };
+  *  
+ * + * 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. + *
+  *  enum timeSubTypes {normal, progresivo, perfecto};
+  *  
+ * + * Persons are the different grammatical persons including vosotros which is unusual + * in Latin America. (PERSONEN = 6) + *
+  *  enum persons {yo, tu, el, nosotros, vosotros, ellos};
+  *  
+ * + * The conjugated forms of the verb are stored in the array 'formArray'. The first index + * mentions the time and the second the person. + *
+  *  typedef QString formArray[MAX_TIEMPOS][PERSONEN];
+  *  
+ * + * 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. + *
+  *  typedef QString endingsArray[MAX_TIEMPOS][MAX_SUBTYPES][PERSONEN];
+  *  
+ * + * The verbs are divided in several groups: + * 0 -> regular + * 1 -> irregular + * 2 -> ie> + * 3 -> ue> + * 4 -> ue> + * 5 -> i> + * 6 -> qu> + * 7 -> gu> + * 8 -> c> + * 9 -> g> + * 10 -> z> + * 11 -> j> + * 12 -> g> + * 13 -> c> + * 14 -> + * 15 -> + * 16 -> \ + *@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 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 diff --git a/kverbos/subdirs b/kverbos/subdirs new file mode 100644 index 00000000..290a3b3e --- /dev/null +++ b/kverbos/subdirs @@ -0,0 +1 @@ +kverbos -- cgit v1.2.1