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
v3.5.13-sru
toma 16 years ago
commit ce599e4f9f

@ -0,0 +1,347 @@
NOTE! The GPL below is copyrighted by the Free Software Foundation, but
the instance of code that it refers to (the kde programs) are copyrighted
by the authors who actually wrote it.
---------------------------------------------------------------------------
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.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
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.
<signature of Ty Coon>, 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.

@ -0,0 +1,397 @@
GNU Free Documentation License
Version 1.2, November 2002
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin St, 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.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document "free" in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does. But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein. The "Document", below,
refers to any such manual or work. Any member of the public is a
licensee, and is addressed as "you". You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall subject
(or to related matters) and contains nothing that could fall directly
within that overall subject. (Thus, if the Document is in part a
textbook of mathematics, a Secondary Section may not explain any
mathematics.) The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
The "Invariant Sections" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License. A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
or XML using a publicly available DTD, and standard-conforming simple
HTML, PostScript or PDF designed for human modification. Examples of
transparent image formats include PNG, XCF and JPG. Opaque formats
include proprietary formats that can be read and edited only by
proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the
machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as "Acknowledgements",
"Dedications", "Endorsements", or "History".) To "Preserve the Title"
of such a section when you modify the Document means that it remains a
section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and
visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document). You may use the same title as a previous version
if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
C. State on the Title page the name of the publisher of the
Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page. If
there is no section Entitled "History" in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on. These may be placed in the "History" section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications",
Preserve the Title of the section, and preserve in the section all
the substance and tone of each of the contributor acknowledgements
and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles. Section numbers
or the equivalent are not considered part of the section titles.
M. Delete any section Entitled "Endorsements". Such a section
may not be included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements"
or to conflict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History"
in the various original documents, forming one section Entitled
"History"; likewise combine any sections Entitled "Acknowledgements",
and any sections Entitled "Dedications". You must delete all sections
Entitled "Endorsements".
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an "aggregate" if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements",
"Dedications", or "History", the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License. Any other attempt to
copy, modify, sublicense or distribute the Document 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.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation 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. See
http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.
ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.

@ -0,0 +1,176 @@
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. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
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/kde/bin', `/usr/local/kde/lib', etc. You can specify an
installation prefix other than `/usr/local/kde' 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.

@ -0,0 +1,41 @@
/**
* @mainpage KDE Educational Software
*
* This section contains the API references for KDE's collection
* of educational software. These include:
*
* - <a href="kalzium/html/index.html"><b>kalzium</b></a>\n
* <i>Periodic table of elements.</i>
* - <a href="kbruch/html/index.html"><b>kbruch</b></a>\n
* <i>Fraction excercise trainer.</i>
* - <a href="keduca/html/index.html"><b>keduca</b></a>\n
* <i>Creation and revision of form-based tests and exams.</i>
* - <a href="khangman/html/index.html"><b>khangman</b></a>\n
* <i>Hangman game. The child should guess a word letter by letter.</i>
* - <a href="kig/html/index.html"><b>kig</b></a>\n
* <i>Interactive geometry.</i>
* - <a href="kiten/html/index.html"><b>kiten</b></a>\n
* <i>Japanese reference tool.</i>
* - <a href="klatin/html/index.html"><b>klatin</b></a>\n
* <i>Aims to help revise or learn latin.</i>
* - <a href="klettres/html/index.html"><b>klettres</b></a>\n
* <i>Helps child to learn the alphabet and to read some syllables.</i>
* - <a href="kmplot/html/index.html"><b>kmplot</b></a>\n
* <i>Mathematical function plotter.</i>
* - <a href="kpercentage/html/index.html"><b>kpercentage</b></a>\n
* - <a href="kstars/html/index.html"><b>kstars</b></a>\n
* <i>Desktop planetarium.</i>
* - <a href="ktouch/html/index.html"><b>ktouch</b></a>\n
* <i>Program for learning touch typing.</i>
* - <a href="kturtle/html/index.html"><b>kturtle</b></a>\n
* - <a href="kverbos/html/index.html"><b>kverbos</b></a>\n
* - <a href="kvoctrain/html/index.html"><b>kvoctrain</b></a>\n
* <i>Vocabulary trainer.</i>
* - <a href="kwordquiz/html/index.html"><b>kwordquiz</b></a>\n
*
* And a support library <a href="libkdeedu/html/index.html"><b>libkdeedu</b></a>.
*
* You can find more information about the <i>KDE Edutainment Project</i> at
* <a href="http://edu.kde.org">edu.kde.org</a>.
*
*/

@ -0,0 +1,7 @@
AUTOMAKE_OPTIONS = foreign 1.6.1
COMPILE_FIRST = libkdeedu
DISTCLEANFILES = inst-apps
MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 SUBDIRS
include admin/deps.am

@ -0,0 +1,14 @@
all:
@echo "This Makefile is only for the CVS repository"
@echo "This will be deleted before making the distribution"
@echo ""
@if test ! -d admin; then \
echo "Please recheckout this module!" ;\
echo "for cvs: use checkout once and after that update again" ;\
echo "for cvsup: checkout kde-common from cvsup and" ;\
echo " link kde-common/admin to ./admin" ;\
exit 1 ;\
fi
$(MAKE) -f admin/Makefile.common cvs
.SILENT:

@ -0,0 +1,54 @@
In this file:
* What it is
* Common Mistakes
* Debugging
* More Info
What it is
----------
* blinken: the KDE version of the well-known game Simon Says
* kalzium: periodic table of elements
* kanagram: an anagram game
* kbruch: fraction excercise trainer
* keduca: creation and revision of form-based tests and exams.
* kgeography: geography learning program
* khangman: hangman game. The child should guess a word letter by letter.
* kig: interactive geometry
* kiten: japanese reference tool
* klatin: aims to help revise or learn Latin
* klettres: helps child to learn the alphabet and to read some syllables
* kmplot: mathematical function plotter
* kpercentage: math application to improve skills in calculating percentages
* kstars: desktop planetarium
* ktouch: program for learning touch typing
* kturtle: educational programming environment using the Logo programming language
* kverbos: tudy Spanish verb forms
* kvoctrain: vocabulary trainer
* kwordquiz: a powerful way to master new vocabularies
Common Mistakes
---------------
If configure claims Qt cannot be found, have a look at http://www.trolltech.com
to get a copy of latest Qt 3.3.x version.
Debugging
---------
You can use --enable-debug with the configure script, if you want to have
debug code in your KDE apps and libs. I recommend to do this, since this
is alpha software and this makes debugging things a whole lot easier.
More Info
---------
Have a look at the individual subdirectories, if you want to know, what
versions of apps are included.
Please direct any bug reports to our bug list by visiting
http://bugs.kde.org.
General KDE discussions should go to the KDE mailing list (kde@kde.org).

@ -0,0 +1,25 @@
edu_folder = $(kde_appsdir)/Edutainment
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(edu_folder)/Languages
$(INSTALL_DATA) $(srcdir)/languages.desktop $(DESTDIR)$(edu_folder)/Languages/.directory
$(mkinstalldirs) $(DESTDIR)$(edu_folder)/Mathematics
$(INSTALL_DATA) $(srcdir)/mathematics.desktop $(DESTDIR)$(edu_folder)/Mathematics/.directory
$(mkinstalldirs) $(DESTDIR)$(edu_folder)/Science
$(INSTALL_DATA) $(srcdir)/science.desktop $(DESTDIR)$(edu_folder)/Science/.directory
$(mkinstalldirs) $(DESTDIR)$(edu_folder)/Tools
$(INSTALL_DATA) $(srcdir)/tools.desktop $(DESTDIR)$(edu_folder)/Tools/.directory
$(mkinstalldirs) $(DESTDIR)$(edu_folder)/Miscellaneous
$(INSTALL_DATA) $(srcdir)/miscellaneous.desktop $(DESTDIR)$(edu_folder)/Miscellaneous/.directory
uninstall-local:
-rm -f $(DESTDIR)$(kde_appsdir)/Settings/Databases/.directory
-rm -f $(DESTDIR)$(edu_folder)/Languages/.directory
-rm -f $(DESTDIR)$(edu_folder)/Mathematics/.directory
-rm -f $(DESTDIR)$(edu_folder)/Sience/.directory
-rm -f $(DESTDIR)$(edu_folder)/Tools/.directory
-rm -f $(DESTDIR)$(edu_folder)/Miscellaneous/.directory

@ -0,0 +1,70 @@
[Desktop Entry]
Icon=edu_languages
Name=Languages
Name[af]=Tale
Name[ar]=اللغات
Name[be]=Мовы
Name[bg]=Езици
Name[bn]=ভাষা
Name[br]=Yezhoù
Name[bs]=Jezici
Name[ca]=Idiomes
Name[cs]=Jazyky
Name[csb]=Jãzëczi
Name[cy]=Ieithoedd
Name[da]=Sprog
Name[de]=Sprachen
Name[el]=Γλώσσες
Name[eo]=Lingvoj
Name[es]=Idiomas
Name[et]=Keeled
Name[eu]=Hizkuntzak
Name[fa]=زبانها
Name[fi]=Kielet
Name[fo]=Mál
Name[fr]=Langues
Name[ga]=Teangacha
Name[gl]=Linguas
Name[he]=שפות
Name[hi]=भाषाएँ
Name[hr]=Jezici
Name[hu]=Nyelvek
Name[is]=Tungumál
Name[it]=Lingue
Name[ja]=言語
Name[ka]=ენები
Name[km]=ភាសា
Name[lt]=Kalbos
Name[lv]=Valodas
Name[mk]=Јазици
Name[mn]=Хэл
Name[ms]=Bahasa
Name[nb]=Språk
Name[nds]=Spraken
Name[ne]=भाषा
Name[nl]=Talen
Name[nn]=Språk
Name[nso]=Maleme
Name[pa]=ਭਾਸ਼ਾਵਾਂ
Name[pl]=Języki
Name[pt]=Línguas
Name[pt_BR]=Idiomas
Name[ru]=Языки
Name[se]=Gielat
Name[sk]=Jazyky
Name[sl]=Jeziki
Name[sr]=Језици
Name[sr@Latn]=Jezici
Name[sv]=Språk
Name[ta]=மொழிகள்
Name[tg]=Забонҳо
Name[tr]=Diller
Name[uk]=Мови
Name[uz]=Tillar
Name[uz@cyrillic]=Тиллар
Name[ven]=Dzinyambo
Name[vi]=Ngôn ngữ
Name[xh]=Iilwimi
Name[zh_CN]=语言
Name[zh_TW]=語言
Name[zu]=Izilimi

@ -0,0 +1,70 @@
[Desktop Entry]
Icon=edu_mathematics
Name=Mathematics
Name[af]=Wiskunde
Name[ar]=رياضيات
Name[be]=Матэматыка
Name[bg]=Математика
Name[bn]=গণিত
Name[br]=Jedoniel
Name[bs]=Matematika
Name[ca]=Matemàtiques
Name[cs]=Matematika
Name[csb]=Matematika
Name[cy]=Mathemateg
Name[da]=Matematik
Name[de]=Mathematik
Name[el]=Μαθηματικά
Name[eo]=Matematiko
Name[es]=Matemáticas
Name[et]=Matemaatika
Name[eu]=Matematikak
Name[fa]=ریاضیات
Name[fi]=Matematiikka
Name[fo]=Støddfrøði
Name[fr]=Mathématiques
Name[ga]=Matamaitic
Name[gl]=Matemáticas
Name[he]=מתמטיקה
Name[hi]=गणित
Name[hr]=Matematika
Name[hu]=Matematika
Name[is]=Stærðfræði
Name[it]=Matematica
Name[ja]=数学
Name[ka]=მათემატიკა
Name[km]=គណិតវិទ្យា
Name[lt]=Matematika
Name[lv]=Matemātika
Name[mk]=Математика
Name[mn]=Математикийн
Name[ms]=Matematik
Name[nb]=Matematikk
Name[nds]=Reken
Name[ne]=गणित
Name[nl]=Wiskunde
Name[nn]=Matematikk
Name[nso]=Dipalontshetshere
Name[pa]=ਗਣਿਤ
Name[pl]=Matematyka
Name[pt]=Matemática
Name[pt_BR]=Matemática
Name[ru]=Математика
Name[se]=Matematihkka
Name[sk]=Matematika
Name[sl]=Matematika
Name[sr]=Математика
Name[sr@Latn]=Matematika
Name[sv]=Matematik
Name[ta]=கணிதம்
Name[tg]=Математика
Name[tr]=Matematik
Name[uk]=Математика
Name[uz]=Matematika
Name[uz@cyrillic]=Математика
Name[ven]=Zwa dzimbalo
Name[vi]=Toán học
Name[xh]=Imathematika
Name[zh_CN]=数学
Name[zh_TW]=數學
Name[zu]=Ezezibalo

@ -0,0 +1,65 @@
[Desktop Entry]
Icon=edu_miscellaneous
Name=Miscellaneous
Name[af]=Allerande
Name[ar]=منوعات
Name[be]=Рознае
Name[bg]=Разни
Name[bn]=বিবিধ
Name[br]=A bep seurt
Name[bs]=Razno
Name[ca]=Diversos
Name[cs]=Různé
Name[csb]=Jine
Name[cy]=Amrywiol
Name[da]=Diverse
Name[de]=Verschiedenes
Name[el]=Διάφορα
Name[eo]=Diversoj
Name[es]=Varios
Name[et]=Mitmesugust
Name[eu]=Miszelanea
Name[fa]=گوناگون
Name[fi]=Sekalainen
Name[fr]=Divers
Name[ga]=Éagsúil
Name[gl]=Varios
Name[he]=שונות
Name[hi]=विविध
Name[hr]=Razno
Name[hu]=Egyéb
Name[is]=Ýmislegt
Name[it]=Varie
Name[ja]=その他
Name[ka]=სხვადასხვა
Name[km]=ផ្សេងៗ
Name[lt]=Įvairūs dalykai
Name[lv]=Dažādi
Name[mk]=Разно
Name[ms]=Pelbagai
Name[nb]=Diverse
Name[nds]=Anner Saken
Name[ne]=विविध
Name[nl]=Diversen
Name[nn]=Ymse
Name[pa]=ਫੁਟਕਲ
Name[pl]=Różne
Name[pt]=Vários
Name[pt_BR]=Variados
Name[ro]=Diverse
Name[ru]=Разное
Name[se]=Feará mii
Name[sk]=Rôzne
Name[sl]=Razno
Name[sr]=Разно
Name[sr@Latn]=Razno
Name[sv]=Diverse
Name[ta]=இதர தேர்வுகள்
Name[tg]=Гуногун
Name[tr]=Çeşitli
Name[uk]=Різне
Name[uz]=Har xil
Name[uz@cyrillic]=Ҳар хил
Name[vi]=Linh tinh
Name[zh_CN]=杂项
Name[zh_TW]=雜項

@ -0,0 +1,71 @@
[Desktop Entry]
Icon=edu_science
Name=Science
Name[af]=Wetenskap
Name[ar]=العلم
Name[az]=Elm
Name[be]=Навука
Name[bg]=Наука
Name[bn]=বিজ্ঞান
Name[br]=Skiantoù
Name[bs]=Nauka
Name[ca]=Ciència
Name[cs]=Věda
Name[csb]=Ùczba
Name[cy]=Gwyddoniaeth
Name[da]=Videnskab
Name[de]=Wissenschaft
Name[el]=Επιστήμη
Name[eo]=Sciencumoj
Name[es]=Ciencia
Name[et]=Loodusteadused
Name[eu]=Zientzia
Name[fa]=علم
Name[fi]=Luonnontieteet
Name[fo]=Náttúruvísind
Name[ga]=Eolaíocht
Name[gl]=Ciencia
Name[he]=מדע
Name[hi]=विज्ञान
Name[hr]=Znanost
Name[hu]=Tudományok
Name[is]=Vísindi
Name[it]=Scienza
Name[ja]=サイエンス
Name[ka]=მეცნიერება
Name[km]=វិទ្យាសាស្ត្រ
Name[lt]=Mokslas
Name[lv]=Zinātne
Name[mk]=Наука
Name[mn]=Шинжлэх Ухааны
Name[ms]=Sains
Name[nb]=Vitenskap
Name[nds]=Wetenschap
Name[ne]=विज्ञान
Name[nl]=Wetenschappelijk
Name[nn]=Vitskap
Name[nso]=Mahlale
Name[pa]=ਵਿਗਿਆਨ
Name[pl]=Nauka
Name[pt]=Ciência
Name[pt_BR]=Ciências
Name[ro]=Ştiinţă
Name[ru]=Другие науки
Name[se]=Dieđa
Name[sk]=Vedecký
Name[sl]=Znanost
Name[sr]=Наука
Name[sr@Latn]=Nauka
Name[sv]=Vetenskap
Name[ta]=அறிவியல்
Name[tg]=Фан
Name[tr]=Bilim
Name[uk]=Наука
Name[uz]=Fan
Name[uz@cyrillic]=Фан
Name[ven]=Vhutsila
Name[vi]=Khoa học
Name[xh]=Inzulu lwazi
Name[zh_CN]=科学
Name[zh_TW]=科學
Name[zu]=Ubuchwepheshe bezesayensi

@ -0,0 +1,68 @@
[Desktop Entry]
Icon=package
Name=Teaching Tools
Name[af]=Onderrrighulpmiddels
Name[ar]=أدوات تعليمية
Name[be]=Прылады для навучання
Name[bg]=Обучение
Name[bn]=শিক্ষা সহায়িকা
Name[br]=Ostilhoù deskiñ
Name[bs]=Alati za podučavanje
Name[ca]=Eines d'ensenyança
Name[cs]=Výukové nástroje
Name[csb]=Nôrzãdza do ùczbë
Name[cy]=Offer Dysgu
Name[da]=Undervisningsværktøj
Name[de]=Lehrmittel
Name[el]=Εργαλεία εκμάθησης
Name[eo]=Instruiloj
Name[es]=Herramientas de enseñanza
Name[et]=Õppevahendid
Name[eu]=Ikasketa tresnak
Name[fa]=ابزارهای آموزش
Name[fi]=Opetusohjelmat
Name[fo]=Undirvísingaramboð
Name[fr]=Outils d'éducation
Name[ga]=Uirlisí Múinteoireachta
Name[gl]=Ferramentas de Ensino
Name[he]=כלי לימוד
Name[hi]=शिक्षण औज़ार
Name[hr]=Nastavnički alati
Name[hu]=Oktatási eszközök
Name[is]=Kennslutól
Name[it]=Strumenti per l'insegnamento
Name[ja]=教育ツール
Name[ka]=სასწავლო პროგრამები
Name[km]=សម្ភារៈ​ឧបទេស
Name[lt]=Mokymo įrankiai
Name[lv]=Mācību Instrumenti
Name[mk]=Алатки за учење
Name[mn]=Сурганы Ухааны Хэрэглэгдэхүүн
Name[ms]=Alatan Mengajar
Name[nb]=Læremidler
Name[nds]=Lehrprogrammen
Name[ne]=पढाउने सामग्री
Name[nl]=Leshulpmiddelen
Name[nn]=Læremiddel
Name[nso]=Dibereka tsago Ruta
Name[pa]=ਪੜ੍ਹਾਉਣ ਸੰਦ
Name[pl]=Narzędzia do nauczania
Name[pt]=Ferramentas de Ensino
Name[pt_BR]=Ferramentas de Ensino
Name[ru]=Обучающие программы
Name[se]=Oahpporeaiddut
Name[sk]=Výukové nástroje
Name[sl]=Orodja za učenje
Name[sr]=Учитељски алати
Name[sr@Latn]=Učiteljski alati
Name[sv]=Inlärningsverktyg
Name[ta]=கற்பிக்கும் கருவிகள்
Name[tg]=Асбобҳои Таълимӣ
Name[tr]=Öğretim Araçları
Name[uk]=Засоби для навчання
Name[ven]=Zwishumiswa zwau funza
Name[vi]=Công cụ Giảng dạy
Name[xh]=Izixhobo Zokufundisa
Name[zh_CN]=教学工具
Name[zh_TW]=教學工具
Name[zu]=Amathuluzi Okufundisa

@ -0,0 +1 @@
Albert Astals Cid <tsdgeos AT terra DOT es>

@ -0,0 +1,2 @@
2005-02-16 Albert Astals Cid <tsdgeos@terra.es>
* Initial import

@ -0,0 +1,4 @@
SUBDIRS = src images icons sounds fonts
docsdir = $(kde_datadir)/blinken/
docs_DATA = README.packagers

@ -0,0 +1,16 @@
blinKen uses a special handwriting font called Steve that is in the
fonts directory to show the status text. If this font is not currently installed
on the target system, on first run blinKen uses the fonts:/ ioslave to copy it
to the user's fonts location.
This can cause problems, because if the program
is used by 100 users there will be 100 copies of the font, one for each user.
To solve that we suggest making a package with "Some Juicy Fonts"
(http://www.sourceforge.net/projects/sjfonts) that includes the Steve font
and make the blinKen package depend on it.
If you do not want/cannot do that, please make blinKen depend on
having kdebase installed as the fonts:/ ioslave is there.
- blinKen developers

@ -0,0 +1,2 @@
fontsdir = $(kde_datadir)/blinken/fonts
fonts_DATA = steve.ttf

Binary file not shown.

@ -0,0 +1 @@
KDE_ICON = blinken

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 844 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

@ -0,0 +1,2 @@
imagesdir = $(kde_datadir)/blinken/images
images_DATA = blinken.png redh.png blueh.png greenh.png yellowh.png quit.png quit_hover.png menu.png menu_hover.png highscore.png highscore_hover.png mark.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1005 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,2 @@
soundsdir = $(kde_datadir)/blinken/sounds
sounds_DATA = 1.wav 2.wav 3.wav 4.wav lose.wav

Binary file not shown.

@ -0,0 +1,23 @@
if include_ARTS
artslib = -lartskde
else
artslib =
endif
bin_PROGRAMS = blinken
INCLUDES = $(all_includes)
blinken_LDFLAGS = $(all_libraries) $(KDE_RPATH)
blinken_LDADD = $(LIB_KDEUI) $(LIB_KIO) $(artslib)
blinken_SOURCES = main.cpp blinken.cpp artsplayer.cpp blinkengame.cpp number.cpp highscoredialog.cpp counter.cpp fontutils.cpp fontchecker.cpp button.cpp settings.kcfgc
METASOURCES = AUTO
xdg_apps_DATA = blinken.desktop
kde_kcfg_DATA = blinken.kcfg
messages: rc.cpp
$(XGETTEXT) *.cpp -o $(podir)/blinken.pot

@ -0,0 +1,147 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <qtimer.h>
#include <config.h>
#ifdef WITHOUT_ARTS
#include <klocale.h>
#include <kmessagebox.h>
#endif
#include <kstandarddirs.h>
#include "artsplayer.h"
#include "settings.h"
artsPlayer::artsPlayer() : m_playobj(0)
{
m_endChecker = new QTimer(this);
connect(m_endChecker, SIGNAL(timeout()), this, SLOT(checkEnded()));
#ifndef WITHOUT_ARTS
m_dispatcher = new KArtsDispatcher;
m_server = new KArtsServer;
m_factory = new KDE::PlayObjectFactory(m_server->server());
m_allPath = locate("appdata","sounds/lose.wav");
m_greenPath = locate("appdata","sounds/1.wav");
m_redPath = locate("appdata","sounds/2.wav");
m_bluePath = locate("appdata","sounds/3.wav");
m_yellowPath = locate("appdata","sounds/4.wav");
#else
KMessageBox::information(0, i18n("aRts was not found, therefore the sounds will be disabled."), i18n("Sounds Disabled"), "infoaboutartsnotfound");
#endif
}
artsPlayer::~artsPlayer()
{
#ifndef WITHOUT_ARTS
delete m_playobj;
delete m_factory;
delete m_server;
delete m_dispatcher;
#endif
}
void artsPlayer::play(blinkenGame::color c, bool stopCurrent)
{
int check;
#ifndef WITHOUT_ARTS
if (blinkenSettings::playSounds())
{
if (m_playobj && m_playobj -> state() == Arts::posPlaying)
{
if (stopCurrent)
{
m_nextSounds.clear();
m_nextSounds.append(c);
m_playobj -> halt();
play();
}
else m_nextSounds.append(c);
}
else
{
m_nextSounds.append(c);
play();
}
check = 50;
}
else check = 250;
#else
//shut up gcc
(void)c;
(void)stopCurrent;
check = 250;
#endif
if (!m_endChecker -> isActive()) m_endChecker -> start(check);
}
void artsPlayer::play()
{
#ifndef WITHOUT_ARTS
QString path;
blinkenGame::color c = m_nextSounds.first();
m_nextSounds.pop_front();
switch (c)
{
case blinkenGame::red:
path = m_redPath;
break;
case blinkenGame::green:
path = m_greenPath;
break;
case blinkenGame::blue:
path = m_bluePath;
break;
case blinkenGame::yellow:
path = m_yellowPath;
break;
case blinkenGame::all:
path = m_allPath;
break;
case blinkenGame::none:
break;
}
delete m_playobj;
m_playobj = m_factory -> createPlayObject(path, true);
m_playobj -> play();
#endif
}
void artsPlayer::checkEnded()
{
#ifndef WITHOUT_ARTS
if (blinkenSettings::playSounds())
{
if (m_playobj -> state() != Arts::posPlaying)
{
m_endChecker -> stop();
emit ended();
if (m_nextSounds.size() > 0) play();
}
}
else
{
m_endChecker -> stop();
emit ended();
}
#else
m_endChecker -> stop();
emit ended();
#endif
}
#include "artsplayer.moc"

@ -0,0 +1,66 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 ARTSPLAYER_H
#define ARTSPLAYER_H
#include <config.h>
#ifdef WITHOUT_ARTS
class KArtsDispatcher;
class KArtsServer;
namespace KDE
{
class PlayObjectFactory;
class PlayObject;
}
#else
#include <arts/kartsdispatcher.h>
#include <arts/kartsserver.h>
#include <arts/kplayobject.h>
#include <arts/kplayobjectfactory.h>
#endif
#include <qvaluelist.h>
#include "blinkengame.h"
class QTimer;
class artsPlayer : public QObject
{
Q_OBJECT
public:
artsPlayer();
~artsPlayer();
void play(blinkenGame::color c, bool stopCurrent = false);
signals:
void ended();
private slots:
void play();
void checkEnded();
private:
QValueList<blinkenGame::color> m_nextSounds;
QString m_greenPath, m_redPath, m_bluePath, m_yellowPath, m_allPath;
QTimer *m_endChecker;
KArtsDispatcher *m_dispatcher;
KArtsServer *m_server;
KDE::PlayObjectFactory *m_factory;
KDE::PlayObject *m_playobj;
};
#endif

@ -0,0 +1,855 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <qcursor.h>
#include <qpainter.h>
#include <qpixmap.h>
#include <qtimer.h>
#include <kaction.h>
#include <kapplication.h>
#include <kconfig.h>
#include <khelpmenu.h>
#include <kinputdialog.h>
#include <klocale.h>
#include <kmessagebox.h>
#include <kpopupmenu.h>
#include <kstandarddirs.h>
#include "blinken.h"
#include "button.h"
#include "counter.h"
#include "fontutils.h"
#include "number.h"
#include "highscoredialog.h"
#include "settings.h"
blinken::blinken() : QWidget(0, 0, WStaticContents | WNoAutoErase), m_overHighscore(false), m_overQuit(false), m_overCentralText(false), m_overMenu(false), m_overAboutKDE(false), m_overAboutBlinken(false), m_overManual(false), m_overCentralLetters(false), m_overCounter(false), m_overFont(false), m_overSound(false), m_showPreferences(false), m_updateButtonHighlighting(false), m_highlighted(blinkenGame::none)
{
m_back = new QPixmap(locate("appdata", "images/blinken.png"));
m_buttons[0] = new button(blinkenGame::blue);
m_buttons[1] = new button(blinkenGame::yellow);
m_buttons[2] = new button(blinkenGame::red);
m_buttons[3] = new button(blinkenGame::green);
m_highscore = new QPixmap(locate("appdata", "images/highscore.png"));
m_highscoreHover = new QPixmap(locate("appdata", "images/highscore_hover.png"));
m_quit = new QPixmap(locate("appdata", "images/quit.png"));
m_quitHover = new QPixmap(locate("appdata", "images/quit_hover.png"));
m_menu = new QPixmap(locate("appdata", "images/menu.png"));
m_menuHover = new QPixmap(locate("appdata", "images/menu_hover.png"));
m_mark = new QPixmap(locate("appdata", "images/mark.png"));
m_highscoreRect = QRect(10, 10, 72, 72);
m_quitRect = QRect(562, 10, 72, 73);
m_menuRect = QRect(562, 443, 72, 72);
m_aboutKDERect = QRect(452, 461, 54, 54);
m_aboutBlinkenRect = QRect(506, 461, 56, 54);
m_manualRect = QRect(578, 389, 54, 54);
m_centralLettersRect = QRect(192, 194, 254, 54);
m_counterRect = QRect(268, 110, 102, 52);
m_fillColor = QColor(40, 40, 40);
m_fontColor = QColor(126, 126, 126);
m_fontHighlightColor = QColor(230, 230, 230);
m_countDownColor = QColor(55, 55, 55);
setMouseTracking(true);
setFixedSize(644, 525);
show();
m_unhighlighter = new QTimer(this);
connect(m_unhighlighter, SIGNAL(timeout()), this, SLOT(unhighlight()));
connect(&m_game, SIGNAL(gameEnded()), this, SLOT(checkHS()));
connect(&m_game, SIGNAL(phaseChanged()), this, SLOT(update()));
connect(&m_game, SIGNAL(highlight(blinkenGame::color, bool)), this, SLOT(highlight(blinkenGame::color, bool)));
m_helpMenu = new KHelpMenu(this, kapp->aboutData());
for (int i = 0; i < 3; i++) m_overLevels[i] = false;
QString aux = i18n("If the Steve font that is used by bliken by default to show status messages does not support any of the characters of your language, please translate that message to 1 and KDE standard font will be used to show the texts, if not translate it to 0", "0");
m_alwaysUseNonCoolFont = aux == "1";
}
blinken::~blinken()
{
delete m_back;
for (int i = 0; i < 4; i++) delete m_buttons[i];
delete m_highscore;
delete m_highscoreHover;
delete m_quit;
delete m_quitHover;
delete m_menu;
delete m_menuHover;
delete m_mark;
delete m_helpMenu;
}
void blinken::paintEvent(QPaintEvent *)
{
QPixmap buf(width(), height());
QPainter p(&buf);
p.drawPixmap(0, 0, *m_back);
drawMenuQuit(p);
QFont f1, f = p.font();
f1 = f;
f.setBold(true);
p.setFont(f);
switch (m_game.phase())
{
case blinkenGame::starting:
drawText(p, i18n("Start"), QPoint(318, 316), true, 10, 5, &m_centralTextRect, m_overCentralText, false);
break;
case blinkenGame::choosingLevel:
drawLevel(p);
break;
case blinkenGame::waiting3:
case blinkenGame::waiting2:
case blinkenGame::waiting1:
case blinkenGame::learningTheSequence:
case blinkenGame::typingTheSequence:
drawText(p, i18n("Restart"), QPoint(318, 316), true, 10, 5, &m_centralTextRect, m_overCentralText, false);
break;
}
p.setFont(f1);
if (m_showPreferences)
{
// draw the current keys
drawText(p, m_buttons[0]->shortcut(), QPoint(115, 285), true, 20, 5, 0, m_buttons[0]->selected(), false);
drawText(p, m_buttons[1]->shortcut(), QPoint(115, 155), true, 20, 5, 0, m_buttons[1]->selected(), false);
drawText(p, m_buttons[2]->shortcut(), QPoint(520, 155), true, 20, 5, 0, m_buttons[2]->selected(), false);
drawText(p, m_buttons[3]->shortcut(), QPoint(520, 285), true, 20, 5, 0, m_buttons[3]->selected(), false);
const QPen &oPen = p.pen();
const QBrush &oBrush = p.brush();
const QFont &oFont = p.font();
// draw the internal square plus a bit of ellipse on the sides and the
// two delimiter lines
p.setPen(NoPen);
p.setBrush(m_fillColor);
p.drawPie(169, 192, 4, 58, 1440, 2880);
p.drawPie(465, 192, 4, 58, -1440, 2880);
p.setPen(QPen(Qt::black, 3));
p.fillRect(171, 192, 296, 58, m_fillColor);
p.drawLine(169, 192, 469, 192);
p.drawLine(169, 250, 469, 250);
// draw the two squares of the options
p.setPen(QPen(m_fontColor, 2, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin));
m_soundRect = QRect(181, 209, 25, 25);
m_fontRect = QRect(432, 209, 25, 25);
#ifndef WITHOUT_ARTS
p.drawRect(m_soundRect);
if (blinkenSettings::playSounds())
{
p.drawLine(186, 214, 199, 227);
p.drawLine(186, 227, 199, 214);
}
#endif
if (!m_alwaysUseNonCoolFont)
{
p.drawRect(m_fontRect);
if (blinkenSettings::customFont())
{
p.drawLine(437, 214, 450, 227);
p.drawLine(437, 227, 450, 214);
}
}
// draw the options' text
QFont f1 = QFont();
p.setFont(f1);
int size, sizeAux;
QRect area;
QString sounds = i18n("Sounds");
QString font = i18n("Font");
size = fontUtils::fontSize(p, sounds, 95, 20);
sizeAux = fontUtils::fontSize(p, font, 95, 20);
if (sizeAux > size) size = sizeAux;
f1.setPointSize(size);
#ifndef WITHOUT_ARTS
area = p.boundingRect(QRect(), Qt::AlignAuto, sounds);
area.moveBy(212, 221 - (area.height() / 2));
p.drawText(area, Qt::AlignCenter, sounds);
m_soundRect = m_soundRect.unite(area);
#endif
if (!m_alwaysUseNonCoolFont)
{
area = p.boundingRect(QRect(), Qt::AlignAuto, font);
area.moveBy(426 - area.width(), 221 - (area.height() / 2));
p.drawText(area, Qt::AlignCenter, font);
m_fontRect = m_fontRect.unite(area);
}
p.setFont(oFont);
p.setPen(oPen);
p.setBrush(oBrush);
}
drawScoreAndCounter(p);
if (m_highlighted & blinkenGame::blue) p.drawPixmap(14, 225, *m_buttons[0] -> pixmap());
if (m_highlighted & blinkenGame::yellow) p.drawPixmap(14, 16, *m_buttons[1] -> pixmap());
if (m_highlighted & blinkenGame::red) p.drawPixmap(322, 16, *m_buttons[2] -> pixmap());
if (m_highlighted & blinkenGame::green) p.drawPixmap(322, 225, *m_buttons[3] -> pixmap());
drawStatusText(p);
bitBlt(this, 0, 0, &buf);
if (m_updateButtonHighlighting) updateButtonHighlighting(mapFromGlobal(QCursor::pos()));
}
void blinken::keyPressEvent(QKeyEvent *e)
{
if (e -> isAutoRepeat()) return;
if (m_showPreferences)
{
int i = 0;
while (i < 4 && !m_buttons[i] -> selected()) i++;
if (i < 4)
{
if (e -> key() == Qt::Key_Escape)
{
m_buttons[i] -> setSelected(false);
update();
}
else
{
KShortcut ks(e -> key());
if (!ks.toString().isEmpty())
{
bool different = true;
int j = 0;
while (different && j < 4)
{
different = (ks.toString() != m_buttons[j] -> shortcut());
j++;
}
if (different)
{
m_buttons[i] -> setShortcut(ks);
update();
}
}
}
}
}
else
{
if (e -> key() == m_buttons[0] -> key()) pressedBlue();
else if (e -> key() == m_buttons[1] -> key()) pressedYellow();
else if (e -> key() == m_buttons[2] -> key()) pressedRed();
else if (e -> key() == m_buttons[3] -> key()) pressedGreen();
}
}
void blinken::keyReleaseEvent(QKeyEvent *e)
{
if (e -> isAutoRepeat()) return;
if (e -> state() == Qt::ControlButton && e -> stateAfter() != Qt::ControlButton && (m_game.phase() == blinkenGame::starting || m_game.phase() == blinkenGame::choosingLevel))
{
m_showPreferences = !m_showPreferences;
for (int i = 0; i < 4; i++) m_buttons[i] -> setSelected(false);
updateButtonHighlighting(mapFromGlobal(QCursor::pos()));
update();
}
}
void blinken::mouseMoveEvent(QMouseEvent *e)
{
updateButtonHighlighting(e->pos());
}
void blinken::mousePressEvent(QMouseEvent *e)
{
if (m_overHighscore || m_overCounter)
{
highScoreDialog *hsd = new highScoreDialog(this);
hsd->showLevel(1);
m_updateButtonHighlighting = true;
}
else if (m_showPreferences && m_fontRect.contains(e -> pos()) && !m_alwaysUseNonCoolFont)
{
blinkenSettings::setCustomFont(!blinkenSettings::customFont());
blinkenSettings::writeConfig();
update();
}
else if (m_showPreferences && m_soundRect.contains(e -> pos()))
{
blinkenSettings::setPlaySounds(!blinkenSettings::playSounds());
blinkenSettings::writeConfig();
update();
}
else if (m_overQuit) kapp->quit();
else if (m_overAboutBlinken || m_overCentralLetters) m_helpMenu -> aboutApplication();
else if (m_overAboutKDE) m_helpMenu -> aboutKDE();
else if (m_overManual) m_helpMenu -> appHelpActivated();
else if (m_game.phase() != blinkenGame::choosingLevel && m_overCentralText)
{
highlight(blinkenGame::none, true);
m_overCentralText = false;
for(int i = 0; i < 3; i++) m_overLevels[i] = false;
m_game.setPhase(blinkenGame::choosingLevel);
m_updateButtonHighlighting = true;
}
else if (m_game.phase() == blinkenGame::choosingLevel)
{
int level = 0;
if (m_levelsRect[1].contains(e -> pos())) level = 1;
else if (m_levelsRect[0].contains(e -> pos())) level = 2;
else if (m_levelsRect[2].contains(e -> pos())) level = 3;
if (level)
{
for(int i = 0; i < 3; i++) m_overLevels[i] = false;
m_game.start(level);
if (m_showPreferences) m_showPreferences = false;
m_updateButtonHighlighting = true;
}
}
QPoint p = e->pos();
p -= QPoint(319, 221);
if (insideGreen(p))
{
if (m_showPreferences) selectButton(3);
else pressedGreen();
}
else if (insideBlue(p))
{
if (m_showPreferences) selectButton(0);
else pressedBlue();
}
else if (insideYellow(p))
{
if (m_showPreferences) selectButton(1);
else pressedYellow();
}
else if (insideRed(p))
{
if (m_showPreferences) selectButton(2);
else pressedRed();
}
}
void blinken::checkHS()
{
highScoreDialog *hsd = new highScoreDialog(this);
if (hsd->scoreGoodEnough(m_game.level(), m_game.score()))
{
bool ok;
QString name = KInputDialog::getText(i18n("Enter Your Name"), i18n("Name:"), m_lastName, &ok);
if (!name.isNull() && ok)
{
m_lastName = name;
hsd->addScore(m_game.level(), m_game.score(), name);
}
hsd->showLevel(m_game.level());
}
}
void blinken::highlight(blinkenGame::color c, bool unhighlight)
{
m_highlighted = c;
update();
if (unhighlight) m_unhighlighter -> start(250);
else if (c == blinkenGame::none)
{
m_unhighlighter -> stop();
updateCursor(mapFromGlobal(QCursor::pos()));
}
}
void blinken::unhighlight()
{
highlight(blinkenGame::none, false);
}
void blinken::pressedYellow()
{
if (m_game.canType())
{
highlight(blinkenGame::yellow, true);
m_game.clicked(blinkenGame::yellow);
}
}
void blinken::pressedRed()
{
if (m_game.canType())
{
highlight(blinkenGame::red, true);
m_game.clicked(blinkenGame::red);
}
}
void blinken::pressedGreen()
{
if (m_game.canType())
{
highlight(blinkenGame::green, true);
m_game.clicked(blinkenGame::green);
}
}
void blinken::pressedBlue()
{
if (m_game.canType())
{
highlight(blinkenGame::blue, true);
m_game.clicked(blinkenGame::blue);
}
}
void blinken::selectButton(int button)
{
int i = 0;
bool selected = false;
while (i < 4 && !selected)
{
selected = m_buttons[i] -> selected();
if (!selected) i++;
}
if (selected)
{
if (i == button)
{
m_buttons[button] -> setSelected(false);
update();
}
}
else
{
m_buttons[button] -> setSelected(true);
update();
}
}
bool blinken::insideGreen(const QPoint &p) const
{
return insideButtonsArea(p) && p.x() > 6 && p.y() > 6;
}
bool blinken::insideBlue(const QPoint &p) const
{
return insideButtonsArea(p) && p.x() < -6 && p.y() > 6;
}
bool blinken::insideYellow(const QPoint &p) const
{
return insideButtonsArea(p) && p.x() < -6 && p.y() < -6;
}
bool blinken::insideRed(const QPoint &p) const
{
return insideButtonsArea(p) && p.x() > 6 && p.y() < -6;
}
bool blinken::insideButtonsArea(const QPoint &p) const
{
double x, y, x2, y2;
x = (double)p.x();
y = (double)p.y();
x2 = x * x;
y2 = y * y;
if (x2 + y2 > 162.5 * 162.5)
{
// Outside the circle
double x3, y3;
x3 = x2 / (301 * 301);
y3 = y2 / (201 * 201);
if (x3 + y3 < 1) return true;
}
return false;
}
void blinken::drawMenuQuit(QPainter &p)
{
if (!m_overHighscore) p.drawPixmap(10, 10, *m_highscore);
else p.drawPixmap(10, 10, *m_highscoreHover);
if (!m_overQuit) p.drawPixmap(562, 10, *m_quit);
else p.drawPixmap(562, 10, *m_quitHover);
if (!m_overMenu) p.drawPixmap(562, 443, *m_menu);
else p.drawPixmap(454, 389, *m_menuHover);
if (m_overAboutKDE) p.drawPixmap(462, 433, *m_mark);
else if (m_overAboutBlinken) p.drawPixmap(516, 433, *m_mark);
else if (m_overManual)
{
p.translate(550, 430);
p.rotate(-90.0);
p.drawPixmap(0, 0, *m_mark);
p.rotate(90.0);
p.translate(-550, -430);
}
}
void blinken::drawScoreAndCounter(QPainter &p)
{
QColor c1, c2, c3;
p.translate(268, 110);
switch (m_game.phase())
{
case blinkenGame::waiting3:
c1 = red;
c2 = red;
c3 = red;
break;
case blinkenGame::waiting2:
c1 = m_countDownColor;
c2 = red;
c3 = red;
break;
case blinkenGame::waiting1:
c1 = m_countDownColor;
c2 = c1;
c3 = red;
break;
default:
c1 = m_countDownColor;
c2 = c1;
c3 = c1;
break;
}
counter::paint(p, m_game.phase() != blinkenGame::starting, m_game.score(), true, c1, c2, c3);
p.translate(-268, -110);
}
void blinken::drawStatusText(QPainter &p)
{
p.translate(25, 505);
p.rotate(-3.29);
p.setPen(blue);
QString restartText = i18n("Restart the game");
QString text;
if (m_overQuit) text = i18n("Quit blinKen");
else if (m_overHighscore || m_overCounter) text = i18n("View Highscore Table");
else if (m_overAboutBlinken || m_overCentralLetters) text = m_helpMenu -> menu() -> text(KHelpMenu::menuAboutApp).remove("&");
else if (m_overAboutKDE) text = m_helpMenu -> menu() -> text(KHelpMenu::menuAboutKDE).remove("&");
else if (m_overManual) text = m_helpMenu -> menu() -> text(KHelpMenu::menuHelpContents).remove("&");
else if (m_overLevels[0]) text = i18n("2nd Level");
else if (m_overLevels[1]) text = i18n("1st Level");
else if (m_overLevels[2]) text = i18n("Random Level");
else if (m_buttons[0]->selected() || m_buttons[1]->selected() || m_buttons[2]->selected() || m_buttons[3]->selected()) text = i18n("Press the key for this button");
else if (m_showPreferences) text = i18n("Click any button to change its key");
else
{
switch (m_game.phase())
{
case blinkenGame::starting:
text = i18n("Press Start to begin!");
break;
case blinkenGame::choosingLevel:
text = i18n("Set the Difficulty Level...");
break;
case blinkenGame::waiting3:
if (m_overCentralText) text = restartText;
else text = i18n("Next sequence in 3...");
break;
case blinkenGame::waiting2:
if (m_overCentralText) text = restartText;
else if (m_game.level() == 1) text = i18n("Next sequence in 3, 2...");
else text = i18n("Next sequence in 2...");
break;
case blinkenGame::waiting1:
if (m_overCentralText) text = restartText;
else if (m_game.level() == 1) text = i18n("Next sequence in 3, 2, 1...");
else text = i18n("Next sequence in 2, 1...");
break;
case blinkenGame::learningTheSequence:
if (m_overCentralText) text = restartText;
else text = i18n("Remember this sequence...");
break;
case blinkenGame::typingTheSequence:
if (m_overCentralText) text = restartText;
else text = i18n("Repeat the sequence!");
break;
}
}
QFont f;
if (blinkenSettings::customFont() && !m_alwaysUseNonCoolFont) f = QFont("Steve");
p.setFont(f);
f.setPointSize(fontUtils::fontSize(p, text, 380, 30));
p.setFont(f);
p.drawText(0, 0, text);
}
void blinken::drawLevel(QPainter &p)
{
QString n[3];
n[0] = i18n("2");
n[1] = i18n("1");
n[2] = i18n("?");
drawText(p, i18n("Level"), QPoint(322, 281), false, 0, 0, 0, false, true);
QPoint cp;
for (int i = 0; i < 3; i++)
{
if (i == 0) cp = QPoint(319, 315);
else if (i == 1) cp = QPoint(m_levelsRect[0].left() - m_levelsRect[0].width(), 315);
else if (i == 2) cp = QPoint(m_levelsRect[0].right() + m_levelsRect[0].width(), 315);
drawText(p, n[i], cp, true, 20, 5, &(m_levelsRect[i]), m_overLevels[i], true);
}
}
void blinken::drawText(QPainter &p, const QString &text, const QPoint &center, bool withMargin, int xMargin, int yMargin, QRect *rect, bool highlight, bool bold)
{
QRect r;
QFont oldFont, f = p.font();
oldFont = f;
f.setPointSize(fontUtils::fontSize(p, text, 190, 30));
if (bold) f.setBold(true);
p.setFont(f);
r = p.boundingRect(QRect(), Qt::AlignAuto, text);
r = QRect(0, 0, r.width() + xMargin, r.height() + yMargin);
r.moveBy(center.x() - r.width() / 2, center.y() - r.height() / 2);
if (withMargin)
{
p.fillRect(r, m_fillColor);
p.setPen(QPen(black, 3));
p.drawRoundRect(r.left(), r.top(), r.width(), r.height(), 15, 15);
}
if (!highlight) p.setPen(m_fontColor);
else p.setPen(m_fontHighlightColor);
p.drawText(r, Qt::AlignCenter, text);
if (rect) *rect = r;
p.setFont(oldFont);
}
void blinken::updateButtonHighlighting(const QPoint &p)
{
bool haveToUpdate;
m_updateButtonHighlighting = false;
haveToUpdate = false;
if (m_highscoreRect.contains(p))
{
if (!m_overHighscore)
{
m_overHighscore = true;
haveToUpdate = true;
}
}
else if (m_overHighscore)
{
m_overHighscore = false;
haveToUpdate = true;
}
if (m_menuRect.contains(p))
{
if (!m_overMenu)
{
m_overMenu = true;
m_overAboutKDE = false;
m_overAboutBlinken = false;
m_overManual = false;
haveToUpdate = true;
}
else if (m_overAboutKDE || m_overAboutBlinken || m_overManual)
{
m_overAboutKDE = false;
m_overAboutBlinken = false;
m_overManual = false;
haveToUpdate = true;
}
}
else if (m_overMenu)
{
if (m_aboutKDERect.contains(p))
{
if (!m_overAboutKDE)
{
m_overAboutKDE = true;
m_overAboutBlinken = false;
m_overManual = false;
haveToUpdate = true;
}
}
else if (m_aboutBlinkenRect.contains(p))
{
if (!m_overAboutBlinken)
{
m_overAboutKDE = false;
m_overAboutBlinken = true;
m_overManual = false;
haveToUpdate = true;
}
}
else if (m_manualRect.contains(p))
{
if (!m_overManual)
{
m_overAboutKDE = false;
m_overAboutBlinken = false;
m_overManual = true;
haveToUpdate = true;
}
}
else
{
m_overMenu = false;
m_overAboutKDE = false;
m_overAboutBlinken = false;
m_overManual = false;
haveToUpdate = true;
}
}
if (!m_showPreferences && m_centralLettersRect.contains(p))
{
m_overCentralLetters = true;
haveToUpdate = true;
}
else if (m_overCentralLetters)
{
m_overCentralLetters = false;
haveToUpdate = true;
}
if (m_showPreferences && m_soundRect.contains(p))
{
m_overSound = true;
haveToUpdate = true;
}
else if (m_overSound)
{
m_overSound = false;
haveToUpdate = true;
}
if (m_showPreferences && m_fontRect.contains(p) && !m_alwaysUseNonCoolFont)
{
m_overFont = true;
haveToUpdate = true;
}
else if (m_overFont)
{
m_overFont = false;
haveToUpdate = true;
}
if (m_counterRect.contains(p))
{
m_overCounter = true;
haveToUpdate = true;
}
else if (m_overCounter)
{
m_overCounter = false;
haveToUpdate = true;
}
if (m_quitRect.contains(p))
{
if (!m_overQuit)
{
m_overQuit = true;
haveToUpdate = true;
}
}
else if (m_overQuit)
{
m_overQuit = false;
haveToUpdate = true;
}
switch (m_game.phase())
{
case blinkenGame::starting:
case blinkenGame::waiting3:
case blinkenGame::waiting2:
case blinkenGame::waiting1:
case blinkenGame::learningTheSequence:
case blinkenGame::typingTheSequence:
if (m_centralTextRect.contains(p))
{
if (!m_overCentralText)
{
m_overCentralText = true;
haveToUpdate = true;
}
}
else if (m_overCentralText)
{
m_overCentralText = false;
haveToUpdate = true;
}
break;
case blinkenGame::choosingLevel:
for (int i = 0; i < 3; i++)
{
if (m_levelsRect[i].contains(p))
{
if (!m_overLevels[i])
{
m_overLevels[i] = true;
haveToUpdate = true;
}
}
else if (m_overLevels[i])
{
m_overLevels[i] = false;
haveToUpdate = true;
}
}
break;
}
updateCursor(p);
if (haveToUpdate) update();
}
void blinken::updateCursor(const QPoint &p)
{
QPoint p2 = p - QPoint(319, 221);
if (m_overHighscore || m_overQuit || m_overCentralText || m_overMenu || m_overAboutKDE || m_overAboutBlinken || m_overManual || m_overLevels[0] || m_overLevels[1] || m_overLevels[2] || m_overCentralLetters || m_overCounter || (m_game.canType() && (insideGreen(p2) || insideRed(p2) || insideBlue(p2) || insideYellow(p2))) || m_overFont || m_overSound) setCursor(PointingHandCursor);
else setCursor(ArrowCursor);
}
#include "blinken.moc"

@ -0,0 +1,113 @@
[Desktop Entry]
Name=blinKen
Name[bn]=ব্লিনকেন
Name[eo]=blinKeno
Name[ne]=झिमझिम
Name[pa]=ਬਲਿਨਕਿਨ
Name[tr]=Blinken
DocPath=blinken/index.html
GenericName=Simon Says Game
GenericName[be]=Гульня "Сайман кажа"
GenericName[bg]=Игра за паметта
GenericName[bn]=সায়মনের কথা খেলা
GenericName[bs]=Simon Says igra
GenericName[ca]=Joc del Simon Diu
GenericName[cs]=Hra Kuba řekl
GenericName[csb]=Gra jidzenié w szlach
GenericName[cy]=Gêm Dewi yn Dweud
GenericName[da]='Simon siger'-spil
GenericName[de]="Simon sagt"-Spiel
GenericName[el]=Παιχνίδι "Ο Σάιμον λέει"
GenericName[eo]=Simona ludo
GenericName[es]=Simón dice
GenericName[et]='Simon Says' mäng
GenericName[eu]="Simon-ek dio" jokoa
GenericName[fa]=بازی سیمون می‌گوید
GenericName[fi]=Simon Says -peli
GenericName[fr]=Jeu de Simon
GenericName[ga]=Cluiche "Simon Says"
GenericName[gl]=O xogo de "Simón di..."
GenericName[he]=משחק המלך אמר
GenericName[hr]=Igra kako Simon kaže
GenericName[hu]=Memóriajáték
GenericName[is]=Hermi leikur
GenericName[it]=Gioco Simon Says
GenericName[ja]=ゲーム「サイモンさんが言いました」
GenericName[ka]=თამაში "წერეთელმა დაგვიბარა"
GenericName[km]=ល្បែង ស៊ីម៉ុន​និយាយ
GenericName[lt]=Simon Says žaidimas
GenericName[ms]=Permainan Simon Says
GenericName[nb]=Hukommelsesleke
GenericName[nds]=Behollspeel
GenericName[ne]=सिमोन भनिने खेल
GenericName[nl]='Simon zegt'-spel
GenericName[nn]=Hugsespel
GenericName[pa]=ਸੀਮੋਨ ਕਿਹਾ ਖੇਡ
GenericName[pl]=Gra w naśladowanie
GenericName[pt]=Jogo o Simão Diz
GenericName[pt_BR]=Jogo Simon Diz
GenericName[ru]=Игра «Саймон сказал»
GenericName[sk]=Hra Simon Says
GenericName[sl]=Igra ponavljanja
GenericName[sr]=Игра Сима каже
GenericName[sr@Latn]=Igra Sima kaže
GenericName[sv]=Simon säger lek
GenericName[tr]=Simon Süylüyor Oyunu
GenericName[uk]=Гра "Саймон каже"
GenericName[vi]=Trò chơi Phát âm Simon
GenericName[zh_CN]=我说你做游戏
GenericName[zh_TW]=老師說遊戲
Exec=blinken
Icon=blinken
Type=Application
Comment=A retro memory enhancement game
Comment[be]=Класічная гульня для развіцця памяці
Comment[bg]=Игра за упражнение на паметта
Comment[bn]=পুরনো দিনের স্মৃতিবর্ধক খেলা
Comment[bs]=Program za poboljšanje retro memorije
Comment[ca]=Un joc per millorar la memòria amb aspecte retro
Comment[cs]=Hra k procvičování paměti
Comment[csb]=Znónô gra na cwiczënk pamiãcë ë pòstrzég
Comment[cy]=Gêm oes-a-fu i wella eich cof
Comment[da]=Et indlæringsprogram for hukommelsesforbedring
Comment[de]=Ein Spiel zum Training Ihres Gedächtnisses
Comment[el]=Ένα κλασικό παιχνίδι βελτίωσης της μνήμης
Comment[eo]=Malnovaĉa memorpliboniga ludo
Comment[es]=Un juego para mejorar la memoria
Comment[et]=Vanaaegne mälu parandamise mäng
Comment[eu]=Memoria hobetzeko joko zaharra
Comment[fa]=بازی تقویت حافظه گذشته
Comment[fi]=Vanha muistinparantamispeli
Comment[fr]=Un ancien jeu de mémoire
Comment[ga]=Cluiche feabhsaithe cuimhne den seandéanamh
Comment[gl]=Un programa para mellorar a memoria
Comment[he]=משחק ישן לשיפור הזיכרון
Comment[hr]=Starinska igra memorije
Comment[hu]=Egy klasszikus memóriajavító játék
Comment[is]=Minnisþjálfunarleikur
Comment[it]=Un programma per esercitare la memoria
Comment[ja]=レトロな記憶力増強ゲーム
Comment[ka]=მეხსიერების გასავარჯიშებელი თამაში
Comment[km]=ល្បែង​ត្រឡប់​បន្កើន​សតិ
Comment[lt]=Retro atminties padidinimo priemonė
Comment[nb]=Et hukommelsesspill etter gammel stil
Comment[nds]=En oolt Speel för't Verbetern vun't Behollen
Comment[ne]=रेट्रो स्मृति बढाउने खेल
Comment[nl]=Een geheugenoefenspel
Comment[nn]=Eit gammaldags hugsespel
Comment[pl]=Znana gra na ćwiczenie pamięci i spotrzegawczości
Comment[pt]=Um jogo antigo para melhorar a memória
Comment[pt_BR]=Um jogo para treinar a memória
Comment[ru]=Игра для развития памяти
Comment[sk]=Retro hra na zlepšenie pamäte
Comment[sl]=Igra za izboljšanje spomina
Comment[sr]=Стара игра за побољшавање меморије
Comment[sr@Latn]=Stara igra za poboljšavanje memorije
Comment[sv]=Ett gammalmodigt program för att förbättra minnet
Comment[tr]=Bir hafıza geliştirme oyunu
Comment[uk]=Гра для розвитку пам'яті
Comment[vi]=Một trò chơi tăng cường trí nhớ quá khứ
Comment[zh_CN]=一个记忆强化游戏
Comment[zh_TW]=加強記憶力的遊戲
Terminal=false
Categories=Qt;KDE;Education;

@ -0,0 +1,92 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 BLINKEN_H
#define BLINKEN_H
#include <qwidget.h>
#include "blinkengame.h"
class QTimer;
class KAction;
class KHelpMenu;
class button;
class highScoreDialog;
class blinken : public QWidget
{
Q_OBJECT
public:
blinken();
~blinken();
protected:
void paintEvent(QPaintEvent *);
void mouseMoveEvent(QMouseEvent *e);
void mousePressEvent(QMouseEvent *e);
void keyPressEvent(QKeyEvent *e);
void keyReleaseEvent(QKeyEvent *e);
private slots:
void checkHS();
void highlight(blinkenGame::color c, bool unhighlight);
void unhighlight();
void pressedYellow();
void pressedRed();
void pressedGreen();
void pressedBlue();
private:
void selectButton(int button);
bool insideGreen(const QPoint &p) const;
bool insideYellow(const QPoint &p) const;
bool insideRed(const QPoint &p) const;
bool insideBlue(const QPoint &p) const;
bool insideButtonsArea(const QPoint &p) const;
void updateCursor(const QPoint &p);
void drawMenuQuit(QPainter &p);
void drawScoreAndCounter(QPainter &p);
void drawStatusText(QPainter &p);
void drawLevel(QPainter &p);
void drawText(QPainter &p, const QString &text, const QPoint &center, bool withMargin, int xMargin, int yMargin, QRect *rect, bool highlight, bool bold);
void updateButtonHighlighting(const QPoint &p);
button *m_buttons[4];
QPixmap *m_back, *m_highscore, *m_highscoreHover, *m_quit, *m_quitHover, *m_menu, *m_menuHover, *m_mark;
bool m_overHighscore, m_overQuit, m_overCentralText, m_overMenu, m_overAboutKDE, m_overAboutBlinken, m_overManual, m_overLevels[3], m_overCentralLetters, m_overCounter, m_overFont, m_overSound;
// i obviously suck but m_levelsRect[0] is 2, m_levelsRect[1] is 1 and m_levelsRect[3] is ?
QRect m_highscoreRect, m_quitRect, m_centralTextRect, m_menuRect, m_aboutKDERect, m_aboutBlinkenRect, m_manualRect, m_levelsRect[3], m_centralLettersRect, m_counterRect, m_soundRect, m_fontRect;
QColor m_fillColor, m_fontColor, m_fontHighlightColor, m_countDownColor;
// Preferences setting handling
bool m_showPreferences;
// if should update the highlighting after the next repaint
bool m_updateButtonHighlighting;
// use always the non-cool font?
bool m_alwaysUseNonCoolFont;
blinkenGame::color m_highlighted;
QTimer *m_unhighlighter;
QString m_lastName;
blinkenGame m_game;
KHelpMenu *m_helpMenu;
};
#endif

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
<kcfgfile name="blinkenrc"/>
<group name="general">
<entry name="playSounds" type="Bool">
<label>Play sounds</label>
<default>true</default>
</entry>
<entry name="customFont" type="Bool">
<label>Use custom font for status text</label>
<default>true</default>
</entry>
</group>
</kcfg>

@ -0,0 +1,181 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <stdlib.h> // for RAND_MAX
#include <qtimer.h>
#include <kapplication.h>
#include "artsplayer.h"
#include "blinkengame.h"
blinkenGame::blinkenGame() : m_phase(starting)
{
m_artsPlayer = new artsPlayer;
m_waitTimer = new QTimer(this);
connect(m_waitTimer, SIGNAL(timeout()), this, SLOT(waiting()));
}
blinkenGame::~blinkenGame()
{
delete m_artsPlayer;
}
int blinkenGame::level() const
{
return m_level;
}
bool blinkenGame::canType() const
{
return m_phase == typingTheSequence || m_phase == starting;
}
blinkenGame::gamePhase blinkenGame::phase() const
{
return m_phase;
}
int blinkenGame::score() const
{
if (m_phase == starting || m_phase == choosingLevel) return 0;
return m_sequenceLength - 1;
}
void blinkenGame::clicked(color c)
{
if (m_phase == starting)
{
m_artsPlayer -> play(c);
return;
}
if (c == *m_nextColor)
{
++m_nextColor;
m_artsPlayer -> play(c);
if (m_nextColor == m_sequence.end())
{
m_sequenceLength++;
nextRound();
}
}
else
{
m_artsPlayer -> play(all, true);
emit highlight(all, true);
emit gameEnded();
setPhase(choosingLevel);
}
}
void blinkenGame::setPhase(gamePhase p)
{
if (p != waiting3 && p != waiting2 && p != waiting1) m_waitTimer -> stop();
m_phase = p;
emit phaseChanged();
}
void blinkenGame::start(int level)
{
m_level = level;
m_sequenceLength = 1;
nextRound();
m_sequence.clear();
}
void blinkenGame::nextSound()
{
if (m_nextColor != m_sequence.end())
{
color c;
c = *m_nextColor;
++m_nextColor;
m_artsPlayer -> play(c);
emit highlight(c, false);
}
else
{
setPhase(typingTheSequence);
m_nextColor = m_sequence.begin();
emit highlight(none, false);
m_artsPlayer->disconnect();
}
}
void blinkenGame::soundEnded()
{
QTimer::singleShot(100, this, SLOT(nextSound()));
QTimer::singleShot(50, this, SLOT(unhighlight()));
}
void blinkenGame::unhighlight()
{
emit highlight(none, false);
}
void blinkenGame::waiting()
{
if (m_phase == waiting1)
{
setPhase(blinkenGame::learningTheSequence);
if (m_level == 3)
{
m_sequence.clear();
for (int i = 0; i < m_sequenceLength; i++) m_sequence.append(generateColor());
}
else m_sequence.append(generateColor());
connect(m_artsPlayer, SIGNAL(ended()), this, SLOT(soundEnded()));
m_nextColor = m_sequence.begin();
soundEnded();
}
else if (m_phase == waiting3) setPhase(waiting2);
else /* m_phase == waiting2 */ setPhase(waiting1);
}
void blinkenGame::nextRound()
{
if (m_level == 1) setPhase(waiting3);
else setPhase(waiting2);
m_waitTimer -> start(1000);
}
blinkenGame::color blinkenGame::generateColor()
{
int r;
// make the compiler happy :-D
color c = none;
r = 1 + (int)(4.0 * kapp -> random() / (RAND_MAX + 1.0));
switch(r)
{
case 1:
c = red;
break;
case 2:
c = green;
break;
case 3:
c = blue;
break;
case 4:
c = yellow;
break;
}
return c;
}
#include "blinkengame.moc"

@ -0,0 +1,72 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 BLINKENGAME_H
#define BLINKENGAME_H
#include <qobject.h>
#include <qvaluelist.h>
class QTimer;
class artsPlayer;
class blinkenGame : public QObject
{
Q_OBJECT
public:
blinkenGame();
~blinkenGame();
enum gamePhase { starting, choosingLevel, waiting3, waiting2, waiting1, learningTheSequence, typingTheSequence };
enum color
{
none = 0,
red = 1,
green = 2,
blue = 4,
yellow = 8,
all = 15};
int level() const;
bool canType() const;
gamePhase phase() const;
int score() const;
void clicked(color c);
void setPhase(gamePhase p);
void start(int level);
signals:
void gameEnded();
void phaseChanged();
void highlight(blinkenGame::color c, bool unhighlight);
private slots:
void nextSound();
void soundEnded();
void unhighlight();
void waiting();
private:
void nextRound();
color generateColor();
gamePhase m_phase;
int m_level;
int m_sequenceLength;
QTimer *m_waitTimer;
artsPlayer *m_artsPlayer;
QValueList<color> m_sequence;
QValueList<color>::const_iterator m_nextColor;
};
#endif

@ -0,0 +1,119 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <kaction.h>
#include <kapplication.h>
#include <kconfig.h>
#include <kstandarddirs.h>
#include <kdebug.h>
#include "button.h"
button::button(blinkenGame::color c) : m_selected(false), m_color(c)
{
KConfig *kc = kapp->config();
kc->setGroup("General");
QString cs = getColorString();
QString pixmap = QString("images/%1h.png").arg(cs);
switch (c)
{
case blinkenGame::blue:
m_key = kc->readNumEntry(cs, Qt::Key_3);
break;
case blinkenGame::yellow:
m_key = kc->readNumEntry(cs, Qt::Key_1);
break;
case blinkenGame::red:
m_key = kc->readNumEntry(cs, Qt::Key_2);
break;
case blinkenGame::green:
m_key = kc->readNumEntry(cs, Qt::Key_4);
break;
default:
// never happens
break;
}
m_highlighted = new QPixmap(locate("appdata", pixmap));
}
button::~button()
{
delete m_highlighted;
}
void button::setShortcut(int key)
{
m_key = key;
m_selected = false;
KConfig *kc = kapp->config();
kc->setGroup("General");
kc->writeEntry(getColorString(), key);
kc->sync();
}
QString button::shortcut() const
{
return KShortcut(m_key).toString();
}
int button::key() const
{
return m_key;
}
void button::setSelected(bool b)
{
m_selected = b;
}
bool button::selected() const
{
return m_selected;
}
QPixmap *button::pixmap() const
{
return m_highlighted;
}
QString button::getColorString() const
{
switch (m_color)
{
case blinkenGame::blue:
return "blue";
break;
case blinkenGame::yellow:
return "yellow";
break;
case blinkenGame::red:
return "red";
break;
case blinkenGame::green:
return "green";
break;
default:
// never happens
break;
}
// never happens
return QString::null;
}

@ -0,0 +1,43 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 BUTTON_H
#define BUTTON_H
#include <qobject.h>
#include "blinkengame.h"
class KAction;
class KActionCollection;
class KShortcut;
class button
{
public:
button(blinkenGame::color c);
~button();
void setShortcut(int key);
QString shortcut() const;
int key() const;
void setSelected(bool b);
bool selected() const;
QPixmap *pixmap() const;
private:
QString getColorString() const;
QPixmap *m_highlighted;
bool m_selected;
int m_key;
blinkenGame::color m_color;
};
#endif

@ -0,0 +1,57 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <qcolor.h>
#include <qpainter.h>
#include "counter.h"
#include "number.h"
void counter::paint(QPainter &p, bool drawScore, int score, bool drawTimer, const QColor &c1, const QColor &c2, const QColor &c3)
{
p.save();
p.translate(45, 15);
p.setPen(QPen(Qt::black, 3));
p.setBrush(QColor(40, 40, 40));
if (drawTimer)
{
p.fillRect(-44, -13, 98, 48, p.brush());
p.drawRoundRect(-45, -15, 100, 50, 15, 15);
}
else
{
p.fillRect(-44, -13, 70, 48, p.brush());
p.drawRoundRect(-45, -15, 73, 50, 15, 15);
}
if (drawScore)
{
number n(score);
n.paint(p, 2);
}
if (drawTimer)
{
p.fillRect(35, -6, 11, 9, c1);
p.fillRect(35, 6, 11, 9, c2);
p.fillRect(35, 18, 11, 9, c3);
}
p.restore();
}
int counter::width(bool drawTimer)
{
if (drawTimer) return 100;
else return 73;
}
int counter::height()
{
return 50;
}

@ -0,0 +1,23 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 COUNTER_H
#define COUNTER_H
class QPainter;
class counter
{
public:
static void paint(QPainter &p, bool drawScore, int score, bool drawTimer, const QColor &c1, const QColor &c2, const QColor &c3);
static int width(bool drawTimer);
static int height();
};
#endif

@ -0,0 +1,27 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <qfont.h>
#include <qfontinfo.h>
#include <kio/netaccess.h>
#include "fontchecker.h"
bool fontChecker::checkInstalled(const QFont &font, const QString &fontPath)
{
QFontInfo fi(font);
// Works with Steve may need some tweaking to work with other fonts
if (!fi.exactMatch())
{
bool success = KIO::NetAccess::copy(fontPath, "fonts:/Personal/", 0);
return !success;
}
return true;
}

@ -0,0 +1,21 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 FONTCHECKER_H
#define FONTCHECKER_H
class QFont;
class fontChecker
{
public:
static bool checkInstalled(const QFont &font, const QString &fontPath);
};
#endif

@ -0,0 +1,33 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <qpainter.h>
#include "fontutils.h"
int fontUtils::fontSize(QPainter &p, const QString &s1, int w, int h)
{
int size;
QRect aux1;
bool done = false;
size = 28;
while (!done)
{
QFont f = p.font();
f.setPointSize(size);
p.setFont(f);
aux1 = p.boundingRect(QRect(), Qt::AlignAuto, s1);
if (aux1.width() > w || aux1.height() > h) size = QMIN(w * size / aux1.width(), h * size / aux1.height());
else done = true;
}
return size;
}

@ -0,0 +1,18 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 FONTUTILS_H
#define FONTUTILS_H
namespace fontUtils
{
int fontSize(QPainter &p, const QString &s1, int w, int h);
}
#endif

@ -0,0 +1,198 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <qpainter.h>
#include <qpixmap.h>
#include <qtabbar.h>
#include <qtabwidget.h>
#include <kapplication.h>
#include <kconfig.h>
#include <klocale.h>
#include "highscoredialog.h"
#include "counter.h"
#include "fontutils.h"
#include "settings.h"
static const int margin = 15;
static const int smallMargin = 5;
static const int namesFontSize = 25;
/* scoresWidget */
class scoresWidget : public QWidget
{
public:
scoresWidget(QWidget *parent, const QValueList< QPair<int, QString> > &scores);
QSize calcSize();
protected:
void paintEvent(QPaintEvent *);
private:
const QValueList< QPair<int, QString> > &m_scores;
};
scoresWidget::scoresWidget(QWidget *parent, const QValueList< QPair<int, QString> > &scores) : QWidget(parent, 0, WStaticContents | WNoAutoErase), m_scores(scores)
{
}
void scoresWidget::paintEvent(QPaintEvent *)
{
int w = width();
int h = height();
QFont f;
QPixmap buf(w, h);
QPainter p(&buf);
QRect r;
QColor bg = paletteBackgroundColor();
// bg color
p.fillRect(0, 0, w, h, bg);
p.setPen(black);
if (blinkenSettings::customFont()) f = QFont("Steve");
p.setFont(f);
f.setPointSize(fontUtils::fontSize(p, "A", 1000, namesFontSize));
p.setFont(f);
p.translate(margin, margin);
QValueList< QPair<int, QString> >::const_iterator it;
for (it = m_scores.begin(); it != m_scores.end(); ++it)
{
counter::paint(p, !(*it).second.isEmpty(), (*it).first, false, QColor(), QColor(), QColor());
p.setPen(black);
p.drawText(counter::width(false) + 2 * smallMargin, 30, (*it).second);
p.translate(0, counter::height() + smallMargin);
}
bitBlt(this, 0, 0, &buf);
}
QSize scoresWidget::calcSize()
{
int mw, mh, lt;
QRect r;
QPainter p(this);
QFont f;
if (blinkenSettings::customFont()) f = QFont("Steve");
p.setFont(f);
f.setPointSize(fontUtils::fontSize(p, "A", 1000, namesFontSize));
p.setFont(f);
for (int i = 0; i < 3; i++)
{
lt = 0;
QValueList< QPair<int, QString> >::const_iterator it;
for (it = m_scores.begin(); it != m_scores.end(); ++it)
{
r = p.boundingRect(QRect(), Qt::AlignAuto, (*it).second);
lt = QMAX(lt, r.width());
}
}
mw = margin + counter::width(false) + 2 * smallMargin + lt + margin;
mh = margin * 2 + counter::height() * 5 + smallMargin * 4;
QSize size(mw, mh);
setMinimumSize(size);
resize(size);
return size;
}
/* myTabWidget */
class myTabWidget : public QTabWidget
{
public:
myTabWidget(QWidget *parent) : QTabWidget(parent) {}
QSize tabBarSizeHint() const
{
return tabBar() -> sizeHint();
}
};
/* highScoreDialog */
highScoreDialog::highScoreDialog(QWidget *parent) : KDialogBase(parent, 0, true, i18n("Highscores"), KDialogBase::Close)
{
m_tw = new myTabWidget(this);
setMainWidget(m_tw);
KConfig *cfg = kapp -> config();
for (int i = 1; i <= 3; i++)
{
cfg -> setGroup(QString("Level%1").arg(i));
for (int j = 1; j <= 5; j++)
{
m_scores[i-1].append(qMakePair(cfg->readNumEntry(QString("Score%1").arg(j)), cfg->readEntry(QString("Name%1").arg(j))));
}
}
m_tw -> addTab(new scoresWidget(m_tw, m_scores[0]), i18n("Level 1"));
m_tw -> addTab(new scoresWidget(m_tw, m_scores[1]), i18n("Level 2"));
m_tw -> addTab(new scoresWidget(m_tw, m_scores[2]), i18n("Level ?"));
}
bool highScoreDialog::scoreGoodEnough(int level, int score)
{
level--;
QValueList< QPair<int, QString> >::iterator it, itEnd;
it = m_scores[level].begin();
itEnd = m_scores[level].end();
while (it != itEnd && (*it).first >= score) it++;
return (it != itEnd);
}
void highScoreDialog::addScore(int level, int score, const QString &name)
{
level--;
QValueList< QPair<int, QString> >::iterator it, itEnd;
it = m_scores[level].begin();
itEnd = m_scores[level].end();
while (it != itEnd && (*it).first >= score) it++;
if (it != itEnd)
{
m_scores[level].insert(it, qMakePair(score, name));
m_scores[level].remove(--m_scores[level].end());
KConfig *cfg = kapp -> config();
cfg -> setGroup(QString("Level%1").arg(level + 1));
int j;
for (it = m_scores[level].begin(), j = 1; it != m_scores[level].end(); ++it, j++)
{
cfg->writeEntry(QString("Score%1").arg(j), (*it).first);
cfg->writeEntry(QString("Name%1").arg(j), (*it).second);
}
cfg -> sync();
}
}
void highScoreDialog::showLevel(int level)
{
QSize max, aux;
m_tw -> setCurrentPage(level -1);
for (int i = 0; i < 3; i++)
{
aux = static_cast<scoresWidget*>(m_tw -> page(i)) -> calcSize();
max = max.expandedTo(aux);
}
if (max.width() < m_tw -> tabBarSizeHint().width() + 5) m_tw -> setMinimumSize(m_tw -> tabBarSizeHint().width() + 5, max.height() + m_tw -> tabBarSizeHint().height() + 5);
exec();
delete this;
}

@ -0,0 +1,33 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 HIGHSCOREDIALOG_H
#define HIGHSCOREDIALOG_H
#include <qpair.h>
#include <qvaluelist.h>
#include <kdialogbase.h>
class myTabWidget;
class highScoreDialog : private KDialogBase
{
public:
highScoreDialog(QWidget *parent);
bool scoreGoodEnough(int level, int score);
void addScore(int level, int score, const QString &name);
void showLevel(int level);
QValueList< QPair<int, QString> > m_scores[3];
myTabWidget *m_tw;
};
#endif

@ -0,0 +1,41 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <kaboutdata.h>
#include <kapplication.h>
#include <kcmdlineargs.h>
#include <kprocess.h>
#include <kstandarddirs.h>
#include "fontchecker.h"
#include "blinken.h"
int main(int argc, char *argv[])
{
KAboutData about("blinken", I18N_NOOP("blinKen"), "0.1.1", I18N_NOOP("A memory enhancement game"), KAboutData::License_GPL, "© 2005 Albert Astals Cid\n© 2005 Danny Allen");
about.addAuthor("Albert Astals Cid", I18N_NOOP("Coding"), "tsdgeos@terra.es");
about.addAuthor("Danny Allen", I18N_NOOP("Design, Graphics and Sounds"), "danny@dannyallen.co.uk");
about.addCredit("Steve Jordi", I18N_NOOP("GPL'ed his 'Steve' font so that we could use it"), "steve@sjordi.com");
KCmdLineArgs::init(argc, argv, &about);
KApplication app;
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
QFont f("Steve", 12, QFont::Normal, true);
if (!fontChecker::checkInstalled(f, locate("appdata", "fonts/steve.ttf")))
{
KProcess *proc = new KProcess;
for (int i = 0; i < argc; i++) *proc << argv[i];
proc->start();
}
else
{
app.setTopWidget(new blinken());
return app.exec();
}
}

@ -0,0 +1,196 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 <qbrush.h>
#include <qcolor.h>
#include <qpainter.h>
#include "number.h"
const int number::m_number0[20] = {1, 0, 0, 2,
0, 5, 5, 0,
0, 5, 5, 0,
0, 5, 5, 0,
4, 0, 0, 3};
const int number::m_number1[20] = {5, 1, 0, 5,
5, 5, 0, 5,
5, 5, 0, 5,
5, 5, 0, 5,
5, 5, 0, 5};
const int number::m_number2[20] = {0, 0, 0, 2,
5, 5, 5, 0,
1, 0, 0, 3,
0, 5, 5, 5,
0, 0, 0, 0};
const int number::m_number3[20] = {0, 0, 0, 2,
5, 5, 5, 0,
5, 0, 0, 3,
5, 5, 5, 2,
0, 0, 0, 3};
const int number::m_number4[20] = {0, 5, 5, 0,
0, 5, 5, 0,
0, 5, 5, 0,
4, 0, 0, 0,
5, 5, 5, 0};
const int number::m_number5[20] = {0, 0, 0, 0,
0, 5, 5, 5,
4, 0, 0, 2,
5, 5, 5, 0,
0, 0, 0, 3};
const int number::m_number6[20] = {1, 0, 0, 0,
0, 5, 5, 5,
0, 0, 0, 2,
0, 5, 5, 0,
4, 0, 0, 3};
const int number::m_number7[20] = {0, 0, 0, 2,
5, 5, 5, 0,
5, 5, 5, 0,
5, 5, 5, 0,
5, 5, 5, 0};
const int number::m_number8[20] = {1, 0, 0, 2,
0, 5, 5, 0,
4, 0, 0, 3,
1, 5, 5, 2,
4, 0, 0, 3};
const int number::m_number9[20] = {1, 0, 0, 2,
0, 5, 5, 0,
4, 0, 0, 3,
5, 5, 5, 0,
0, 0, 0, 3};
number::number(int n)
{
m_number = n;
}
void number::paint(QPainter &p, int digits) const
{
int nDigits, digit, number;
nDigits = 0;
number = m_number;
while(nDigits < digits || number != 0)
{
digit = number % 10;
number /= 10;
paintDigit(p, digit);
nDigits++;
p.translate(-30, 0);
}
p.translate(30 * nDigits, 0);
}
void number::paintDigit(QPainter &p, int number) const
{
// make gcc happy
const int *n = m_number0;
int shape;
switch (number)
{
case 1:
n = m_number1;
break;
case 2:
n = m_number2;
break;
case 3:
n = m_number3;
break;
case 4:
n = m_number4;
break;
case 5:
n = m_number5;
break;
case 6:
n = m_number6;
break;
case 7:
n = m_number7;
break;
case 8:
n = m_number8;
break;
case 9:
n = m_number9;
break;
}
p.setBrush(Qt::red);
p.setPen(Qt::red);
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
{
shape = n[j + i * 4];
if (shape == 0)
{
p.fillRect(7 * (j-1), 7 * (i-1), 6, 6, Qt::red);
}
else if (shape != 5)
{
if (shape == 1) p.translate(7 * (j-1), 7 * (i-1));
else if (shape == 2)
{
p.translate(7 * j - 2, 7 * (i-1));
p.rotate(90);
}
else if (shape == 3)
{
p.translate(7 * j - 2, 7 * i - 2);
p.rotate(180);
}
else if (shape == 4)
{
p.translate(7 * (j-1), 7 * i - 2);
p.rotate(270);
}
p.drawPie(0, 0, 11, 11, 90 * 16, 16 * 90);
if (shape == 1) p.translate(-7 * (j-1), -7 * (i-1));
else if (shape == 2)
{
p.rotate(-90);
p.translate(-(7 * j - 2), -7 * (i-1));
}
else if (shape == 3)
{
p.rotate(-180);
p.translate(-(7 * j - 2), -(7 * i - 2));
}
else if (shape == 4)
{
p.rotate(-270);
p.translate(- (7 * (j-1)), -(7 * i - 2));
}
}
}
}
}

@ -0,0 +1,39 @@
/***************************************************************************
* Copyright (C) 2005 by Albert Astals Cid <tsdgeos@terra.es> *
* *
* 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 NUMBER_H
#define NUMBER_H
class QPainter;
class number
{
public:
number(int n);
void paint(QPainter &p, int digits) const;
private:
void paintDigit(QPainter &p, int n) const;
int m_number;
static const int m_number0[20];
static const int m_number1[20];
static const int m_number2[20];
static const int m_number3[20];
static const int m_number4[20];
static const int m_number5[20];
static const int m_number6[20];
static const int m_number7[20];
static const int m_number8[20];
static const int m_number9[20];
};
#endif

@ -0,0 +1,4 @@
File=blinken.kcfg
ClassName=blinkenSettings
Singleton=true
Mutators=true

@ -0,0 +1,6 @@
#MIN_CONFIG
CXXFLAGS="$CXXFLAGS $KDE_DEFAULT_CXXFLAGS"
AC_CHECK_SETENV
AC_CHECK_UNSETENV
KDE_INIT_DOXYGEN([KDE Education API Reference], [Version $VERSION])

@ -0,0 +1,3 @@
KDE_LANG = en
KDE_DOCS = AUTO
SUBDIRS = $(AUTODIRS)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

@ -0,0 +1,4 @@
KDE_LANG = en
KDE_DOCS = AUTO
KDE_MANS = AUTO

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,361 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY blinken "<application>blinKen</application>">
<!ENTITY kappname "&blinken;">
<!ENTITY package "kdeedu">
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"><!-- change language only here -->
]>
<book lang="&language;">
<bookinfo>
<title>The &blinken; Handbook</title>
<authorgroup>
<author>
<firstname>Danny</firstname>
<surname>Allen</surname>
<affiliation>
<address>&Danny.Allen.mail;</address>
</affiliation>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>
<copyright>
<year>2005</year>
<holder>&Danny.Allen;</holder>
</copyright>
<legalnotice>&FDLNotice;</legalnotice>
<date>2005-08-20</date>
<releaseinfo>1.0</releaseinfo>
<abstract>
<para>
&blinken; brings a retro electronic memory game from the 1970's to &kde;.
</para>
</abstract>
<keywordset>
<keyword>KDE</keyword>
<keyword>kdeedu</keyword>
<keyword>blinKen</keyword>
<keyword>game</keyword>
<keyword>child</keyword>
<keyword>electronic</keyword>
<keyword>retro</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Introduction</title>
<para>
&blinken; is based on an electronic game released in 1978, which challenges players to remember sequences of increasing length. On the face of the device, there are 4 different color buttons, each one with their own distinctive sound. These buttons light up randomly, creating the sequence that the player must then recall. If the player is successful in remembering the sequence of lights in the correct order, they advance to the next stage, where an identical sequence with one extra step is presented. If they are incorrect, the game is lost, and the player must start again from the beginning.
The goal is to get a high score - each step in the sequence is worth one point, so correct entry of a sequence of 8 lights is worth 8 points on the high score table.
</para>
</chapter>
<chapter id="using-blinken">
<title>Using &blinken;</title>
<para>
Here is the screen that is presented on startup of &blinken;, showing the general interface to the application. Most of the screen is taken up by the <interface>device</interface>, with the <interface>4 colored buttons</interface>, with the device controls (<interface>score counter</interface>, <guibutton>Start</guibutton> button, &etc;) in the center of the screen. The current status of the application is displayed on the <interface>piece of paper</interface> under the device. In the corners of the application, there are 3 buttons:
</para>
<screenshot>
<screeninfo>Here is the screen that is presented on startup of &blinken;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="blinken1.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Here is the screen that is presented on startup of &blinken;</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
The <guiicon>Highscores</guiicon> button <action>opens a dialog that displays the <guilabel>Highscores table</guilabel></action> for each of the 3 difficulty levels (the <guilabel>Highscores</guilabel> table can also be accessed by <action>clicking on the <interface>score counter</interface>)</action>:
</para>
<screenshot>
<screeninfo><guiicon>Highscores</guiicon> button</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="blinken_highscoresbutton.png" format="PNG"/>
</imageobject>
<textobject>
<phrase><guiicon>Highscores</guiicon> button</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
The <guiicon>Quit</guiicon> button <action>closes the application</action>:
</para>
<screenshot>
<screeninfo><guiicon>Quit</guiicon> button</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="blinken_quitbutton.png" format="PNG"/>
</imageobject>
<textobject>
<phrase><guiicon>Quit</guiicon> button</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
The <guiicon>Help</guiicon> button is special, in that it <action>reveals 3 sub-buttons</action>. These buttons are shown when the <guiicon>Help</guiicon> button is <action>hovered over</action>, and provide access to the <guilabel>&blinken; handbook</guilabel> (this document), and the <guilabel>About &blinken;</guilabel> and <guilabel>About &kde;</guilabel> dialogs:
</para>
<screenshot>
<screeninfo><guiicon>Help</guiicon> button</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="blinken_helpbutton.png" format="PNG"/>
</imageobject>
<textobject>
<phrase><guiicon>Help</guiicon> button</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
To become familiar with the workings of the game, you can interact with the <interface>colored buttons</interface> whilst on the main screen. The buttons will illuminate and produce a tone upon being pressed.
</para>
<note><para>You need to have &arts; support in kdelibs to hear the sounds.</para></note>
<sect1 id="starting-game">
<title>Starting a Game</title>
<para>
Once you are familiar with the workings of the application, a game can be started by pressing the <guibutton>Start</guibutton> button in the center of the screen. This <quote>powers on</quote> the device, as shown by the illuminated <interface>score counter</interface>. You can then <action>choose the difficulty level</action> that you want to attempt:
</para>
<screenshot>
<screeninfo>Select difficulty level</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="blinken2.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Select difficulty level</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
There are 3 levels in &blinken;:
</para>
<itemizedlist>
<listitem>
<para>
Level 1 is the easiest level, as it provides the longest time break between each sequence playback.
</para>
</listitem>
<listitem>
<para>
Level 2 is the intermediate level. It is identical to the previous level, but has a smaller time break between each sequence playback.
</para>
</listitem>
<listitem>
<para>
Level ? is the most difficult level of &blinken;. It takes the timings from Level 2, but each sequence is totally random, rather than following on from the previous sequence, as in the standard game type.
</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="enter-highscore">
<title>Entering a New Highscore</title>
<para>
If you are lucky enough to get a highscore, it will be entered into the <guilabel>Highscores</guilabel> table. A dialog will ask for a name to associate with your score in the table:
</para>
<screenshot>
<screeninfo>Highscore nickname prompt dialog</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="blinken_nickprompt.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Highscore nickname prompt dialog</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
Only 5 scores are kept for each level, so try not to be disappointed if you don't make it!
</para>
</sect1>
<sect1 id="playing-tips">
<title>Playing Tips</title>
<para>
&blinken; is the ultimate memory game, though you need not possess the ultimate memory to be successful. These tips will help you in your pursuit of the best score:
</para>
<itemizedlist>
<listitem>
<para>
If you have PC speakers, turn them on with the sound at a good level so that you can hear the tones alongside seeing the flashing lights.
</para>
</listitem>
<listitem>
<para>
Experiment with both the mouse and <link
linkend="accessibility">keyboard</link> interaction methods, to see which one suites your memory best.
</para>
</listitem>
<listitem>
<para>
Try remembering the sequence as a list of colors.
</para>
</listitem>
<listitem>
<para>
Try remembering the sequence as positions on the screen.
</para>
</listitem>
</itemizedlist>
</sect1>
</chapter>
<chapter id="accessibility">
<title>Accessibility Options</title>
<para>
To allow &blinken; to be more easily enjoyed by certain users, there are several accessibility options built into &blinken;.
</para>
<para>
To view and modify the accessibility options of &blinken;, press the <keycap>&Ctrl;</keycap> key (whilst a game is not in progress):
</para>
<screenshot>
<screeninfo>&blinken; access keys</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="blinken_accesskeys.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&blinken; access keys</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
To return to the game screen, press the <keycap>&Ctrl;</keycap> key again.
</para>
<para>
Alongside use of the mouse, &blinken; also allows the user to operate the game using the keyboard.
</para>
<para>
The keys are <keycap>1</keycap>, <keycap>2</keycap>, <keycap>3</keycap>, <keycap>4</keycap> by default.
</para>
<para>
To change the mapping of any button, click it using the mouse. It will then be highlighted, waiting for input. Press the desired key on the keyboard to change the currently assigned key.
</para>
<para>
There are other options available in the middle of the window: <interface>sounds</interface> and <interface>font</interface>.
</para>
<itemizedlist>
<listitem>
<para>
By unchecking the <interface>sounds</interface> checkbox, the &blinken; sound effects will be suppressed.
</para>
</listitem>
<listitem>
<para>
By unchecking the <interface>font</interface> checkbox, a standard font will be used for status text instead of the default handwriting font.
</para>
</listitem>
</itemizedlist>
</chapter>
<chapter id="credits">
<title>Credits and License</title>
<para>
&blinken;
</para>
<para>
Program copyright 2005 Albert Astals Cid <email>tsdgeos@terra.es</email> and &Danny.Allen; &Danny.Allen.mail;
</para>
<para>
Contributors:
</para>
<itemizedlist>
<listitem>
<para>"Steve" font: Steve Jordi
<email>steve@sjordi.com</email>
</para>
</listitem>
</itemizedlist>
<para>
Documentation copyright 2005 &Danny.Allen; &Danny.Allen.mail;
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL;
&underGPL;
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-blinken">
<title>How to obtain &blinken;</title>
&install.intro.documentation;
</sect1>
<sect1 id="compilation">
<title>Compilation and installation</title>
&install.compile.documentation;
</sect1>
</appendix>
&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
// vim:ts=2:sw=2:tw=78:noet:noai
-->

@ -0,0 +1,4 @@
KDE_LANG = en
KDE_DOCS = AUTO
KDE_MANS = AUTO

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

@ -0,0 +1,71 @@
<?xml version="1.0" ?>
<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY % English "INCLUDE">
]>
<refentry lang="&language;">
<refentryinfo>
<author><personname><firstname>Ben</firstname><surname>Burton</surname></personname></author>
<date>April 8, 2003</date>
</refentryinfo>
<refmeta>
<refentrytitle><command>kalzium</command></refentrytitle>
<manvolnum>1</manvolnum>
</refmeta>
<refnamediv>
<refname><command>kalzium</command></refname>
<refpurpose>A &kde; based chemistry teaching tool</refpurpose>
</refnamediv>
<refsynopsisdiv>
<cmdsynopsis>
<command>kalzium</command>
<group><option>KDE Generic Options</option></group>
<group><option>Qt Generic Options</option></group>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>&kalzium; is a program which shows you the Periodic System of
the Elements (PSE). You can use &kalzium; to search for information
about the elements or to learn facts about the PSE.</para>
<para>&kalzium; provides you with all kinds of information about the
PSE. You can look up lots of information about the elements and also
use visualisations to show them.</para>
<para>This package is part of the official KDE edutainment module. </para>
</refsect1>
<refsect1>
<title>See Also</title>
<para>More detailed user documentation is available from <ulink
url="help:/kalzium">help:/kalzium</ulink> (either enter this
<acronym>URL</acronym> into &konqueror;, or run
<userinput><command>khelpcenter</command>
<parameter>help:/kalzium</parameter></userinput>).</para>
</refsect1>
<refsect1>
<title>Authors</title>
<para>&kalzium; was written by &Carsten.Niehaus;
&Carsten.Niehaus.mail; and
<personname><firstname>Tomisalve</firstname><surname>Gountchev</surname></personname>
<email>tomi@idiom.com</email>.</para>
<para>This manual page was prepared by <personname><firstname>Ben</firstname><surname>Burton</surname></personname></para>
</refsect1>
</refentry>

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

@ -0,0 +1,4 @@
KDE_LANG = en
KDE_DOCS = AUTO
KDE_MANS = AUTO

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@ -0,0 +1,497 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY kanagram "<application>Kanagram</application>">
<!ENTITY kappname "&kanagram;">
<!ENTITY package "kdeedu">
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"><!-- change language only here -->
]>
<book lang="&language;">
<bookinfo>
<title>The &kanagram; Handbook</title>
<authorgroup>
<author>
<firstname>Danny</firstname>
<surname>Allen</surname>
<affiliation>
<address>&Danny.Allen.mail;</address>
</affiliation>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>
<copyright>
<year>2005</year>
<holder>&Danny.Allen;</holder>
</copyright>
<legalnotice>&FDLNotice;</legalnotice>
<date>2005-09-04</date>
<releaseinfo>1.0</releaseinfo>
<abstract>
<para>
&kanagram; brings fun anagram puzzles to &kde;.
</para>
</abstract>
<keywordset>
<keyword>KDE</keyword>
<keyword>kdeedu</keyword>
<keyword>Kanagram</keyword>
<keyword>game</keyword>
<keyword>child</keyword>
<keyword>anagram</keyword>
<keyword>words</keyword>
<keyword>jumble</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Introduction</title>
<para>
&kanagram; is a game based on anagrams of words: the puzzle is solved when the letters of the scrambled word are put back in the correct order. There is no limit on either time taken, or the amount of attempts to solve the word. Included with &kanagram; are several vocabularies ready to play, with many more available from the Internet.
</para>
</chapter>
<chapter id="using-kanagram">
<title>Using &kanagram;</title>
<para>
Here is the screen that is presented on startup of &kanagram;, showing the main interface to the application. Much of the window is taken up by the <interface>blackboard</interface>, where the puzzles are written onto, with the <interface>filing cabinet</interface> on the right containing application controls:
</para>
<screenshot>
<screeninfo>Here is the screen that is presented on startup of &kanagram;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="kanagram.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kanagram; screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<orderedlist>
<listitem>
<para>
The <interface>Vocabulary Switcher</interface> allows the user to quickly <action>change the active vocabulary</action> by clicking on it: the &LMB; <action>advances to the next vocabulary</action>, with the &RMB; allowing you to <action>return to the previously-played vocabulary</action>.
</para>
</listitem>
<listitem>
<para>
In the center of the <interface>blackboard</interface> is the anagram puzzle to be solved.
</para>
</listitem>
<listitem>
<para>
When the <quote><guibutton>Hint</guibutton></quote> button is clicked, a short sentence will appear, <action>describing the current word puzzle</action>.
</para>
</listitem>
<listitem>
<para>
The <quote><guibutton>Reveal Word</guibutton></quote> button <action>solves the current word puzzle</action>.
</para>
</listitem>
<listitem>
<para>
The <interface>Entry Box</interface> allows you to <action>input your attempts</action> to solve the current word puzzle.
</para>
</listitem>
<listitem>
<para>
The <interface>Enter</interface> button lets you <action>check if your answer is correct</action>. This function is also provided by the <keycap>Enter</keycap> key.
</para>
</listitem>
<listitem>
<para>
This is the <guiicon>Next Word</guiicon> button, and allows you to <action>advance to the next anagram puzzle</action>.
</para>
</listitem>
<listitem>
<para>
This is the <guiicon>Configure</guiicon> button, which <action>opens the <guilabel>Configure</guilabel> &kanagram; dialog</action>.
</para>
</listitem>
<listitem>
<para>
The <guiicon>Help</guiicon> button is special, in that it <action>reveals 3 sub-buttons</action>. These buttons are shown when the <guiicon>Help</guiicon> button is hovered over, and provide access to the <guilabel>&kanagram; handbook</guilabel> (this document), the <guilabel>About &kanagram;</guilabel> and the <guilabel>About &kde;</guilabel> dialogs:
<screenshot>
<screeninfo>The 3 different states of the <guiicon>Help</guiicon> button</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="helpstates.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kanagram; screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
</listitem>
<listitem>
<para>
The <guiicon>Quit</guiicon> button <action>closes the application</action>.
</para>
</listitem>
</orderedlist>
<sect1 id="playing-game">
<title>Playing a game</title>
<para>
Now that you are familiar with the interface of &kanagram;, lets play a game!
</para>
<procedure>
<step>
<para>
Using the <interface>Vocabulary Switcher</interface>, <action>select the vocabulary theme</action> that you would like to attempt. A word from this vocabulary will then be presented in the middle of the <interface>blackboard</interface>. Now, try and guess what word the jumble of letters represents.
<tip>
<para>
If you cannot guess what the word is, press the <quote><guibutton>Hint</guibutton></quote> button to get some friendly advice from your friend in the <interface>filing cabinet</interface>:
</para>
<screenshot>
<screeninfo>&kanagram; hint</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="kanagram-hint.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kanagram; hint</phrase>
</textobject>
</mediaobject>
</screenshot>
</tip>
</para>
</step>
<step>
<para>
Once you think you know the correct answer, type it into the <interface>Entry Box</interface> below the <interface>blackboard</interface>. Either press the <keycap>Enter</keycap> key, or click on the <interface>Enter</interface> button to the right of the <interface>Entry Box</interface> to check your answer: it will <action>change green on a correct answer</action>, and <action>red on an incorrect attempt</action>:
</para>
<screenshot>
<screeninfo>answer highlighted</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="answer-highlight.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>answer highlighted</phrase>
</textobject>
</mediaobject>
</screenshot>
</step>
<step>
<para>
If you were correct, try and guess the next word! Alternatively, you can attempt one of the many other vocabularies bundled with &kanagram;.
</para>
</step>
</procedure>
</sect1>
</chapter>
<chapter id="configuring">
<title>Configuring &kanagram;</title>
<para>
The <guilabel>Configure</guilabel> dialog is opened by clicking on the <guiicon>Configure</guiicon> button:
</para>
<screenshot>
<screeninfo>&kanagram; general settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="general-settings.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kanagram; general settings</phrase>
</textobject>
</mediaobject>
</screenshot>
<itemizedlist>
<listitem>
<para>
The <quote><guilabel>Auto-hide hints after:</guilabel></quote> <interface>drop-down box</interface> allows you to specify how hints are presented to you. Here, you can set the hint box to disappear after a certain amount of seconds (&eg; 5 seconds), or you can leave it as default (<quote>Do not auto-hide hints</quote>).
</para>
</listitem>
<listitem>
<para>
The <quote><guilabel>Play Using:</guilabel></quote> <interface>drop-down box</interface> allows you to play &kanagram; using vocabularies of a different language. For this feature to work, you must have vocabularies of a separate language installed.
</para>
</listitem>
<listitem>
<para>
The <quote><guibutton>Get Chalk Font</guibutton></quote> button will be visible if you do not have the chalk-styled font installed on your system. Pressing this button will download the font from the Internet, which &kanagram; will then use after the application has been restarted.
</para>
<para>
Once you have the chalk-styled font installed, the <quote><guilabel>Use standard fonts</guilabel></quote> <interface>checkbox</interface> becomes active. If checked, &kanagram; will display the <interface>blackboard</interface> text in a standard, rather than chalk-styled font. This should aid readability of the text:
</para>
<screenshot>
<screeninfo>&kanagram; standard font</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="standard-fonts.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kanagram; standard font</phrase>
</textobject>
</mediaobject>
</screenshot>
</listitem>
<listitem>
<para>
The <quote><guilabel>Use sounds</guilabel></quote> <interface>checkbox</interface> allows you to either allow or suppress the &kanagram; sound effects.
</para>
<note>
<para>
You need to have &arts; support in kdelibs to hear the sounds.
</para>
</note>
</listitem>
</itemizedlist>
<sect1 id="vocabularies-config">
<title>Vocabularies</title>
<para>
The <guilabel>Vocabularies</guilabel> configuration page allows you to manage your installed vocabularies. Using this dialog, you can <action>edit</action> and <action>remove</action> downloaded vocabularies, as well as <action>create</action> your very own:
</para>
<screenshot>
<screeninfo>&kanagram; vocabulary settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="vocab-settings.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kanagram; vocabulary settings</phrase>
</textobject>
</mediaobject>
</screenshot>
<itemizedlist>
<listitem>
<para>
The <quote><guibutton>Create New</guibutton></quote> button <action>opens the <link
linkend="vocab-editor"><guilabel>Vocabulary Editor</guilabel></link> dialog</action> so that you can author your own vocabularies which you can then play.
</para>
</listitem>
<listitem>
<para>
The <quote><guibutton>Edit</guibutton></quote> button allows you to <action>make changes to vocabularies that you have either created or downloaded off the Internet</action>.
</para>
</listitem>
<listitem>
<para>
The <quote><guibutton>Delete</guibutton></quote> button allows you to <action>delete vocabularies that you have created or downloaded</action>.
</para>
</listitem>
<listitem>
<para>
You can select which vocabulary you would like to apply these actions to by using the <interface>list of vocabularies</interface>.
</para>
</listitem>
</itemizedlist>
<sect2 id="vocab-editor">
<title><guilabel>Vocabulary Editor</guilabel></title>
<para>
The Vocabulary Editor allows you to create your own vocabularies, which &kanagram; can then test you with:
</para>
<screenshot>
<screeninfo>&kanagram; <guilabel>Vocabulary Editor</guilabel></screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="vocab-editor.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kanagram; <guilabel>Vocabulary Editor</guilabel></phrase>
</textobject>
</mediaobject>
</screenshot>
<itemizedlist>
<listitem>
<para>
The <guilabel>Vocabulary Name</guilabel> field lets you <action>name your vocabulary</action>.
</para>
</listitem>
<listitem>
<para>
The <guilabel>Description</guilabel> field enables you to <action>expand on your vocabulary name</action>, providing your user with more details of the content of your vocabulary.
</para>
<note>
<para>
Try to keep both the name and description fields as short as possible. Effective vocabularies cover a narrow, focussed set of words for a single subject. Try to write at least 20 words for your vocabulary, so that it will not be quickly finished by the user.
</para>
</note>
</listitem>
<listitem>
<para>
The <quote><guibutton>Delete Word</guibutton></quote> button lets you <action>remove words from your vocabulary</action>.
</para>
</listitem>
<listitem>
<para>
The <quote><guibutton>New Word</guibutton></quote> button <action>creates a new word entry in your vocabulary</action>, ready for you to expand.
</para>
</listitem>
<listitem>
<para>
The <guilabel>Word</guilabel> field lets you <action>write word values into your vocabulary</action>.
</para>
</listitem>
<listitem>
<para>
The <guilabel>Hint</guilabel> field allows you to <action>write hints to accompany your words</action>.
</para>
<note>
<para>
Good hints clearly, yet subtly describe the word, whilst increasing the knowledge of the vocabulary subject for your user. Also ensure that your hints are fairly short (under 40 characters in length).
</para>
</note>
</listitem>
<listitem>
<para>
The <quote><guibutton>Save</guibutton></quote> button <action>saves your vocabulary content</action>, and enables its use directly in &kanagram; (it will immediately become available within the application, selectable via. the <interface>Vocabulary Selector</interface>).
</para>
</listitem>
<listitem>
<para>
The <quote><guibutton>Close</guibutton></quote> button <action>closes the <guilabel>Vocabulary Editor</guilabel> dialog</action> without saving the content of your vocabulary.
</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 id="newstuff-config">
<title>New Stuff</title>
<para>
The <guilabel>New Stuff</guilabel> configuration page allows you to obtain new vocabulary files from the Internet:
</para>
<screenshot>
<screeninfo>&kanagram; new stuff settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="newstuff-settings.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kanagram; newstuff settings</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
Click the <quote><guibutton>Download New Vocabularies</guibutton></quote> button to browse the available online content:
</para>
<screenshot>
<screeninfo>&kanagram; new stuff dialog</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="newstuff-dialog.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kanagram; new stuff dialog</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
To install a vocabulary from the Internet, click on the vocabulary item in the list, then press the <quote><guibutton>Install</guibutton></quote> button to install to your system. The downloaded vocabulary will then be available to play immediately.
</para>
</sect1>
</chapter>
<chapter id="credits">
<title>Credits and License</title>
<para>
&kanagram;
</para>
<para>
Program copyright 2005 Joshua Keel <email>joshuakeel@gmail.com</email> and &Danny.Allen; &Danny.Allen.mail;
</para>
<para>
Contributors:
</para>
<itemizedlist>
<listitem>
<para>Sound effects: Artemio
<email>fillme</email>
</para>
</listitem>
</itemizedlist>
<para>
Documentation copyright 2005 &Danny.Allen; &Danny.Allen.mail;
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL;
&underGPL;
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-kanagram">
<title>How to obtain &kanagram;</title>
&install.intro.documentation;
</sect1>
<sect1 id="compilation">
<title>Compilation and installation</title>
&install.compile.documentation;
</sect1>
</appendix>
&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
// vim:ts=2:sw=2:tw=78:noet:noai
-->

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

@ -0,0 +1,4 @@
KDE_LANG = en
KDE_DOCS = AUTO
KDE_MANS = AUTO

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@ -0,0 +1,553 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY kbruch "<application>KBruch</application>">
<!ENTITY kappname "&kbruch;">
<!ENTITY package "kdeedu">
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"><!-- change language only here -->
]>
<book lang="&language;">
<bookinfo>
<title>The &kbruch; Handbook</title>
<authorgroup>
<author>
<firstname>Sebastian</firstname>
<surname>Stein</surname>
<affiliation>
<address><email>seb.kde@hpfsc.de</email></address>
</affiliation>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>
<copyright>
<year>2001-2005</year>
<holder>Sebastian Stein</holder>
</copyright>
<legalnotice>&FDLNotice;</legalnotice>
<date>2004-07-09</date>
<releaseinfo>3.4</releaseinfo>
<abstract>
<para>&kbruch; is a small program to practice calculating with fractions.
Different exercises are provided for this purpose. The program checks user's
input and gives feedback.
</para>
</abstract>
<keywordset>
<keyword>KDE</keyword>
<keyword>education</keyword>
<keyword>fraction</keyword>
<keyword>mathematics</keyword>
<keyword>denominator</keyword>
<keyword>kbruch</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Introduction</title>
<para>
&kbruch; is a small program to practice calculating with fractions. Therefore
4 different exercises are offered.
</para>
<itemizedlist>
<listitem><para>
Fraction Task - in this exercise you have to solve a given fraction task.
You have to enter numerator and denominator. This is the main exercise.
</para></listitem>
<listitem><para>
Comparison - in this exercise you have to compare the size of 2 given
fractions.
</para></listitem>
<listitem><para>
Conversion - in this exercise you have to convert a given number into a
fraction.
</para></listitem>
<listitem><para>
Factorization - in this exercise you have to factorize a given number into its prime factors.
</para></listitem>
</itemizedlist>
<para>
In all different exercises &kbruch; will generate a task and the user has to
solve it. The program checks the input and gives a feedback about it.
</para>
<para>
&kbruch; counts how many tasks were solved at all and how many tasks were
solved correctly. The statistics are shown to the user, but this part of the
main window can be hidden. The user can reset the statistics at any point.
</para>
<para>
&kbruch; is very compact and focuses on the core idea of a task generator. An
online help system provides context-sensitive help for the different
situations.
</para>
<para>
&kbruch; is free and licensed under the &GNU; Public License.
</para>
</chapter>
<chapter id="using-kbruch">
<title>Using &kbruch;</title>
<sect1 id="overview">
<title>Main screen</title>
<para>Here is a screenshot of &kbruch;'s main screen:</para>
<screenshot>
<screeninfo>&kbruch; main screen, directly after the start</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="gui_main.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kbruch; main screen</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
All action takes place in this screen. This ensures that &kbruch; is
easy to use even for young users! The main screen is separated into 5
parts:
<itemizedlist>
<listitem><para>
the menubar with the 3 menus <guimenu>Task</guimenu>,
<guimenu>Settings</guimenu> and <guimenu>Help</guimenu>
</para></listitem>
<listitem><para>
the toolbar, where you can set the difficulty for the tasks given in the
<guimenu>Fraction Task</guimenu> exercise
</para></listitem>
<listitem><para>
the exercise chooser, where you can switch between the different exercises
</para></listitem>
<listitem><para>
the task part, where you have to enter the result of the given task
</para></listitem>
<listitem><para>
the statistical part, where you can see how many tasks have been solved
correctly or attempted
</para></listitem>
</itemizedlist>
</para>
<para>
First you have to choose an exercise in the exercise chooser on the left side
of the window. The task part will change according to the chosen task. The
settings in the toolbar will be enabled, if you have chosen the exercise
<guimenu>Fraction Task</guimenu>.
</para>
<para>
You will find an icon to generate a new task in the toolbar as well. This
action is also available in the menu
<menuchoice><guimenu>Task</guimenu><guimenuitem>New
Task</guimenuitem></menuchoice>. This action is always enabled. If you have not
solved the currently given task, a new task is generated and the given task is
counted as not correctly solved.
</para>
<para>
You can hide the statistic part by dragging the vertical separator to the
right.
</para>
<para>
If you terminate &kbruch; the currently chosen exercise will be saved and
restored on next startup.
</para>
</sect1>
<sect1 id="statistics">
<title>Statistical Part</title>
<para>
In this part of the main screen you can see:
<itemizedlist>
<listitem><para>
how many tasks have been solved
</para></listitem>
<listitem><para>
how many tasks have been solved correctly
</para></listitem>
<listitem><para>
how many tasks have been solved incorrectly
</para></listitem>
</itemizedlist>
</para>
<para>
You can reset the statistics by clicking on the <guimenu>Reset</guimenu> button
under the figures.
</para>
<para>
The statistics will be saved on &kbruch;'s termination and restored on next
startup.
</para>
</sect1>
<sect1 id="settings">
<title>Settings Window</title>
<para>
In this part of the main screen you can adjust some general settings for
task display. To open this dialog use
<menuchoice><guimenu>Settings</guimenu><guimenuitem>Configure
&kbruch;</guimenuitem></menuchoice>.
</para>
<screenshot>
<screeninfo>&kbruch; settings dialog</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="settings.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kbruch; settings dialog</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
In the top part of the dialog you can choose a font for displaying. In the
lower part you can choose colors for the different parts of a mathematical
expression. You can set wether to show the mixed number notation in the result.
This notation is not known everywhere and can be disabled therefore.
</para>
<para>
The settings will be saved on &kbruch;'s termination and restored on the next
startup.
</para>
</sect1>
</chapter>
<chapter id="exercises">
<title>Exercises</title>
<sect1 id="exer_fraction">
<title>Exercise Fraction Task</title>
<para>In this exercise you have to solve a given task. Therefor you have to
enter numerator and denominator. The difficulty of the generated task can be
adjusted by the task parameters described below.
</para>
<sect2 id="task_paras">
<title>Task Parameters</title>
<para>
There are 3 parameters which influence the difficulty of the generated
tasks:</para>
<variablelist>
<varlistentry>
<term><guilabel>Terms</guilabel></term>
<listitem><para>The number of terms (separate fractions) given in each
task. From 2 to 5, inclusive.</para></listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Max. main denominator</guilabel></term>
<listitem><para>The highest number &kbruch; will use as the main denominator in the
tasks it sets. From a minimum of 10 to a maximum of 50.</para></listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Operations</guilabel></term>
<listitem><para>Operations which should be used in the
task: <guilabel>Addition/Subtraction</guilabel>,
<guilabel>Multiplication/Division</guilabel> or <guilabel>All Operations Mixed</guilabel>.</para></listitem>
</varlistentry>
</variablelist>
<para>
After you have changed the parameters you have to click on the <guimenu>New
Task</guimenu> button in the toolbar to generate a task which uses the new
parameters. You can also call this action from the menubar with
<menuchoice><guimenu>Task</guimenu><guimenuitem>New
Task</guimenuitem></menuchoice>.
</para>
<note>
<para>
Your selection of the maximum main denominator will be reset to a default
value every time you change the number of terms. So you should change the
number of terms first and then select the maximum main denominator.
</para>
</note>
<para>
If you have not solved the current task and call the <guimenu>New
Task</guimenu> action, the task will be counted as not solved correctly. To
prevent this you have to change the parameters after you solved the task but
before generating a new one.
</para>
<para>
The chosen parameters will be saved on &kbruch;'s termination and restored
on next startup.
</para>
</sect2>
<sect2 id="exer_fraction_solve_task">
<title>Solving Tasks</title>
<para>
After you have solved a given task, you need to enter the result into the two
input boxes. In the upper box you enter the numerator and in the lower
box the denominator.
</para>
<para>
If the result is negative, you can enter a minus sign in front of the numerator
or denominator. If the result is 0, just type a 0 in the numerator input field.
If the result has a denominator of 1, you can leave the lower box empty.
</para>
<para>
After you have entered the result you should click the <guibutton>Check
Task</guibutton> button below the input boxes. &kbruch; will check your input
and present the correct result. Therefore the screen changes a little, as
you can see in the screenshot:
</para>
<screenshot>
<screeninfo>Checked Task</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="checked.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Checked Task</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
This task was solved correctly. The correct value is shown in 2 different
forms. The second form just in front of the word <guilabel>CORRECT</guilabel>
is only used in some countries and must be read as 2 + 1/5 in the given case.
</para>
<note>
<para>
You always have to enter the result reduced, because most teachers only
give all points to reduced results. &kbruch; will show you a short message
like the one in the screenshot below, if you enter the correct result
unreduced.
</para>
</note>
<screenshot>
<screeninfo>Unreduced Result</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="reduced.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Unreduced Result</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
To continue with the next task, click on the <guimenu>Next Task</guimenu>
button. If you want to change the parameters for the next task please do this
before clicking on the <guimenu>Next Task</guimenu> button.
</para>
</sect2>
</sect1>
<sect1 id="exer_compare">
<title>Exercise Comparison</title>
<para>In this exercise you have to compare 2 given fractions. You have to choose
the bigger fraction of both by selecting the correct comparison sign.
</para>
<screenshot>
<screeninfo>Exercise Comparison</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="compare.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Exercise Comparison</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>First choose the correct comparison sign. To toggle the comparison sign,
you have to click on the button showing the comparison sign. After you have
chosen the comparison sign click on the <guimenu>Check Task</guimenu> button.
&kbruch; will check your input and present the correct result. After this step
you will get to the next task by clicking on the <guimenu>Next Task</guimenu>
button.
</para>
</sect1>
<sect1 id="exer_convert">
<title>Exercise Conversion</title>
<para>In this exercise you have to convert a given number into a fraction. You
have to enter numerator and denominator.
</para>
<screenshot>
<screeninfo>Exercise Conversion</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="convert.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Exercise Conversion</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>On the left side of the equal sign in the screenshot above you can see a
recurring decimal. This means, that the fraction shown as a decimal has a
repeating part. The repeating part is marked with the small bar above the
numbers. Those numbers repeat ad infinitum.
</para>
<para>After you have entered the numerator and denominator click on the
<guimenu>Check Task</guimenu> button. &kbruch; will check your input and
present the correct result. After this step you will get to the next task by
clicking on the <guimenu>Next Task</guimenu> button.
</para>
<note>
<para>
Do not forget to enter the result reduced. Unreduced results will be counted as
solved not correctly.
</para>
</note>
</sect1>
<sect1 id="exer_factorize">
<title>Exercise Factorization</title>
<para>In this exercise you have to factorize a given number into its prime
factors. You have to enter all prime factors of the number.
</para>
<screenshot>
<screeninfo>Exercise Factorization</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="factorize.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Exercise Factorization</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>You can enter a factor by clicking on the prime <guimenu>factor
buttons</guimenu>. The currently entered prime factors will be shown in the
field next to the number to be factorized. You can remove the last entered
prime factor by clicking on the <guimenu>Remove Last Factor</guimenu> button.
</para>
<para>
After you have entered all prime factors click on the
<guimenu>Check Task</guimenu> button. &kbruch; will check your input and
present the correct result. After this step you will get to the next task by
clicking on the <guimenu>Next Task</guimenu> button.
</para>
<para>In the screenshot at the top of this page you can see a <quote>*</quote>
between the prime factors. This is the multiplication sign. The product of all
prime factors must be the number you try to factorize.
</para>
<note>
<para>
You have to enter all prime factors even when a prime factor repeats several
times. Example: As prime factors of number 18 you have to enter 2, 3 and 3.
</para>
</note>
</sect1>
</chapter>
<chapter id="credits">
<title>Credits and License</title>
<para>&kbruch;</para>
<para>
Program and documentation Copyright, 2001-2004 Sebastian Stein
<email>seb.kde@hpfsc.de</email>
</para>
<para>Thank you goes to:</para>
<itemizedlist>
<listitem><para>&Anne-Marie.Mahfouf; for managing the &kde;-edu project</para></listitem>
<listitem><para>Klas Kalass for helping design the interface</para></listitem>
<listitem><para>Eva Brucherseifer for writing <application>KMath</application> (&kbruch;'s &GUI; is based on this work)</para></listitem>
<listitem><para>Dominique Devriese for bug fixing</para></listitem>
<listitem><para><ulink url="http://www.net-tex.de/">Stefan Schumacher</ulink> for testing a very early version</para></listitem>
<listitem><para><ulink url="http://www.guckes.net/">Sven Guckes</ulink> for testing the text interface (which has been removed)</para></listitem>
<listitem><para>&David.Faure; for helping with &kde; <acronym>CVS</acronym> and &kde; Bugzilla</para></listitem>
<listitem><para>&Robert.Gogolok; for helping with &kde; <acronym>CVS</acronym></para></listitem>
<listitem><para>John Kesson for proof reading the handbook</para></listitem>
</itemizedlist>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove -->
&underGPL; <!-- GPL License -->
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-kbruch">
<title>How to obtain &kbruch;</title>
&install.intro.documentation;
</sect1>
<sect1 id="requirements">
<title>Requirements</title>
<para>
In order to successfully use &kbruch;, you need &kde; > 3.1 .
</para>
<para>
&kbruch; itself can be found
on <ulink url="http://edu.kde.org/kbruch/">the &kbruch; home page</ulink>
and it is part of the &kde;-edu project</para>
<para>You can find a list of changes in the <acronym>CVS</acronym> commit
messages.</para>
</sect1>
<sect1 id="compilation">
<title>Compilation and Installation</title>
&install.compile.documentation;
</sect1>
</appendix>
&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
// vim:ts=2:sw=2:tw=78:noet
-->

@ -0,0 +1,56 @@
<?xml version="1.0" ?>
<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY % English "INCLUDE">
]>
<refentry lang="&language;">
<refentryinfo>
<title>KDE User's Manual</title>
<author>&Lauri.Watts;&Lauri.Watts.mail;</author>
<date>May 25, 2005</date>
<productname>K Desktop Environment</productname>
</refentryinfo>
<refmeta>
<refentrytitle><command>kbruch</command></refentrytitle>
<manvolnum>1</manvolnum>
</refmeta>
<refnamediv>
<refname><command>kbruch</command></refname>
<refpurpose>Learn calculating with fractions</refpurpose>
</refnamediv>
<refsynopsisdiv>
<cmdsynopsis>
<command>kbruch</command>
<arg choice="opt">KDE Generic Options</arg>
<arg choice="opt">Qt Generic Options</arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>&kbruch; is a small program to practice calculating with fractions.
Different exercises are provided for this purpose. The program checks user's
input and gives feedback.</para>
</refsect1>
<refsect1>
<title>See Also</title>
<para>More detailed user documentation is available from <ulink
url="help:/kbruch">help:/kbruch</ulink>
(either enter this <acronym>URL</acronym> into &konqueror;, or run
<userinput><command>khelpcenter</command>
<parameter>help:/kbruch</parameter></userinput>).</para>
<para>There is also further information available at <ulink
url="http://edu.kde.org/kbruch/">the kde-edu website</ulink></para>
</refsect1>
<refsect1>
<title>Authors</title>
<para>&kbruch; was written by
<personname><firstname>Sebastian</firstname><surname>Stein</surname></personname> <email>seb.kde@hpfsc.de</email></para>
</refsect1>
</refentry>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

@ -0,0 +1,4 @@
KDE_LANG = en
KDE_DOCS = AUTO
KDE_MANS = AUTO

@ -0,0 +1,334 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY kappname "&keduca;">
<!ENTITY package "kdeedu">
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE">
]>
<book lang="&language;">
<bookinfo>
<title>The &keduca; Handbook</title>
<authorgroup>
<author>
<firstname>Javier</firstname>
<othername>J.</othername>
<surname>Campos</surname>
<affiliation>
<address><email>&Javier.J.Campos.mail;</email></address>
</affiliation>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>
<copyright>
<year>1999</year>
<holder>&Javier.J.Campos;</holder>
</copyright>
<date>2002-10-08</date>
<releaseinfo>1.1</releaseinfo>
<abstract>
<para>&keduca; is flash card application, which allows you to make
interactive form based tests.</para>
</abstract>
<keywordset>
<keyword>KDE</keyword>
<keyword>kdeedu</keyword>
<keyword>KEduca</keyword>
<keyword>test</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Introduction</title>
<para>&keduca; is flash card application, which allows you to make
interactive form based tests.</para>
<screenshot>
<screeninfo>&keduca; screenshot</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="screenshot.png" format="PNG" />
</imageobject>
<textobject>
<phrase>&keduca; screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
</chapter>
<!--
<chapter id="create-modify-test">
<title>Creating a New Test</title>
</chapter>
<chapter id="configuration">
<title>Configuring &keduca;</title>
</chapter>
-->
<chapter id="command-reference">
<title>Command Reference</title>
<sect1 id="file-menu">
<title>The <guimenu>File</guimenu> Menu</title>
<sect2 id="main-window-file-menu">
<title>The <guilabel>Main Window</guilabel> <guimenu>File</guimenu>
Menu</title>
<para>The <guilabel>Main Window</guilabel> has the following
entries:</para>
<variablelist>
<varlistentry>
<term><menuchoice><!-- <shortcut>
<keycombo action="simul">&Ctrl;<keycap>O</keycap></keycombo>
</shortcut> -->
<guimenu>File</guimenu>
<guimenuitem>Open...</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Open an existing test file.</action></para>
</listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guisubmenu>Open Recent</guisubmenu>
</menuchoice></term>
<listitem>
<para><action>Open a recently used test file.</action></para>
</listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guimenuitem>Close</guimenuitem>
</menuchoice></term>
<listitem><para><action>
Close the currently open test file.
</action></para>
</listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guimenuitem>Quit</guimenuitem>
</menuchoice></term>
<listitem><para><action>Quit</action> &keduca;</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="edit-test-window-file-menu">
<title>The Editing Window <guimenu>File</guimenu> Menu</title>
<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guimenuitem>New</guimenuitem>
</menuchoice></term>
<listitem><para><action>Create a new test</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guimenuitem>Open...</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Open an existing test file.</action></para>
</listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guisubmenu>Open Recent</guisubmenu>
</menuchoice></term>
<listitem>
<para><action>Open a recently used test file.</action></para>
</listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guimenuitem>Save</guimenuitem>
</menuchoice></term>
<listitem><para><action>Save the currently open
test.</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guimenuitem>Save As...</guimenuitem>
</menuchoice></term>
<listitem><para><action>Save the currently open game with a new
name.</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guimenuitem>Close</guimenuitem>
</menuchoice></term>
<listitem><para><action>
Close the currently open test file.
</action></para>
</listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guimenuitem>Print...</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Print the currently open
test.</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>File</guimenu>
<guimenuitem>Quit</guimenuitem>
</menuchoice></term>
<listitem><para><action>Quit</action> &keduca;</para></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1 id="build-menu">
<title>The <guimenu>Build</guimenu> Menu</title>
<para>The <guimenu>Build</guimenu> menu exists only in the
<guilabel>Main Window</guilabel> of &keduca;.</para>
<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>Build</guimenu>
<guimenuitem>Create/Modify...</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Create or modify a test</action> in the Create or Modify a test
window.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="settings-menu">
<title>The <guimenu>Settings</guimenu> Menu</title>
<para>The first entries are available in both of the main &keduca;
windows.</para>
<variablelist>
<varlistentry>
<term><menuchoice><guimenu>Settings</guimenu>
<guimenuitem>Show Toolbar</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Toggle on and off the display of the toolbar.</action>
The default is on.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><menuchoice><guimenu>Settings</guimenu>
<guimenuitem>Configure Shortcuts...</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Personalize the keybindings</action> for &keduca;.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><menuchoice><guimenu>Settings</guimenu>
<guimenuitem>Configure Toolbars...</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Personalize the toolbars</action> for &keduca;.</para>
</listitem>
</varlistentry>
</variablelist>
<para>The following entry is only available in the <guilabel>Main
Window</guilabel>.</para>
<variablelist>
<varlistentry>
<term><menuchoice><guimenu>Settings</guimenu>
<guimenuitem>Configure &keduca;</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Customize</action> &keduca;. The options available to
you are described in the Configuration chapter.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="help-menu">
<title>The <guimenu>Help</guimenu> Menu</title>
&help.menu.documentation;
</sect1>
</chapter>
<chapter id="credits-and-licenses">
<title>Credits and Licenses</title>
<para>&keduca; is copyright 2001, Javier Campos.</para>
<para>Documentation partly by &Lauri.Watts; &Lauri.Watts.mail;</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL;
&underGPL;
</chapter>
<!--
<appendix id="installation">
<title>Installation</title>
&install.intro.documentation;
&install.compile.documentation;
</appendix>
-->
&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->

@ -0,0 +1,67 @@
<?xml version="1.0" ?>
<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY % English "INCLUDE">
]>
<refentry lang="&language;">
<refentryinfo>
<title>KDE User's Manual</title>
<author>&Lauri.Watts;&Lauri.Watts.mail;</author>
<date>March 16, 2005</date>
<productname>K Desktop Environment</productname>
</refentryinfo>
<refmeta>
<refentrytitle><command>keduca</command></refentrytitle>
<manvolnum>1</manvolnum>
</refmeta>
<refnamediv>
<refname><command>keduca</command></refname>
<refpurpose>Interactive form-based tests and exams.</refpurpose>
</refnamediv>
<refsynopsisdiv>
<cmdsynopsis>
<command>keduca</command>
<group><option>file</option></group>
<arg choice="opt">KDE Generic Options</arg>
<arg choice="opt">Qt Generic Options</arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>&keduca; is flash card application, which allows you to make
interactive form based tests.</para>
</refsect1>
<refsect1>
<title>Options</title>
<variablelist>
<varlistentry><term><option><replaceable>file</replaceable></option></term>
<listitem><para>File to load</para></listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>See Also</title>
<para>More detailed user documentation is available from <ulink
url="help:/keduca">help:/keduca</ulink>
(either enter this <acronym>URL</acronym> into &konqueror;, or run
<userinput><command>khelpcenter</command>
<parameter>help:/keduca</parameter></userinput>).</para>
<para>There is also further information available at the <ulink
url="http://edu.kde.org/keduca/">KDE Educatainment project website</ulink>.</para>
</refsect1>
<refsect1>
<title>Authors</title>
<para>&keduca; was written by <personname><firstname>Javier</firstname><surname>Campos</surname></personname></para>
</refsect1>
</refentry>

@ -0,0 +1,74 @@
<?xml version="1.0" ?>
<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY % English "INCLUDE">
]>
<refentry lang="&language;">
<refentryinfo>
<title>KDE User's Manual</title>
<author><personname>
<firstname>Ben</firstname>
<surname>Burton</surname>
</personname>
<email>bab@debian.org</email></author>
<date>2005-05-27</date>
<productname>K Desktop Environment</productname>
</refentryinfo>
<refmeta>
<refentrytitle><command>keducabuilder</command></refentrytitle>
<manvolnum>1</manvolnum>
</refmeta>
<refnamediv>
<refname><command>keducabuilder</command></refname>
<refpurpose>test/exam editor for keduca</refpurpose>
</refnamediv>
<refsynopsisdiv>
<cmdsynopsis>
<command>keducabuilder</command>
<group><option>file</option></group>
<arg choice="opt">KDE Generic Options</arg>
<arg choice="opt">Qt Generic Options</arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para><application>KEducaBuilder</application> is the test editor for
&keduca;, a flash-card application for working with interactive form-based
tests. KEducaBuilder is used to create and edit these tests, whereas
&keduca; itself can be used to view and take these tests. </para>
<para>This application is part of the &kde; edutainment module. </para>
</refsect1>
<refsect1>
<title>Options</title>
<variablelist>
<varlistentry>
<term><option><replaceable>file</replaceable></option></term>
<listitem><para>Filename to load in the editor</para></listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>See Also</title>
<para>keduca(1)</para>
<para>More detailed user documentation is available from <ulink
url="help:/keduca">help:/&keduca;</ulink>
(either enter this <acronym>URL</acronym> into &konqueror;, or run
<userinput><command>khelpcenter</command>
<parameter>help:/keduca</parameter></userinput>).</para>
<para>There is also further information available at the <ulink url="http://edu.kde.org/keduca/">&kde; Edutainment website:</ulink></para>
</refsect1>
<refsect1>
<title>Authors</title>
<para>&keduca; was written by <personname><firstname>Javier</firstname><surname>Campos</surname></personname></para><para>This man page based on the one written for Debian by <personname><firstname>Ben</firstname><surname>Burton</surname></personname> <email>bab@debian.org</email>.</para>
</refsect1>
</refentry>

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

@ -0,0 +1,4 @@
KDE_LANG = en
KDE_DOCS = AUTO

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,655 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY kgeography "<application>KGeography</application>">
<!ENTITY kappname "&kgeography;">
<!ENTITY package "playground/edu">
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE">
]>
<book lang="&language;">
<bookinfo>
<title>The &kgeography; Handbook</title>
<authorgroup>
<author>
<personname>
<firstname>Anne-Marie</firstname>
<surname>Mahfouf</surname>
</personname>
<email>&Anne-Marie.Mahfouf.mail;</email>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>
<copyright>
<year>2005</year>
<holder>&Anne-Marie.Mahfouf;</holder>
</copyright>
<legalnotice>&FDLNotice;</legalnotice>
<date>2005-08-02</date>
<releaseinfo>0.4</releaseinfo>
<!-- Abstract about this handbook -->
<abstract>
<para>
&kgeography; is a geography learning tool for &kde;. Right now it has six usage modes:
<itemizedlist>
<listitem>
<para>Browse the maps clicking in a map division to see its name, capital and flag</para>
</listitem>
<listitem>
<para>The game tells you a map division name and you have to click on it</para>
</listitem>
<listitem>
<para>The game tells you a capital and you have to guess the division it belongs to</para>
</listitem><listitem>
<para>The game tells you a division and you have to guess its capital</para>
</listitem><listitem>
<para>The game shows you a map division flag and you have to guess its name</para>
</listitem><listitem>
<para>The game tells you a map division name and you have to guess its flag</para>
</listitem>
</itemizedlist>
</para>
</abstract>
<keywordset>
<keyword>KDE</keyword>
<keyword>kdeedu</keyword>
<keyword>KGeography</keyword>
<keyword>geography</keyword>
<keyword>maps</keyword>
<keyword>countries</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Introduction</title>
<!-- The introduction chapter contains a brief introduction for the
application that explains what it does and where to report
problems. Basically a long version of the abstract. Don't include a
revision history. (see installation appendix comment) -->
<para>
&kgeography; is a geography learning tool for &kde;. It allows you to learn about the political divisions of some countries (divisions, capitals of those divisions and their associated flags if there are some).
</para>
<para>
Maps available in current release are: Africa, Asia, Austria, Brazil, Canada, China, Europe, France, Germany, Italy, Italy by provinces, North and Central America, Norway, Poland, South America, Spain, USA and the world.
</para>
</chapter>
<chapter id="quick-start">
<title>Quick Start to &kgeography;</title>
<para>
When you run &kgeography; for the first time, it first asks you to choose a map to start with.
<screenshot>
<screeninfo>Here's a screenshot of &kgeography; at first start</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start1.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Here's a screenshot of &kgeography; at first start</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
Here we choose Canada
<screenshot>
<screeninfo>Canada is choosen</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start2.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Canada is choosen</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
And &kgeography; main window appears with the map of Canada:
<screenshot>
<screeninfo>&kgeography; main window</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start3.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kgeography; main window</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
You can then choose what type of learning or testing you want to do by looking at the menu on the left:
<screenshot>
<screeninfo>&kgeography; menu</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start4.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&kgeography; menu</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
Browse the map: a &LMB; click on an area of the map will display informations about that area:
<screenshot>
<screeninfo>Browse the map</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start5.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Browse the map</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
Click division in the map: you are first asked how many questions you want
<screenshot>
<screeninfo>How many questions</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start6.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>How many questions</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
Then you are asked to click on a specific province:
<screenshot>
<screeninfo>Click on a province</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start7.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Click on a province</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
When you finish all the questions, a result dialog is shown with your correct and uncorrect answers:
<screenshot>
<screeninfo>Your results</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start8.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Your results</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
Guess a division from its capital: you are asked to find the name of a province among a choice of 4 given its capital:
<screenshot>
<screeninfo>Guess a division from its capital</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start9.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Guess a division from its capital</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
And the results are displayed when the test is finished:
<screenshot>
<screeninfo>Your results</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start10.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Your results</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
Guess the capital from a division: you have a capital and four province names and you must choose the correct one. As before, at the end a result dialog is shown.
</para>
<para>
Guess division from its flag: a flag is shown and you must find the province it belongs to.
<screenshot>
<screeninfo>the flag question</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start11.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>the flag question</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
Guess the flag of a division: a province name is given and you must find the correct flag among four.
<screenshot>
<screeninfo>match the flag with the province</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="first-start12.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>match the flag with the province</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
</chapter>
<chapter id="using-kapp">
<title>Using &kgeography;</title>
<para>
&kgeography; displays informations about some countries and tests you about those informations.
<screenshot>
<screeninfo>Here's a screenshot of &kgeography;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="kgeography.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<sect1 id="kapp-features">
<title>More &kgeography; features</title>
<para>Another feature of &kgeography; is the possibility of zoom on a map.
<screenshot>
<screeninfo>Zoom</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="zoom.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Zoom</phrase>
</textobject>
</mediaobject>
</screenshot>
While in zoom mode, you can press &RMB; to go back to the original map size (the <guimenuitem>Original Size</guimenuitem> action has the same effect). Use the scroll bars to move around the zoomed map or use the <guimenuitem>Move</guimenuitem> action that will allow you to drag the map using &LMB;.
</para>
</sect1>
</chapter>
<!--<chapter id="teachers-parents">
<title>Teachers/Parents guide to &kgeography; </title>
This chapter should emphasize the educational aims of your app and
guide the parent/teacher on how to help the child using it.
</chapter>-->
<chapter id="how-to-maps">
<title>How to make maps</title>
<para>A map in &kgeography; is made by two files, one is the image of the map and the other one is its description. </para>
<sect1 id="helper-tool">
<title>Helper tool</title>
<para>
You can find <ulink url="http://kgeography.berlios.de/gen_map.pl">here</ulink> a tool (made by Yann Verley) which helped him with the map of France. To find out its usage, simply execute it and read the help message. It basically creates the <literal role="extension">.kgm</literal> file from a plain text file and creates a file with the colors it has assigned to each division, so you can fill the map according to them.</para>
</sect1>
<sect1 id="description-file">
<title>Description file</title>
<para>
The description file is needed and its file extension is <literal role="extension">.kgm</literal>. It should begin with <sgmltag class="starttag">map</sgmltag> and end with <sgmltag class="endtag">map</sgmltag>.
</para>
<para>
Inside of those tags there should be:
<itemizedlist>
<listitem>
<para><sgmltag class="starttag">mapFile</sgmltag> and <sgmltag class="endtag">mapFile</sgmltag>: the name of the file (without any path) containing the map image, &eg; <quote>europe.png</quote>.</para>
</listitem>
<listitem>
<para><sgmltag class="starttag">name</sgmltag> and <sgmltag class="endtag">name</sgmltag>: the name of map, &eg; <quote>Europe</quote>.</para>
</listitem>
<listitem>
<para>A <sgmltag class="starttag">division</sgmltag> and <sgmltag class="endtag">division</sgmltag> for each division in the map.</para>
</listitem>
</itemizedlist>
</para>
<para>
Each division has these tags:
<itemizedlist>
<listitem>
<para><sgmltag class="starttag">name</sgmltag> and <sgmltag class="endtag">name</sgmltag>: the name of the division, &eg; <quote>Albania</quote>.</para>
</listitem>
<listitem>
<para><sgmltag class="starttag">capital</sgmltag> and <sgmltag class="endtag">capital</sgmltag>: the name of the capital of the division, &eg; <quote>Tirana</quote>.</para>
</listitem>
<listitem>
<para><sgmltag class="starttag">ignore</sgmltag> and <sgmltag class="endtag">ignore</sgmltag>: can be set to <userinput>yes</userinput>, <userinput>allowClickMode</userinput> and <userinput>no</userinput>. If this tag is set to <userinput>yes</userinput> then the division will be ignored when asking for divisions in that map. It is then as if this division does not exist in &kgeography; quiz modes. If this tag is set to <userinput>allowClickMode</userinput> then &kgeography; will ask for the division in the <guibutton>Click Division in Map...</guibutton> mode but not in other quiz modes. Setting this tag to <userinput>no</userinput> means the division will appear in all modes (browse and quizzes). This tag is optional and when there is no <sgmltag class="starttag">ignore</sgmltag> tag that means as it is set to <userinput>no</userinput>. For example <quote>Algeria</quote> has this tag set to <userinput>yes</userinput> in the <quote>Europe</quote> map which means that <quote>Algeria</quote> will not be part of any quiz in the <quote>Europe</quote> map.</para>
</listitem>
<listitem>
<para><sgmltag class="starttag">flag</sgmltag> and <sgmltag class="endtag">flag</sgmltag>: the file (without any path) containing the flag of the division, &eg; <quote>albania.png</quote>. This tag is optional. Not needed for the divisions whose <sgmltag class="starttag">ignore</sgmltag> tag is set to <userinput>yes</userinput>.</para>
</listitem>
<listitem>
<para><sgmltag class="starttag">color</sgmltag> and <sgmltag class="endtag">color</sgmltag>: the color the division has in the map.</para>
</listitem>
</itemizedlist>
</para>
<para>
The color is defined using three tags:
<itemizedlist>
<listitem>
<para><sgmltag class="starttag">red</sgmltag> and <sgmltag class="endtag">red</sgmltag>: red component of the color. Valid values are between 0 and 255.</para>
</listitem>
<listitem>
<para><sgmltag class="starttag">green</sgmltag> and <sgmltag class="endtag">green</sgmltag>: green component of the color. Valid values are between 0 and 255.</para>
</listitem>
<listitem>
<para><sgmltag class="starttag">blue</sgmltag> and <sgmltag class="endtag">blue</sgmltag>: blue component of the color. Valid values are between 0 and 255.</para>
</listitem>
</itemizedlist>
</para>
<tip>
<para>
It is convenient to create 2 or 3 false divisions like <quote>Water</quote>, <quote>Frontier</quote> and <quote>Coast</quote> and set them with the <sgmltag class="starttag">ignore</sgmltag> tag set to <userinput>yes</userinput>.
</para>
</tip>
<important>
<para>All names (capitals and divisions) must be in English.</para>
</important>
</sect1>
<sect1 id="map-file">
<title>Map file</title>
<para>
The map file is quite simple but laborious to create. It has to be in <acronym>PNG</acronym> format.
You can find some maps to transform at <ulink url="https://www.cia.gov/cia/publications/factbook/docs/refmaps.html">Cia Reference Maps</ulink>. If no map fits your needs you can download the <ulink url="https://www.cia.gov/cia/publications/factbook/reference_maps/pdf/political_world.pdf">political world map</ulink>, take a screenshot of it and work from it.
Each division in the map should have one and only one color. To achieve this you can use image processing programs like <application>The Gimp</application> and <application>Kolourpaint</application>.
</para>
</sect1>
<sect1 id="flags">
<title>Flags</title>
<para>
If you have used the <sgmltag class="starttag">flag</sgmltag> tag you should provide the flag files. They have to be in <acronym>PNG</acronym> format and better if they are 300x200 pixels and you provide a <acronym>SVG</acronym> file for it. To obtain <acronym>SVG</acronym> flags of almost all countries in the world and some other divisions, you can consult the <ulink url="http://www.sodipodi.com/index.php3?section=clipart/flags">Sodipodi flags collection</ulink>.
</para>
</sect1>
<sect1 id="how-to-test">
<title>How to test</title>
<para>
Before sending your map to Albert <email>tsdgeos@terra.es</email>, you should test it to see it has no errors. To achieve that, you have to do the following:
<itemizedlist>
<listitem>
<para>Put the map description and map image file in <filename class="directory">$<envar>KDEDIR</envar>/share/apps/kgeography/</filename></para>
</listitem>
<listitem>
<para>Put the flag <acronym>PNG</acronym> files (if any) in <filename class="directory">$<envar>KDEDIR</envar>/share/apps/kgeography/flags/</filename></para>
</listitem>
</itemizedlist>
Once that has been done you should be able of opening your map from inside &kgeography;.
</para>
<para>
If you don't know which is your <filename class="directory">$<envar>KDEDIR</envar></filename>, type <userinput><command>kde-config</command> <option>--prefix</option></userinput> in a shell.
</para>
</sect1>
<sect1 id="non-political-maps">
<title>Non political maps</title>
<para> Is it possible to do non-political maps? Yes, it is!
<screenshot>
<screeninfo>Example of how to create a non political map</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="river.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Example of how to create a non political map</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<para>
Of course, the division concept can be extended to a river or a mountain. During the creation of the map, you should keep in mind that most times the river or mountain will be too small that you should provide an additional clicking area.
In this example the river would have the maroon area and color &lt;20,76,34&gt; as its identifier.
</para>
</sect1>
</chapter>
<chapter id="commands">
<title>Command Reference</title>
<!-- (OPTIONAL, BUT RECOMMENDED) This chapter should list all of the
application windows and their menubar and toolbar commands for easy reference.
Also include any keys that have a special function but have no equivalent in the
menus or toolbars. This may not be necessary for small apps or apps with no tool
or menu bars. -->
<sect1 id="kapp-mainwindow">
<title>The main &kgeography; window</title>
<sect2>
<title>The <guimenu>File</guimenu> Menu</title>
<para>
<variablelist>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>O</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>Open Map...</guimenuitem>
</menuchoice></term>
<listitem><para><action>Open the choose map dialog</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>Quit</guimenuitem>
</menuchoice></term>
<listitem><para><action>Quits</action> &kgeography;</para></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2>
<title>The <guimenu>View</guimenu> Menu</title>
<para>
<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>View</guimenu>
<guimenuitem>Zoom</guimenuitem>
</menuchoice></term>
<listitem><para><action>Goes in zoom mode</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>View</guimenu>
<guimenuitem>Original Size</guimenuitem>
</menuchoice></term>
<listitem><para><action>Sets</action> the map back to its original size</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>View</guimenu>
<guimenuitem>Move</guimenuitem>
</menuchoice></term>
<listitem><para><action>Moves</action> the current map</para></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2>
<title>The <guimenu>Settings</guimenu> Menu</title>
<para>
<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>Settings</guimenu>
<guimenuitem>Show/Hide Toolbar</guimenuitem>
</menuchoice></term>
<listitem><para><action>Show/Hide the &kgeography; toolbar.</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Settings</guimenu>
<guimenuitem>Configure Shortcuts...</guimenuitem>
</menuchoice></term>
<listitem><para><action>Configure key shortcuts for &kgeography;.</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Settings</guimenu>
<guimenuitem>Configure Toolbars...</guimenuitem>
</menuchoice></term>
<listitem><para><action>Configure the &kgeography; toolbar.</action></para></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2>
<title>The <guimenu>Help</guimenu> Menu</title>
<!-- Assuming you have a standard help menu (help, what's this, about -->
<!-- &kgeography;, about KDE) then the documentation is already written. -->
<!-- The following entity is valid anywhere that a variablelist is -->
<!-- valid. -->
&help.menu.documentation;
</sect2>
</sect1>
</chapter>
<!--<chapter id="faq">
<title>Questions and Answers</title>
&reporting.bugs;
&updating.documentation;
<qandaset id="faqlist">
<qandaentry>
<question>
<para>My Mouse doesn't work. How do I quit &kgeography;?</para>
</question>
<answer>
<para>You silly goose! Check out the <link linkend="commands">Commands
Section</link> for the answer.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Why am I not able to twiddle my documents?</para>
</question>
<answer>
<para>You can only twiddle your documents if you have the foobar.lib
installed.</para>
</answer>
</qandaentry>
</qandaset>
</chapter>-->
<chapter id="credits">
<!-- Include credits for the programmers, documentation writers, and
contributors here. The license for your software should then be included below
the credits with a reference to the appropriate license file included in the KDE
distribution. -->
<title>Credits and License</title>
<para>
&kgeography;
</para>
<para>
Program copyright 2004-2005 Albert Astals Cid <email>tsdgeos@terra.es</email>
</para>
<para>
Documentation Copyright &copy; 2005 &Anne-Marie.Mahfouf; <email>&Anne-Marie.Mahfouf.mail;</email>
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL;
&underGPL;
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-kapp">
<title>How to obtain &kgeography;</title>
<!-- This first entity contains boiler plate for applications that are
part of KDE CVS. You should remove it if you are releasing your
application -->
&install.intro.documentation;
</sect1>
<sect1 id="compilation">
<title>Compilation and Installation</title>
<!-- This entity contains the boilerplate text for standard -->
<!-- compilation instructions. If your application requires any -->
<!-- special handling, remove it, and replace with your own text. -->
&install.compile.documentation;
</sect1>
</appendix>
&documentation.index;
</book>
<!--
Local Variables:
mode: xml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
vim:tabstop=2:shiftwidth=2:expandtab
-->

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

@ -0,0 +1,4 @@
KDE_LANG = en
KDE_DOCS = AUTO
KDE_MANS = AUTO

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@ -0,0 +1,929 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN"
"dtd/kdex.dtd" [
<!ENTITY kappname "&khangman;">
<!ENTITY package "kdeedu">
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"><!-- change language only here -->
]>
<book lang="&language;">
<bookinfo>
<title>The &khangman; Handbook</title>
<authorgroup>
<author>
<firstname>Anne-Marie</firstname>
<surname>Mahfouf</surname>
<affiliation>
<address>&Anne-Marie.Mahfouf.mail;</address>
</affiliation>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>
<copyright>
<year>2001</year><year>2005</year>
<holder>&Anne-Marie.Mahfouf;</holder>
</copyright>
<legalnotice>&FDLNotice;</legalnotice>
<date>2006-02-01</date>
<releaseinfo>1.6</releaseinfo>
<abstract>
<para>
&khangman; is the classic hangman game for children, adapted for &kde;.
</para>
</abstract>
<keywordset>
<keyword>KDE</keyword>
<keyword>kdeedu</keyword>
<keyword>KHangMan</keyword>
<keyword>hangman</keyword>
<keyword>game</keyword>
<keyword>child</keyword>
<keyword>words</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Introduction</title>
<para>
&khangman; is a game based on the well-known hangman game. It is aimed at
children aged six and over. The game has four levels of difficulty: Animals (animals
words), Easy, Medium and Hard. A word is picked at random, the letters are
hidden, and you must guess the word by trying one letter after another. Each
time you guess a wrong letter, part of a picture of a hangman is drawn. You
must guess the word before being hanged! You have 10 tries.
</para>
</chapter>
<chapter id="using-khangman">
<title>Using &khangman;</title>
<screenshot>
<screeninfo>Here's a screenshot of &khangman; when you start it for the first time</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="khangman1.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&khangman; screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
Here you can see &khangman; as it is the first time you run it. Level is Animals,
language is default (English here, the default is your current &kde; language if
the data exists), the theme is "Sea". Any changes in level, language or theme
(background) are written in the configuration file and restored in your next
game.
</para>
<para>
Please note how easy it is to change the level and the theme, just
click on the combo boxes on the toolbar. Getting a new word and quitting the
game are also easily done by clicking on the corresponding buttons on the
toolbar.
</para>
<sect1 id="general-usage">
<title>General usage</title>
<!-- FIXME: A word cannot really be displayed and hidden at the same time, -->
<!-- although I cannot think of a better way to phrase this -->
<para>A word is chosen and its letters are displayed as an underscore (_) symbol. You know how many letters there are in the
word. You have to guess the word by trying one letter after another. You enter the letter in the text box and you either press the Enter key or click on the Guess button to see if the letter belongs or not to the word. </para>
<para>The word is picked at random and it is not the same as the previous word.
</para>
<important><para>All the words are nouns (there are no verbs or adjectives, &etc;).</para></important>
<para>
Usually, it is not important whether you type in lowercase or uppercase. The program
converts all input into lowercase (except for German words beginning with an uppercase letter). The program does that automatically.
</para>
<para>
The current level and current language are displayed in the statusbar.
</para>
<para>
Each time you guess a letter that is not in the word, another part of the
hangman is drawn. You have 10 tries to guess the word. After that, the correct
answer is displayed.
</para>
<para>
There are 4 levels: easy, medium, hard and animals, plus levels for other
topics in some languages. The program scans for all data files in all
languages.
</para>
<para>
In the easy level, the words are quite simple and related to everyday life. It
is suitable for children from 6 to 9. The animals level contains only names of
animals so they are easier to find. Some of them are easy, others are more
difficult. In the medium level, the words are longer and more difficult. It is
suitable for ages 9+. The hard level is just that, hard, &ie; the words are
difficult to spell and not very well known. This level is challenging, even for
adults.
</para>
<para>After a word is guessed (or the hangman is completed), you are
prompted for another word and you can either use the
<keycap>Y</keycap> or <keycap>N</keycap> keys or the mouse to answer
yes or no. If you say <guilabel>No</guilabel>, the game quits. If you
say <guilabel>Yes</guilabel>, another word is ready to be guessed.
</para>
<para>You type the letter you want to try in the text box (the mouse cursor is
ready in the text box) and you hit the &Enter; key. If the letter belongs to the
word, it takes its place, as many times as it appears in the word. If the
letter does not belong to the word, it goes in the Misses field and a further
part of the hangman is drawn on the right. You have ten tries and after that
you lose and the correct word is displayed.
</para>
<para>During the game, you can choose to start a new game by going in the
<guimenu>Game</guimenu> menu and choosing <guimenuitem>New</guimenuitem> or
clicking on the <guiicon>New</guiicon> icon on the toolbar. You can also change
the level with the level button on the toolbar (this will bring you a new word
for the new level).</para>
<para>
Future improvement (in &kde; 4) will allow you to create your own words file.
</para>
</sect1>
<sect1 id="languages">
<title>Playing in different languages</title>
<para>
You can play &khangman; in twenty-four languages: Brazilian Portuguese, Bulgarian, Catalan, Czech, Danish, Dutch, English,
Finnish, French, German, Hungarian, Irish (Gaelic), Italian, Norwegian (Bokm&#229;l), Norwegian (Nynorsk), Portuguese, Spanish, Serbian (Latin and Cyrillic), Slovenian, Tajik, Swedish, Russian and Turkish.
</para>
<para>
By default, after the first installation of &khangman;, only English and your &kde; language if it is one of the above and if you have the corresponding kde-i18n package will be installed. For example if you are a Danish user and if you have &kde; in Danish, in <guimenu>Languages</guimenu> you will see two items: English and Danish and Danish will be the default.
</para>
<para>
You can still play &khangman; in other languages. It is very easy to add new data in &khangman;. All you need is a working Internet connection.
You click on the <guimenu>File</guimenu> menu and then on <guimenu>Get Words in New Language...</guimenu>. A dialog appears, similar to this one:
</para>
<screenshot>
<screeninfo>The Get New Words dialog for &khangman;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="getnewstuff.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>The Get New Words dialog for &khangman;</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
Click on the language name you want to install and then on the <guibutton>Install</guibutton> button. If the language is successfully installed, a green tick is displayed in front of the language name. You click on the <guibutton>Close</guibutton> button to close the Get New Words dialog (if you want another language, you get repeat these steps).
</para>
<para>
You can then easily change the language by going in the <guimenu>Languages</guimenu> and choose the new language.
</para>
<para>
Please note that you can now type the special characters in a language by displaying the <interface>Special Characters Toolbar</interface>.
This toolbar holds buttons with an icon of each special character per language like &eacute; in French for example. Clicking on such a
button will write the corresponding letter in the input line and you validate your choice with Enter. You can of course also use the keyboard layout corresponding to the language. This toolbar can be shown or hidden. The setting is restored next time you play &khangman;.
</para>
<important><para>
Please note that you need Arial and URW Bookman fonts in order to display the special characters correctly in some languages. Provided you have those fonts installed, &khangman; will automatically use them. If you see small squares instead of letters, then you may not have one of these fonts installed. Type <command>fonts:/</command> into the &konqueror; address bar to check which fonts you have installed.
</para></important>
</sect1>
<sect1 id="few-tips">
<title>A few tips</title>
<para>
Try to guess the vowels first. Then have a go with the most common consonants:
l, t, r, n, s
</para>
<para>corresponding:
when you see <quote>io</quote>, try n after that, in French and English.
</para>
<para>
In Brazilian Portuguese, Catalan, Spanish and Portuguese, the accented
vowels can be discovered when you type the non accented corresponding
vowel. For example, all the accented <quote>a</quote> are displayed in
the word when you type <quote>a</quote>. This is when <guilabel>Type accented
letters</guilabel> on the <guilabel>Languages</guilabel> page of &khangman;'s
configuration dialog is not checked. When <guilabel>Type accented
letters</guilabel> is checked, then you have to type
the accented letters yourself. When you type <quote>a</quote>, only
<quote>a</quote> is displayed and you have to type for example
&atilde; for this letter to be displayed.
</para>
<para>
Did you know? In English, the most common letter is e (12.7%), followed by t
(9.1%) then a (8.2%), i (7.0%) and n (6.7%).
</para>
</sect1>
</chapter>
<chapter id="menus">
<title>Menubar and toolbars</title>
<sect1 id="mainwindow">
<title>The Main &khangman; Window</title>
<para>The <guimenu>Game</guimenu> menu has 3 items:
<guimenuitem>New</guimenuitem>, <guimenuitem>Get Words in New Language...</guimenuitem> and
<guimenuitem>Quit</guimenuitem>.</para>
<para><guimenuitem>New</guimenuitem> brings you a new game, &ie; a new
word to guess, in the same level you already
are. <guimenuitem>Get Words in New Language...</guimenuitem> will display the Get New Stuff dialog to allow you to download data in a new language. <guimenuitem>Quit</guimenuitem> quits the game by closing the
main window and writing the actual settings in the configuration
file.</para>
<para>
The <guimenu>Level</guimenu> menu allows you to choose the level, &ie; the difficulty of the word to guess.
</para>
<para>
The <guimenu>Languages</guimenu> menu allows you to change the language the words are displayed in.
</para>
<para>
The <guimenu>Look</guimenu> menu proposes two themes: the <guimenuitem>Sea Theme</guimenuitem> and the <guimenuitem>Desert Theme</guimenuitem>. The background and the font colors changes for each theme.
</para>
<para>
The <guimenuitem>Settings</guimenuitem> menu allows you to configure
&khangman; easily. First, <guimenuitem>Toolbars</guimenuitem> and
<guimenuitem>Show Statusbar</guimenuitem> give you the possibility to
hide/show the toolbars and statusbar.
</para>
<para>There are two toolbars: the main one which is the one on top
with the buttons and combo boxes and the
<guilabel>Special Characters</guilabel> toolbar which, when it is shown, is
on the bottom. This toolbar has buttons with the special characters
for each language: accented letters and other special characters. This
allows users to easily play in another language without having to configure
a new keyboard layout. You click on a special letter and it is
displayed as the letter to try. Pressing &Enter; will make the program
see if the letter is present in the word or not. The toolbar can be
hidden if you don't want it. This is saved in the configuration file
so if the toolbar is hidden, it will be hidden next time you run
&khangman;.
</para>
<tip>
<para>
It is of course possible to move the toolbars around. Put the mouse
cursor on the small handle on the left of the toolbar, press the &LMB;
and drag the toolbar to position it on the screen where you want
it. If you point the mouse on one of the toolbars and press the right
mouse button, a context menu appears to let you choose different
options for the toolbar.
</para>
</tip>
<para>
<guimenuitem>Configure Shortcuts...</guimenuitem> is a standard &kde; setting dialog that allows you to
choose different shortcut keys for different actions. For example,
<keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo> is the
standard shortcut for <guimenuitem>Quit</guimenuitem>.</para>
<para><guimenuitem>Configure Toolbars...</guimenuitem> is also a
standard &kde; menu item that allows you to add or suppress items from
the toolbar.</para>
<screenshot>
<screeninfo>&khangman; Desert theme</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="khangman2.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&khangman; Desert theme</phrase>
</textobject>
</mediaobject>
</screenshot>
<para> Here you have &khangman; with the Desert theme, Catalan language and level Easy. The
<interface>Characters</interface> toolbar is shown here.</para>
<para>The level is chosen with a combo box in the toolbar or via the <guimenu>Level</guimenu> menu in the menubar. The available levels are <guimenuitem>Easy</guimenuitem>, <guimenuitem>Medium</guimenuitem>, <guimenuitem>Animals</guimenuitem> and <guimenuitem>Hard</guimenuitem>. Easy is related to common objects a child aged six
or seven knows. Medium regards nouns a bit more challenging, hard is
quite difficult and animals is only animals nouns. </para>
<para> All words are nouns. No verbs, no adjectives. The chosen level
is then displayed on the statusbar.</para>
<para>Only letters are allowed to be typed in the text box.</para>
</sect1>
<sect1 id="settings">
<title>Available Settings</title>
<para>
A toolbar is provided for quick access to some settings. You can click on a button to have a new game (i.e. a new word), or to quit the game. The level and the theme are easily changed via 2 combo boxes on the toolbar.
</para>
<para>
In <guimenu>Settings</guimenu>, <guimenu>Configure &khangman;...</guimenu> you will find tree pages. The first one is for <guilabel>General</guilabel> settings.
</para>
<sect2 id="general-settings">
<title>General Settings</title>
<screenshot>
<screeninfo>&khangman; General settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="settings1.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&khangman; General settings</phrase>
</textobject>
</mediaobject>
</screenshot>
<para><guilabel>Require more guesses for duplicate letters</guilabel>: this is unchecked as default. When unchecked, if you try the letter "a" and the word has several as, they will be all displayed. For example if the word is "potato" and you try "o", both os will be diaplayed. If you check this option however, only the first "o" will be displayed and you will have to try it one more time to display the second "o" in "potato". This increases the difficulty.
</para>
<para><guilabel>Do not display the 'Congratulations! You won!' dialog</guilabel>: the default is unchecked, that means that when you win a game, a message box will be displayed to tell you that you won and ask you if you want to play again. If you check this option, this dialog is not displayed anymore, instead a new game starts directly after 3 seconds.
</para>
<para>
In the Sounds section, if you check <guilabel>Enable sounds</guilabel> then a sound will be played on new game and another sound will be played when you win a game.
</para>
</sect2>
<sect2 id="languages-settings">
<title>Languages Settings</title>
<para>The <guilabel>Languages</guilabel> Settings tab allows you to set some settings specific to some languages. If the settings are not available for the language you are playing in then those settings will be grayed and disabled so you cannot choose them.
</para>
<screenshot>
<screeninfo>&khangman; Languages Settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="settings2.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&khangman; Languages Settings</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
Some languages also have hints to help you guess the word. The hint is shown by a right-click and gives a short definition of the word to guess. If this setting is enabled and if you check the option <guilabel>Show hints</guilabel>, you can &RMB; click anywhere on the game and get a hint shown for four seconds. This hint should help you to guess the word more easily.
</para>
<para><guilabel>Type accented letters</guilabel> is available for Brazilian Portuguese, Catalan, Portuguese and Spanish in &khangman;'s configuration dialog. If you check <guilabel>Type accented letters</guilabel> then you will have to type all accented vowels (like &atilde;). If this remains unchecked, when you type any vowel, all accented vowels will be displayed as well.
</para>
</sect2>
<sect2 id="timers-settings">
<title>Timers Settings</title>
<para>The <guilabel>Timers</guilabel> Settings tab allows you to <guilabel>Set the time for displaying the hint</guilabel> and to <guilabel>Set the time for Already Guessed Letter</guilabel> tooltip.
</para>
<screenshot>
<screeninfo>&khangman; Timers Settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="settings3.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>&khangman; Timers Settings</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
<guilabel>Set the time for displaying the hint:</guilabel> allows you to set a greater time for showing the hint label. It is necessary to increase the time for younger children for example as they read more slowly than adults.
</para>
<para><guilabel>Set the time for displaying the Already Guessed Letter</guilabel> allows you to increase or decrease the time for displaying the Already Guessed Letter tooltip. This tooltip is a label which appears when you tried a letter that was already tried. Some people will want not to see it for long while children will need time to understand it and thus will need to set the display for a longer duration.
</para>
</sect2>
</sect1>
</chapter>
<chapter id="commands">
<title>Command Reference</title>
<sect1 id="khangman-mainwindow">
<title>Menus and Shortcut Keys</title>
<sect2>
<title>The <guimenu>Game</guimenu> Menu</title>
<variablelist>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
</shortcut>
<guimenu>Game</guimenu>
<guimenuitem>New</guimenuitem>
</menuchoice></term>
<listitem><para><action>New</action> game (&ie; new word)</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>G</keycap></keycombo>
</shortcut>
<guimenu>Game</guimenu>
<guimenuitem>Get Words in New Language...</guimenuitem>
</menuchoice></term>
<listitem><para><action>Display</action> the KNewStuff dialog which lists all the data available in the different languages. </para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
</shortcut>
<guimenu>Game</guimenu>
<guimenuitem>Quit</guimenuitem>
</menuchoice></term>
<listitem><para><action>Quits</action> &khangman;</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>The <guimenu>Level</guimenu> Menu</title>
<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>Level</guimenu>
<guimenuitem>Animals</guimenuitem>
</menuchoice></term>
<listitem><para><action>Choose</action> the list of animals words to guess</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Level</guimenu>
<guimenuitem>Easy</guimenuitem>
</menuchoice></term>
<listitem><para><action>Choose</action> the list of easy words to guess</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Level</guimenu>
<guimenuitem>Medium</guimenuitem>
</menuchoice></term>
<listitem><para><action>Choose</action> the list of medium difficulty words to guess</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Level</guimenu>
<guimenuitem>Hard</guimenuitem>
</menuchoice></term>
<listitem><para><action>Choose</action> the list of difficult words to guess</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>The <guimenu>Language</guimenu> Menu</title>
<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>Language</guimenu>
<guimenuitem>English</guimenuitem>
</menuchoice></term>
<listitem><para><action>Choose</action> the English language for the words to guess.</para>
<para>All other installed languages are displayed as items in this menu as well.</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>The <guimenu>Look</guimenu> Menu</title>
<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>Look</guimenu>
<guimenuitem>Sea Theme</guimenuitem>
</menuchoice></term>
<listitem><para><action>Choose</action> the Sea background picture and associated font colors</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Look</guimenu>
<guimenuitem>Desert Theme</guimenuitem>
</menuchoice></term>
<listitem><para><action>Choose</action> the Desert background picture and associated font colors</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>The <guimenu>Settings</guimenu> Menu</title>
<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>Settings</guimenu>
<guisubmenu>Toolbars</guisubmenu>
<guimenuitem>Main (&khangman;)</guimenuitem>
</menuchoice></term>
<listitem><para><action>Toggle</action> the Main Toolbar</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Settings</guimenu>
<guisubmenu>Toolbars</guisubmenu>
<guimenuitem>Special Characters (&khangman;)</guimenuitem>
</menuchoice></term>
<listitem><para><action>Toggle</action> the Characters Toolbar</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Settings</guimenu>
<guimenuitem>Show Statusbar</guimenuitem>
</menuchoice></term>
<listitem><para><action>Toggle</action> the statusbar</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Settings</guimenu>
<guimenuitem>Configure Shortcuts...</guimenuitem>
</menuchoice></term>
<listitem><para><action>Open</action> standard &kde; setting dialog that allows you to
choose different shortcut keys for different actions.
</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Settings</guimenu>
<guimenuitem>Configure Toolbars...</guimenuitem>
</menuchoice></term>
<listitem><para><action>Configure</action> the items you want to put in the toolbar
</para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<guimenu>Settings</guimenu>
<guimenuitem>Configure &khangman;...</guimenuitem>
</menuchoice></term>
<listitem><para><action>Display</action> the &khangman; settings dialog
</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>The <guimenu>Help</guimenu> Menu</title>
&help.menu.documentation;
</sect2>
</sect1>
</chapter>
<chapter id="developers">
<title>Developer's Guide to &khangman;</title>
<sect1 id="changing-words">
<title>How to add words in a new language for the game</title>
<para>Thanks to Stefan Asserhäll, it is very easy to add a new language
directly to the game. The procedure described here can also be
found in the <filename class="directory">khangman</filename> source folder
in the file <filename>README.languages</filename>. Please follow the procedure and then send me the files tarred and gzipped to annemarie.mahfouf@free.fr.
</para>
<para>
The twenty four available languages so far by code are: bg ca cs da de en es fr fi ga hu it nb nl nn pt pt_BR ru sl sr sr@Ltn sv tg and tr. If your language code is not among those, you can proceed further.
</para>
<para>Most of this data should be completed to include <emphasis>hints</emphasis>, please see below. Complete data: bg de fr en it only have hints so the other above languages must be updated as soon as possible.
</para>
<para>Be sure you are working with the latest svn trunk sources of &khangman; by
issuing a
<screen><userinput><command>
svn up khangman
</command></userinput></screen>
in the kdeedu module. Then
<screen><userinput><command>
cd kdeedu/khangman
</command></userinput></screen>
</para>
<para>The words are stored in 4 separate files, one for each level. The files are in
<filename class="directory">/khangman/data/en</filename>. The file
<filename>easy.txt</filename> is for level easy, the file
<filename>medium.txt</filename> is for level medium, the file
<filename>animals.txt</filename> is for level animals and the file
<filename>hard.txt</filename> is for level hard.</para>
<para>English is the default and thus the only language to be shipped with &khangman;. All other languages data are put in the correct kde-l10n.
</para>
<procedure>
<step><para>Enter the following commands in a &konsole; to create the folder
and files for the new language:</para>
<!-- Do not wrap or indent the next line, it's white space sensitive -->
<screen><userinput><command>./add_language <replaceable>language_code</replaceable></command></userinput></screen>
<para>Here you must replace <replaceable>language_code</replaceable>
with your language code.</para>
</step>
<step>
<para>The files now use the kvtml format. The tag <sgmltag class="starttag">o</sgmltag> is for the word and the tag <sgmltag class="starttag">t</sgmltag> is for the hint. Try to match the hint with the level of difficulty. The level 'Easy' will require an easy hint but the level 'Hard' will require the definition in the dictionary. Try not to use words of the same family in the hint, that would give the word away too easily! </para>
<para>An example of a kvtml file is as follow:</para>
<programlisting><markup>
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE kvtml SYSTEM "kvoctrain.dtd"&gt;
&lt;kvtml&gt;
&lt;e&gt;
&lt;o&gt;cane&lt;/o&gt;
&lt;t&gt;&egrave; il tuo animale domestico preferito&lt;/t&gt;
&lt;/e&gt;
...
...
&lt;/kvtml&gt;
</markup></programlisting>
</step>
<step>
<para>Edit all indicated text files in the new folder with a text editor,
and replace each word inside the <sgmltag class="starttag">o</sgmltag> tag with a translated word and each hint inside a <sgmltag class="starttag">t</sgmltag> with a translated hint. It is not really important
that the exact meaning is preserved, but try to keep the length and
level of difficulty roughly the same.
You can include words with white space or - in them, in that case the white space or the -
will be shown instead of the _.
Please contact &Anne-Marie.Mahfouf; <email>annemarie.mahfouf@free.fr</email> if there is anything special related to your language so I can adapt the code to it (especially the special and accented characters).</para>
<para>You can just translate the words but you can also adapt them
following the level and add new words if you want. For example,
<quote>table</quote> is in level easy in English but in your language,
it can be level medium. Feel free to adapt the files to your language
needs. The number of words in a file is not important, you can add
some if you want.</para>
<para>Remember that all words are nouns.</para>
<para> Note that you must use <emphasis role="bold">UTF-8 encoding</emphasis> when editing the
files. If your editor cannot do this, try using &kwrite; or &kate;. When
opening a file in &kwrite; or &kate; you can select utf8 encoding with
the combo box at the top of the file open dialog.</para>
<para>Please keep the actual English filenames in your
<replaceable>language_code</replaceable> dir.</para>
</step>
<step>
<para>Enter the following command to install the new data files:</para>
<screen><userinput><command>make</command></userinput>
<userinput><command>make install</command></userinput></screen>
<para>You may have to become <systemitem
class="username">root</systemitem> to run <command>make
install</command>, depending on your installation.</para>
</step>
<step>
<para>Run the game and check that your language has been added:</para>
<screen><userinput><command>khangman</command></userinput></screen>
</step>
<step><para>Instead of committing your files, please sent them to
&Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail; tarred and gzipped. As there are
now twenty three languages, a wizard (KNewStuff) is now included in &khangman;
to easily download and install new languages that are placed on the website.
This is done to reduce the size of the kdeedu module and it will also be done in
&klettres;, &kstars; and maybe &ktouch;.
Please contact Anne-Marie by email if you need further information.</para>
<para>When you send me the files, please don't forget to mention any <emphasis role="bold">special characters</emphasis> used in your language (put them in a text file, one per line and add this file in the tarball) and please mention any other specificity.</para>
<para><emphasis>Please never commit files in a BRANCH as it might break the game.</emphasis></para>
</step>
</procedure>
<para>Many thanks for your contribution!</para>
</sect1>
<sect1 id="internal">
<title>What is stored by &khangman; and where</title>
<para>
When you get a new language via <menuchoice><guimenu>Game</guimenu> <guimenuitem>Get Words in New Language...</guimenuitem></menuchoice>, the new language data is stored in <filename class="directory">$~/.kde/share/apps/khangman/data</filename> in the language code folder. The available language dir names are also stored in the &khangman; config file in <filename>~/.kde/share/config/khangmanrc</filename>.
</para>
<para>
The provider name (i.e. the address of the website where to download the new languages) is stored in <filename>$KDEDIR/share/apps/khangman/khangmanrc</filename>.
</para>
<para>
The English language (default) and the user language from his i18n package(s) (if available) are stored in <filename class="directory">$KDEDIR/share/apps/khangman</filename>.
</para>
<para>
In the configuration file, stored for each user in his <filename>~/.kde/share/config/khangmanrc</filename> are saved all the game settings such as the background, last level played, ... plus the files that were downloaded from the KNewStuff dialog.
</para>
</sect1>
<sect1 id="planned-features">
<title>Planned Features for &khangman;</title>
<para>
A planned feature is of course to have more language data and also hints in every language. You can help for this in your own language if it is not done yet. Please contact me if you want to help with this, it's just a matter of translating the English words to your language (see <link linkend="changing-words">How to add words in a new language for the game</link>).
</para>
<para>
What can also be done is to use other kvtml files like the ones that are on the
&kde;-Edu website to play &khangman;. For example, imagine you can play the
capitals of the world, the hint will tell you the country and you have to guess
the capital. Or learn words in another language, the hint is the word in your
language, the word to guess is the translation in the new language.
</para>
</sect1>
</chapter>
<chapter id="faq">
<title>Questions and Answers</title>
&reporting.bugs;
&updating.documentation;
<qandaset id="faqlist">
<qandaentry>
<question>
<para>I have an error message telling me the pictures cannot be found.</para>
</question>
<answer>
<para>The game installs by default in <filename
class="directory">/usr/local/kde</filename> so add <filename
class="directory">/usr/local/kde/bin</filename> to your path and set
the <envar>KDEDIR</envar> variable to <filename
class="directory">/usr/local/kde</filename> before running the
game. An easy way is to configure &khangman; with the option
<option>--prefix</option>=$<envar>KDEDIR</envar> where
$<envar>KDEDIR</envar> is where the rest of &kde; is installed. This
could vary widely, depending on the distribution and operating system
you.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>&khangman; does not start correctly after I upgraded from an earlier version to the &kde; 3.5 version</para>
</question>
<answer>
<para>
There might be a problem due to the change of the configuration file. Please remove the <filename>khangmanrc</filename> file in your <filename class="directory">$HOME/.kde/share/config</filename> folder.
</para>
</answer>
</qandaentry>
</qandaset>
</chapter>
<chapter id="credits">
<title>Credits and License</title>
<para>
&khangman;
</para>
<para>
Program copyright 2001-2006 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;
</para>
<para>
Contributors:
<itemizedlist>
<listitem><para>Hangman graphics: Renaud Blanchard
<email>kisukuma@chez.com</email></para> </listitem>
<listitem><para>Sounds: Ludovic Grossard
<email>ludovic.grossard@libertysurf.fr</email></para> </listitem>
<listitem><para>Blue theme, icons and code: &Primoz.Anzur;
&Primoz.Anzur.mail;</para> </listitem>
<listitem><para>Swedish data files, coding help, transparent pictures and i18n fixes: Stefan Asserhäll
<email>stefan.asserhall@telia.com
</email></para> </listitem>
<listitem><para>Nature theme: Joe Bolin
<email>jbolin@users.sourceforge.net</email></para> </listitem>
<listitem><para>Softer Hangman Pictures: Matt Howe
<email>mdhowe@bigfoot.com</email></para> </listitem>
<listitem><para>Spanish data files: eXParTaKus
<email>expartakus@expartakus.com
</email></para> </listitem>
<listitem><para>Spanish data hints: Rafael Beccar
<email>rafael.beccar@kdemail.net
</email></para> </listitem>
<listitem><para>Danish data files: Erik Kjaer Pedersen
<email>erik@mpim-bonn.mpg.de
</email></para> </listitem>
<listitem><para>Finnish data files: Niko Lewman
<email>niko.lewman@edu.hel.fi
</email></para> </listitem>
<listitem><para>Brazilian Portuguese data files: João Sebastião de Oliveira Bueno
<email>gwidion@mpc.com.br
</email></para> </listitem>
<listitem><para>Catalan data files: Antoni Bella
<email>bella5@teleline.es
</email></para> </listitem>
<listitem><para>Italian data files: Giovanni Venturi
<email>jumpyj@tiscali.it
</email></para> </listitem>
<listitem><para>Dutch data files: Rinse
<email>rinse@kde.nl
</email></para> </listitem>
<listitem><para>Portuguese data files: Pedro Morais
<email>morais@kde.org
</email></para> </listitem>
<listitem><para>Serbian (Cyrillic and Latin) data files: Chusslove Illich
<email>chaslav@sezampro.yu
</email></para> </listitem>
<listitem><para>Slovenian data files: Jure Repinc
<email>jlp@holodeck1.com
</email></para> </listitem>
<listitem><para>Czech data files: Luk&aacute;&scaron; Tinkl
<email>lukas@kde.org
</email></para> </listitem>
<listitem><para>Tajik data files: Roger Kovacs
<email>rkovacs@khujand.org
</email></para> </listitem>
<listitem><para>Norwegian (Bokm&#229;l) data files: Torger &#197;ge Sinnes
<email>torg-a-s@online.no
</email></para> </listitem>
<listitem><para>Hungarian data files: Tamas Szanto
<email>tszanto@mol.hu
</email></para> </listitem>
<listitem><para>Norwegian (Nynorsk) data files: Gaute Hvoslef Kvalnes
<email>gaute@verdsveven.com
</email></para> </listitem>
<listitem><para>Turkish data files: Mehmet &Ouml;zel
<email>mehmet_ozel2003@hotmail.com
</email></para> </listitem>
<listitem><para>Bulgarian data files: Radostin Radnev
<email>radnev@yahoo.com
</email></para> </listitem>
<listitem><para>Irish (Gaelic) data files: Kevin Patrick Scannell
<email>scannell@slu.edu
</email></para> </listitem>
<listitem><para>Coding help: &Robert.Gogolok;
&Robert.Gogolok.mail;</para> </listitem>
<listitem><para>Coding help: Benjamin Meyer
<email>ben@meyerhome.net</email></para> </listitem>
<listitem><para>Code fixes: Lubos Lun&agrave;k
<email>l.lunak@kde.org</email></para> </listitem>
<listitem><para>Code fixes: Albert Astals Cid
<email>tsdgeos@terra.es</email></para> </listitem>
<listitem><para>Usability study: Celeste Paul
<email>seele@obso1337.org</email></para> </listitem>
</itemizedlist>
</para>
<para>
Documentation copyright 2001-2005 &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove -->
&underGPL; <!-- GPL License -->
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-khangman">
<title>How to obtain &khangman;</title>
&install.intro.documentation;
</sect1>
<sect1 id="compilation">
<title>Compilation and installation</title>
&install.compile.documentation;
</sect1>
</appendix>
&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes: nil
sgml-general-insert-case: lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

@ -0,0 +1,63 @@
<?xml version="1.0" ?>
<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY % English "INCLUDE">
]>
<refentry lang="&language;">
<refentryinfo>
<title>KDE User's Manual</title>
<author><personname><firstname>Ben</firstname><surname>Burton</surname></personname> <email>bab@debian.org</email></author>
<date>May 25, 2005</date>
<productname>K Desktop Environment</productname>
</refentryinfo>
<refmeta>
<refentrytitle><command>khangman</command></refentrytitle>
<manvolnum>6</manvolnum>
</refmeta>
<refnamediv>
<refname><command>khangman</command></refname>
<refpurpose>The classical hangman game for KDE</refpurpose>
</refnamediv>
<refsynopsisdiv>
<cmdsynopsis>
<command>khangman</command>
<arg choice="opt">KDE Generic Options</arg>
<arg choice="opt">Qt Generic Options</arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>&khangman; is a game based on the well known hangman game. It is
aimed for children 6 and above. It has four levels of difficulty: Animals
(animals words), Easy, Medium and Hard.</para><para>A word is picked at
random and the letters are hidden. You must guess the word by trying one
letter after another. Each time you guess a wrong letter, part of a picture
of a hangman is drawn. You must guess the word before getting hanged! You
have 10 tries.</para><para>This application is part of the &kde; Edutainment
module.</para>
</refsect1>
<refsect1>
<title>See Also</title>
<para>More detailed user documentation is available from <ulink
url="help:/khangman">help:/khangman</ulink>
(either enter this <acronym>URL</acronym> into &konqueror;, or run
<userinput><command>khelpcenter</command>
<parameter>help:/khangman</parameter></userinput>).</para>
<para>There is also further information available at the <ulink url="http://edu.kde.org/khangman/">&kde; Edutainment web site</ulink>.</para>
</refsect1>
<refsect1>
<title>Authors</title>
<para>&khangman; was written by <personname><firstname>Primoz</firstname><surname>Anzur</surname></personname> and &Anne-Marie.Mahfouf; &Anne-Marie.Mahfouf.mail;</para>
<para>This manual page based on the one prepared by <personname><firstname>Ben</firstname><surname>Burton</surname></personname> for the Debian project.</para>
</refsect1>
</refentry>

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@ -0,0 +1,5 @@
KDE_LANG = en
KDE_DOCS = AUTO
KDE_MANS = AUTO

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@ -0,0 +1,998 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN"
"dtd/kdex.dtd" [
<!ENTITY kseg "<application>KSeg</application>">
<!ENTITY cabri "<application>Cabri</application>">
<!ENTITY drgeo "<application>Dr.Geo</application>">
<!ENTITY package "kdeedu">
<!ENTITY kappname "&kig;">
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE">
<!-- change language only here -->
]
>
<book lang="&language;">
<bookinfo>
<title>The &kig; Handbook</title>
<authorgroup>
<author>
<firstname>Dominique</firstname> <surname>Devriese</surname>
<affiliation>
<address><email>devriese@kde.org</email></address>
</affiliation>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>
<copyright>
<year>2002</year><year>2003</year><year>2004</year> <holder>Dominique
Devriese</holder>
</copyright>
<legalnotice>&FDLNotice;</legalnotice>
<date>2005-08-20</date> <releaseinfo>0.10.5</releaseinfo>
<abstract>
<para>
&kig; is a &kde; application for Interactive Geometry.
</para>
</abstract>
<keywordset>
<keyword>KDE</keyword>
<keyword>KDE-Edu</keyword>
<keyword>Kig</keyword>
<keyword>Interactive Geometry</keyword>
<keyword>KGeo</keyword>
<keyword>Cabri</keyword>
<keyword>Dr.Geo</keyword>
<keyword>KSeg</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Introduction</title>
<para>
&kig; is an application for Interactive Geometry. It's intended
to serve two purposes:
</para>
<itemizedlist>
<listitem><para> Allow students to interactively explore
mathematical figures and concepts using the computer.
</para></listitem>
<listitem><para> Serve as a <acronym>WYSIWYG</acronym> tool for
drawing mathematical figures and including them in other
documents.</para></listitem>
</itemizedlist>
<para>
You can report problems in &kig; using the internal bug
reporting tool
(<menuchoice><guimenu>Help</guimenu><guimenuitem>Report
Bug...</guimenuitem></menuchoice>), or just contact me at
<email>toscano.pino@tiscali.it</email>.
</para>
<para>
Since &kig; supports macros and the construction of locuses, it allows for
some
rather advanced macros to be defined. If you have created an
interesting macro, which you think might be useful for other
people, please mail it to me at
<email>toscano.pino@tiscali.it</email>, so I can include it in the
distribution (if you do this, it will be licensed under the
terms of &kig;'s license, the <ulink
url="http://www.gnu.org/licenses/licenses.html#GPL">GPL</ulink>,
so that other people can freely use and adapt it).
</para>
</chapter>
<chapter id="using-kig-basic">
<title>Basic usage</title>