Added KDE3 version of pykdeextensions

git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/libraries/pykdeextensions@1097589 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 14 years ago
commit a7af74e757

@ -0,0 +1 @@
Simon Edwards <simon@simonzone.com>

@ -0,0 +1,481 @@
GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 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.
[This is the first released version of the library GPL. It is
numbered 2 because it goes with version 2 of the ordinary GPL.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it. You can use it for
your libraries, 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 library, or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.
Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library. If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, 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 companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software. To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs. This
license, the GNU Library General Public License, applies to certain
designated libraries. This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.
The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it. Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program. However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.
Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries. We
concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves. This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them. (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.) The hope is that this
will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, while the latter only
works together with the library.
Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.
GNU LIBRARY GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License"). Each licensee is
addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, 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 library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.
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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.
If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
c) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
d) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. 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.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.
9. 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 Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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.
11. 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 Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.
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.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.
13. The Free Software Foundation may publish revised and/or new
versions of the Library 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. 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 library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; 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.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

@ -0,0 +1,27 @@
* Monday September 19th 2005 Simon Edwards <simon@simonzone.com>
- 0.4 release. Development version.
- KIO-slave support added/integrated from David Boddie's work.
- fix for libtool (Ismail Dönmez).
* Saturday August 6th 2005 Simon Edwards <simon@simonzone.com>
- 0.3.1 release. Development version.
- Fixed bug for broken application links in the bin directory.
- Fixed bug for kcontrol modules not being able to find the application's
installation directory.
- Fixed another bug/incompatibility in the kcontrol module support that
broke embedding on SIP 4.2+.
* Wednesday June 21st 2005 Simon Edwards <simon@simonzone.com>
- 0.3 release. Development version.
- 64bit awareness when building libraries added.
- Files for installation in the program's KDE application data directory
are now specified with the 'application_data' parameter for setup().
- kde-prefix option added to setup.py scripts.
* Thursday June 9th 2005 Simon Edwards <simon@simonzone.com>
- 0.2 release. Development version.
- Now includes libpythonize (needed for Kcontrol modules)
- Support for building and install kcontrol modules.
* Saturday May 14th 2005 Simon Edwards <simon@simonzone.com>
- 0.1 release. Development version

@ -0,0 +1,43 @@
Basic Installation
==================
These are generic installation instructions.
This software uses the Python language's distutils system for installation.
A detailed guide for users and system administrators to using distutils to
install software can be found here:
http://docs.python.org/inst/inst.html
The simplest way to install this software is to run the following command as
the root user:
python setup.py install
The setup.py script will automatically detect the directories to use for
documentation, binaries and other software files.
Uninstallation
==============
During installation setup.py creates list of files and directories that
were installed in a file called install_log.txt.
python setup.py uninstall
Installing into an alternate root
=================================
For packaging purposes it is often very useful to be able to install all files
relative not to the usual root directory (/) but into an alternative
directory.
python setup.py install --root=/tmp/alternativeroot/
Operation Controls
==================
--verbose
Print more information about what setup.py is doing.
--help
Print a summary of the options to setup.py, and exit.

@ -0,0 +1,6 @@
recursive-include doc *.docbook *.png
graft app_templates
prune app_templates/.svn
include AUTHORS ChangeLog COPYING INSTALL MANIFEST.in NEWS README TODO
global-include *.desktop *.py *.cpp *.h
global-exclude *~ .svn *.pyc

@ -0,0 +1,10 @@
Metadata-Version: 1.0
Name: pykdeextensions
Version: 0.4.0
Summary: UNKNOWN
Home-page: http://www.simonzone.com/software/pykdeextensions/
Author: Simon Edwards
Author-email: simon@simonzone.com
License: LGPL
Description: UNKNOWN
Platform: UNKNOWN

@ -0,0 +1,14 @@
PyKDE Extensions
================
PyKDE Extensions is a collection of software and Python packages to support
the creation and installation of KDE applications.
Read the INSTALL file for more information about how to install this.
This software is on the web at:
http://www.simonzone.com/software/pykdeextensions/
cheers,
Simon Edwards <simon@simonzone.com>

@ -0,0 +1,340 @@
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) <year> <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) year 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,43 @@
Basic Installation
==================
These are generic installation instructions.
This software uses the Python language's distutils system for installation.
A detailed guide for users and system administrators to using distutils to
install software can be found here:
http://docs.python.org/inst/inst.html
The simplest way to install this software is to run the following command as
the root user:
python setup.py install
The setup.py script will automatically detect the directories to use for
documentation, binaries and other software files.
Uninstallation
==============
During installation setup.py creates list of files and directories that
were installed in a file called install_log.txt.
python setup.py uninstall
Installing into an alternate root
=================================
For packaging purposes it is often very useful to be able to install all files
relative not to the usual root directory (/) but into an alternative
directory.
python setup.py install --root=/tmp/alternativeroot/
Operation Controls
==================
--verbose
Print more information about what setup.py is doing.
--help
Print a summary of the options to setup.py, and exit.

@ -0,0 +1,6 @@
recursive-include doc *.docbook *.png
recursive-include po *.po *.pot
include AUTHORS ChangeLog COPYING INSTALL MANIFEST.in NEWS README TODO
global-include *.desktop *.py *.ui *.png *.lsm
global-exclude *~ .svn
global-exclude *~ .cvs

@ -0,0 +1,555 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY appname "<application>MyApplicaition 0.1</application>">
<!ENTITY kappname "&appname;"><!-- Do *not* replace kappname-->
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc -->
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"><!-- change language only here -->
<!-- Do not define any other entities; instead, use the entities
from kde-genent.entities and $LANG/user.entities. -->
]>
<!-- kdoctemplate v0.8 October 1 1999
Minor update to "Credits and Licenses" section on August 24, 2000
Removed "Revision history" section on 22 January 2001
Changed to Installation/Help menu entities 18 October 2001
Other minor cleanup and changes 18 October 2001 -->
<!--
This template was designed by: David Rugge davidrugge@mindspring.com
with lots of help from: Eric Bischoff ebisch@cybercable.tm.fr
and Frederik Fouvry fouvry@sfs.nphil.uni-tuebingen.de
of the KDE DocBook team.
You may freely use this template for writing any sort of KDE documentation.
If you have any changes or improvements, please let us know.
Remember:
- in XML, the case of the <tags> and attributes is relevant ;
- also, quote all attributes.
Please don't forget to remove all these comments in your final documentation,
thanks ;-).
-->
<!-- ................................................................ -->
<!-- The language must NOT be changed here. -->
<book lang="&language;">
<!-- This header contains all of the meta-information for the document such
as Authors, publish date, the abstract, and Keywords -->
<bookinfo>
<title>The &appname; Handbook</title>
<authorgroup>
<author>
<firstname></firstname>
<othername></othername>
<surname>%{AUTHOR}</surname>
<affiliation>
<address><email>%{EMAIL}</email></address>
</affiliation>
</author>
</authorgroup>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
<copyright>
<year>1999</year>
<year>%{YEAR}</year>
<holder>%{AUTHOR}</holder>
</copyright>
<!-- Translators: put here the copyright notice of the translation -->
<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
and in the FDL itself on how to use it. -->
<legalnotice>&FDLNotice;</legalnotice>
<!-- Date and version information of the documentation
Don't forget to include this last date and this last revision number, we
need them for translation coordination !
Please respect the format of the date (YYYY-MM-DD) and of the version
(V.MM.LL), it could be used by automation scripts.
Do NOT change these in the translation. -->
<date>2001-10-18</date>
<releaseinfo>%{VERSION}</releaseinfo>
<!-- Abstract about this handbook -->
<abstract>
<para>
&appname; is an application specially designed to do nothing you would
ever want.
</para>
</abstract>
<!-- This is a set of Keywords for indexing by search engines.
Please at least include KDE, the KDE package it is in, the name
of your application, and a few relevant keywords. -->
<keywordset>
<keyword>KDE</keyword>
<keyword>%{APPNAME}</keyword>
<keyword>nothing</keyword>
<keyword>nothing else</keyword>
</keywordset>
</bookinfo>
<!-- The contents of the documentation begin here. Label
each chapter so with the id attribute. This is necessary for two reasons: it
allows you to easily reference the chapter from other chapters of your
document, and if there is no ID, the name of the generated HTML files will vary
from time to time making it hard to manage for maintainers and for the CVS
system. Any chapter labelled (OPTIONAL) may be left out at the author's
discretion. Other chapters should not be left out in order to maintain a
consistent documentation style across all KDE apps. -->
<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>
&appname; is a program that lets you do absolutely nothing. Please report
any problems or feature requests to the &kde; mailing lists.
</para>
</chapter>
<chapter id="using-appname">
<title>Using &appname;</title>
<!-- This chapter should tell the user how to use your app. You should use as
many sections (Chapter, Sect1, Sect3, etc...) as is necessary to fully document
your application. -->
<para>
<!-- Note that all graphics should be in .png format. Use no gifs because of
patent issues. -->
<screenshot>
<screeninfo>Here's a screenshot of &appname;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="screenshot.png" format="PNG"/>
</imageobject>
<imageobject>
<imagedata fileref="screenshot.eps" format="EPS"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<sect1 id="appname-features">
<title>More &appname; features</title>
<para>It slices! It dices! and it comes with a free toaster!</para>
<para>
The Squiggle Tool <guiicon><inlinemediaobject>
<imageobject>
<imagedata fileref="squiggle.png" format="PNG"/>
</imageobject>
<imageobject>
<imagedata fileref="squiggle.eps" format="EPS"/>
</imageobject>
<textobject>
<phrase>Squiggle</phrase>
</textobject>
</inlinemediaobject></guiicon> is used to draw squiggly lines all over
the &appname; main window. It's not a bug, it's a feature!
</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="appname-mainwindow">
<title>The main &appname; window</title>
<sect2>
<title>The File Menu</title>
<para>
<variablelist>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>New</guimenuitem>
</menuchoice></term>
<listitem><para><action>Creates a new document</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>S</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>Save</guimenuitem>
</menuchoice></term>
<listitem><para><action>Saves the document</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> &appname;</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 -->
<!-- &appname;, 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="developers">
<title>Developer's Guide to &appname;</title>
<!-- (OPTIONAL) A Programming/Scripting reference chapter should be
used for apps that use plugins or that provide their own scripting hooks
and/or development libraries. -->
<para>
Programming &appname; plugins is a joy to behold. Just read through the next
66 pages of API's to learn how!
</para>
<!-- Use refentries to describe APIs. Refentries are fairly complicated and you
should consult the docbook reference for further details. The example below was
taken from that reference and shortened a bit for readability. -->
<refentry id="re-1007-unmanagechildren-1">
<refmeta>
<refentrytitle>XtUnmanageChildren</refentrytitle>
<refmiscinfo>Xt - Geometry Management</refmiscinfo>
</refmeta>
<refnamediv>
<refname>XtUnmanageChildren
</refname>
<refpurpose>remove a list of children from a parent widget's managed
list.
<indexterm id="ix-1007-unmanagechildren-1"><primary>widgets</primary><secondary>removing</secondary></indexterm>
<indexterm id="ix-1007-unmanagechildren-2"><primary>XtUnmanageChildren</primary></indexterm>
</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refsynopsisdivinfo>
<date>4 March 1996</date>
</refsynopsisdivinfo>
<synopsis>
void XtUnmanageChildren(<replaceable class="parameter">children</replaceable>, <replaceable class="parameter">num_children</replaceable>)
WidgetList <replaceable class="parameter">children</replaceable>;
Cardinal <replaceable class="parameter">num_children</replaceable>;
</synopsis>
<refsect2 id="r2-1007-unmanagechildren-1">
<title>Inputs</title>
<variablelist>
<varlistentry>
<term><replaceable class="parameter">children</replaceable>
</term>
<listitem>
<para>Specifies an array of child widgets. Each child must be of
class RectObj or any subclass thereof.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable class="parameter">num_children</replaceable>
</term>
<listitem>
<para>Specifies the number of elements in <replaceable class="parameter">children</replaceable>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2></refsynopsisdiv>
<refsect1 id="r1-1007-unmanagechildren-1">
<title>Description
</title>
<para><function>XtUnmanageChildren()</function> unmaps the specified widgets
and removes them from their parent's geometry management.
The widgets will disappear from the screen, and (depending
on its parent) may no longer have screen space allocated for
them.
</para>
<para>Each of the widgets in the <replaceable class="parameter">children</replaceable> array must have
the same parent.
</para>
<para>See the &ldquo;Algorithm&rdquo; section below for full details of the
widget unmanagement procedure.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-2">
<title>Usage</title>
<para>Unmanaging widgets is the usual method for temporarily
making them invisible. They can be re-managed with
<function>XtManageChildren()</function>.
</para>
<para>You can unmap a widget, but leave it under geometry
management by calling <function>XtUnmapWidget()</function>. You can
destroy a widget's window without destroying the widget by
calling <function>XtUnrealizeWidget()</function>. You can destroy a
widget completely with <function>XtDestroyWidget()</function>.
</para>
<para>If you are only going to unmanage a single widget, it is
more convenient to call <function>XtUnmanageChild()</function>. It is
often more convenient to call <function>XtUnmanageChild()</function>
several times than it is to declare and initialize an array
of widgets to pass to <function>XtUnmanageChildren()</function>. Calling
<function>XtUnmanageChildren()</function> is more efficient, however,
because it only calls the parent's <function>change_managed()</function>
method once.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-3">
<title>Algorithm
</title>
<para><function>XtUnmanageChildren()</function> performs the following:
</para>
<variablelist>
<varlistentry>
<term>-
</term>
<listitem>
<para>Ignores the child if it already is unmanaged or is being
destroyed.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-
</term>
<listitem>
<para>Otherwise, if the child is realized, it makes it nonvisible
by unmapping it.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-4">
<title>Structures</title>
<para>The <type>WidgetList</type> type is simply an array of widgets:
</para>
<screen id="sc-1007-unmanagechildren-1">typedef Widget *WidgetList;
</screen>
</refsect1>
</refentry>
</chapter>
<chapter id="faq">
<title>Questions and Answers</title>
<!-- (OPTIONAL but recommended) This chapter should include all of the silly
(and not-so-silly) newbie questions that fill up your mailbox. This chapter
should be reserved for BRIEF questions and answers! If one question uses more
than a page or so then it should probably be part of the
"Using this Application" chapter instead. You should use links to
cross-reference questions to the parts of your documentation that answer them.
This is also a great place to provide pointers to other FAQ's if your users
must do some complicated configuration on other programs in order for your
application work. -->
&reporting.bugs;
&updating.documentation;
<qandaset id="faqlist">
<qandaentry>
<question>
<para>My Mouse doesn't work. How do I quit &appname;?</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 can't I 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>
&appname;
</para>
<para>
Program copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email>
</para>
<para>
Contributors:
<itemizedlist>
<listitem><para>Konqui the KDE Dragon <email>konqui@kde.org</email></para>
</listitem>
<listitem><para>Tux the Linux Penguin <email>tux@linux.org</email></para>
</listitem>
</itemizedlist>
</para>
<para>
Documentation copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email>
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove -->
<!-- Determine which license your application is licensed under,
and delete all the remaining licenses below:
(NOTE: All documentation are licensed under the FDL,
regardless of what license the application uses) -->
&underGPL; <!-- GPL License -->
&underBSDLicense; <!-- BSD License -->
&underArtisticLicense; <!-- BSD Artistic License -->
&underX11License; <!-- X11 License -->
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-appname">
<title>How to obtain &appname;</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="requirements">
<title>Requirements</title>
<!--
List any special requirements for your application here. This should include:
.Libraries or other software that is not included in kdesupport,
kdelibs, or kdebase.
.Hardware requirements like amount of RAM, disk space, graphics card
capabilities, screen resolution, special expansion cards, etc.
.Operating systems the app will run on. If your app is designed only for a
specific OS, (you wrote a graphical LILO configurator for example) put this
information here.
-->
<para>
In order to successfully use &appname;, you need &kde; 1.1. Foobar.lib is
required in order to support the advanced &appname; features. &appname; uses
about 5 megs of memory to run, but this may vary depending on your
platform and configuration.
</para>
<para>
All required libraries as well as &appname; itself can be found
on <ulink url="ftp://ftp.appname.org">The &appname; home page</ulink>.
</para>
<!-- For a list of updates, you may refer to the application web site
or the ChangeLog file, or ... -->
<para>
You can find a list of changes at <ulink
url="http://apps.kde.org/appname">http://apps.kde.org/appname</ulink>.
</para>
</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>
<sect1 id="configuration">
<title>Configuration</title>
<para>Don't forget to tell your system to start the <filename>dtd</filename>
dicer-toaster daemon first, or &appname; won't work !</para>
</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:tabstop=2:shiftwidth=2:expandtab
-->

@ -0,0 +1 @@
.pot and .pot translation files should be placed here.

@ -0,0 +1,32 @@
#!/usr/bin/python
###########################################################################
# setup - description #
# ------------------------------ #
# begin : Fri Jun 27 2005 #
# copyright : (C) 2005 by AUTHOR #
# email : YOUR@EMAIL.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
import kdedistutils
kdedistutils.setup(name="kcontrol_module",
version="0.1.0",
author="AUTHOR",
author_email="YOUR@EMAIL.com",
url="http://www.TESTAPP.com/",
min_kde_version = "3.0.0",
min_qt_version = "3.0.0",
license = "GPL",
application_data = ['src/kcontrol_module.py','src/KcontrolModuleWidgetUI.ui'],
executable_links = [('kcontrol_module','kcontrol_module.py')],
docbooks = [ ('doc/en','en') ],
i18n = ('po',['src']),
kcontrol_modules = [ ('src/kcontrol_module.desktop','kcontrol_module.py')] )

@ -0,0 +1,33 @@
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>KcontrolModuleWidgetUI</class>
<widget class="QWidget">
<property name="name">
<cstring>KcontrolModuleWidgetUI</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>480</height>
</rect>
</property>
<property name="caption">
<string>Form1</string>
</property>
<hbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="QLabel">
<property name="name">
<cstring>textLabel1</cstring>
</property>
<property name="text">
<string>Congratulations, Kcontrol_module template application is working!</string>
</property>
</widget>
</hbox>
</widget>
<layoutdefaults spacing="6" margin="11"/>
</UI>

@ -0,0 +1,8 @@
‰PNG

IHDR
¸ŕ˙ MĽZŚńfθ92@ł
é2w”l†A;Ŕv“c)‡\)¬…/l Fö\˙žĎ“ß÷ů~źžSöŚüXşĹ¦©=t jĘ76şţ{rumuüę­_Š€% ľń}Ęf<C498>b{ńZéöRdYÁ7éC2ĘTWŐ“¦Ó˛ťăłO>Íf<>X˛ȵćĆ,F&/#Źx<Ž<>&Pµ·%]E«ÉÜC®f UĄŐSż»ďä
"Öl+˛˛˛Jă»Ç°<C387>M¨ŞJde…­Ů9Hzť]—qTÖPňBÉIŔ×
ŮÝ}±¦ÂQ±<51>•—‰ ¤bRŤ<52>˘łŞŇŰ÷€ ď]ánvďbf,ŔĂ»<C482>řçü:ŔLŃdÖ4€íPuCŔ ĘÔ7ÔňAK ÷\ýô^żĎź=.~ľöˇĺĐ|ŮŽ2łwÄË|xľđwÎN†Vd/RKë‡ç6ĽĆý+÷řćôɤ°ˇÄôÔĦú7fmcú5€ hr¬96“MŠD#xĆ=IaűŢOHxcú7=# “U¦DæoVĎi

@ -0,0 +1,26 @@
‰PNG

IHDR
:IDATxœ¥—{Œ\Õ}Ç?wîyÜ;;ûðâ}`¯<>õ®×k̲~&Žq¥R<C2A5>- H£„Gpk
PPJ£&(
´J¥¨EQþ©Ú4Iq QDHC~D6ØÂBص—×®ÙµÙ<C2B5>ÇÎÌ<C38E>™;Ï;<3B>Ó?f½1µ i{¤£«+]<5D>ï÷œóý}¿¿k<C2BF>ö_åòB”«e,Ë¢3²„Ö6”TضÍ3'Ÿ``ÙÀIe«m=½½¹§<C2B9>ü´ý‰¯}j ´¢^«w<C2AB>O<wìYë¯þkV_Ý˺˜xå,“¯MðÏ?ý.½½x!þ—c¤ÄŒô<C592>lÛ8¼ÕÞvßßoZ—¶ó÷ßÿ¿;ퟙ<“ØrÝVöí¾ÍŒOŽ»>ÿ™<C3BF>\Oü¾Àõz<C3B5>U#fhÅa7Œë†YÒÙI5¨rì—‡ÍÉÇùøµŸ@¹[
>±u;µj<C2B5>¿ùÛoš¯íQk╳ÿ?ç¢çÌÚ•kq×
£…-­ít/ïE(‰tB ¤£06 Ñse_¸û€ù·ýžõ¥?ºÿ²u­ÿ©<C3BF>»ì£Ñ<C2A3>Q3¼r)%H+B
Œ<EFBFBD>ÖŽ6´ë²CHW£ØRШ7ؾk33³ÌM¾Ïá_<dzGf¬XºbqíÕÀ@ï€YӷƬ\oÖ­Z‡ã8„B!</MP X½i-õzƒJ©ŒÐ§ÅA(AHØHGáD\æfcTJeÊùkV ³aõ lñÛYkÔ/¼rÐ õ
á:.®ãbŒ¡X,ò©[w²sï „ åyh­)
¼tè<14>†Á¢©a#” •H㶸äÓ>gÆ~ÃSo
“/äY58È—¿õç$ÓiÆÆßÄÏøTJjA
€5†¹0ù>
n¼å“ÜtçMt?±€ç<E282AC>gj|#O=]»žùd۶ȕr(¥Á¯ß±<C39F>¿z'N½Œ—Ì<E28094>Ïä)ûE
™<A±BP®0ùê[,íëfåÕýTƒR ¤Va#¥ ªø¦ÀÃ_yˆ‡ÿâ3zõ&ËKÍgAP¡T…Bcp—°nŠoó&þô+÷ðËNIfðS9ò©~*KÎËñÒŒMŽQ(˜MͲÿ÷²ãSŸFHA(d¡”Dj…m‡B`Œaï­·òÝïü£¹fhÔõz<C3B5>î¥Ý
c Ó³
PJ¢±8^*K.<2E>£àù³
žOP š>²ìå(Â--H­°, ©$•R…j9 Ÿõ‰'¢$²‰¢šz£Ž1†C/¼ÀÎ;8üâ >ô|pó-ûÁ¥°ÑZ“ÉfñRY¼x?™%7Ÿ!—Îà%ÓÄçc+EĪѡœmÛmbáî¤#Iœ<49>3xÍ A©BÑÏ3vnœF£Ñ4š¬£óqvîØÀSÿãíÏßu§B •BI<42>T
G)²^sç~*G&šb~.N46Ç©3§Hù©³ÀHèÀý_lÏ»%êµ:Ò¸m-dbi\×Å
YTÊR~
À3Æ`ŒáÊ®
¹±x”S§(WËeYÕÅ,8òäa{âQnÛ÷¹fí*±0%á¶þðöI—Ó]
¨Uöܲ!ìEg»(6-›¡ã:.JJ”T´EZ ªÇ^:E$â²rÝÀbâj¡q¥K*—"¬ÂÍL\
i#¤h†‡h-ÂÆM[½èérá½µ¥Gkå eóØíTN¾ršb¾H6•Å‰¸ô/ë <17>? h°e3Šµ«éìZ<5A>ˆTÍl—²*J6½])…ÙX ?—ÇC{Gë¯ZG½QçĽL¹T!ÊMdÈDS´/YÀµC×^š]M[?~£õîô›æÎ/ÜE,ž T(á¸BØ\¬oÛ¡ìÕ²,¦¦Ïãg}ò™<¥| Óh0ñú[,_µŒ H'<ò©Ù¸G*À5W¹fI뤧õ½¤ZX·yÿåßÍõ×m¥œ/áÍ%ÙuûMTk5¤aÇEkÅÔô éd¦ép©´O¥Øô·µ…eÃ+(Ê$gb¤ãó\8žã¯Ç/ù
·†l!0<>µZ<C2B5>W'^]ì,ËâÿBâwؼzõFƒî%Ýö<C39D>ž9-¥Þ+Ú® Ñh<C391>Χ±,«ÙðòÞbøûŽÿìl€\l4f7

@ -0,0 +1,15 @@
[Desktop Entry]
Name=Kcontrol module
Name[en]=Kcontrol module
name[en_GB]=Kcontrol module
Comment=Kcontrol module template
Comment[en]=Kcontrol module template
Comment[en_GB]=Kcontrol module template
Icon=daemons.png
X-KDE-ModuleType=Library
X-KDE-Library=kcontrol_module
X-KDE-FactoryName=kcontrol_module
X-KDE-RootOnly=false
Type=Application
Exec=kcmshell kcontrol_module
Categories=QT;KDE;X-KDE-settings-system;

@ -0,0 +1,16 @@
Begin3
Title: $APPNAME$ -- Some description
Version: $VERSION$
Entered-date:
Description:
Keywords: KDE Qt
Author: $AUTHOR$ <$EMAIL$>
Maintained-by: $AUTHOR$ <$EMAIL$>
Home-page:
Alternate-site:
Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils
xxxxxx $APPNAMELC$-$VERSION$.tar.gz
xxx $APPNAMELC$-$VERSION$.lsm
Platform: Linux. Needs KDE
Copying-policy: $LICENSE$
End

@ -0,0 +1,166 @@
#!/usr/bin/python
###########################################################################
# kcontrol_module - description #
# ------------------------------ #
# begin : Mon May 2 2005 #
# copyright : (C) 2005 by AUTHOR #
# email : your@email.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
import sys
from qt import *
from kdecore import *
from kdeui import *
import kdedesigner
from KcontrolModuleWidgetUI import *
description = "A Kcontrol module"
version = "0.1"
############################################################################
def AboutData():
global version,description
about_data = KAboutData("kcontrol_module", "kcontrol_module", version, \
description, KAboutData.License_GPL, "(C) 2005 AUTHOR", None, None,\
"your@email.com")
about_data.addAuthor("AUTHOR", None, "your@email.com")
return about_data
############################################################################
class KcontrolModuleWidget(KcontrolModuleWidgetUI):
def __init__(self,parent=None):
KcontrolModuleWidgetUI.__init__(self,parent,"Kcontrol module")
# Add other methods, slots and signals here.
############################################################################
# The base class that we use depends on whether this is running inside
# kcontrol or as a standalone application.
# Are we running as a separate standalone application or in KControl?
standalone = __name__=='__main__'
if standalone:
programbase = KDialogBase
else:
programbase = KCModule
class KcontrolModuleApp(programbase):
########################################################################
def __init__(self,parent=None,name=None):
global standalone
if standalone:
KDialogBase.__init__(self,KJanusWidget.Plain,"Kcontrol module",KDialogBase.User1|KDialogBase.Close, KDialogBase.Close)
self.setButtonText(KDialogBase.User1,"About")
else:
KCModule.__init__(self,parent,name)
# Create a configuration object.
self.config = KConfig("kcontrol_module")
self.setButtons(0)
self.aboutdata = AboutData()
# The appdir needs to be explicitly otherwise we won't be able to
# load our icons and images.
KGlobal.iconLoader().addAppDir("kcontrol_module")
if standalone:
toplayout = QVBoxLayout( self.plainPage(), 0, KDialog.spacingHint() )
mainwidget = KcontrolModuleWidget(self.plainPage())
else:
toplayout = QVBoxLayout( self, 0, KDialog.spacingHint() )
mainwidget = KcontrolModuleWidget(self)
toplayout.addWidget(mainwidget)
self.aboutus = KAboutApplication(self)
########################################################################
def __del__(self):
pass
########################################################################
# KDialogBase method
def exec_loop(self):
global programbase
# Load configuration here
self.__loadOptions()
programbase.exec_loop(self)
# Save configuration here
self.__saveOptions()
########################################################################
# KDialogBase method
def slotUser1(self):
self.aboutus.show()
########################################################################
def slotCloseButton(self):
self.close()
########################################################################
def __loadOptions(self):
global kapp
config = kapp.config()
config.setGroup("General")
size = config.readSizeEntry("Geometry")
if size.isEmpty()==False:
self.resize(size)
#######################################################################
def __saveOptions(self):
global kapp
config = kapp.config()
config.setGroup("General")
config.writeEntry("Geometry", self.size())
config.sync()
#######################################################################
# KControl virtual void methods
def load(self):
pass
def save(self):
pass
def defaults(self):
pass
def sysdefaults(self):
pass
def aboutData(self):
# Return the KAboutData object which we created during initialisation.
return self.aboutdata
def buttons(self):
# Only supply a Help button. Other choices are Default and Apply.
return KCModule.Help
############################################################################
# This is the entry point used when running this module outside of kcontrol.
def main():
global kapp
about_data = AboutData()
KCmdLineArgs.init(sys.argv,about_data)
kapp = KApplication()
myapp = KcontrolModuleApp()
myapp.exec_loop()
############################################################################
# Factory function for KControl
def create_kcontrol_module(parent,name):
global kapp
kapp = KApplication.kApplication()
return KcontrolModuleApp(parent, name)
############################################################################
if standalone:
main()

@ -0,0 +1 @@
$AUTHOR$ <$EMAIL$>

@ -0,0 +1,340 @@
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) <year> <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) year 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,43 @@
Basic Installation
==================
These are generic installation instructions.
This software uses the Python language's distutils system for installation.
A detailed guide for users and system administrators to using distutils to
install software can be found here:
http://docs.python.org/inst/inst.html
The simplest way to install this software is to run the following command as
the root user:
python setup.py install
The setup.py script will automatically detect the directories to use for
documentation, binaries and other software files.
Uninstallation
==============
During installation setup.py creates list of files and directories that
were installed in a file called install_log.txt.
python setup.py uninstall
Installing into an alternate root
=================================
For packaging purposes it is often very useful to be able to install all files
relative not to the usual root directory (/) but into an alternative
directory.
python setup.py install --root=/tmp/alternativeroot/
Operation Controls
==================
--verbose
Print more information about what setup.py is doing.
--help
Print a summary of the options to setup.py, and exit.

@ -0,0 +1,6 @@
recursive-include doc *.docbook *.png
recursive-include po *.po *.pot
include AUTHORS ChangeLog COPYING INSTALL MANIFEST.in NEWS README TODO
global-include *.desktop *.py *.ui *.png *.lsm
global-exclude *~ .svn
global-exclude *~ .cvs

@ -0,0 +1,555 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY appname "<application>MyApplicaition 0.1</application>">
<!ENTITY kappname "&appname;"><!-- Do *not* replace kappname-->
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc -->
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"><!-- change language only here -->
<!-- Do not define any other entities; instead, use the entities
from kde-genent.entities and $LANG/user.entities. -->
]>
<!-- kdoctemplate v0.8 October 1 1999
Minor update to "Credits and Licenses" section on August 24, 2000
Removed "Revision history" section on 22 January 2001
Changed to Installation/Help menu entities 18 October 2001
Other minor cleanup and changes 18 October 2001 -->
<!--
This template was designed by: David Rugge davidrugge@mindspring.com
with lots of help from: Eric Bischoff ebisch@cybercable.tm.fr
and Frederik Fouvry fouvry@sfs.nphil.uni-tuebingen.de
of the KDE DocBook team.
You may freely use this template for writing any sort of KDE documentation.
If you have any changes or improvements, please let us know.
Remember:
- in XML, the case of the <tags> and attributes is relevant ;
- also, quote all attributes.
Please don't forget to remove all these comments in your final documentation,
thanks ;-).
-->
<!-- ................................................................ -->
<!-- The language must NOT be changed here. -->
<book lang="&language;">
<!-- This header contains all of the meta-information for the document such
as Authors, publish date, the abstract, and Keywords -->
<bookinfo>
<title>The &appname; Handbook</title>
<authorgroup>
<author>
<firstname></firstname>
<othername></othername>
<surname>%{AUTHOR}</surname>
<affiliation>
<address><email>%{EMAIL}</email></address>
</affiliation>
</author>
</authorgroup>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
<copyright>
<year>1999</year>
<year>%{YEAR}</year>
<holder>%{AUTHOR}</holder>
</copyright>
<!-- Translators: put here the copyright notice of the translation -->
<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
and in the FDL itself on how to use it. -->
<legalnotice>&FDLNotice;</legalnotice>
<!-- Date and version information of the documentation
Don't forget to include this last date and this last revision number, we
need them for translation coordination !
Please respect the format of the date (YYYY-MM-DD) and of the version
(V.MM.LL), it could be used by automation scripts.
Do NOT change these in the translation. -->
<date>2001-10-18</date>
<releaseinfo>%{VERSION}</releaseinfo>
<!-- Abstract about this handbook -->
<abstract>
<para>
&appname; is an application specially designed to do nothing you would
ever want.
</para>
</abstract>
<!-- This is a set of Keywords for indexing by search engines.
Please at least include KDE, the KDE package it is in, the name
of your application, and a few relevant keywords. -->
<keywordset>
<keyword>KDE</keyword>
<keyword>%{APPNAME}</keyword>
<keyword>nothing</keyword>
<keyword>nothing else</keyword>
</keywordset>
</bookinfo>
<!-- The contents of the documentation begin here. Label
each chapter so with the id attribute. This is necessary for two reasons: it
allows you to easily reference the chapter from other chapters of your
document, and if there is no ID, the name of the generated HTML files will vary
from time to time making it hard to manage for maintainers and for the CVS
system. Any chapter labelled (OPTIONAL) may be left out at the author's
discretion. Other chapters should not be left out in order to maintain a
consistent documentation style across all KDE apps. -->
<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>
&appname; is a program that lets you do absolutely nothing. Please report
any problems or feature requests to the &kde; mailing lists.
</para>
</chapter>
<chapter id="using-appname">
<title>Using &appname;</title>
<!-- This chapter should tell the user how to use your app. You should use as
many sections (Chapter, Sect1, Sect3, etc...) as is necessary to fully document
your application. -->
<para>
<!-- Note that all graphics should be in .png format. Use no gifs because of
patent issues. -->
<screenshot>
<screeninfo>Here's a screenshot of &appname;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="screenshot.png" format="PNG"/>
</imageobject>
<imageobject>
<imagedata fileref="screenshot.eps" format="EPS"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<sect1 id="appname-features">
<title>More &appname; features</title>
<para>It slices! It dices! and it comes with a free toaster!</para>
<para>
The Squiggle Tool <guiicon><inlinemediaobject>
<imageobject>
<imagedata fileref="squiggle.png" format="PNG"/>
</imageobject>
<imageobject>
<imagedata fileref="squiggle.eps" format="EPS"/>
</imageobject>
<textobject>
<phrase>Squiggle</phrase>
</textobject>
</inlinemediaobject></guiicon> is used to draw squiggly lines all over
the &appname; main window. It's not a bug, it's a feature!
</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="appname-mainwindow">
<title>The main &appname; window</title>
<sect2>
<title>The File Menu</title>
<para>
<variablelist>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>New</guimenuitem>
</menuchoice></term>
<listitem><para><action>Creates a new document</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>S</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>Save</guimenuitem>
</menuchoice></term>
<listitem><para><action>Saves the document</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> &appname;</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 -->
<!-- &appname;, 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="developers">
<title>Developer's Guide to &appname;</title>
<!-- (OPTIONAL) A Programming/Scripting reference chapter should be
used for apps that use plugins or that provide their own scripting hooks
and/or development libraries. -->
<para>
Programming &appname; plugins is a joy to behold. Just read through the next
66 pages of API's to learn how!
</para>
<!-- Use refentries to describe APIs. Refentries are fairly complicated and you
should consult the docbook reference for further details. The example below was
taken from that reference and shortened a bit for readability. -->
<refentry id="re-1007-unmanagechildren-1">
<refmeta>
<refentrytitle>XtUnmanageChildren</refentrytitle>
<refmiscinfo>Xt - Geometry Management</refmiscinfo>
</refmeta>
<refnamediv>
<refname>XtUnmanageChildren
</refname>
<refpurpose>remove a list of children from a parent widget's managed
list.
<indexterm id="ix-1007-unmanagechildren-1"><primary>widgets</primary><secondary>removing</secondary></indexterm>
<indexterm id="ix-1007-unmanagechildren-2"><primary>XtUnmanageChildren</primary></indexterm>
</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refsynopsisdivinfo>
<date>4 March 1996</date>
</refsynopsisdivinfo>
<synopsis>
void XtUnmanageChildren(<replaceable class="parameter">children</replaceable>, <replaceable class="parameter">num_children</replaceable>)
WidgetList <replaceable class="parameter">children</replaceable>;
Cardinal <replaceable class="parameter">num_children</replaceable>;
</synopsis>
<refsect2 id="r2-1007-unmanagechildren-1">
<title>Inputs</title>
<variablelist>
<varlistentry>
<term><replaceable class="parameter">children</replaceable>
</term>
<listitem>
<para>Specifies an array of child widgets. Each child must be of
class RectObj or any subclass thereof.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable class="parameter">num_children</replaceable>
</term>
<listitem>
<para>Specifies the number of elements in <replaceable class="parameter">children</replaceable>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2></refsynopsisdiv>
<refsect1 id="r1-1007-unmanagechildren-1">
<title>Description
</title>
<para><function>XtUnmanageChildren()</function> unmaps the specified widgets
and removes them from their parent's geometry management.
The widgets will disappear from the screen, and (depending
on its parent) may no longer have screen space allocated for
them.
</para>
<para>Each of the widgets in the <replaceable class="parameter">children</replaceable> array must have
the same parent.
</para>
<para>See the &ldquo;Algorithm&rdquo; section below for full details of the
widget unmanagement procedure.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-2">
<title>Usage</title>
<para>Unmanaging widgets is the usual method for temporarily
making them invisible. They can be re-managed with
<function>XtManageChildren()</function>.
</para>
<para>You can unmap a widget, but leave it under geometry
management by calling <function>XtUnmapWidget()</function>. You can
destroy a widget's window without destroying the widget by
calling <function>XtUnrealizeWidget()</function>. You can destroy a
widget completely with <function>XtDestroyWidget()</function>.
</para>
<para>If you are only going to unmanage a single widget, it is
more convenient to call <function>XtUnmanageChild()</function>. It is
often more convenient to call <function>XtUnmanageChild()</function>
several times than it is to declare and initialize an array
of widgets to pass to <function>XtUnmanageChildren()</function>. Calling
<function>XtUnmanageChildren()</function> is more efficient, however,
because it only calls the parent's <function>change_managed()</function>
method once.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-3">
<title>Algorithm
</title>
<para><function>XtUnmanageChildren()</function> performs the following:
</para>
<variablelist>
<varlistentry>
<term>-
</term>
<listitem>
<para>Ignores the child if it already is unmanaged or is being
destroyed.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-
</term>
<listitem>
<para>Otherwise, if the child is realized, it makes it nonvisible
by unmapping it.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-4">
<title>Structures</title>
<para>The <type>WidgetList</type> type is simply an array of widgets:
</para>
<screen id="sc-1007-unmanagechildren-1">typedef Widget *WidgetList;
</screen>
</refsect1>
</refentry>
</chapter>
<chapter id="faq">
<title>Questions and Answers</title>
<!-- (OPTIONAL but recommended) This chapter should include all of the silly
(and not-so-silly) newbie questions that fill up your mailbox. This chapter
should be reserved for BRIEF questions and answers! If one question uses more
than a page or so then it should probably be part of the
"Using this Application" chapter instead. You should use links to
cross-reference questions to the parts of your documentation that answer them.
This is also a great place to provide pointers to other FAQ's if your users
must do some complicated configuration on other programs in order for your
application work. -->
&reporting.bugs;
&updating.documentation;
<qandaset id="faqlist">
<qandaentry>
<question>
<para>My Mouse doesn't work. How do I quit &appname;?</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 can't I 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>
&appname;
</para>
<para>
Program copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email>
</para>
<para>
Contributors:
<itemizedlist>
<listitem><para>Konqui the KDE Dragon <email>konqui@kde.org</email></para>
</listitem>
<listitem><para>Tux the Linux Penguin <email>tux@linux.org</email></para>
</listitem>
</itemizedlist>
</para>
<para>
Documentation copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email>
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove -->
<!-- Determine which license your application is licensed under,
and delete all the remaining licenses below:
(NOTE: All documentation are licensed under the FDL,
regardless of what license the application uses) -->
&underGPL; <!-- GPL License -->
&underBSDLicense; <!-- BSD License -->
&underArtisticLicense; <!-- BSD Artistic License -->
&underX11License; <!-- X11 License -->
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-appname">
<title>How to obtain &appname;</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="requirements">
<title>Requirements</title>
<!--
List any special requirements for your application here. This should include:
.Libraries or other software that is not included in kdesupport,
kdelibs, or kdebase.
.Hardware requirements like amount of RAM, disk space, graphics card
capabilities, screen resolution, special expansion cards, etc.
.Operating systems the app will run on. If your app is designed only for a
specific OS, (you wrote a graphical LILO configurator for example) put this
information here.
-->
<para>
In order to successfully use &appname;, you need &kde; 1.1. Foobar.lib is
required in order to support the advanced &appname; features. &appname; uses
about 5 megs of memory to run, but this may vary depending on your
platform and configuration.
</para>
<para>
All required libraries as well as &appname; itself can be found
on <ulink url="ftp://ftp.appname.org">The &appname; home page</ulink>.
</para>
<!-- For a list of updates, you may refer to the application web site
or the ChangeLog file, or ... -->
<para>
You can find a list of changes at <ulink
url="http://apps.kde.org/appname">http://apps.kde.org/appname</ulink>.
</para>
</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>
<sect1 id="configuration">
<title>Configuration</title>
<para>Don't forget to tell your system to start the <filename>dtd</filename>
dicer-toaster daemon first, or &appname; won't work !</para>
</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:tabstop=2:shiftwidth=2:expandtab
-->

@ -0,0 +1 @@
.pot and .pot translation files should be placed here.

@ -0,0 +1,30 @@
#!/usr/bin/python
###########################################################################
# setup - description #
# ------------------------------ #
# begin : Fri Jun 27 2003 #
# copyright : (C) 2003-2004 by AUTHOR #
# email : YOUR@EMAIL.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
import kdedistutils
kdedistutils.setup(name="kdeapp",
version="0.1.0",
author="AUTHOR",
author_email="YOUR@EMAIL.com",
url="http://www.KDEAPP.com/",
min_kde_version = "3.0.0",
min_qt_version = "3.0.0",
license = "GPL",
application_data = ['src/kdeapp.py','src/prefdialog.py','src/kdeappview.py'],
executable_links = [('kdeapp','kdeapp.py')],
docbooks = [ ('doc/en','en') ] )

@ -0,0 +1,8 @@
‰PNG

IHDR
¸ŕ˙ MĽZŚńfθ92@ł
é2w”l†A;Ŕv“c)‡\)¬…/l Fö\˙žĎ“ß÷ů~źžSöŚüXşĹ¦©=t jĘ76şţ{rumuüę­_Š€% ľń}Ęf<C498>b{ńZéöRdYÁ7éC2ĘTWŐ“¦Ó˛ťăłO>Íf<>X˛ȵćĆ,F&/#Źx<Ž<>&Pµ·%]E«ÉÜC®f UĄŐSż»ďä
"Öl+˛˛˛Jă»Ç°<C387>M¨ŞJde…­Ů9Hzť]—qTÖPňBÉIŔ×
ŮÝ}±¦ÂQ±<51>•—‰ ¤bRŤ<52>˘łŞŇŰ÷€ ď]ánvďbf,ŔĂ»<C482>řçü:ŔLŃdÖ4€íPuCŔ ĘÔ7ÔňAK ÷\ýô^żĎź=.~ľöˇĺĐ|ŮŽ2łwÄË|xľđwÎN†Vd/RKë‡ç6ĽĆý+÷řćôɤ°ˇÄôÔĦú7fmcú5€ hr¬96“MŠD#xĆ=IaűŢOHxcú7=# “U¦DæoVĎi

@ -0,0 +1,26 @@
‰PNG

IHDR
:IDATxœ¥—{Œ\Õ}Ç?wîyÜ;;ûðâ}`¯<>õ®×k̲~&Žq¥R<C2A5>- H£„Gpk
PPJ£&(
´J¥¨EQþ©Ú4Iq QDHC~D6ØÂBص—×®ÙµÙ<C2B5>ÇÎÌ<C38E>™;Ï;<3B>Ó?f½1µ i{¤£«+]<5D>ï÷œóý}¿¿k<C2BF>ö_åòB”«e,Ë¢3²„Ö6”TضÍ3'Ÿ``ÙÀIe«m=½½¹§<C2B9>ü´ý‰¯}j ´¢^«w<C2AB>O<wìYë¯þkV_Ý˺˜xå,“¯MðÏ?ý.½½x!þ—c¤ÄŒô<C592>lÛ8¼ÕÞvßßoZ—¶ó÷ßÿ¿;ퟙ<“ØrÝVöí¾ÍŒOŽ»>ÿ™<C3BF>\Oü¾Àõz<C3B5>U#fhÅa7Œë†YÒÙI5¨rì—‡ÍÉÇùøµŸ@¹[
>±u;µj<C2B5>¿ùÛoš¯íQk╳ÿ?ç¢çÌÚ•kq×
£…-­ít/ïE(‰tB ¤£06 Ñse_¸û€ù·ýžõ¥?ºÿ²u­ÿ©<C3BF>»ì£Ñ<C2A3>Q3¼r)%H+B
Œ<EFBFBD>ÖŽ6´ë²CHW£ØRШ7ؾk33³ÌM¾Ïá_<dzGf¬XºbqíÕÀ@ï€YӷƬ\oÖ­Z‡ã8„B!</MP X½i-õzƒJ©ŒÐ§ÅA(AHØHGáD\æfcTJeÊùkV ³aõ lñÛYkÔ/¼rÐ õ
á:.®ãbŒ¡X,ò©[w²sï „ åyh­)
¼tè<14>†Á¢©a#” •H㶸äÓ>gÆ~ÃSo
“/äY58È—¿õç$ÓiÆÆßÄÏøTJjA
€5†¹0ù>
n¼å“ÜtçMt?±€ç<E282AC>gj|#O=]»žùd۶ȕr(¥Á¯ß±<C39F>¿z'N½Œ—Ì<E28094>Ïä)ûE
™<A±BP®0ùê[,íëfåÕýTƒR ¤Va#¥ ªø¦ÀÃ_yˆ‡ÿâ3zõ&ËKÍgAP¡T…Bcp—°nŠoó&þô+÷ðËNIfðS9ò©~*KÎËñÒŒMŽQ(˜MͲÿ÷²ãSŸFHA(d¡”Dj…m‡B`Œaï­·òÝïü£¹fhÔõz<C3B5>î¥Ý
c Ó³
PJ¢±8^*K.<2E>£àù³
žOP š>²ìå(Â--H­°, ©$•R…j9 Ÿõ‰'¢$²‰¢šz£Ž1†C/¼ÀÎ;8üâ >ô|pó-ûÁ¥°ÑZ“ÉfñRY¼x?™%7Ÿ!—Îà%ÓÄçc+EĪѡœmÛmbáî¤#Iœ<49>3xÍ A©BÑÏ3vnœF£Ñ4š¬£óqvîØÀSÿãíÏßu§B •BI<42>T
G)²^sç~*G&šb~.N46Ç©3§Hù©³ÀHèÀý_lÏ»%êµ:Ò¸m-dbi\×Å
YTÊR~
À3Æ`ŒáÊ®
¹±x”S§(WËeYÕÅ,8òäa{âQnÛ÷¹fí*±0%á¶þðöI—Ó]
¨Uöܲ!ìEg»(6-›¡ã:.JJ”T´EZ ªÇ^:E$â²rÝÀbâj¡q¥K*—"¬ÂÍL\
i#¤h†‡h-ÂÆM[½èérá½µ¥Gkå eóØíTN¾ršb¾H6•Å‰¸ô/ë <17>? h°e3Šµ«éìZ<5A>ˆTÍl—²*J6½])…ÙX ?—ÇC{Gë¯ZG½QçĽL¹T!ÊMdÈDS´/YÀµC×^š]M[?~£õîô›æÎ/ÜE,ž T(á¸BØ\¬oÛ¡ìÕ²,¦¦Ïãg}ò™<¥| Óh0ñú[,_µŒ H'<ò©Ù¸G*À5W¹fI뤧õ½¤ZX·yÿåßÍõ×m¥œ/áÍ%ÙuûMTk5¤aÇEkÅÔô éd¦ép©´O¥Øô·µ…eÃ+(Ê$gb¤ãó\8žã¯Ç/ù
·†l!0<>µZ<C2B5>W'^]ì,ËâÿBâwؼzõFƒî%Ýö<C39D>ž9-¥Þ+Ú® Ñh<C391>Χ±,«ÙðòÞbøûŽÿìl€\l4f7

@ -0,0 +1,35 @@
[Desktop Entry]
Encoding=UTF-8
Name=$APPNAME$
Exec=$APPNAMELC$ %i %m -caption "%c"
Icon=$APPNAMELC$
Type=Application
DocPath=$APPNAMELC$/$APPNAMELC$.html
Comment=A KDE KPart Application
Comment[ca]=Una aplicació KPart per a KDE
Comment[cy]=Cymhwysiad KPart KDE
Comment[da]=Et KDE KPart program
Comment[de]=Eine KDE-Komponenten-Anwendung
Comment[el]=Μια εφαρμογή KPart του KDE
Comment[es]=Una aplicación KPart de KDE
Comment[et]=KDE KPart rakendus
Comment[fr]=Une application KPart pour KDE.
Comment[hi]=एक केडीई के-पार्ट अनुप्रयोग
Comment[hu]=KPart-alapú KDE-alkalmazás
Comment[is]=KDE KPart forrit
Comment[it]=Applicazione KPart di KDE
Comment[ja]=KDE KPart アプリケーション
Comment[nb]=Et KDE KPart-program
Comment[nl]=Een KDE KPart-toepassing
Comment[pl]=Aplikacja KDE
Comment[pt]=Uma aplicação KPart do KDE
Comment[pt_BR]=Um Aplicativo KPart do KDE
Comment[ru]=Приложение KPart для KDE
Comment[sl]=Program KPart za KDE
Comment[sr]=KDE KPart програм
Comment[sr@Latn]=KDE KPart program
Comment[sv]=Ett KDE Kpart-program
Comment[ta]=கெடி கெபார்ட் பயன்பாடு
Comment[tg]=Ба кор андохтани KPart барои KDE
Comment[zh_CN]=一个 KDE KPart 应用程序
Terminal=0

@ -0,0 +1,16 @@
Begin3
Title: $APPNAME$ -- Some description
Version: $VERSION$
Entered-date:
Description:
Keywords: KDE Qt
Author: $AUTHOR$ <$EMAIL$>
Maintained-by: $AUTHOR$ <$EMAIL$>
Home-page:
Alternate-site:
Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils
xxxxxx $APPNAMELC$-$VERSION$.tar.gz
xxx $APPNAMELC$-$VERSION$.lsm
Platform: Linux. Needs KDE
Copying-policy: $LICENSE$
End

@ -0,0 +1,280 @@
#!/usr/bin/python
###########################################################################
# kdeapp - description #
# ------------------------------ #
# begin : Fri Jun 27 2005 #
# copyright : (C) 2005 by AUTHOR #
# email : your@email.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
from qt import *
from kdecore import *
from kdeui import *
import sys
from prefdialog import *
from kdeappview import *
description = "A KDE Application"
version = "0.1";
class KdeApp(KMainWindow):
def __init__(self):
KMainWindow.__init__(self,None,"KdeApp")
self._view = KdeAppView(self)
self._printer = None
# accept dnd
self.setAcceptDrops(True)
# tell the KMainWindow that this is indeed the main widget
self.setCentralWidget(self._view)
# then, setup our actions
self._setupActions()
# and a status bar
self.statusBar().show()
# Apply the create the main window and ask the mainwindow to
# automatically save settings if changed: window size, toolbar
# position, icon size, etc. Also to add actions for the statusbar
# toolbar, and keybindings if necessary.
self.setAutoSaveSettings()
# allow the view to change the statusbar and caption
self.connect(self._view, PYSIGNAL("signalChangeStatusbar"), self.changeStatusbar)
self.connect(self._view, PYSIGNAL("signalChangeCaption"), self.changeCaption)
def load(self,url):
target = QString()
# the below code is what you should normally do. in this
# example case, we want the url to our own. you probably
# want to use this code instead for your app
if False:
# download the contents
if KIO.NetAccess.download(url, target):
# set our caption
self.setCaption(url)
# load in the file (target is always local)
self.loadFile(target)
# and remove the temp file
KIO.NetAccess.removeTempFile(target)
self.setCaption(url.prettyURL())
self._view.openURL(url)
def _setupActions(self):
global kapp
KStdAction.openNew(self.fileNew, self.actionCollection())
KStdAction.open(self.fileOpen, self.actionCollection())
KStdAction.save(self.fileSave, self.actionCollection())
KStdAction.saveAs(self.fileSaveAs, self.actionCollection())
KStdAction.print_(self.filePrint, self.actionCollection())
KStdAction.quit(kapp.quit, self.actionCollection())
self._toolbarAction = KStdAction.showToolbar(self.optionsShowToolbar, self.actionCollection())
self._statusbarAction = KStdAction.showStatusbar(self.optionsShowStatusbar, self.actionCollection())
KStdAction.keyBindings(self.optionsConfigureKeys, self.actionCollection())
KStdAction.configureToolbars(self.optionsConfigureToolbars, self.actionCollection())
KStdAction.preferences(self.optionsPreferences, self.actionCollection())
# this doesn't do anything useful. it's just here to illustrate
# how to insert a custom menu and menu item
custom = KAction(i18n("Cus&tom Menuitem"), KShortcut(),
self.optionsPreferences,
self.actionCollection(), "custom_action")
self.createGUI()
def _saveProperties(self,config):
# the 'config' object points to the session managed
# config file. anything you write here will be available
# later when this app is restored
if not self._view.currentURL().isEmpty():
config.writeEntry("lastURL", self._view.currentURL())
def _readProperties(self,config):
# the 'config' object points to the session managed
# config file. this function is automatically called whenever
# the app is being restored. read in here whatever you wrote
# in 'saveProperties'
url = config.readPathEntry("lastURL")
if not url.isEmpty():
self._view.openURL(KURL(url))
def dragEnterEvent(self,event):
# accept uri drops only
event.accept(KURLDrag.canDecode(event))
def dropEvent(self,event):
# this is a very simplistic implementation of a drop event. we
# will only accept a dropped URL. the Qt dnd code can do *much*
# much more, so please read the docs there
urls = KURL.List()
# see if we can decode a URI.. if not, just ignore it
if KURLDrag.decode(event, urls) and not urls.isEmpty():
# okay, we have a URI.. process it
url = urls.first()
# load in the file
self.load(url)
def fileNew(self):
# this slot is called whenever the File->New menu is selected,
# the New shortcut is pressed (usually CTRL+N) or the New toolbar
# button is clicked
# create a new window
KdeApp().show()
def fileOpen(self):
# this slot is called whenever the File->Open menu is selected,
# the Open shortcut is pressed (usually CTRL+O) or the Open toolbar
# button is clicked
## this brings up the generic open dialog
#KURL url = KURLRequesterDlg::getURL(QString::null, this, i18n("Open Location") );
# standard filedialog
url = KFileDialog.getOpenURL(None, One, self, i18n("Open Location"))
if not url.isEmpty():
self._view.openURL(url)
def fileSave(self):
# this slot is called whenever the File->Save menu is selected,
# the Save shortcut is pressed (usually CTRL+S) or the Save toolbar
# button is clicked
# save the current file
pass
def fileSaveAs(self):
# this slot is called whenever the File->Save As menu is selected,
file_url = KFileDialog.getSaveURL()
if not file_url.isEmpty() and file_url.isValid():
# save your info, here
pass
def filePrint(self):
# this slot is called whenever the File->Print menu is selected,
# the Print shortcut is pressed (usually CTRL+P) or the Print toolbar
# button is clicked
if self._printer is None:
self._printer = KPrinter()
if self._printer.setup(self):
# setup the printer. with Qt, you always "print" to a
# QPainter.. whether the output medium is a pixmap, a screen,
# or paper
p = QPainter()
p.begin(self._printer)
# we let our view do the actual printing
metrics = QPaintDeviceMetrics(m_printer)
self._view.print_(p, metrics.height(), metrics.width())
# and send the result to the printer
p.end();
def optionsPreferences(self):
# popup some sort of preference dialog, here
dlg = PreferencesDialog()
if dlg.exec_loop():
# redo your settings
pass
def optionsShowToolbar(self):
# this is all very cut and paste code for showing/hiding the
# toolbar
if self._toolbarAction.isChecked():
self.toolBar().show()
else:
self.toolBar().hide()
def optionsShowStatusbar(self):
# this is all very cut and paste code for showing/hiding the
# statusbar
if self._statusbarAction.isChecked():
self.statusBar().show()
else:
self.statusBar().hide()
def optionsConfigureKeys(self):
KKeyDialog.configure(self.actionCollection())
def optionsConfigureToolbars(self):
# use the standard toolbar editor
self.saveMainWindowSettings(KGlobal.config())
def newToolbarConfig(self):
# this slot is called when user clicks "Ok" or "Apply" in the toolbar editor.
# recreate our GUI, and re-apply the settings (e.g. "text under icons", etc.)
self.createGUI()
self.applyMainWindowSettings(KGlobal.config())
def changeStatusbar(self,text):
# display the text on the statusbar
self.statusBar().message(text)
def changeCaption(self,text):
# display the text on the caption
self.setCaption(text)
options = [ ("+[URL]", "Document to open", "") ]
def main():
global kapp,version,description,options
aboutdata = KAboutData("kdeapp", "KdeApp", version, description, \
KAboutData.License_GPL, "(C) 2005 AUTHOR", None, None, "your@email.com")
aboutdata.addAuthor("AUTHOR", None, "your@email.com")
KCmdLineArgs.init(sys.argv,aboutdata)
KCmdLineArgs.addCmdLineOptions(options)
kapp = KApplication()
# register ourselves as a dcop client
kapp.dcopClient().registerAs(kapp.name(), False)
# see if we are starting with session management
if kapp.isRestored():
n = 1
while KMainWindow.canBeRestored(n):
KdeApp().restore(n)
n += 1
else:
# no session.. just start up normally
args = KCmdLineArgs.parsedArgs()
if args.count() == 0:
widget = KdeApp()
widget.show()
else:
i = 0
for i in range(args.count()):
widget = KdeApp()
widget.show()
widget.load(args.url(i))
args.clear()
return kapp.exec_loop()
main()

@ -0,0 +1,26 @@
#!/usr/bin/python
###########################################################################
# testappiface - description #
# ------------------------------ #
# begin : Fri Jun 27 2003 #
# copyright : (C) 2005 by AUTHOR #
# email : your@email.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
from dcopexport import DCOPExObj
class TestAppIface(DCOPExObj):
def __init__(self, parent, id="Value"):
DCOPExObj.__init__(self, id)
self.addMethod("void openURL(QString url)", self.openURL)
def openURL(self,url):
pass

@ -0,0 +1,8 @@
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
<kpartgui name="testapp" version="1">
<MenuBar>
<Menu name="custom"><text>C&amp;ustom</text>
<Action name="custom_action" />
</Menu>
</MenuBar>
</kpartgui>

@ -0,0 +1,91 @@
#!/usr/bin/python
###########################################################################
# kdeappview - description #
# ------------------------------ #
# begin : Fri Jun 27 2005 #
# copyright : (C) 2005 by AUTHOR #
# email : your@email.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
from qt import *
from kdecore import *
from kdeui import *
from kio import *
from khtml import *
from kparts import *
#from kdeappiface import *
class KdeAppView(QWidget):
def __init__(self,parent):
QWidget.__init__(self,parent)
#self._dcopclient= KdeAppIface(self,"KdeAppIface")
# setup our layout manager to automatically add our widgets
top_layout = QHBoxLayout(self)
top_layout.setAutoAdd(True)
if True:
self._html = KHTMLPart(self)
else:
# we want to look for all components that satisfy our needs. the
# trader will actually search through *all* registered KDE
# applications and components -- not just KParts. So we have to
# specify two things: a service type and a constraint
#
# the service type is like a mime type. we say that we want all
# applications and components that can handle HTML -- 'text/html'
#
# however, by itself, this will return such things as Netscape..
# not what we wanted. so we constrain it by saying that the
# string 'KParts/ReadOnlyPart' must be found in the ServiceTypes
# field. with this, only components of the type we want will be
# returned.
offers = KTrader.self().query("text/html", "'KParts/ReadOnlyPart' in ServiceTypes")
self._html = None
# in theory, we only care about the first one.. but let's try all
# offers just in case the first can't be loaded for some reason
for ptr in offers:
# we now know that our offer can handle HTML and is a part.
# since it is a part, it must also have a library... let's try to
# load that now
self._html = createReadOnlyPart(ptr.library(),self,ptr.name(),"KParts::ReadOnlyPart",QStringList())
if self._html is not None:
break
# if our factory is invalid, then we never found our component
# and we might as well just exit now
if self._html is None:
KMessageBox.error(self, i18n("Could not find a suitable HTML component"))
return
QObject.connect(self._html, SIGNAL("setWindowCaption(const QString&)"), self.slotSetTitle)
QObject.connect(self._html, SIGNAL("setStatusBarText(const QString&)"), self.slotOnURL)
def print_(self,p,height,width):
pass
# do the actual printing, here
# p.drawText(etc..)
def currentURL(self):
return self._html.url().url()
def openURL(self,url):
if isinstance(url,QString):
url = KURL(url)
self._html.openURL(url)
def slotOnURL(self,url):
self.emit(PYSIGNAL("signalChangeStatusbar"),(url,) )
def slotSetTitle(self,title):
self.emit(PYSIGNAL("signalChangeCaption"),(title,) )

@ -0,0 +1,53 @@
#!/usr/bin/python
###########################################################################
# testapp - description #
# ------------------------------ #
# begin : Fri Jun 27 2005 #
# copyright : (C) 2005 by AUTHOR #
# email : your@email.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
from qt import *
from kdecore import *
from kdeui import *
class TestAppPrefDialog(KDialogBase):
def __init__(self):
KDialogBase.__init__(TreeList, i18n("TestApp Preferences"),
KDialogBase.Help|KDialogBase.Default|KDialogBase.Ok|KDialogBase.Apply|KDialogBase.Cancel, Ok)
# this is the base class for your preferences dialog. it is now
# a Treelist dialog.. but there are a number of other
# possibilities (including Tab, Swallow, and just Plain)
frame = self.addPage(i18n("First Page"), i18n("Page One Options"))
self._pageOne = TestAppPrefPageOne(frame)
frame = self.addPage(i18n("Second Page"), i18n("Page Two Options"))
self._pageTwo = TestAppPrefPageTwo(frame)
class TestAppPrefPageOne(QFrame):
def __init__(self,parent):
QFrame.__init__(self,parent)
layout = QHBoxLayout(self)
layout.setAutoAdd(True)
QLabel(i18n("Add something here"), self)
class TestAppPrefPageTwo(QFrame):
def __init__(self,parent):
QFrame.__init__(self,parent)
layout = QHBoxLayout(self)
layout.setAutoAdd(True)
QLabel(i18n("Add something here"), self)

@ -0,0 +1 @@
$AUTHOR$ <$EMAIL$>

@ -0,0 +1,340 @@
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) <year> <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) year 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,43 @@
Basic Installation
==================
These are generic installation instructions.
This software uses the Python language's distutils system for installation.
A detailed guide for users and system administrators to using distutils to
install software can be found here:
http://docs.python.org/inst/inst.html
The simplest way to install this software is to run the following command as
the root user:
python setup.py install
The setup.py script will automatically detect the directories to use for
documentation, binaries and other software files.
Uninstallation
==============
During installation setup.py creates list of files and directories that
were installed in a file called install_log.txt.
python setup.py uninstall
Installing into an alternate root
=================================
For packaging purposes it is often very useful to be able to install all files
relative not to the usual root directory (/) but into an alternative
directory.
python setup.py install --root=/tmp/alternativeroot/
Operation Controls
==================
--verbose
Print more information about what setup.py is doing.
--help
Print a summary of the options to setup.py, and exit.

@ -0,0 +1,6 @@
recursive-include doc *.docbook *.png
recursive-include po *.po *.pot
include AUTHORS ChangeLog COPYING INSTALL MANIFEST.in NEWS README TODO
global-include *.desktop *.py *.ui *.png *.lsm
global-exclude *~ .svn
global-exclude *~ .cvs

@ -0,0 +1,555 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY appname "<application>MyApplicaition 0.1</application>">
<!ENTITY kappname "&appname;"><!-- Do *not* replace kappname-->
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc -->
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"><!-- change language only here -->
<!-- Do not define any other entities; instead, use the entities
from kde-genent.entities and $LANG/user.entities. -->
]>
<!-- kdoctemplate v0.8 October 1 1999
Minor update to "Credits and Licenses" section on August 24, 2000
Removed "Revision history" section on 22 January 2001
Changed to Installation/Help menu entities 18 October 2001
Other minor cleanup and changes 18 October 2001 -->
<!--
This template was designed by: David Rugge davidrugge@mindspring.com
with lots of help from: Eric Bischoff ebisch@cybercable.tm.fr
and Frederik Fouvry fouvry@sfs.nphil.uni-tuebingen.de
of the KDE DocBook team.
You may freely use this template for writing any sort of KDE documentation.
If you have any changes or improvements, please let us know.
Remember:
- in XML, the case of the <tags> and attributes is relevant ;
- also, quote all attributes.
Please don't forget to remove all these comments in your final documentation,
thanks ;-).
-->
<!-- ................................................................ -->
<!-- The language must NOT be changed here. -->
<book lang="&language;">
<!-- This header contains all of the meta-information for the document such
as Authors, publish date, the abstract, and Keywords -->
<bookinfo>
<title>The &appname; Handbook</title>
<authorgroup>
<author>
<firstname></firstname>
<othername></othername>
<surname>%{AUTHOR}</surname>
<affiliation>
<address><email>%{EMAIL}</email></address>
</affiliation>
</author>
</authorgroup>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
<copyright>
<year>1999</year>
<year>%{YEAR}</year>
<holder>%{AUTHOR}</holder>
</copyright>
<!-- Translators: put here the copyright notice of the translation -->
<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
and in the FDL itself on how to use it. -->
<legalnotice>&FDLNotice;</legalnotice>
<!-- Date and version information of the documentation
Don't forget to include this last date and this last revision number, we
need them for translation coordination !
Please respect the format of the date (YYYY-MM-DD) and of the version
(V.MM.LL), it could be used by automation scripts.
Do NOT change these in the translation. -->
<date>2001-10-18</date>
<releaseinfo>%{VERSION}</releaseinfo>
<!-- Abstract about this handbook -->
<abstract>
<para>
&appname; is an application specially designed to do nothing you would
ever want.
</para>
</abstract>
<!-- This is a set of Keywords for indexing by search engines.
Please at least include KDE, the KDE package it is in, the name
of your application, and a few relevant keywords. -->
<keywordset>
<keyword>KDE</keyword>
<keyword>%{APPNAME}</keyword>
<keyword>nothing</keyword>
<keyword>nothing else</keyword>
</keywordset>
</bookinfo>
<!-- The contents of the documentation begin here. Label
each chapter so with the id attribute. This is necessary for two reasons: it
allows you to easily reference the chapter from other chapters of your
document, and if there is no ID, the name of the generated HTML files will vary
from time to time making it hard to manage for maintainers and for the CVS
system. Any chapter labelled (OPTIONAL) may be left out at the author's
discretion. Other chapters should not be left out in order to maintain a
consistent documentation style across all KDE apps. -->
<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>
&appname; is a program that lets you do absolutely nothing. Please report
any problems or feature requests to the &kde; mailing lists.
</para>
</chapter>
<chapter id="using-appname">
<title>Using &appname;</title>
<!-- This chapter should tell the user how to use your app. You should use as
many sections (Chapter, Sect1, Sect3, etc...) as is necessary to fully document
your application. -->
<para>
<!-- Note that all graphics should be in .png format. Use no gifs because of
patent issues. -->
<screenshot>
<screeninfo>Here's a screenshot of &appname;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="screenshot.png" format="PNG"/>
</imageobject>
<imageobject>
<imagedata fileref="screenshot.eps" format="EPS"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<sect1 id="appname-features">
<title>More &appname; features</title>
<para>It slices! It dices! and it comes with a free toaster!</para>
<para>
The Squiggle Tool <guiicon><inlinemediaobject>
<imageobject>
<imagedata fileref="squiggle.png" format="PNG"/>
</imageobject>
<imageobject>
<imagedata fileref="squiggle.eps" format="EPS"/>
</imageobject>
<textobject>
<phrase>Squiggle</phrase>
</textobject>
</inlinemediaobject></guiicon> is used to draw squiggly lines all over
the &appname; main window. It's not a bug, it's a feature!
</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="appname-mainwindow">
<title>The main &appname; window</title>
<sect2>
<title>The File Menu</title>
<para>
<variablelist>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>New</guimenuitem>
</menuchoice></term>
<listitem><para><action>Creates a new document</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>S</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>Save</guimenuitem>
</menuchoice></term>
<listitem><para><action>Saves the document</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> &appname;</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 -->
<!-- &appname;, 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="developers">
<title>Developer's Guide to &appname;</title>
<!-- (OPTIONAL) A Programming/Scripting reference chapter should be
used for apps that use plugins or that provide their own scripting hooks
and/or development libraries. -->
<para>
Programming &appname; plugins is a joy to behold. Just read through the next
66 pages of API's to learn how!
</para>
<!-- Use refentries to describe APIs. Refentries are fairly complicated and you
should consult the docbook reference for further details. The example below was
taken from that reference and shortened a bit for readability. -->
<refentry id="re-1007-unmanagechildren-1">
<refmeta>
<refentrytitle>XtUnmanageChildren</refentrytitle>
<refmiscinfo>Xt - Geometry Management</refmiscinfo>
</refmeta>
<refnamediv>
<refname>XtUnmanageChildren
</refname>
<refpurpose>remove a list of children from a parent widget's managed
list.
<indexterm id="ix-1007-unmanagechildren-1"><primary>widgets</primary><secondary>removing</secondary></indexterm>
<indexterm id="ix-1007-unmanagechildren-2"><primary>XtUnmanageChildren</primary></indexterm>
</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refsynopsisdivinfo>
<date>4 March 1996</date>
</refsynopsisdivinfo>
<synopsis>
void XtUnmanageChildren(<replaceable class="parameter">children</replaceable>, <replaceable class="parameter">num_children</replaceable>)
WidgetList <replaceable class="parameter">children</replaceable>;
Cardinal <replaceable class="parameter">num_children</replaceable>;
</synopsis>
<refsect2 id="r2-1007-unmanagechildren-1">
<title>Inputs</title>
<variablelist>
<varlistentry>
<term><replaceable class="parameter">children</replaceable>
</term>
<listitem>
<para>Specifies an array of child widgets. Each child must be of
class RectObj or any subclass thereof.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable class="parameter">num_children</replaceable>
</term>
<listitem>
<para>Specifies the number of elements in <replaceable class="parameter">children</replaceable>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2></refsynopsisdiv>
<refsect1 id="r1-1007-unmanagechildren-1">
<title>Description
</title>
<para><function>XtUnmanageChildren()</function> unmaps the specified widgets
and removes them from their parent's geometry management.
The widgets will disappear from the screen, and (depending
on its parent) may no longer have screen space allocated for
them.
</para>
<para>Each of the widgets in the <replaceable class="parameter">children</replaceable> array must have
the same parent.
</para>
<para>See the &ldquo;Algorithm&rdquo; section below for full details of the
widget unmanagement procedure.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-2">
<title>Usage</title>
<para>Unmanaging widgets is the usual method for temporarily
making them invisible. They can be re-managed with
<function>XtManageChildren()</function>.
</para>
<para>You can unmap a widget, but leave it under geometry
management by calling <function>XtUnmapWidget()</function>. You can
destroy a widget's window without destroying the widget by
calling <function>XtUnrealizeWidget()</function>. You can destroy a
widget completely with <function>XtDestroyWidget()</function>.
</para>
<para>If you are only going to unmanage a single widget, it is
more convenient to call <function>XtUnmanageChild()</function>. It is
often more convenient to call <function>XtUnmanageChild()</function>
several times than it is to declare and initialize an array
of widgets to pass to <function>XtUnmanageChildren()</function>. Calling
<function>XtUnmanageChildren()</function> is more efficient, however,
because it only calls the parent's <function>change_managed()</function>
method once.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-3">
<title>Algorithm
</title>
<para><function>XtUnmanageChildren()</function> performs the following:
</para>
<variablelist>
<varlistentry>
<term>-
</term>
<listitem>
<para>Ignores the child if it already is unmanaged or is being
destroyed.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-
</term>
<listitem>
<para>Otherwise, if the child is realized, it makes it nonvisible
by unmapping it.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-4">
<title>Structures</title>
<para>The <type>WidgetList</type> type is simply an array of widgets:
</para>
<screen id="sc-1007-unmanagechildren-1">typedef Widget *WidgetList;
</screen>
</refsect1>
</refentry>
</chapter>
<chapter id="faq">
<title>Questions and Answers</title>
<!-- (OPTIONAL but recommended) This chapter should include all of the silly
(and not-so-silly) newbie questions that fill up your mailbox. This chapter
should be reserved for BRIEF questions and answers! If one question uses more
than a page or so then it should probably be part of the
"Using this Application" chapter instead. You should use links to
cross-reference questions to the parts of your documentation that answer them.
This is also a great place to provide pointers to other FAQ's if your users
must do some complicated configuration on other programs in order for your
application work. -->
&reporting.bugs;
&updating.documentation;
<qandaset id="faqlist">
<qandaentry>
<question>
<para>My Mouse doesn't work. How do I quit &appname;?</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 can't I 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>
&appname;
</para>
<para>
Program copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email>
</para>
<para>
Contributors:
<itemizedlist>
<listitem><para>Konqui the KDE Dragon <email>konqui@kde.org</email></para>
</listitem>
<listitem><para>Tux the Linux Penguin <email>tux@linux.org</email></para>
</listitem>
</itemizedlist>
</para>
<para>
Documentation copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email>
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove -->
<!-- Determine which license your application is licensed under,
and delete all the remaining licenses below:
(NOTE: All documentation are licensed under the FDL,
regardless of what license the application uses) -->
&underGPL; <!-- GPL License -->
&underBSDLicense; <!-- BSD License -->
&underArtisticLicense; <!-- BSD Artistic License -->
&underX11License; <!-- X11 License -->
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-appname">
<title>How to obtain &appname;</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="requirements">
<title>Requirements</title>
<!--
List any special requirements for your application here. This should include:
.Libraries or other software that is not included in kdesupport,
kdelibs, or kdebase.
.Hardware requirements like amount of RAM, disk space, graphics card
capabilities, screen resolution, special expansion cards, etc.
.Operating systems the app will run on. If your app is designed only for a
specific OS, (you wrote a graphical LILO configurator for example) put this
information here.
-->
<para>
In order to successfully use &appname;, you need &kde; 1.1. Foobar.lib is
required in order to support the advanced &appname; features. &appname; uses
about 5 megs of memory to run, but this may vary depending on your
platform and configuration.
</para>
<para>
All required libraries as well as &appname; itself can be found
on <ulink url="ftp://ftp.appname.org">The &appname; home page</ulink>.
</para>
<!-- For a list of updates, you may refer to the application web site
or the ChangeLog file, or ... -->
<para>
You can find a list of changes at <ulink
url="http://apps.kde.org/appname">http://apps.kde.org/appname</ulink>.
</para>
</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>
<sect1 id="configuration">
<title>Configuration</title>
<para>Don't forget to tell your system to start the <filename>dtd</filename>
dicer-toaster daemon first, or &appname; won't work !</para>
</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:tabstop=2:shiftwidth=2:expandtab
-->

@ -0,0 +1 @@
.pot and .pot translation files should be placed here.

@ -0,0 +1,31 @@
#!/usr/bin/python
###########################################################################
# setup - description #
# ------------------------------ #
# begin : Fri Jun 27 2005 #
# copyright : (C) 2005 by AUTHOR #
# email : YOUR@EMAIL.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
import kdedistutils
kdedistutils.setup(name="kdeutility",
version="0.1.0",
author="AUTHOR",
author_email="YOUR@EMAIL.com",
url="http://www.TESTAPP.com/",
min_kde_version = "3.0.0",
min_qt_version = "3.0.0",
license = "GPL",
application_data = ['src/kdeutility.py','src/KDEUtilityDialogUI.ui'],
executable_links = [('kdeutility','kdeutility.py')],
docbooks = [ ('doc/en','en') ],
i18n = ('po',['src']) )

@ -0,0 +1,33 @@
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>KDEUtilityDialogUI</class>
<widget class="QDialog">
<property name="name">
<cstring>KDEUtilityDialogUI</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>480</height>
</rect>
</property>
<property name="caption">
<string>KDE Utility</string>
</property>
<vbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="QPushButton">
<property name="name">
<cstring>hellobutton</cstring>
</property>
<property name="text">
<string>Hello, Good bye</string>
</property>
</widget>
</vbox>
</widget>
<layoutdefaults spacing="6" margin="11"/>
</UI>

@ -0,0 +1,8 @@
‰PNG

IHDR
¸ŕ˙ MĽZŚńfθ92@ł
é2w”l†A;Ŕv“c)‡\)¬…/l Fö\˙žĎ“ß÷ů~źžSöŚüXşĹ¦©=t jĘ76şţ{rumuüę­_Š€% ľń}Ęf<C498>b{ńZéöRdYÁ7éC2ĘTWŐ“¦Ó˛ťăłO>Íf<>X˛ȵćĆ,F&/#Źx<Ž<>&Pµ·%]E«ÉÜC®f UĄŐSż»ďä
"Öl+˛˛˛Jă»Ç°<C387>M¨ŞJde…­Ů9Hzť]—qTÖPňBÉIŔ×
ŮÝ}±¦ÂQ±<51>•—‰ ¤bRŤ<52>˘łŞŇŰ÷€ ď]ánvďbf,ŔĂ»<C482>řçü:ŔLŃdÖ4€íPuCŔ ĘÔ7ÔňAK ÷\ýô^żĎź=.~ľöˇĺĐ|ŮŽ2łwÄË|xľđwÎN†Vd/RKë‡ç6ĽĆý+÷řćôɤ°ˇÄôÔĦú7fmcú5€ hr¬96“MŠD#xĆ=IaűŢOHxcú7=# “U¦DæoVĎi

@ -0,0 +1,26 @@
‰PNG

IHDR
:IDATxœ¥—{Œ\Õ}Ç?wîyÜ;;ûðâ}`¯<>õ®×k̲~&Žq¥R<C2A5>- H£„Gpk
PPJ£&(
´J¥¨EQþ©Ú4Iq QDHC~D6ØÂBص—×®ÙµÙ<C2B5>ÇÎÌ<C38E>™;Ï;<3B>Ó?f½1µ i{¤£«+]<5D>ï÷œóý}¿¿k<C2BF>ö_åòB”«e,Ë¢3²„Ö6”TضÍ3'Ÿ``ÙÀIe«m=½½¹§<C2B9>ü´ý‰¯}j ´¢^«w<C2AB>O<wìYë¯þkV_Ý˺˜xå,“¯MðÏ?ý.½½x!þ—c¤ÄŒô<C592>lÛ8¼ÕÞvßßoZ—¶ó÷ßÿ¿;ퟙ<“ØrÝVöí¾ÍŒOŽ»>ÿ™<C3BF>\Oü¾Àõz<C3B5>U#fhÅa7Œë†YÒÙI5¨rì—‡ÍÉÇùøµŸ@¹[
>±u;µj<C2B5>¿ùÛoš¯íQk╳ÿ?ç¢çÌÚ•kq×
£…-­ít/ïE(‰tB ¤£06 Ñse_¸û€ù·ýžõ¥?ºÿ²u­ÿ©<C3BF>»ì£Ñ<C2A3>Q3¼r)%H+B
Œ<EFBFBD>ÖŽ6´ë²CHW£ØRШ7ؾk33³ÌM¾Ïá_<dzGf¬XºbqíÕÀ@ï€YӷƬ\oÖ­Z‡ã8„B!</MP X½i-õzƒJ©ŒÐ§ÅA(AHØHGáD\æfcTJeÊùkV ³aõ lñÛYkÔ/¼rÐ õ
á:.®ãbŒ¡X,ò©[w²sï „ åyh­)
¼tè<14>†Á¢©a#” •H㶸äÓ>gÆ~ÃSo
“/äY58È—¿õç$ÓiÆÆßÄÏøTJjA
€5†¹0ù>
n¼å“ÜtçMt?±€ç<E282AC>gj|#O=]»žùd۶ȕr(¥Á¯ß±<C39F>¿z'N½Œ—Ì<E28094>Ïä)ûE
™<A±BP®0ùê[,íëfåÕýTƒR ¤Va#¥ ªø¦ÀÃ_yˆ‡ÿâ3zõ&ËKÍgAP¡T…Bcp—°nŠoó&þô+÷ðËNIfðS9ò©~*KÎËñÒŒMŽQ(˜MͲÿ÷²ãSŸFHA(d¡”Dj…m‡B`Œaï­·òÝïü£¹fhÔõz<C3B5>î¥Ý
c Ó³
PJ¢±8^*K.<2E>£àù³
žOP š>²ìå(Â--H­°, ©$•R…j9 Ÿõ‰'¢$²‰¢šz£Ž1†C/¼ÀÎ;8üâ >ô|pó-ûÁ¥°ÑZ“ÉfñRY¼x?™%7Ÿ!—Îà%ÓÄçc+EĪѡœmÛmbáî¤#Iœ<49>3xÍ A©BÑÏ3vnœF£Ñ4š¬£óqvîØÀSÿãíÏßu§B •BI<42>T
G)²^sç~*G&šb~.N46Ç©3§Hù©³ÀHèÀý_lÏ»%êµ:Ò¸m-dbi\×Å
YTÊR~
À3Æ`ŒáÊ®
¹±x”S§(WËeYÕÅ,8òäa{âQnÛ÷¹fí*±0%á¶þðöI—Ó]
¨Uöܲ!ìEg»(6-›¡ã:.JJ”T´EZ ªÇ^:E$â²rÝÀbâj¡q¥K*—"¬ÂÍL\
i#¤h†‡h-ÂÆM[½èérá½µ¥Gkå eóØíTN¾ršb¾H6•Å‰¸ô/ë <17>? h°e3Šµ«éìZ<5A>ˆTÍl—²*J6½])…ÙX ?—ÇC{Gë¯ZG½QçĽL¹T!ÊMdÈDS´/YÀµC×^š]M[?~£õîô›æÎ/ÜE,ž T(á¸BØ\¬oÛ¡ìÕ²,¦¦Ïãg}ò™<¥| Óh0ñú[,_µŒ H'<ò©Ù¸G*À5W¹fI뤧õ½¤ZX·yÿåßÍõ×m¥œ/áÍ%ÙuûMTk5¤aÇEkÅÔô éd¦ép©´O¥Øô·µ…eÃ+(Ê$gb¤ãó\8žã¯Ç/ù
·†l!0<>µZ<C2B5>W'^]ì,ËâÿBâwؼzõFƒî%Ýö<C39D>ž9-¥Þ+Ú® Ñh<C391>Χ±,«ÙðòÞbøûŽÿìl€\l4f7

@ -0,0 +1,35 @@
[Desktop Entry]
Encoding=UTF-8
Name=$APPNAME$
Exec=$APPNAMELC$ %i %m -caption "%c"
Icon=$APPNAMELC$
Type=Application
DocPath=$APPNAMELC$/$APPNAMELC$.html
Comment=A KDE KPart Application
Comment[ca]=Una aplicació KPart per a KDE
Comment[cy]=Cymhwysiad KPart KDE
Comment[da]=Et KDE KPart program
Comment[de]=Eine KDE-Komponenten-Anwendung
Comment[el]=Μια εφαρμογή KPart του KDE
Comment[es]=Una aplicación KPart de KDE
Comment[et]=KDE KPart rakendus
Comment[fr]=Une application KPart pour KDE.
Comment[hi]=एक केडीई के-पार्ट अनुप्रयोग
Comment[hu]=KPart-alapú KDE-alkalmazás
Comment[is]=KDE KPart forrit
Comment[it]=Applicazione KPart di KDE
Comment[ja]=KDE KPart アプリケーション
Comment[nb]=Et KDE KPart-program
Comment[nl]=Een KDE KPart-toepassing
Comment[pl]=Aplikacja KDE
Comment[pt]=Uma aplicação KPart do KDE
Comment[pt_BR]=Um Aplicativo KPart do KDE
Comment[ru]=Приложение KPart для KDE
Comment[sl]=Program KPart za KDE
Comment[sr]=KDE KPart програм
Comment[sr@Latn]=KDE KPart program
Comment[sv]=Ett KDE Kpart-program
Comment[ta]=கெடி கெபார்ட் பயன்பாடு
Comment[tg]=Ба кор андохтани KPart барои KDE
Comment[zh_CN]=一个 KDE KPart 应用程序
Terminal=0

@ -0,0 +1,16 @@
Begin3
Title: $APPNAME$ -- Some description
Version: $VERSION$
Entered-date:
Description:
Keywords: KDE Qt
Author: $AUTHOR$ <$EMAIL$>
Maintained-by: $AUTHOR$ <$EMAIL$>
Home-page:
Alternate-site:
Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils
xxxxxx $APPNAMELC$-$VERSION$.tar.gz
xxx $APPNAMELC$-$VERSION$.lsm
Platform: Linux. Needs KDE
Copying-policy: $LICENSE$
End

@ -0,0 +1,51 @@
#!/usr/bin/python
###########################################################################
# kdeutility - description #
# ------------------------------ #
# begin : Mon May 2 2005 #
# copyright : (C) 2005 by AUTHOR #
# email : your@email.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
import sys
from qt import *
from kdecore import *
from kdeui import *
import kdedesigner
from KDEUtilityDialogUI import *
description = "A KDE Utility"
version = "0.1";
class KDEUtilityDialog(KDEUtilityDialogUI):
def __init__(self):
KDEUtilityDialogUI.__init__(self,None,"TestApp")
# Add other methods, slots and signals here.
options = [] # No command line options.
def main():
global kapp,version,description,options
aboutdata = KAboutData("kdeutility", "KdeUtility", version, description, \
KAboutData.License_GPL, "(C) 2005 AUTHOR", None, None, "your@email.com")
aboutdata.addAuthor("AUTHOR", None, "your@email.com")
KCmdLineArgs.init(sys.argv,aboutdata)
#KCmdLineArgs.addCmdLineOptions(options)
kapp = KApplication()
dialog = KDEUtilityDialog()
kapp.setMainWidget(dialog)
dialog.show()
return kapp.exec_loop()
main()

@ -0,0 +1 @@
$AUTHOR$ <$EMAIL$>

@ -0,0 +1,340 @@
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) <year> <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) year 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,43 @@
Basic Installation
==================
These are generic installation instructions.
This software uses the Python language's distutils system for installation.
A detailed guide for users and system administrators to using distutils to
install software can be found here:
http://docs.python.org/inst/inst.html
The simplest way to install this software is to run the following command as
the root user:
python setup.py install
The setup.py script will automatically detect the directories to use for
documentation, binaries and other software files.
Uninstallation
==============
During installation setup.py creates list of files and directories that
were installed in a file called install_log.txt.
python setup.py uninstall
Installing into an alternate root
=================================
For packaging purposes it is often very useful to be able to install all files
relative not to the usual root directory (/) but into an alternative
directory.
python setup.py install --root=/tmp/alternativeroot/
Operation Controls
==================
--verbose
Print more information about what setup.py is doing.
--help
Print a summary of the options to setup.py, and exit.

@ -0,0 +1,6 @@
recursive-include doc *.docbook *.png
recursive-include po *.po *.pot
include AUTHORS ChangeLog COPYING INSTALL MANIFEST.in NEWS README TODO
global-include *.desktop *.py *.ui *.png *.lsm
global-exclude *~ .svn
global-exclude *~ .cvs

@ -0,0 +1,555 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY appname "<application>MyApplicaition 0.1</application>">
<!ENTITY kappname "&appname;"><!-- Do *not* replace kappname-->
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc -->
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"><!-- change language only here -->
<!-- Do not define any other entities; instead, use the entities
from kde-genent.entities and $LANG/user.entities. -->
]>
<!-- kdoctemplate v0.8 October 1 1999
Minor update to "Credits and Licenses" section on August 24, 2000
Removed "Revision history" section on 22 January 2001
Changed to Installation/Help menu entities 18 October 2001
Other minor cleanup and changes 18 October 2001 -->
<!--
This template was designed by: David Rugge davidrugge@mindspring.com
with lots of help from: Eric Bischoff ebisch@cybercable.tm.fr
and Frederik Fouvry fouvry@sfs.nphil.uni-tuebingen.de
of the KDE DocBook team.
You may freely use this template for writing any sort of KDE documentation.
If you have any changes or improvements, please let us know.
Remember:
- in XML, the case of the <tags> and attributes is relevant ;
- also, quote all attributes.
Please don't forget to remove all these comments in your final documentation,
thanks ;-).
-->
<!-- ................................................................ -->
<!-- The language must NOT be changed here. -->
<book lang="&language;">
<!-- This header contains all of the meta-information for the document such
as Authors, publish date, the abstract, and Keywords -->
<bookinfo>
<title>The &appname; Handbook</title>
<authorgroup>
<author>
<firstname></firstname>
<othername></othername>
<surname>%{AUTHOR}</surname>
<affiliation>
<address><email>%{EMAIL}</email></address>
</affiliation>
</author>
</authorgroup>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
<copyright>
<year>1999</year>
<year>%{YEAR}</year>
<holder>%{AUTHOR}</holder>
</copyright>
<!-- Translators: put here the copyright notice of the translation -->
<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
and in the FDL itself on how to use it. -->
<legalnotice>&FDLNotice;</legalnotice>
<!-- Date and version information of the documentation
Don't forget to include this last date and this last revision number, we
need them for translation coordination !
Please respect the format of the date (YYYY-MM-DD) and of the version
(V.MM.LL), it could be used by automation scripts.
Do NOT change these in the translation. -->
<date>2001-10-18</date>
<releaseinfo>%{VERSION}</releaseinfo>
<!-- Abstract about this handbook -->
<abstract>
<para>
&appname; is an application specially designed to do nothing you would
ever want.
</para>
</abstract>
<!-- This is a set of Keywords for indexing by search engines.
Please at least include KDE, the KDE package it is in, the name
of your application, and a few relevant keywords. -->
<keywordset>
<keyword>KDE</keyword>
<keyword>%{APPNAME}</keyword>
<keyword>nothing</keyword>
<keyword>nothing else</keyword>
</keywordset>
</bookinfo>
<!-- The contents of the documentation begin here. Label
each chapter so with the id attribute. This is necessary for two reasons: it
allows you to easily reference the chapter from other chapters of your
document, and if there is no ID, the name of the generated HTML files will vary
from time to time making it hard to manage for maintainers and for the CVS
system. Any chapter labelled (OPTIONAL) may be left out at the author's
discretion. Other chapters should not be left out in order to maintain a
consistent documentation style across all KDE apps. -->
<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>
&appname; is a program that lets you do absolutely nothing. Please report
any problems or feature requests to the &kde; mailing lists.
</para>
</chapter>
<chapter id="using-appname">
<title>Using &appname;</title>
<!-- This chapter should tell the user how to use your app. You should use as
many sections (Chapter, Sect1, Sect3, etc...) as is necessary to fully document
your application. -->
<para>
<!-- Note that all graphics should be in .png format. Use no gifs because of
patent issues. -->
<screenshot>
<screeninfo>Here's a screenshot of &appname;</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="screenshot.png" format="PNG"/>
</imageobject>
<imageobject>
<imagedata fileref="screenshot.eps" format="EPS"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
</para>
<sect1 id="appname-features">
<title>More &appname; features</title>
<para>It slices! It dices! and it comes with a free toaster!</para>
<para>
The Squiggle Tool <guiicon><inlinemediaobject>
<imageobject>
<imagedata fileref="squiggle.png" format="PNG"/>
</imageobject>
<imageobject>
<imagedata fileref="squiggle.eps" format="EPS"/>
</imageobject>
<textobject>
<phrase>Squiggle</phrase>
</textobject>
</inlinemediaobject></guiicon> is used to draw squiggly lines all over
the &appname; main window. It's not a bug, it's a feature!
</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="appname-mainwindow">
<title>The main &appname; window</title>
<sect2>
<title>The File Menu</title>
<para>
<variablelist>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>New</guimenuitem>
</menuchoice></term>
<listitem><para><action>Creates a new document</action></para></listitem>
</varlistentry>
<varlistentry>
<term><menuchoice>
<shortcut>
<keycombo action="simul">&Ctrl;<keycap>S</keycap></keycombo>
</shortcut>
<guimenu>File</guimenu>
<guimenuitem>Save</guimenuitem>
</menuchoice></term>
<listitem><para><action>Saves the document</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> &appname;</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 -->
<!-- &appname;, 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="developers">
<title>Developer's Guide to &appname;</title>
<!-- (OPTIONAL) A Programming/Scripting reference chapter should be
used for apps that use plugins or that provide their own scripting hooks
and/or development libraries. -->
<para>
Programming &appname; plugins is a joy to behold. Just read through the next
66 pages of API's to learn how!
</para>
<!-- Use refentries to describe APIs. Refentries are fairly complicated and you
should consult the docbook reference for further details. The example below was
taken from that reference and shortened a bit for readability. -->
<refentry id="re-1007-unmanagechildren-1">
<refmeta>
<refentrytitle>XtUnmanageChildren</refentrytitle>
<refmiscinfo>Xt - Geometry Management</refmiscinfo>
</refmeta>
<refnamediv>
<refname>XtUnmanageChildren
</refname>
<refpurpose>remove a list of children from a parent widget's managed
list.
<indexterm id="ix-1007-unmanagechildren-1"><primary>widgets</primary><secondary>removing</secondary></indexterm>
<indexterm id="ix-1007-unmanagechildren-2"><primary>XtUnmanageChildren</primary></indexterm>
</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refsynopsisdivinfo>
<date>4 March 1996</date>
</refsynopsisdivinfo>
<synopsis>
void XtUnmanageChildren(<replaceable class="parameter">children</replaceable>, <replaceable class="parameter">num_children</replaceable>)
WidgetList <replaceable class="parameter">children</replaceable>;
Cardinal <replaceable class="parameter">num_children</replaceable>;
</synopsis>
<refsect2 id="r2-1007-unmanagechildren-1">
<title>Inputs</title>
<variablelist>
<varlistentry>
<term><replaceable class="parameter">children</replaceable>
</term>
<listitem>
<para>Specifies an array of child widgets. Each child must be of
class RectObj or any subclass thereof.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable class="parameter">num_children</replaceable>
</term>
<listitem>
<para>Specifies the number of elements in <replaceable class="parameter">children</replaceable>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2></refsynopsisdiv>
<refsect1 id="r1-1007-unmanagechildren-1">
<title>Description
</title>
<para><function>XtUnmanageChildren()</function> unmaps the specified widgets
and removes them from their parent's geometry management.
The widgets will disappear from the screen, and (depending
on its parent) may no longer have screen space allocated for
them.
</para>
<para>Each of the widgets in the <replaceable class="parameter">children</replaceable> array must have
the same parent.
</para>
<para>See the &ldquo;Algorithm&rdquo; section below for full details of the
widget unmanagement procedure.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-2">
<title>Usage</title>
<para>Unmanaging widgets is the usual method for temporarily
making them invisible. They can be re-managed with
<function>XtManageChildren()</function>.
</para>
<para>You can unmap a widget, but leave it under geometry
management by calling <function>XtUnmapWidget()</function>. You can
destroy a widget's window without destroying the widget by
calling <function>XtUnrealizeWidget()</function>. You can destroy a
widget completely with <function>XtDestroyWidget()</function>.
</para>
<para>If you are only going to unmanage a single widget, it is
more convenient to call <function>XtUnmanageChild()</function>. It is
often more convenient to call <function>XtUnmanageChild()</function>
several times than it is to declare and initialize an array
of widgets to pass to <function>XtUnmanageChildren()</function>. Calling
<function>XtUnmanageChildren()</function> is more efficient, however,
because it only calls the parent's <function>change_managed()</function>
method once.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-3">
<title>Algorithm
</title>
<para><function>XtUnmanageChildren()</function> performs the following:
</para>
<variablelist>
<varlistentry>
<term>-
</term>
<listitem>
<para>Ignores the child if it already is unmanaged or is being
destroyed.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-
</term>
<listitem>
<para>Otherwise, if the child is realized, it makes it nonvisible
by unmapping it.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-4">
<title>Structures</title>
<para>The <type>WidgetList</type> type is simply an array of widgets:
</para>
<screen id="sc-1007-unmanagechildren-1">typedef Widget *WidgetList;
</screen>
</refsect1>
</refentry>
</chapter>
<chapter id="faq">
<title>Questions and Answers</title>
<!-- (OPTIONAL but recommended) This chapter should include all of the silly
(and not-so-silly) newbie questions that fill up your mailbox. This chapter
should be reserved for BRIEF questions and answers! If one question uses more
than a page or so then it should probably be part of the
"Using this Application" chapter instead. You should use links to
cross-reference questions to the parts of your documentation that answer them.
This is also a great place to provide pointers to other FAQ's if your users
must do some complicated configuration on other programs in order for your
application work. -->
&reporting.bugs;
&updating.documentation;
<qandaset id="faqlist">
<qandaentry>
<question>
<para>My Mouse doesn't work. How do I quit &appname;?</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 can't I 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>
&appname;
</para>
<para>
Program copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email>
</para>
<para>
Contributors:
<itemizedlist>
<listitem><para>Konqui the KDE Dragon <email>konqui@kde.org</email></para>
</listitem>
<listitem><para>Tux the Linux Penguin <email>tux@linux.org</email></para>
</listitem>
</itemizedlist>
</para>
<para>
Documentation copyright %{YEAR} %{AUTHOR} <email>%{EMAIL}</email>
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove -->
<!-- Determine which license your application is licensed under,
and delete all the remaining licenses below:
(NOTE: All documentation are licensed under the FDL,
regardless of what license the application uses) -->
&underGPL; <!-- GPL License -->
&underBSDLicense; <!-- BSD License -->
&underArtisticLicense; <!-- BSD Artistic License -->
&underX11License; <!-- X11 License -->
</chapter>
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-appname">
<title>How to obtain &appname;</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="requirements">
<title>Requirements</title>
<!--
List any special requirements for your application here. This should include:
.Libraries or other software that is not included in kdesupport,
kdelibs, or kdebase.
.Hardware requirements like amount of RAM, disk space, graphics card
capabilities, screen resolution, special expansion cards, etc.
.Operating systems the app will run on. If your app is designed only for a
specific OS, (you wrote a graphical LILO configurator for example) put this
information here.
-->
<para>
In order to successfully use &appname;, you need &kde; 1.1. Foobar.lib is
required in order to support the advanced &appname; features. &appname; uses
about 5 megs of memory to run, but this may vary depending on your
platform and configuration.
</para>
<para>
All required libraries as well as &appname; itself can be found
on <ulink url="ftp://ftp.appname.org">The &appname; home page</ulink>.
</para>
<!-- For a list of updates, you may refer to the application web site
or the ChangeLog file, or ... -->
<para>
You can find a list of changes at <ulink
url="http://apps.kde.org/appname">http://apps.kde.org/appname</ulink>.
</para>
</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>
<sect1 id="configuration">
<title>Configuration</title>
<para>Don't forget to tell your system to start the <filename>dtd</filename>
dicer-toaster daemon first, or &appname; won't work !</para>
</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:tabstop=2:shiftwidth=2:expandtab
-->

@ -0,0 +1,30 @@
#!/usr/bin/python
###########################################################################
# setup - description #
# ------------------------------ #
# begin : Fri Jun 27 2005 #
# copyright : (C) 2005 by AUTHOR #
# email : YOUR@EMAIL.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
import kdedistutils
kdedistutils.setup(name="kioslave",
version="0.1.0",
author="AUTHOR",
author_email="YOUR@EMAIL.com",
url="http://www.TESTAPP.com/",
min_kde_version = "3.0.0",
min_qt_version = "3.0.0",
license = "GPL",
application_data = ['src/kioslave.py'],
docbooks = [ ('doc/en','en') ],
kioslaves = [ ('src/kioslave.protocol','kioslave.py')] )

@ -0,0 +1,16 @@
Begin3
Title: $APPNAME$ -- Some description
Version: $VERSION$
Entered-date:
Description:
Keywords: KDE Qt
Author: $AUTHOR$ <$EMAIL$>
Maintained-by: $AUTHOR$ <$EMAIL$>
Home-page:
Alternate-site:
Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils
xxxxxx $APPNAMELC$-$VERSION$.tar.gz
xxx $APPNAMELC$-$VERSION$.lsm
Platform: Linux. Needs KDE
Copying-policy: $LICENSE$
End

@ -0,0 +1,13 @@
[Protocol]
exec=kioslave
protocol=kioslave
input=none
output=filesystem
listing=Name,Type,Size,Date
reading=true
writing=true
makedir=true
deleting=true
linking=false
moving=true
maxInstances=1

@ -0,0 +1,618 @@
#!/usr/bin/python
###########################################################################
# kioslave - description #
# ------------------------------ #
# begin : Mon May 2 2005 #
# copyright : (C) 2005 by AUTHOR #
# email : your@email.com #
# #
###########################################################################
# #
# 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. #
# #
###########################################################################
# Import the required Qt and KDE modules.
from qt import *
from kio import *
from kdecore import *
import os, time
# For debugging purposes, import the sys and traceback modules.
import sys, traceback
DEBUG = 1
# Define a class which will be used to create IOSlave instances.
############################################################################
class SlaveClass(KIO.SlaveBase):
"""SlaveClass(KIO.SlaveBase)
See kdelibs/kio/kio/slavebase.h for virtual functions to override.
"""
########################################################################
def __init__(self, pool, app):
# We must call the initialisation method of the base class.
KIO.SlaveBase.__init__(self, "kioslave", pool, app)
# Attach the DCOP client object associated with this IOSlave to the
# DCOP server.
self.dcopClient().attach()
self.debug("dcopClient: %i" % self.dcopClient().isRegistered())
self.contents = RAMDir(None,u"/")
self.host = ""
self.document = None
self.file = None
self.debug("Exiting __init__ now");
########################################################################
def __del__(self):
pass
########################################################################
# KIO.SlaveBase method
def setHost(self, host, port, user, passwd):
self.debug(
"setHost: %s %s %s %s" % (
repr(unicode(host)), repr(unicode(port)),
repr(unicode(user)), repr(unicode(passwd))
)
)
# This IOSlave does not allow a host to be specified as part of
# a URL.
if unicode(host) != u"":
self.closeConnection()
self.error(KIO.ERR_MALFORMED_URL, host)
return
########################################################################
# KIO.SlaveBase method
def openConnection(self):
# Don't call self.finished() in this method.
self.debug("openConnection")
########################################################################
# KIO.SlaveBase method
def closeConnection(self):
# Don't call self.finished() in this method.
self.debug("closeConnection")
########################################################################
# KIO.SlaveBase method
def get(self, url):
path = str(url.path())
self.debug("get(): %s" % path)
self.openConnection()
item = self.contents.resolve(path)
if item is None:
self.error(KIO.ERR_DOES_NOT_EXIST, path)
return
if item.isDir():
self.error(KIO.ERR_IS_DIRECTORY, path)
self.totalSize(len(item.getData()))
self.data(QByteArray(item.getData()))
# The end of the data string.
self.data(QByteArray())
self.finished()
########################################################################
# KIO.SlaveBase method
def put(self, url, permissions, overwrite, resume):
self.debug("put")
self.openConnection()
path = str(url.path())
parts = path.split('/')
filename = parts[-1]
parent_dir = self.contents.resolveParent(path)
if parent_dir is None:
parent_path = '/'.join(parts[:-1])
self.error(KIO.ERR_DOES_NOT_EXIST, parent_path)
return
if parent_dir.contains(filename):
if not overwrite:
self.error(KIO.ERR_COULD_NOT_WRITE, parent_path)
return
else:
parent_dir.unlink(filename)
# Read data from the application.
bytearray = QByteArray()
bytes = 0
data = ""
while True:
self.dataReq()
result = self.readData(bytearray)
if result <= 0:
# An error or the end of data was encountered.
break
# The number of bytes read is given in the result.
bytes = bytes + result
data = data + str(bytearray)
parent_dir.insert(RAMFile(parent_dir,filename,data))
self.finished()
########################################################################
# KIO.SlaveBase method
def stat(self, url):
self.debug("stat: %s" % url.url(0,0))
self.openConnection()
self.debug("path:%s"% url.path())
# Return info the for the root.
item = self.contents.resolve(str(url.path()))
if item is None:
self.error(KIO.ERR_DOES_NOT_EXIST, str(url.path()))
return
self.statEntry(item.getStatEntry())
self.finished()
########################################################################
# KIO.SlaveBase method
def mimetype(self, url):
self.debug("mimetype: %s" % unicode(url))
self.openConnection()
path = str(url.path())
item = self.contents.resolve(path)
if item is None:
self.error(KIO.ERR_DOES_NOT_EXIST, path)
return
self.mimeType(item.getMimetype())
self.finished()
########################################################################
# KIO.SlaveBase method
def listDir(self, url):
# The "url" argument is a kdecore.KURL object.
self.debug("listDir: %s" % str(url.prettyURL(0)))
self.openConnection()
path = str(url.path())
dir = self.contents.resolve(path)
if dir is None:
self.error(KIO.ERR_DOES_NOT_EXIST, path)
return
if not dir.isDir():
self.error(KIO.ERR_IS_FILE, path)
return
for entry in dir.listDir():
self.listEntry(entry, 0)
self.listEntry([], 1) # Signal that the list is finished.
self.finished()
########################################################################
# KIO.SlaveBase method
def mkdir(self, url, permissions):
self.debug("mkdir")
self.openConnection()
parent_path = str(url.path())
parent_dir = self.contents.resolveParent(parent_path)
if parent_dir is None:
self.error(KIO.ERR_DOES_NOT_EXIST, parent_path)
return
new_dir_obj = parent_dir.mkdir(parent_path.split('/')[-1])
if new_dir_obj is None:
self.error(KIO.ERR_COULD_NOT_MKDIR, parent_path)
return
self.finished()
########################################################################
# KIO.SlaveBase method
def rename(self, src, dest, overwrite):
self.debug("rename: %s %s" % (src.path(), dest.path()))
self.openConnection()
src_path = str(src.path())
src_obj = self.contents.resolve(src_path)
if src_obj is None:
self.error(KIO.ERR_DOES_NOT_EXIST, src_path)
return
# See if the destination path already exists.
dest_path = str(dest.path())
dest_obj = self.contents.resolve(dest_path)
if dest_obj is not None:
if dest_obj is src_obj:
self.finished() # Done already.
return
if not overwrite:
# Can't overwrite. not bad.
self.error(KIO.ERR_CANNOT_RENAME, dest_path)
return
else:
# Over write, just remove the object.
dest_obj.getParent().unlink(dest_obj.getName())
dest_dir = self.contents.resolveParent(dest_path)
if dest_dir is None:
self.error(KIO.ERR_DOES_NOT_EXIST, dest_path)
return
src_obj.getParent().unlink(src_obj)
src_obj.setName(dest_path.split('/')[-1])
dest_dir.insert(src_obj)
self.finished()
# Other possible file operations are represented by the following
# methods which are not implemented.
#def symlink(self, target, dest, overwrite):
# debug("symlink")
# ...
# self.finished()
#def chmod(self, url, permissions):
# debug("chmod")
# ...
# self.finished()
########################################################################
# KIO.SlaveBase method
def copy(self, src, dest, permissions, overwrite):
self.debug("copy")
self.openConnection()
src_path = str(src.path())
src_obj = self.contents.resolve(src_path)
if src_obj is None:
self.error(KIO.ERR_DOES_NOT_EXIST, src_path)
return
# See if the destination path already exists.
dest_path = str(dest.path())
dest_obj = self.contents.resolve(dest_path)
if dest_obj is not None:
if dest_obj is src_obj:
self.finished() # Done already.
return
if not overwrite:
# Can't overwrite. not bad.
self.error(KIO.ERR_COULD_NOT_WRITE, dest_path)
return
else:
# Over write, just remove the object.
dest_obj.getParent().unlink(dest_obj.getName())
dest_dir = self.contents.resolveParent(dest_path)
if dest_dir is None:
self.error(KIO.ERR_DOES_NOT_EXIST, dest_path)
return
new_obj = src_obj.copy()
new_obj.setName(dest_path.split('/')[-1])
dest_dir.insert(new_obj)
self.finished()
########################################################################
# KIO.SlaveBase method
def del_(self, url, isfile):
self.debug("del_")
self.openConnection()
path = str(url.path())
item = self.contents.resolve(path)
if item is None:
self.error(KIO.ERR_DOES_NOT_EXIST, path)
return
item.getParent().unlink(item.getName())
self.finished()
########################################################################
# KIO.SlaveBase method
def disconnectSlave(self):
self.debug("disconnectSlave")
return
########################################################################
# KIO.SlaveBase method
def dispatchLoop(self):
self.debug("dispatchLoop")
KIO.SlaveBase.dispatchLoop(self)
########################################################################
# KIO.SlaveBase method
def error(self,errid,text):
self.debug("error: %i, %s" % (errid,text) )
KIO.SlaveBase.error(self,errid,text)
############################################################################
def debug(self,msg):
if DEBUG == 0: return
print "kioslave:"+str(msg)+"\n"
sys.stdout.flush()
############################################################################
class RAMDir(object):
############################################################################
def __init__(self,parent,name):
self.contents = {}
self.parent = parent
self.name = str(name)
############################################################################
def getParent(self):
return self.parent
############################################################################
def setParent(self,parent):
self.parent = parent
############################################################################
def getName(self):
return self.name
############################################################################
def setName(self,name):
self.name = str(name)
############################################################################
def resolve(self,path):
while path.endswith('/'):
path = path[:-1]
while path.startswith('/'):
path = path[1:]
if path=='':
return self
parts = path.split('/')
self.debug(path)
for item in self.contents.keys():
self.debug("keys:"+item)
if parts[0] in self.contents:
return self.contents[parts[0]].resolve('/'.join(parts[1:]))
self.debug("CHECKPOINT 1")
return None
############################################################################
def resolveParent(self,path):
while path.endswith('/'):
path = path[:-1]
while path.startswith('/'):
path = path[1:]
if path=="":
return None
parts = path.split('/')
return self.resolve('/'.join(parts[:-1]))
############################################################################
def mkdir(self,name):
if name in self.contents:
return None
new_dir = RAMDir(self,name)
self.contents[name] = new_dir
return new_dir
############################################################################
def getStatEntry(self):
# Return info the for the root.
length = 0
entry = []
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_NAME
atom.m_str = self.name
#debug("name: %s" % name)
entry.append(atom)
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_SIZE
atom.m_long = length
#debug("length: %i" % length)
entry.append(atom)
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_MODIFICATION_TIME
# Number of seconds since the epoch.
atom.m_long = int(time.time())
entry.append(atom)
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_ACCESS
# The usual octal permission information (rw-r--r-- in this case).
atom.m_long = 0644
entry.append(atom)
# If the stat method is implemented then entries _must_ include
# the UDE_FILE_TYPE atom or the whole system may not work at all.
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_FILE_TYPE
#atom.m_long = os.path.stat.S_IFREG
atom.m_long = os.path.stat.S_IFDIR
entry.append(atom)
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_MIME_TYPE
atom.m_str = self.getMimetype()
entry.append(atom)
return entry
############################################################################
def listDir(self):
list = []
for item in self.contents.values():
list.append(item.getStatEntry())
return list
############################################################################
def isDir(self):
return True
############################################################################
def insert(self,item):
self.contents[item.getName()] = item
############################################################################
def contains(self,name):
return name in self.contents
############################################################################
def unlink(self,name):
if str(name) in self.contents:
del self.contents[str(name)]
############################################################################
def debug(self,msg):
if DEBUG == 0: return
print "kioslave:"+str(msg)+"\n"
sys.stdout.flush()
############################################################################
def getMimetype(self):
return "inode/directory"
############################################################################
def copy(self):
new_dir = RAMDir(None,self.name)
for item in self.contents.values():
new_item = item.copy()
new_item.setParent(new_dir)
new_dir.insert(new_item)
return new_dir
############################################################################
class RAMFile(object):
############################################################################
def __init__(self,parent,name,data=None):
self.parent = parent
self.name = str(name)
self.data = data
############################################################################
def getParent(self):
return self.parent
############################################################################
def setParent(self,parent):
self.parent = parent
############################################################################
def getName(self):
return self.name
############################################################################
def setName(self,name):
self.name = str(name)
############################################################################
def resolve(self,path):
if path!="":
return None
return self
############################################################################
def getData(self):
return self.data
############################################################################
def resolveParent(self,path):
return None
############################################################################
def getStatEntry(self):
# Return info the for the root.
length = 0
entry = []
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_NAME
atom.m_str = self.name
#debug("name: %s" % name)
entry.append(atom)
length = 0
if self.data is not None:
length = len(self.data)
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_SIZE
atom.m_long = length
#debug("length: %i" % length)
entry.append(atom)
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_MODIFICATION_TIME
# Number of seconds since the epoch.
atom.m_long = int(time.time())
entry.append(atom)
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_ACCESS
# The usual octal permission information (rw-r--r-- in this case).
atom.m_long = 0644
entry.append(atom)
# If the stat method is implemented then entries _must_ include
# the UDE_FILE_TYPE atom or the whole system may not work at all.
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_FILE_TYPE
atom.m_long = os.path.stat.S_IFREG
entry.append(atom)
atom = KIO.UDSAtom()
atom.m_uds = KIO.UDS_MIME_TYPE
atom.m_str = self.getMimetype()
entry.append(atom)
return entry
############################################################################
def isDir(self):
return False
############################################################################
def getMimetype(self):
return "text/html"
############################################################################
def copy(self):
return RAMFile(None,self.name,self.data)
############################################################################
def SlaveFactory(pool, app):
slave = SlaveClass(pool, app)
slave.dispatchLoop()

@ -0,0 +1,874 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY appname "<application>PyKDE Extensions</application>">
<!ENTITY kappname "&appname;"><!-- Do *not* replace kappname-->
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc -->
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"><!-- change language only here -->
<!-- Do not define any other entities; instead, use the entities
from kde-genent.entities and $LANG/user.entities. -->
]>
<!-- ................................................................ -->
<!-- The language must NOT be changed here. -->
<book lang="&language;">
<bookinfo>
<title>The &appname; Handbook</title>
<authorgroup>
<author>
<firstname>Simon</firstname>
<othername></othername>
<surname>Edwards</surname>
<affiliation>
<address><email>simon@simonzone.com</email></address>
</affiliation>
</author>
</authorgroup>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
<copyright>
<year>2005</year>
<holder>Simon Edwards</holder>
</copyright>
<!-- Translators: put here the copyright notice of the translation -->
<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
and in the FDL itself on how to use it. -->
<legalnotice>&FDLNotice;</legalnotice>
<!-- Date and version information of the documentation
Don't forget to include this last date and this last revision number, we
need them for translation coordination !
Please respect the format of the date (YYYY-MM-DD) and of the version
(V.MM.LL), it could be used by automation scripts.
Do NOT change these in the translation. -->
<date>2005-09-19</date>
<releaseinfo>0.4</releaseinfo>
<!-- Abstract about this handbook -->
<abstract>
<para>
&appname; is a collection of software and Python packages to support the
creation and installation of KDE applications.
</para>
</abstract>
<!-- This is a set of Keywords for indexing by search engines.
Please at least include KDE, the KDE package it is in, the name
of your application, and a few relevant keywords. -->
<keywordset>
<keyword>KDE</keyword>
<keyword>PyKDE Extensions</keyword>
<keyword>python</keyword>
<keyword>PyKDE</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Introduction</title>
<para>
&appname; is a collection of software and Python packages to support the
creation and installation of KDE applications.
</para>
</chapter>
<!-- distutils -->
<chapter id="distutils">
<title>Installation &amp; Distutils support</title>
<para>
C++ projects on KDE traditionally use
<ulink url="http://www.gnu.org/software/autoconf/">autoconf</ulink>,
<ulink url="http://www.gnu.org/software/automake/">automake</ulink>
and <ulink url="http://www.gnu.org/software/libtool/">libtool</ulink>
to handle the building and installation. These tools
and difficult to use, even for experianced developers.
</para>
<para>
Fortunately Python has a its own system for building and installing
modules and software. <ulink url="http://docs.python.org/lib/module-distutils.html">Distutils</ulink>
is a standard Python package and comes with every Python installation.
&appname; builds on Distutils with extensions tailored for handling KDE
programs.
</para>
<para>
A typical KDE program comes not only with the program itself but also
extra files such as a manual written in <ulink url="http://i18n.kde.org/doc/markup/">Docbook
format</ulink>, <ulink url="http://i18n.kde.org/translation-howto/">translation files</ulink>,
icons, images and other auxiliary data files. &appname; provides support for
handling all these other files types.
</para>
<sect1 id="distutils-using">
<title>Using Distutils with KDE programs</title>
<para>
It is advised that you first read the standard
<ulink url="http://docs.python.org/lib/module-distutils.html">Distutils documentation</ulink>
to learn about how it works. &appname; adds some KDE specific extensions which are documented
below.
</para>
<para>
Distutils is based around writing a <filename>setup.py</filename> file which
then uses the distutils package
To use the KDE extensions, the first thing you need to do in your <filename>setup.py
</filename> file is include the <symbol>kdedistutils</symbol> package.
<programlisting>
#!/usr/bin/env python
# Setup.py file for MyKDEApplication
import kdedistutils
</programlisting>
You need to call the <symbol>setup()</symbol> function from <symbol>kdedistutils</symbol>
with all of the configuration information about your application, much like the standard
<symbol>setup()</symbol> from <symbol>distutils</symbol>.
<programlisting>
kdedistutils.setup(name="pykdeextensions",
version="0.1.0",
author="Simon Edwards",
author_email="simon@simonzone.com",
url="http://www.simonzone.com/software/pykdeextensions/",
min_kde_version = "3.0.0",
min_qt_version = "3.0.0",
license = "LGPL" )
</programlisting>
<symbol>min_kde_version</symbol> and <symbol>min_qt_version</symbol> specify
the minimum versions of the Qt library and KDE needed to install and run
the software. These requirements are checked during install.
</para>
<para>
The other arguments shown here are standard <symbol>distutils.setup()</symbol>
arguments.
</para>
</sect1>
<sect1 id="distutils-files">
<title>Application data files</title>
<para>
Each KDE application as a data directory of it's own for storing any extra
data files it may need to run.
</para>
<para>
Data files are specified using the the <symbol>application_data</symbol>
argument for <symbol>setup()</symbol>. <symbol>application_data</symbol>
is a list of files to install.
<programlisting>
application_data = ['extracode.py', ('pics', ['pics/warning.png'])]
</programlisting>
You can simply specify the name of each file as a string and they will be
installed directly in the application data directory. Or you can use a tuple
containing the name of the sub-directory under the application data directory
to install into, and as the second tuple item, the list of files to install
into the given sub-directory.
</para>
<para>
Since most large Python programs are broken up into multiple source files
it is recommended that all of the Python files that comprise your
application be installed into the application directory. This helps eliminate
problems with the Python module path and the interpreter not being able
find the correct file to <symbol>import</symbol>.
</para>
<para>
Even with all of the python files in the Application data directory, it is
still desirable to have your application's "executables" available in KDE's
<filename>bin</filename> directory. &appname; provides an easy way for creating
symbolic links from the "bin" directory to scripts in the application
directory.
<programlisting>
executable_links = [('myapplication','myapplication.py'), ('myapplicationgui','myapplicationgui.py')]
</programlisting>
This example specifies an executable symbolic link <filename>myapplication
</filename> that points to the <filename>myapplication.py</filename> script
in the application data directory.
</para>
</sect1>
<sect1 id="distutils-uninstall">
<title>Uninstall command</title>
<para>
Standard Distutils does not feature an uninstall command. &appname; does
and it can be easily invoked with:
<screen>
python setup.py uninstall
</screen>
It is quite basic. The <symbol>install</symbol> writes the list of files
it installed to the file <filename>install_log.txt</filename>. The
<symbol>uninstall</symbol> command simply reads this file and removes the
files and directories that are listed within.
</para>
</sect1>
</chapter>
<chapter id="distutils-docbook">
<title>Manuals &amp; Docbook files</title>
<para>
Docbook is an XML based file format for writing manuals and books.
More information about using Docbook to write manuals and documentation using
Docbook is <ulink url="http://i18n.kde.org/doc/markup/">here</ulink>.
Manuals are written in the Docbook format, but need to be converted
into HTML when installed and made available for the KDE Help Center.
</para>
<para>
Docbooks files and images are usually organised under a
<filename>doc</filename> directory which is then further divided by two
letter language code. For example <filename>doc/en</filename>,
<filename>doc/nl</filename>, en <filename>doc/fr</filename>.
The Docbook files themselves are named <filename>index.docbook</filename>
</para>
<para>
By using the <symbol>docbooks</symbol> argument to <symbol>setup()</symbol>
in your <filename>setup.py</filename>, you can specify the directories
containing docbook files. You also need to specify the language used in
that directory.
<programlisting>
docbooks = [ ('doc/en','en'), ('doc/nl','nl'), ('doc/fr','fr') ]
</programlisting>
The argument to <symbol>docbooks</symbol> is a list of tuples. The first item
of a tuple is the relative path to a docbook directory. The second item is
the two letter language code.
</para>
<para>
Docbook files specified this way will automatically be converted to HTML
during install.
</para>
</chapter>
<!-- Qt-designer -->
<chapter id="using-qtdesigner">
<title>Run-time integration with Qt-Designer</title>
<para>
Qt-Designer is a graphical application used for designing user interfaces.
It creates <literal role="extension">.ui</literal> files. These files need
to be converted into Python classes before they can be used in a Python
application. This can be manually done using the <command>pyuic</command>
command from the shell. But it is a lot more convenient to let &appname;
to this automatically for you. All you need to do is import the
<symbol>qtdesigner</symbol> or <symbol>kdedesigner</symbol> module, depending
on whether your application is pure Qt or uses KDE, and then you can import
your user interface files as though they were normal Python files.
<programlisting>
#!/usr/bin/env python
from kdeui import *
import kdedesigner # This module lets us import .ui file directly.
from MyWindow import * # Loads MyWindow.ui
# Subclass the Qt-designer form.
class MyWindowCode(MyWindow):
# Implement extra functionality and methods.
</programlisting>
The <symbol>kdedesigner</symbol>/<symbol>qtdesigner</symbol> module converts
<literal role="extension">.ui</literal> on demand to
<literal role="extension">.py</literal> files.
</para>
</chapter>
<!-- Internationalization -->
<chapter id="i18n">
<title>Internationalization &amp; translation</title>
<para>
i18n (an abbreviation of internationalization) is the process of translating
the user interface and documentation of a piece of software into another
language. <ulink url="i18n.kde.org">i18n.kde.org</ulink> is the central
information point for the effort to translate KDE software into other
languages.
</para>
<para>
Translation of the user interface an application is done using
<literal role="extension">.pot</literal> files and
<literal role="extension">.po</literal> files.
A <literal role="extension">.pot</literal> file, is generated from the source
code of the program itself, and contains all of the strings / fragments of text,
that are used in the program.
</para>
<para>
Before a string in a program is include in the <literal role="extension">.pot
</literal> file, it needs to be marked with the <function>i18n()</function>.
<programlisting>
#!/usr/bin/env python
from kdecode import *
...
mylabel = QLabel(i18n("Select new directory:"))
...
</programlisting>
The <function>i18n()</function> is part of the <symbol>kdecode</symbol> package
and needs to be imported.
</para>
<para>
&appname; provides support for generating <literal role="extension">.pot</literal>
files and managing and updating <literal role="extension">.po</literal> files.
</para>
<para>
By using the <symbol>i18n</symbol> argument to <symbol>setup()</symbol>
in your <filename>setup.py</filename>, you can specify the directory
that should contain the <literal role="extension">.pot</literal> and
<literal role="extension">.po</literal> files. The argument for
<symbol>i18n</symbol> is a tuple. The first item is the relative path
to the directory where the translation files should be stored. The
second item is a list of directories that should be scanned for Python source
files containing translatable strings.
<programlisting>
i18n = ('po',['.','mymodule'])
</programlisting>
</para>
<para>
Once your <filename>setup.py</filename> is configured, use this command in the
shell to generate the <literal role="extension">.pot</literal> file.
<screen>
python setup.py update_messages
</screen>
This command also updates any already existing <literal role="extension">.po</literal>
files with any new messages.
</para>
<para>
&appname; also handles installing translation files and converting
<literal role="extension">.po</literal> files into the special binary format
needed by the application at runtime.
</para>
</chapter>
<!-- Kcontrol modules -->
<chapter id="kcontrol-modules">
<title>KDE Control Center Modules</title>
<para>
&appname; can also help create modules for the KDE Control Center.
C++ glue code is needed when writing in module in Python. Fortunately
&appname; can generate this glue for you automatically.
</para>
<para>
The best way to start learning about creating modules is to read the
<ulink url="http://developer.kde.org/documentation/other/kcm_howto.html">KConfig
Module HOWTO</ulink>. It is written for C++, but the concepts are the same for
Python.
</para>
<para>
In your <filename>setup.py</filename> file you can specify the list of kcontrol
modules that need to be installed.
<programlisting>
kcontrol_modules = [ ('src/kcontrol_module.desktop','kcontrol_module.py')] )
</programlisting>
This is just a list of tuples. The first item is name of the
<literal role="extension">.desktop</literal> file that you've made for your
module. The second item is the name of the Python program to run when the
user views the module in kcontrol. This program is expected to be in
the application's data files directory.
</para>
<para>
The <ulink url="http://developer.kde.org/documentation/standards/kde/kcontrol_style/index.html">
KControl Module Guidelines</ulink> provides useful information about how to
design a KControl module that fits into the rest of KDE.
</para>
<tip>
<para>
&appname; typically installs the <literal role="extension">.desktop</literal>
file into the <filename>/usr/share/applications/kde/</filename> directory.
This is normally enough to make the module appear in the KDE Control Center.
But for some distributions, most notably <ulink url="http://www.mandriva.com/">
Mandriva</ulink> but probably others too, this isn't enough. Mandriva in
particular uses the <ulink url="http://alioth.debian.org/projects/menu/">
Debian menu system</ulink> for managing the K menu and also for KControl
modules. In order to get a module to appear in the kcontrol it is best
to createa a <literal role="extension">.menu</literal> file and copy
it into <filename>/usr/lib/menu</filename>, and then use <command>update-menus
</command> as root to update all of the menus and the list of kcontrol
modules.
</para>
</tip>
<note>
<para>
Right now there is no support for "module-testing" or "X-KDE-Test-Module=true"
features in <literal role="extension">.desktop</literal> files.
</para>
</note>
</chapter>
<!-- KIO-Slaves -->
<chapter id="kioslaves">
<title>KIO Slaves</title>
<para>
&appname; can be used for the creation of kio-slaves. &appname; handles the C++
glue code needed for making kioslaves in Python.
<ulink url="http://developer.kde.org/documentation/library/kdeqt/kde3arch/nettransparency.html">developer.kde.org</ulink>
has some documentation about KIO-slaves aimed at C++ programmers.
</para>
<para>
In your <filename>setup.py</filename> file you can specify the list of kioslaves
that need to be installed.
<programlisting>
kioslaves = [ ('src/kioslave.protocol','kioslave.py')] )
</programlisting>
This is just a list of tuples. The first item is name of the
<literal role="extension">.protocol</literal> file that you've made for your
kio-slave. The second item is the name of the Python program to run when the
user views the module in kcontrol. This program is expected to be in
the application's data files directory.
</para>
</chapter>
<!-- Application templates -->
<chapter id="application-templates">
<title>Application templates</title>
<para>
The <filename>app_templates</filename> directory contains a number of
application templates. An <quote>application template</quote> is just a collection of files
in a directory structure that should be copied and used as starting point
when developing a new application. An application template typically contains
default documentation files, icons, source file and <filename>setup.py
</filename> file which can later be modified.
</para>
<para>
Every application template has a number of files in common. They are
described below.
<variablelist>
<varlistentry>
<term><filename>AUTHORS</filename></term>
<listitem><para>Lists the authors of this software.</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>ChangeLog</filename></term>
<listitem><para>An itemised log or list of changes to the software.</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>COPYING</filename></term>
<listitem><para>A copy of the GNU GPL, explaining the terms under which this
software may be distributed. This file does not need to be changed.
</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>INSTALL</filename></term>
<listitem><para>Instructions for installing the software.</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>MANIFEST.in</filename></term>
<listitem><para></para></listitem>
</varlistentry>
<varlistentry>
<term><filename>NEWS</filename></term>
<listitem><para>News about what is new in the current version of this software.
</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>README</filename></term>
<listitem><para>Important instructions and information that the user should
read first.</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>setup.py</filename></term>
<listitem><para>.</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>TODO</filename></term>
<listitem><para>List of features and work that may be available in a future
version of the software.</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>po/</filename></term>
<listitem><para>This directory is initially empty. It is used for
<literal role="extension">.pot</literal> and <literal role="extension">.po
</literal> translation files.</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>doc/</filename></term>
<listitem><para>This directory is initially empty. It is used for holding the
directores for the different langauge version of the manual.</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>doc/en</filename></term>
<listitem><para>This directory for the english version of the manual.
</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>doc/en/index.docbook</filename></term>
<listitem><para>The english manual in docbook format. The default is a template
which can then be filled in.</para></listitem>
</varlistentry>
<varlistentry>
<term><filename>src</filename></term>
<listitem><para>This directory containing the source code for the software.
The default contents of this directory depends on the particular
application template.</para></listitem>
</varlistentry>
</variablelist>
</para>
<sect1 id="app-template-simple">
<title>Simple KDE utility template</title>
<para>
The <filename>kdeutility</filename> application template is a simple utility
that uses an interface designed in Qt-Designer. It doesn't have a menubar
or toolbar.
</para>
</sect1>
<sect1 id="app-template-application">
<title>KDE application template</title>
<para>
The <filename>kdeapp</filename> application template is an application with
menubar, toolbar and separated document and view classes. The menubar and toolbars
are defined using XML.
</para>
</sect1>
<sect1 id="app-template-kcontrol">
<title>Kcontrol Module Application Template</title>
<para>
The <filename>kcontrol_module</filename> application template is a simple
module for the KDE Control Center. The module can also be run as a separate
application outside of KControl to ease development and debugging.
</para>
</sect1>
<sect1 id="app-template-kioslave">
<title>KIO-slave Application Template</title>
<para>
The <filename>kioslave</filename> application template is a simple
KIO-slave that implements a simple RAM disk. Once installed it can be
accessed using kioslave:/ in konqueror. It is initially empty. Files and
directories can be made and deposited. <filename>kioslave.py</filename>
contains more information and comments.
</para>
<note>
<para>
Note that the KIO subsystem usually creates multiple running instances
of a kio-slave backend. For the application template, files and directories
are specific to each particular backend instance. When using konqueror the
same instance will be used, but if you try to access kioslave:/ from a
different process a new (empty!) instance will be craeted. This can be
confusing! Be aware.
</para>
</note>
</sect1>
</chapter>
<!--
<chapter id="commands">
<title>Command Reference</title>
<sect1 id="appname-mainwindow">
<title>The main &appname; window</title>
</sect1>
</chapter>
<chapter id="developers">
<title>Developer's Guide to &appname;</title>
<para>
Programming &appname; plugins is a joy to behold. Just read through the next
66 pages of API's to learn how!
</para>
<refentry id="re-1007-unmanagechildren-1">
<refmeta>
<refentrytitle>XtUnmanageChildren</refentrytitle>
<refmiscinfo>Xt - Geometry Management</refmiscinfo>
</refmeta>
<refnamediv>
<refname>XtUnmanageChildren
</refname>
<refpurpose>remove a list of children from a parent widget's managed
list.
<indexterm id="ix-1007-unmanagechildren-1"><primary>widgets</primary><secondary>removing</secondary></indexterm>
<indexterm id="ix-1007-unmanagechildren-2"><primary>XtUnmanageChildren</primary></indexterm>
</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refsynopsisdivinfo>
<date>4 March 1996</date>
</refsynopsisdivinfo>
<synopsis>
void XtUnmanageChildren(<replaceable class="parameter">children</replaceable>, <replaceable class="parameter">num_children</replaceable>)
WidgetList <replaceable class="parameter">children</replaceable>;
Cardinal <replaceable class="parameter">num_children</replaceable>;
</synopsis>
<refsect2 id="r2-1007-unmanagechildren-1">
<title>Inputs</title>
<variablelist>
<varlistentry>
<term><replaceable class="parameter">children</replaceable>
</term>
<listitem>
<para>Specifies an array of child widgets. Each child must be of
class RectObj or any subclass thereof.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable class="parameter">num_children</replaceable>
</term>
<listitem>
<para>Specifies the number of elements in <replaceable class="parameter">children</replaceable>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2></refsynopsisdiv>
<refsect1 id="r1-1007-unmanagechildren-1">
<title>Description
</title>
<para><function>XtUnmanageChildren()</function> unmaps the specified widgets
and removes them from their parent's geometry management.
The widgets will disappear from the screen, and (depending
on its parent) may no longer have screen space allocated for
them.
</para>
<para>Each of the widgets in the <replaceable class="parameter">children</replaceable> array must have
the same parent.
</para>
<para>See the &ldquo;Algorithm&rdquo; section below for full details of the
widget unmanagement procedure.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-2">
<title>Usage</title>
<para>Unmanaging widgets is the usual method for temporarily
making them invisible. They can be re-managed with
<function>XtManageChildren()</function>.
</para>
<para>You can unmap a widget, but leave it under geometry
management by calling <function>XtUnmapWidget()</function>. You can
destroy a widget's window without destroying the widget by
calling <function>XtUnrealizeWidget()</function>. You can destroy a
widget completely with <function>XtDestroyWidget()</function>.
</para>
<para>If you are only going to unmanage a single widget, it is
more convenient to call <function>XtUnmanageChild()</function>. It is
often more convenient to call <function>XtUnmanageChild()</function>
several times than it is to declare and initialize an array
of widgets to pass to <function>XtUnmanageChildren()</function>. Calling
<function>XtUnmanageChildren()</function> is more efficient, however,
because it only calls the parent's <function>change_managed()</function>
method once.
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-3">
<title>Algorithm
</title>
<para><function>XtUnmanageChildren()</function> performs the following:
</para>
<variablelist>
<varlistentry>
<term>-
</term>
<listitem>
<para>Ignores the child if it already is unmanaged or is being
destroyed.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-
</term>
<listitem>
<para>Otherwise, if the child is realized, it makes it nonvisible
by unmapping it.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
</para>
</refsect1>
<refsect1 id="r1-1007-unmanagechildren-4">
<title>Structures</title>
<para>The <type>WidgetList</type> type is simply an array of widgets:
</para>
<screen id="sc-1007-unmanagechildren-1">typedef Widget *WidgetList;
</screen>
</refsect1>
</refentry>
</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 &appname;?</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 can't I 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>
&appname;
</para>
<para>
Program copyright 2005 Simon Edwards <email>simon@simonzone.com</email>
</para>
<para>
Contributors:
<itemizedlist>
<listitem><para>Konqui the KDE Dragon <email>konqui@kde.org</email></para>
</listitem>
<listitem><para>Tux the Linux Penguin <email>tux@linux.org</email></para>
</listitem>
</itemizedlist>
</para>
<para>
Documentation copyright 2005 Simon Edwards <email>simon@simonzone.com</email>
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove -->
</chapter>
<!--
<appendix id="installation">
<title>Installation</title>
<sect1 id="getting-appname">
<title>How to obtain &appname;</title>
&install.intro.documentation;
</sect1>
<sect1 id="requirements">
<title>Requirements</title>
<para>
In order to successfully use &appname;, you need &kde; 1.1. Foobar.lib is
required in order to support the advanced &appname; features. &appname; uses
about 5 megs of memory to run, but this may vary depending on your
platform and configuration.
</para>
<para>
All required libraries as well as &appname; itself can be found
on <ulink url="ftp://ftp.appname.org">The &appname; home page</ulink>.
</para>
<para>
You can find a list of changes at <ulink
url="http://apps.kde.org/appname">http://apps.kde.org/appname</ulink>.
</para>
</sect1>
<sect1 id="compilation">
<title>Compilation and Installation</title>
&install.compile.documentation;
</sect1>
<sect1 id="configuration">
<title>Configuration</title>
<para>Don't forget to tell your system to start the <filename>dtd</filename>
dicer-toaster daemon first, or &appname; won't work !</para>
</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:tabstop=2:shiftwidth=2:expandtab
-->

@ -0,0 +1,323 @@
#!/usr/bin/python
###########################################################################
# setup - description #
# ------------------------------ #
# begin : Thu Apr 21 2005 #
# copyright : (C) 2005 by Simon Edwards #
# email : simon@simonzone.com #
# #
###########################################################################
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU Library General Public License as #
# published by the Free Software Foundation; either version 2 of the #
# License, or (at your option) any later version. #
# #
###########################################################################
from distutils.cmd import Command
from distutils import sysconfig
from distutils.spawn import find_executable,spawn
from distutils import dir_util
import sys
import os
import glob
sys.path.insert(0,"src") # We need this for the import statement below.
import kdedistutils
def main():
kdedistutils.setup(name="pykdeextensions",
version="0.4.0",
author="Simon Edwards",
author_email="simon@simonzone.com",
url="http://www.simonzone.com/software/pykdeextensions/",
min_kde_version = "3.0.0",
min_qt_version = "3.0.0",
license = "LGPL",
package_dir = {'': 'src'},
py_modules = ["kdedistutils","qtuicompiler","qtdesigner","kdedesigner"],
application_data = ["app_templates","AUTHORS","ChangeLog","COPYING","INSTALL","NEWS"],
docbooks = [ ('doc/en','en') ],
cmdclass = {
'install' : InstallPyKDEExtensions,
'build_libpythonize' : BuildLibpythonize,
'install_libpythonize' : InstallLibpythonize
}
)
###########################################################################
class InstallPyKDEExtensions(kdedistutils.InstallKDE):
sub_commands = kdedistutils.InstallKDE.sub_commands[:]
sub_commands.append( ('install_libpythonize',None) )
user_options = kdedistutils.InstallKDE.user_options
user_options.append( ('install-clib=', None, "installation directory for shared libraries") )
user_options.append( ('install-cheaders=', None, "installation directory for C header files") )
def initialize_options(self):
self.install_clib = None
self.install_cheaders = None
kdedistutils.InstallKDE.initialize_options(self)
def finalize_options(self):
if self.install_clib is None:
if self.prefix is not None:
self.install_clib = os.path.join(self.prefix,'lib')
else:
self.announce("Detecting KDE library directory...")
self.install_clib = kdedistutils.ask_kde_config('--install lib --expandvars').strip()
self.announce(" ...KDE library directory is %s" % self.install_clib)
if self.install_cheaders is None:
if self.prefix is not None:
self.install_cheaders = os.path.join(self.prefix,'include')
else:
self.announce("Detecting KDE headers directory...")
self.install_cheaders = os.path.normpath(os.path.join(kdedistutils.ask_kde_config('--install lib --expandvars').strip(),"../include"))
self.announce(" ...KDE library headers is %s" % self.install_cheaders)
kdedistutils.InstallKDE.finalize_options(self)
if self.root is not None:
self.change_roots('clib','cheaders')
###########################################################################
class BuildLibpythonize(Command):
description = "Build libpythonize"
user_options = [
('install-dir=', 'd',"Directory for the libpythonize shared library."),
('no-libpythonize',None,"Don't build libpythonize"),
('build-dir=','b', "build directory (where to install from)"),
('python-dir=',None,'Directory containing the Python installation'),
('python-inc-dir=',None,'Directory containing C Header files for Python'),
('clib=',None,'gcc library and path'),
]
def initialize_options(self):
self.build_dir = None
self.install_dir = None
self.no_libpythonize = 0
self.python_inc_dir = None
self.python_dir = None
self.clib = None
def finalize_options(self):
if self.no_libpythonize==0:
own_install_dir = self.install_dir is not None
self.set_undefined_options('install',\
('build_base', 'build_dir'),
('install_clib', 'install_dir') )
install = self.get_finalized_command('install')
self.install_prefix = install.prefix
# Python dir
if self.python_dir is None:
self.python_dir = os.path.split(sysconfig.get_config_var("LIBP"))[0]
self.announce("Using %s for the python directory" % self.python_dir)
# Python include dir.
if self.python_inc_dir is None:
# Find the Python include directory.
self.python_inc_dir = sysconfig.get_config_var("INCLUDEPY")
self.announce("Using %s for Python header files" % self.python_inc_dir)
# Find the C library (libgcc, libgcc_s or some other variation).
if self.clib is None:
canidatepaths = ["/usr/"+kdedistutils.get_libdir_name(), "/usr/local/"+kdedistutils.get_libdir_name() ]
self.clib = kdedistutils.FindFileInPaths("libgcc*.so",canidatepaths)
if self.clib!=None:
self.clib = glob.glob(os.path.join(self.clib,'libgcc*.so'))[0]
else:
self.clib = kdedistutils.FindFileInPaths("libgcc*.a",canidatepaths)
if self.clib!=None:
self.clib = glob.glob(os.path.join(self.clib,'libgcc*.a'))[0]
if self.clib is None:
raise SystemExit, "Failed to find a suitable libgcc library"
self.announce("Using %s for clib" % self.clib)
# Make a list of places to look for python .so modules
self.python_sub_dirs = sysconfig.get_config_var("LIBSUBDIRS").split()
base = sysconfig.get_config_var("LIBP")
self.python_sub_dirs = [ os.path.join(base,item) for item in self.python_sub_dirs ]
self.python_sub_dirs.append(base)
def get_command_name(self):
return 'build_libpythonize'
def run(self):
if self.no_libpythonize:
self.announce("Skipping libpythonize")
return
self.announce("Building libpythonize.")
cppfile = "src/pythonize.cpp"
# Compile the library.
cmdlist = ['libtool']
# Couldn't get it to pass without this ...
cmdlist.append("--mode=compile")
cmdlist.append("--tag=CXX")
# Find the compiler flags and options
# CXX is empty on some Systems, let's do it 'the hard way'.
# FIXME :: get CXX from make.conf for Gentoo.
if len(sysconfig.get_config_var("CXX").split()) >= 2:
cmdlist.extend(sysconfig.get_config_var("CXX").split())
else:
cmdlist.extend(['g++', '-pthread'])
# cc_flags
cmdlist.append("-c")
cmdlist.append("-g")
# The 4 is randomly chosen!
# FIXME :: get CFLAGS from make.conf for Gentoo.
if len(sysconfig.get_config_var("CFLAGS").split()) >=4:
cmdlist.extend(sysconfig.get_config_var("CFLAGS").split())
else:
# On Gentoo systems, CFLAGS are not in the environment.
raw = os.popen('emerge info 2> /dev/null|grep CFLAGS')
lines = raw.readlines()
if len(lines):
cflags = lines[0].split('"')[1].split()
print "Got CFLAGS from emerge info."
cmdlist.extend(cflags)
else:
# Still no CFLAGS found, use these ...
cmdlist.extend(['-fno-strict-aliasing', '-DNDEBUG', '-g', '-O3', '-Wall', '-Wstrict-prototypes'])
# includes
cmdlist.append("-I" + sysconfig.get_config_var("INCLUDEDIR"))
cmdlist.append("-I" + sysconfig.get_config_var("INCLUDEPY"))
cmdlist.append("-I" + self.python_inc_dir)
cmdlist.append("-Isrc")
# input
cmdlist.append(cppfile)
# output
outputfile = os.path.join(self.build_dir,'libpythonize.lo')
cmdlist.append("-o")
cmdlist.append(outputfile)
spawn(cmdlist) # Execute!!!
print
# Link the resulting object file to create a shared library.
cmdlist = ['libtool']
cmdlist.append("--mode=link")
# Grab the linker command name
cmdlist.append(sysconfig.get_config_var("LDSHARED").split()[0])
# link_flags
cmdlist.append("-module")
cmdlist.append("-export-dynamic")
# object
cmdlist.append(outputfile)
cmdlist.append("-rpath"); cmdlist.append(self.install_dir)
cmdlist.append("-o"); cmdlist.append(os.path.join(self.build_dir,'libpythonize.la'))
# Link libs
linklist = []
linklist.append("-lpython%i.%i" % (sys.version_info[0],sys.version_info[1]) )
linklist.extend(sysconfig.get_config_var("LIBS").split())
linklist.append("-lm")
linklist.append("-lstdc++")
linklist.append("-lc")
linklist.append(self.clib)
linklist.append("-R"); linklist.append(self.python_dir)
cmdlist.extend(linklist)
spawn(cmdlist) # Execute!!
print
###########################################################################
class InstallLibpythonize(Command):
description = "Install libpythonize"
user_options = [
('install-dir=', 'd',"Directory for the libpythonize shared library."),
('build-dir=','b', "build directory (where to install from)"),
('cheader-dir=', 'h',"Directory for the pythonize.h C header file."),
('install-cmd=', None, "Command to use to install the files"),
('root=', None, "install everything relative to this alternate root directory"),
('force', 'f', "force installation (overwrite existing files)"),
('skip-build', None, "skip the build steps"),
]
boolean_options = ['force', 'skip-build']
def initialize_options(self):
self.install_dir = None
self.build_dir = None
self.install_cmd = None
self.cheader_dir = None
self.outfiles = []
self.root = None
self.force = 0
self.warn_dir = 1
self.skip_build = None
def finalize_options(self):
own_install_dir = self.install_dir is not None
own_cheader_dir = self.cheader_dir is not None
self.set_undefined_options('install',
('build_base','build_dir'),
('install_clib', 'install_dir'),
('install_cheaders', 'cheader_dir'),
('install_cmd', 'install_cmd'),
('root', 'root'),
('force', 'force'),
('skip_build', 'skip_build')
)
if own_install_dir and self.root is not None:
self.install_dir = change_root(self.root,self.install_dir)
if own_cheader_dir and self.root is not None:
self.cheader_dir = change_root(self.root,self.cheader_dir)
def get_command_name(self):
return 'install_libpythonize'
def run(self):
if not self.skip_build:
self.run_command('build_libpythonize')
self.announce("Installing libpythonize...")
self.outfiles.extend(self.mkpath(self.install_dir))
# Install the library.
cmdlist = ['libtool']
cmdlist.append("--mode=install")
cmdlist.append(self.install_cmd)
cmdlist.append("-c")
cmdlist.append(os.path.join(self.build_dir,"libpythonize.la"))
cmdlist.append(os.path.join(self.install_dir,"libpythonize.la"))
spawn(cmdlist) # Execute!!
print
# Work the names of the files that were installed.
self.outfiles = []
for file in glob.glob(os.path.join(self.build_dir,'.libs/libpythonize*')):
self.outfiles.append(os.path.join(self.install_dir,os.path.basename(file)))
# Create a directory for the C header file.
self.outfiles.extend(self.mkpath(self.cheader_dir))
# Install the header file.
(out, _) = self.copy_file("src/pythonize.h", os.path.join(self.cheader_dir,'pythonize.h'))
self.outfiles.append(out)
self.announce("Done installing libpythonize.")
def get_outputs(self):
return self.outfiles
def mkpath(self, name, mode=0777):
return dir_util.mkpath(name, mode, dry_run=self.dry_run)
main()

@ -0,0 +1,25 @@
#!/usr/bin/python
############################################################################
# kdedesigner - description #
# ------------------------------ #
# begin : Thu Apr 21 2005 #
# copyright : (C) 2005 by Simon Edwards #
# email : simon@simonzone.com #
# #
###########################################################################
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU Library General Public License as #
# published by the Free Software Foundation; either version 2 of the #
# License, or (at your option) any later version. #
# #
###########################################################################
import __builtin__
import qtuicompiler
python_import = __builtin__.__import__
def load(*args):
qtuicompiler.DynamicImport(args,True)
return apply(python_import,args)
__builtin__.__import__ = load

File diff suppressed because it is too large Load Diff

@ -0,0 +1,238 @@
/* copyright 2003 Jim Bublitz <jbublitz@nwinternet.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <stdarg.h>
#include <string.h>
// this just gets rid of a warning when Python.h redefines it
#undef _POSIX_C_SOURCE
#include <pythonize.h>
#define debug 1
ObjectRef::ObjectRef (ObjectRef *oi, PyObject *o)
{
prevObject = oi;
object = o;
}
Pythonize::Pythonize ()
{
pythonInit = 1;
objects = NULL;
if (debug) printf ("\n\nPythonize constructor -- pid = %i\n", getpid ());
if (!Py_IsInitialized ())
{
PyEval_InitThreads ();
Py_Initialize ();
if (!Py_IsInitialized ())
{
pythonInit = 0;
return;
}
if (debug) printf ("Python interpreter initialized!\n\n");
// free the lock
PyEval_ReleaseLock();
}
}
bool Pythonize::runScript (char *scriptPath)
{
FILE *f;
int res;
if (debug) printf ("Running script: %s\n", scriptPath);
if (scriptPath == NULL || strlen (scriptPath) == 0) return false;
f = fopen (scriptPath, "r");
if (f == NULL) return false;
res = PyRun_SimpleFile (f, scriptPath);
fclose (f);
return res == 0;
}
PyObject * Pythonize::runFunction (PyObject *object, PyObject *args)
{
if (!PyCallable_Check (object))
return NULL;
PyObject *res = PyObject_CallObject (object, args ? args : PyTuple_New (0));
Py_XINCREF (res);
return res;
}
void * Pythonize::runFunctionVoid (PyObject *object, PyObject *args)
{
if (!PyCallable_Check (object))
return NULL;
PyObject *pyRes = PyObject_CallObject (object, args ? args : PyTuple_New (0));
void *res = PyLong_AsVoidPtr (pyRes);
return res;
}
bool Pythonize::runString (char *str)
{
if (str == NULL || strlen (str) == 0) return false;
int res = PyRun_SimpleString (str);
return res == 0;
}
bool Pythonize::appendToSysPath (const char* newPath)
{
if (newPath == NULL || strlen (newPath) == 0) return false;
char *fmtString = "import sys\nif not '%s' in sys.path:\n\tsys.path.append ('%s')\n"; //print sys.path\n";
int length = strlen (fmtString) + 2*strlen (newPath) + 1;
char *line = new char [length];
if (!line) return false;
snprintf (line, length, fmtString, newPath, newPath);
int res = PyRun_SimpleString (line);
delete line;
return res == 0;
}
PyObject *Pythonize::importModule (char *moduleName)
{
if (moduleName == NULL || strlen (moduleName) == 0) return NULL;
PyObject *module = PyImport_ImportModule (moduleName);
objects = new ObjectRef (objects, module);
if (!objects) return NULL;
return module;
}
Pythonize::~Pythonize ()
{
if (debug) printf ("Pythonize destructor\n");
ObjectRef *top;
while (objects)
{
top = objects;
objects = objects->prevObject;
delete top;
}
if (debug) printf (" --- Objects destroyed\n");
Py_Finalize();
if (debug) printf (" --- Py_Finalized\n");
}
// The global Pythonize instance
Pythonize *pyize = new Pythonize ();
extern "C"
{
Pythonize *_pythonize;
Pythonize *initialize ()
{
if (_pythonize) return _pythonize;
_pythonize = new Pythonize ();
if (!_pythonize || !_pythonize->getPythonInit ())
{
if (_pythonize) delete _pythonize;
return NULL;
}
return _pythonize;
}
void finalize ()
{
if (_pythonize) {
if (debug) printf(" --- Pythonize finalize()\n");
delete _pythonize;
}
}
// adds a path to sys.path
bool appendToSysPath (const char* newPath)
{
return _pythonize ? _pythonize->appendToSysPath (newPath) : false;
}
// imports a module into the interpreter
// or gets a PyObject for an already loaded module
PyObject *importModule (char *moduleName)
{
return _pythonize ? _pythonize->importModule (moduleName) : NULL;
}
// returns an object from a loaded module
// you must decref the object returned when done with it (new reference returned)
PyObject *getNewObjectRef (PyObject *module, char *object)
{
return _pythonize ? _pythonize->getNewObjectRef (module, object) : NULL;
}
bool getPythonInit ()
{
return _pythonize ? _pythonize->getPythonInit () : false;
}
// decrements the ref count of an object
void decref (PyObject *object)
{
Py_XDECREF (object);
}
// runs a script on the current sys.path
bool runScript (char *scriptPath)
{
return _pythonize ? _pythonize->runScript (scriptPath) : false;
}
// executes a string of Python in the interpreter
bool runString (char *str)
{
return _pythonize ? _pythonize->runString (str) : false;
}
// runs a callable Python object
PyObject *runFunction (PyObject *object, PyObject *args)
{
return _pythonize ? _pythonize->runFunction (object, args) : NULL;
}
}

@ -0,0 +1,104 @@
/* copyright 2003 Jim Bublitz <jbublitz@nwinternet.com>
This library 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 library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef __pythonize_h__
#define __pythonize_h__
// Pythonize is a general purpose library that wraps the Python
// interpreter with an interface to a set of common operations
// used when embedding the interpreter.
#include <Python.h>
struct ObjectRef
{
ObjectRef (ObjectRef *oi, PyObject *o);
~ObjectRef () { Py_XDECREF (object); }
PyObject *object; // pointer to an object we created
ObjectRef *prevObject; // pointer to next object on the stack
};
class Pythonize
{
public:
Pythonize ();
~Pythonize ();
// adds a path to sys.path
bool appendToSysPath (const char* newPath);
// imports a module into the interpreter
// or gets a PyObject for an already loaded module
PyObject *importModule (char *moduleName);
// returns an object from a loaded module
// you must decref the object returned when done with it (new reference returned)
PyObject *getNewObjectRef (PyObject *module, char *object) { return PyObject_GetAttrString (module, object); }
int getPythonInit () { return pythonInit; }
// decrements the ref count of an object
void decref (PyObject *object) { Py_XDECREF (object); }
// runs a script on the current sys.path
bool runScript (char *scriptPath);
// executes a string of Python in the interpreter
bool runString (char *str);
// runs a callable Python object
PyObject *runFunction(PyObject *object, PyObject *args);
void *runFunctionVoid(PyObject *object, PyObject *args);
private:
int pythonInit; // status of Py_Initialize
ObjectRef *objects; // a stack of PyObjects (used in destructor)
};
extern "C" {
Pythonize *initialize();
void finalize();
// adds a path to sys.path
bool appendToSysPath (const char* newPath);
// imports a module into the interpreter
// or gets a PyObject for an already loaded module
PyObject *importModule (char *moduleName);
// returns an object from a loaded module
// you must decref the object returned when done with it (new reference returned)
PyObject *getNewObjectRef (PyObject *module, char *object);
bool getPythonInit();
// decrements the ref count of an object
void decref (PyObject *object);
// runs a script on the current sys.path
bool runScript (char *scriptPath);
// executes a string of Python in the interpreter
bool runString (char *str);
// runs a callable Python object
PyObject *runFunction (PyObject *object, PyObject *args);
}
#endif

@ -0,0 +1,26 @@
#!/usr/bin/python
###########################################################################
# qtdesigner - description #
# ------------------------------ #
# begin : Thu Apr 21 2005 #
# copyright : (C) 2005 by Simon Edwards #
# email : simon@simonzone.com #
# #
###########################################################################
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU Library General Public License as #
# published by the Free Software Foundation; either version 2 of the #
# License, or (at your option) any later version. #
# #
###########################################################################
import __builtin__
import qtuicompiler
python_import = __builtin__.__import__
def load(*args):
qtuicompiler.DynamicImport(args,False)
return apply(python_import,args)
__builtin__.__import__ = load

@ -0,0 +1,111 @@
#!/usr/bin/python
###########################################################################
# qtuicompiler - description #
# ------------------------------ #
# begin : Thu Apr 21 2005 #
# copyright : (C) 2005 by Simon Edwards #
# email : simon@simonzone.com #
# #
###########################################################################
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU Library General Public License as #
# published by the Free Software Foundation; either version 2 of the #
# License, or (at your option) any later version. #
# #
###########################################################################
import os
import sys
import pyqtconfig
from distutils.spawn import *
import traceback
pyqt_configuration = pyqtconfig.Configuration()
pyuic_exe = None
############################################################################
def FindPyuic():
global pyuic_exe
if pyuic_exe is not None: return pyuic_exe
pyuic_exe = find_executable('pyuic',pyqt_configuration.pyqt_bin_dir)
if pyuic_exe is None:
# Search on the $Path.
pyuic_exe = find_executable('pyuic')
############################################################################
def CompileUI(ui_file_name, py_file_name=None, kde=False):
pyuic_exe = find_executable('pyuic',pyqt_configuration.default_bin_dir)
if pyuic_exe is None:
# Search on the $Path.
pyuic_exe = find_executable('pyuic')
if pyuic_exe is None:
pass # FIXME raise something!
if py_file_name is None:
py_file_name = os.path.splitext(os.path.basename(ui_file_name))[0] + '.py'
tmp_file_name = py_file_name + '.bak'
cmd = [pyuic_exe]
if kde:
cmd.append('-tr')
cmd.append('i18n')
cmd.append('-o')
cmd.append(tmp_file_name)
cmd.append(ui_file_name)
spawn(cmd)
input = open(tmp_file_name, 'r')
output = open(py_file_name, 'w')
for line in input.readlines():
if kde and string.strip(line) == 'from qt import *':
output.write(line)
output.write('from kdecore import *\nfrom kdeui import *\n\n')
elif kde and string.find(line, " = KDatePicker(") != -1:
o = string.find(line, ",")
output.write(line[:o] + ",QDate.currentDate()" + line[o:])
else:
output.write (line)
input.close()
output.close()
os.remove(tmp_file_name)
############################################################################
def DynamicImport(importargs,kde=False):
file_name = importargs[0].replace('.',os.sep)
file_name_ui = file_name + '.ui'
if os.path.exists(file_name_ui):
try:
UpdateUI(file_name_ui,kde)
except:
traceback.print_exc()
raise ImportError, "Unable to compile Qt designer file %s." % args[0]
############################################################################
def UpdateUI(ui_file,kde=False):
py_file = ui_file[:-3] + '.py'
remake = False
if os.path.exists(py_file):
remake = os.stat(py_file).st_mtime <= os.stat(ui_file).st_mtime
else:
remake = True
if remake:
CompileUI(ui_file, py_file, kde)
############################################################################
def main():
# FIXME parse args and add --kde parameter.
if len(sys.argv)!=3:
print """\nUsage:
qtuicompiler filename.ui filename.py\n\n
"""
return
CompileUI(sys.argv[1],sys.argv[2])
if __name__=='__main__':
main()
Loading…
Cancel
Save