Added KDE3 version of kuickshow

git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kuickshow@1095340 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 14 years ago
commit 56d206e89d

@ -0,0 +1,3 @@
Look in the subdirs to get info about the authors.

@ -0,0 +1,347 @@
NOTE! The GPL below is copyrighted by the Free Software Foundation, but
the instance of code that it refers to (the kde programs) are copyrighted
by the authors who actually wrote it.
---------------------------------------------------------------------------
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

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

@ -0,0 +1,17 @@
1998-12-05 Alex Zepeda <garbanzo@hooked.net>
* README: Use a "new" style README.
1998-11-13 Alex Zepeda <garbanzo@hooked.net>
* Makefile.cvs (all): Use an updated Makefile.cvs from kdenetwork that
tests for the admin directory.
* configure.in.1: Remove comment about this being Alpha (quality)
software, and update version number (now it's at 1.1pre). Also, now
it uses the kde-common copy of the autoconf stuff.
1998-11-08 Alex Zepeda <alex@zippy.dyn.ml.org>
* Makefile.cvs (all): Use the kde-common version of automoc.

@ -0,0 +1,176 @@
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
The file `configure.in' is used to create `configure' by a program
called `autoconf'. You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes a while. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not supports the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory. After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/kde/bin', `/usr/local/kde/lib', etc. You can specify an
installation prefix other than `/usr/local/kde' by giving `configure'
the option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
CPU-COMPANY-SYSTEM
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.
If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Operation Controls
==================
`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
Use and save the results of the tests in FILE instead of
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
debugging `configure'.
`--help'
Print a summary of the options to `configure', and exit.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made.
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--version'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`configure' also accepts some other, not widely useful, options.

@ -0,0 +1,16 @@
/**
* @mainpage The KDE Graphics API Reference
*
* This section contains the KDE online class reference for the current
* development version of the KDE graphics package.
*
* - <a href="kviewshell/html/index.html"><b>kviewshell</b></a>
* (<a href="kviewshell/html/classes.html">classes</a>)\n
* <i>API for the implementation of kviewshell plugins.</i>
*
* More information about the KDE architecture in form of
* tutorials, HOWTOs,
* and FAQs can be found at
* the <a href="http://developer.kde.org">KDE Developer's corner</a>.
*/

@ -0,0 +1,23 @@
## kdegraphics/Makefile.am $Id: Makefile.am.in 571342 2006-08-09 10:30:55Z mueller $
## (C) 1997 Stephan Kulow
AUTOMAKE_OPTIONS = foreign 1.6.1
# COMPILE_BEFORE_kooka = libkscan
# COMPILE_BEFORE_kfaxview = kfax
# COMPILE_BEFORE_kfile-plugins = kghostview
# COMPILE_AFTER_kviewshell = kdvi kfaxview
DISTCLEANFILES = inst-apps
EXTRA_DIST = admin debian kdebase.spec.in README.pam kde.pamd
dist-hook:
cd $(top_distdir) && perl $(top_srcdir)/admin/am_edit -padmin
MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 SUBDIRS
include admin/Doxyfile.am
include admin/deps.am
SUBDIRS=$(TOPSUBDIRS)

@ -0,0 +1,22 @@
## kdegraphics/Makefile.am $Id: Makefile.am.in 571342 2006-08-09 10:30:55Z mueller $
## (C) 1997 Stephan Kulow
AUTOMAKE_OPTIONS = foreign 1.6.1
COMPILE_BEFORE_kooka = libkscan
COMPILE_BEFORE_kfaxview = kfax
COMPILE_BEFORE_kfile-plugins = kghostview
COMPILE_AFTER_kviewshell = kdvi kfaxview
DISTCLEANFILES = inst-apps
EXTRA_DIST = admin debian kdebase.spec.in README.pam kde.pamd
dist-hook:
cd $(top_distdir) && perl $(top_srcdir)/admin/am_edit -padmin
MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 SUBDIRS
include admin/Doxyfile.am
include admin/deps.am

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

@ -0,0 +1,97 @@
In this file:
* About kdegraphics
* Common Mistakes
* Debugging
* More Info
About kdegraphics
-----------------
kdegraphics is a collection of graphic oriented applications:
* debian
Files needed to create Debian packages.
* doc
XML based documentation for the programs.
* kamera
Digital camera io_slave for Konqueror. Together gPhoto this allows you
to access your camera's picture with the URL kamera:/
* kcoloredit
Contains two programs: a color value editor and also a color picker.
* kdvi
Program (and embeddable KPart) to display *.DVI files from TeX.
* kfax
A program to display raw and tiffed fax images (g3, g3-2d, g4).
* kfaxview
An embeddable KPart to display tiffed fax images.
* kfile-plugins
Provide meta information for graphic files.
* kghostview
Program (and embeddable KPart) to display *.pdf and *.ps
* kiconedit
An icon editor.
* kmrml
Connects to a MRML server and find similar images
* kooka
A raster image scan program, based on SANE and libkscan.
* kolourpaint
An easy-to-use paint program designed for everyday tasks like drawing
simple diagrams/logos/icons and editing screenshots.
* kpovmodeler
Program to enter scenes for the 3D rendering engine PovRay.
* kruler
A ruler in inch, centimeter and pixel to check distances on the screen.
* ksnapshot
Make snapshots of the screen contents.
* kuickshow
Fast and comfortable imageviewer.
* kview
Picture viewer, provided as standalone program and embeddable KPart.
* kviewshell
Generic framework for viewer applications.
* libkscan
Library to access scanners used by kooka (and koffice), needs SANE to be
used
Common Mistakes
---------------
If configure claims Qt cannot be found, have a look at http://www.trolltech.com
to get a copy of latest Qt 3.3.x version.
Debugging
---------
You can use --enable-debug with the configure script, if you want to have
debug code in your KDE apps and libs. This will ensure useful and more
verbose backtraces, but will require a lot more disk space.
More Info
---------
Please direct any bug reports to our bug list by visiting
http://bugs.kde.org.
General KDE discussions should go to the KDE mailing list (kde@kde.org).

File diff suppressed because it is too large Load Diff

863
aclocal.m4 vendored

@ -0,0 +1,863 @@
# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y.
AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
# AM_SET_CURRENT_AUTOMAKE_VERSION
# -------------------------------
# Call AM_AUTOMAKE_VERSION so it can be traced.
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.9.6])])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
#
# Of course, Automake must honor this variable whenever it calls a
# tool from the auxiliary directory. The problem is that $srcdir (and
# therefore $ac_aux_dir as well) can be either absolute or relative,
# depending on how configure is run. This is pretty annoying, since
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
# source directory, any form will work fine, but in subdirectories a
# relative path needs to be adjusted first.
#
# $ac_aux_dir/missing
# fails when called from a subdirectory if $ac_aux_dir is relative
# $top_srcdir/$ac_aux_dir/missing
# fails if $ac_aux_dir is absolute,
# fails when called from a subdirectory in a VPATH build with
# a relative $ac_aux_dir
#
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
# are both prefixed by $srcdir. In an in-source build this is usually
# harmless because $srcdir is `.', but things will broke when you
# start a VPATH build or use an absolute $srcdir.
#
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
# and then we would define $MISSING as
# MISSING="\${SHELL} $am_aux_dir/missing"
# This will work as long as MISSING is not called from configure, because
# unfortunately $(top_srcdir) has no meaning in configure.
# However there are other variables, like CC, which are often used in
# configure, and could therefore not use this "fixed" $ac_aux_dir.
#
# Another solution, used here, is to always expand $ac_aux_dir to an
# absolute PATH. The drawback is that using absolute paths prevent a
# configured tree to be moved without reconfiguration.
AC_DEFUN([AM_AUX_DIR_EXPAND],
[dnl Rely on autoconf to set up CDPATH properly.
AC_PREREQ([2.50])dnl
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
])
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 7
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
AC_DEFUN([AM_CONDITIONAL],
[AC_PREREQ(2.52)dnl
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_SUBST([$1_TRUE])
AC_SUBST([$1_FALSE])
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi
AC_CONFIG_COMMANDS_PRE(
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
AC_MSG_ERROR([[conditional "$1" was never defined.
Usually this means the macro was only invoked conditionally.]])
fi])])
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 8
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX", "GCJ", or "OBJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
# dependency, and given that the user is not expected to run this macro,
# just rely on AC_PROG_CC.
AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
[$1], CXX, [depcc="$CXX" am_compiler_list=],
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
[depcc="$$1" am_compiler_list=])
AC_CACHE_CHECK([dependency style of $depcc],
[am_cv_$1_dependencies_compiler_type],
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named `D' -- because `-MD' means `put the output
# in D'.
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
# We will build objects and dependencies in a subdirectory because
# it helps to detect inapplicable dependency modes. For instance
# both Tru64's cc and ICC support -MD to output dependencies as a
# side effect of compilation, but ICC will put the dependencies in
# the current directory while Tru64 will put them in the object
# directory.
mkdir sub
am_cv_$1_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
# we should not choose a depcomp mode which is confused by this.
#
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
# Solaris 8's {/usr,}/bin/sh.
touch sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
case $depmode in
nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested
if test "x$enable_dependency_tracking" = xyes; then
continue
else
break
fi
;;
none) break ;;
esac
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this.
if depmode=$depmode \
source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
# When given -MP, icc 7.0 and 7.1 complain thusly:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
if (grep 'ignoring option' conftest.err ||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
am_cv_$1_dependencies_compiler_type=$depmode
break
fi
fi
done
cd ..
rm -rf conftest.dir
else
am_cv_$1_dependencies_compiler_type=none
fi
])
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
AM_CONDITIONAL([am__fastdep$1], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
])
# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
])
# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
[AC_ARG_ENABLE(dependency-tracking,
[ --disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors])
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])
])
# Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
#serial 3
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[for mf in $CONFIG_FILES; do
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
# We used to match only the files named `Makefile.in', but
# some people rename them; so instead we look at the file content.
# Grep'ing the first line is not enough: some people post-process
# each Makefile.in and add a new line on top of each file to say so.
# So let's grep whole file.
if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
dirpart=`AS_DIRNAME("$mf")`
else
continue
fi
# Extract the definition of DEPDIR, am__include, and am__quote
# from the Makefile without running `make'.
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# When using ansi2knr, U may be empty or an underscore; expand it
U=`sed -n 's/^U = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
# simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`AS_DIRNAME(["$file"])`
AS_MKDIR_P([$dirpart/$fdir])
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
# AM_OUTPUT_DEPENDENCY_COMMANDS
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
# This code is only required when automatic dependency tracking
# is enabled. FIXME. This creates each `.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 8
# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
# Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 12
# This macro actually does too much. Some checks are only needed if
# your package does certain things. But this isn't really a big deal.
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS])
# -----------------------------------------------
# The call with PACKAGE and VERSION arguments is the old style
# call (pre autoconf-2.50), which is being phased out. PACKAGE
# and VERSION should now be passed to AC_INIT and removed from
# the call to AM_INIT_AUTOMAKE.
# We support both call styles for the transition. After
# the next Automake release, Autoconf can make the AC_INIT
# arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_PREREQ([2.58])dnl
dnl Autoconf wants to disallow AM_ names. We explicitly allow
dnl the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
AC_REQUIRE([AC_PROG_INSTALL])dnl
# test to see if srcdir already configured
if test "`cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
# test whether we have cygpath
if test -z "$CYGPATH_W"; then
if (cygpath --version) >/dev/null 2>/dev/null; then
CYGPATH_W='cygpath -w'
else
CYGPATH_W=echo
fi
fi
AC_SUBST([CYGPATH_W])
# Define the identity of the package.
dnl Distinguish between old-style and new-style calls.
m4_ifval([$2],
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
AC_SUBST([PACKAGE], [$1])dnl
AC_SUBST([VERSION], [$2])],
[_AM_SET_OPTIONS([$1])dnl
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
_AM_IF_OPTION([no-define],,
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AM_PROG_INSTALL_SH
AM_PROG_INSTALL_STRIP
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
[_AM_PROG_TAR([v7])])])
_AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_CC],
[_AM_DEPENDENCIES(CC)],
[define([AC_PROG_CC],
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_CXX],
[_AM_DEPENDENCIES(CXX)],
[define([AC_PROG_CXX],
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
])
])
# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
# that is generated. The stamp files are numbered to have different names.
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
# loop where config.status creates the headers, so we can generate
# our stamp files there.
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
[# Compute $1's index in $config_headers.
_am_stamp_count=1
for _am_header in $config_headers :; do
case $_am_header in
$1 | $1:* )
break ;;
* )
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
esac
done
echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
install_sh=${install_sh-"$am_aux_dir/install-sh"}
AC_SUBST(install_sh)])
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# Check whether the underlying file-system supports filenames
# with a leading dot. For instance MS-DOS doesn't.
AC_DEFUN([AM_SET_LEADING_DOT],
[rm -rf .tst 2>/dev/null
mkdir .tst 2>/dev/null
if test -d .tst; then
am__leading_dot=.
else
am__leading_dot=_
fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 3
# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
am__doit:
@echo done
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
am__include="#"
am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# We grep out `Entering directory' and `Leaving directory'
# messages which can occur if `w' ends up in MAKEFLAGS.
# In particular we don't look at `^make:' because GNU make might
# be invoked under some other name (usually "gmake"), in which
# case it prints its new name instead of `make'.
if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
am__include=include
am__quote=
_am_result=GNU
fi
# Now try BSD make style include.
if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
am__include=.include
am__quote="\""
_am_result=BSD
fi
fi
AC_SUBST([am__include])
AC_SUBST([am__quote])
AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 4
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
AC_DEFUN([AM_MISSING_PROG],
[AC_REQUIRE([AM_MISSING_HAS_RUN])
$1=${$1-"${am_missing_run}$2"}
AC_SUBST($1)])
# AM_MISSING_HAS_RUN
# ------------------
# Define MISSING if not defined so far and test if it supports --run.
# If it does, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
AC_MSG_WARN([`missing' script is too old or missing])
fi
])
# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_MKDIR_P
# ---------------
# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
#
# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
# created by `make install' are always world readable, even if the
# installer happens to have an overly restrictive umask (e.g. 077).
# This was a mistake. There are at least two reasons why we must not
# use `-m 0755':
# - it causes special bits like SGID to be ignored,
# - it may be too restrictive (some setups expect 775 directories).
#
# Do not use -m 0755 and let people choose whatever they expect by
# setting umask.
#
# We cannot accept any implementation of `mkdir' that recognizes `-p'.
# Some implementations (such as Solaris 8's) are not thread-safe: if a
# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
# concurrently, both version can detect that a/ is missing, but only
# one can create it and the other will error out. Consequently we
# restrict ourselves to GNU make (using the --version option ensures
# this.)
AC_DEFUN([AM_PROG_MKDIR_P],
[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
# We used to keeping the `.' as first argument, in order to
# allow $(mkdir_p) to be used without argument. As in
# $(mkdir_p) $(somedir)
# where $(somedir) is conditionally defined. However this is wrong
# for two reasons:
# 1. if the package is installed by a user who cannot write `.'
# make install will fail,
# 2. the above comment should most certainly read
# $(mkdir_p) $(DESTDIR)$(somedir)
# so it does not work when $(somedir) is undefined and
# $(DESTDIR) is not.
# To support the latter case, we have to write
# test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
# so the `.' trick is pointless.
mkdir_p='mkdir -p --'
else
# On NextStep and OpenStep, the `mkdir' command does not
# recognize any option. It will interpret all options as
# directories to create, and then abort because `.' already
# exists.
for d in ./-p ./--version;
do
test -d $d && rmdir $d
done
# $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
if test -f "$ac_aux_dir/mkinstalldirs"; then
mkdir_p='$(mkinstalldirs)'
else
mkdir_p='$(install_sh) -d'
fi
fi
AC_SUBST([mkdir_p])])
# Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 3
# _AM_MANGLE_OPTION(NAME)
# -----------------------
AC_DEFUN([_AM_MANGLE_OPTION],
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
# _AM_SET_OPTION(NAME)
# ------------------------------
# Set option NAME. Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION],
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
# _AM_SET_OPTIONS(OPTIONS)
# ----------------------------------
# OPTIONS is a space-separated list of Automake options.
AC_DEFUN([_AM_SET_OPTIONS],
[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
# -------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
# Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 4
# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftest.file
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
if test "$[*]" = "X"; then
# -L didn't work.
set X `ls -t $srcdir/configure conftest.file`
fi
rm -f conftest.file
if test "$[*]" != "X $srcdir/configure conftest.file" \
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
alias in your environment])
fi
test "$[2]" = conftest.file
)
then
# Ok.
:
else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
AC_MSG_RESULT(yes)])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_INSTALL_STRIP
# ---------------------
# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
# Fortunately install-sh will honor a STRIPPROG variable, so we
# always use install-sh in `make install-strip', and initialize
# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
# Installed binaries are usually stripped using `strip' when the user
# run `make install-strip'. However `strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the `STRIP' environment variable to overrule this program.
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
if test "$cross_compiling" != no; then
AC_CHECK_TOOL([STRIP], [strip], :)
fi
INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# _AM_PROG_TAR(FORMAT)
# --------------------
# Check how to create a tarball in format FORMAT.
# FORMAT should be one of `v7', `ustar', or `pax'.
#
# Substitute a variable $(am__tar) that is a command
# writing to stdout a FORMAT-tarball containing the directory
# $tardir.
# tardir=directory && $(am__tar) > result.tar
#
# Substitute a variable $(am__untar) that extract such
# a tarball read from stdin.
# $(am__untar) < result.tar
AC_DEFUN([_AM_PROG_TAR],
[# Always define AMTAR for backward compatibility.
AM_MISSING_PROG([AMTAR], [tar])
m4_if([$1], [v7],
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
[m4_case([$1], [ustar],, [pax],,
[m4_fatal([Unknown tar format])])
AC_MSG_CHECKING([how to create a $1 tar archive])
# Loop over all known methods to create a tar archive until one works.
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
# Do not fold the above two line into one, because Tru64 sh and
# Solaris sh will not grok spaces in the rhs of `-'.
for _am_tool in $_am_tools
do
case $_am_tool in
gnutar)
for _am_tar in tar gnutar gtar;
do
AM_RUN_LOG([$_am_tar --version]) && break
done
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
am__untar="$_am_tar -xf -"
;;
plaintar)
# Must skip GNU tar: if it does not support --format= it doesn't create
# ustar tarball either.
(tar --version) >/dev/null 2>&1 && continue
am__tar='tar chf - "$$tardir"'
am__tar_='tar chf - "$tardir"'
am__untar='tar xf -'
;;
pax)
am__tar='pax -L -x $1 -w "$$tardir"'
am__tar_='pax -L -x $1 -w "$tardir"'
am__untar='pax -r'
;;
cpio)
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
am__untar='cpio -i -H $1 -d'
;;
none)
am__tar=false
am__tar_=false
am__untar=false
;;
esac
# If the value was cached, stop now. We just wanted to have am__tar
# and am__untar set.
test -n "${am_cv_prog_tar_$1}" && break
# tar/untar a dummy directory, and stop if the command works
rm -rf conftest.dir
mkdir conftest.dir
echo GrepMe > conftest.dir/file
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
rm -rf conftest.dir
if test -s conftest.tar; then
AM_RUN_LOG([$am__untar <conftest.tar])
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
fi
done
rm -rf conftest.dir
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([acinclude.m4])

@ -0,0 +1,102 @@
## generate API documentation with doxygen
apidox-am-yes:
@if test \! -d "$(top_srcdir)/doc/common/" && test -z "$$DOXDATA" ; then \
export DOXDATA=$(kde_libs_htmldir)/en/common ; \
fi ; \
abs_top_srcdir=`cd $(top_srcdir) && pwd` ;\
test -d $(top_builddir)/apidocs || \
( cd $(top_builddir) && sh $$abs_top_srcdir/admin/doxygen.sh \
--no-modulename --installdir=$(kde_libs_htmldir)/en \
--no-recurse $(abs_top_srcdir) . ) ; \
cd $(top_builddir) && sh $$abs_top_srcdir/admin/doxygen.sh \
--recurse --no-modulename --installdir=$(kde_libs_htmldir)/en \
$$abs_top_srcdir $(subdir)
apidox-am-toplevel-yes:
@if test \! -d "$(top_srcdir)/doc/common/" && test -z "$$ADMIN" ; then \
export DOXDATA=$(kde_libs_htmldir)/en/common ; \
fi ; \
abs_top_srcdir=`cd $(top_srcdir) && pwd` ;\
cd $(top_builddir) && sh $$abs_top_srcdir/admin/doxygen.sh \
--no-modulename --installdir=$(kde_libs_htmldir)/en \
$$abs_top_srcdir
## Don't generate API documentation without doxygen
apidox-am-no:
apidox-am-toplevel-no:
apidox:
@if test "$(subdir)" != "."; then \
$(MAKE) apidox-am-@KDE_HAS_DOXYGEN@ ;\
else \
$(MAKE) apidox-am-toplevel-@KDE_HAS_DOXYGEN@ ;\
fi
install-data-local: install-apidox
## install API documentation
install-apidox:
@if test "$(subdir)" != "."; then \
$(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs/$(subdir)/html ; \
if test -f $(top_builddir)/apidocs/$(subdir)/$(subdir).tag; then \
echo $(INSTALL_DATA) $(top_builddir)/apidocs/$(subdir)/$(subdir).tag $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs/$(subdir); \
$(INSTALL_DATA) $(top_builddir)/apidocs/$(subdir)/$(subdir).tag $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs/$(subdir); \
fi; \
if test -d $(top_builddir)/apidocs/$(subdir)/html; then \
list=`ls $(top_builddir)/apidocs/$(subdir)/html`; \
echo "installing $(top_builddir)/apidocs/$(subdir)/html" ;\
for file in $$list; do \
$(INSTALL_DATA) $(top_builddir)/apidocs/$(subdir)/html/$$file $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs/$(subdir)/html; \
done; \
fi; \
else\
if test -d $(top_builddir)/apidocs; then \
$(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs ;\
list=`cd $(top_builddir)/apidocs && ls -1`; \
echo "installing $(top_builddir)/apidocs/$$file" ;\
echo "target directory $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs" ; \
for file in $$list; do \
if test -f $(top_builddir)/apidocs/$$file; then \
$(INSTALL_DATA) $(top_builddir)/apidocs/$$file $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs; \
fi; \
done ; fi; \
fi
uninstall-local: uninstall-apidox
## uninstall API documentation
uninstall-apidox:
@if test "$(subdir)" != "."; then \
if test -d $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs/$(subdir); then \
rm -rfv $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs/$(subdir); \
fi \
else \
if test -d $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs; then \
rm -rfv $(DESTDIR)$(kde_htmldir)/en/$(PACKAGE)-apidocs; \
fi \
fi
install-apidox-recurse: install-apidox
@set fnord $(MAKEFLAGS); amf=$$2; if test -n '$(SUBDIRS)'; then \
list='$(SUBDIRS)'; \
for subdir in $$list; do \
if grep '^include .*Doxyfile.am' $(srcdir)/$$subdir/Makefile.am > /dev/null ; then \
echo "Installing apidox from $$subdir"; \
if test "$$subdir" != "."; then \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) GENERATE_FLAG=no install-apidox-recurse) || exit 1; \
fi ; fi ;\
done; \
fi
.PHONY: apidox-am-yes apidox-am-no install-data-local install-apidox install-apidox uninstall-local uninstall-apidox uninstall-apidox apidox apidox-am-toplevel-no apidox-am-toplevel-yes
# Local Variables:
# mode: makefile
# End:

@ -0,0 +1,192 @@
OUTPUT_LANGUAGE = English
USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = NO
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = YES
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
STRIP_FROM_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES
DISTRIBUTE_GROUP_DOC = NO
TAB_SIZE = 4
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
SUBGROUPING = YES
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = YES
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TESTLIST = NO
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
QUIET = YES
WARNINGS = NO
WARN_IF_UNDOCUMENTED = NO
WARN_IF_DOC_ERROR = YES
WARN_FORMAT =
WARN_LOGFILE =
INPUT =
FILE_PATTERNS = *.h \
*.cpp \
*.cc \
*.hpp \
*.dox \
*.c++ \
*.cxx \
*.h++ \
*.hh
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS = *.moc.* \
moc* \
*.all_cpp.* \
*unload.* \
*/test/* \
*/tests/* \
*_p.h
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_SOURCE_FILES = NO
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
VERBATIM_HEADERS = YES
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 3
HTML_OUTPUT =
HTML_FILE_EXTENSION = .html
HTML_HEADER = ../apidocs/common/header.html
HTML_FOOTER = ../apidocs/common/footer.html
HTML_STYLESHEET = ../apidocs/common/doxygen.css
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = YES
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
GENERATE_LATEX = NO
LATEX_OUTPUT =
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
GENERATE_RTF = NO
RTF_OUTPUT =
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
GENERATE_MAN = NO
MAN_OUTPUT =
MAN_EXTENSION = .kde3
MAN_LINKS = YES
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = NO
GENERATE_AUTOGEN_DEF = NO
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
ENABLE_PREPROCESSING = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = QT_VERSION=320 \
__cplusplus \
Q_WS_X11
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = NO
PERL_PATH =
CLASS_DIAGRAMS = YES
HIDE_UNDOC_RELATIONS = NO
HAVE_DOT = NO
UML_LOOK = NO
TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 800
MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 0
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
SEARCHENGINE = NO
### KDE Settings
ALIASES = \
"intern=\par<b>Internal use only.</b>" \
"reimp=\par<b>Reimplemented from superclass.</b>" \
"obsolete=@deprecated" \
"feature=\xrefitem features \"Feature(s)\" \"Features\"" \
"maintainer=\xrefitem maintainers \"Maintainer(s)\" \"Maintainers\"" \
"unmaintained=\xrefitem unmaintained \"Unmaintained\" \"Unmaintained\"" \
"requirement=\xrefitem requirements \"Requirement(s)\" \"Requirements\"" \
"faq=\xrefitem FAQ \"F.A.Q.\" \"F.A.Q.\"" \
"authors=\xrefitem authors \"Author(s)\" \"Authors\"" \
"FIXME=\xrefitem fixme \"Fixme\" \"Fixme\""
HTML_ALIGN_MEMBERS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
VERBATIM_HEADERS = NO
GENERATE_HTML = YES
SOURCE_BROWSER = YES
GENERATE_AUTOGEN_DEF = NO
DETAILS_AT_TOP = YES
SORT_MEMBER_DOCS = YES
GENERATE_TODOLIST = YES
IGNORE_PREFIX = K
GENERATE_HTML = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = NO
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES

@ -0,0 +1,37 @@
### Makefile.common
###
### Copyright (C) 2002 by the KDE developers
### All the real work is done by the shellscript cvs.sh
SHELL=/bin/sh
cvs dist configure configure.in configure.files subdirs package-messages package-merge Makefile.am acinclude.m4 extract-messages:
@admindir=$(admindir); \
if test "x$$admindir" = x; then \
admindir=.; until test -f $$admindir/admin/cvs.sh; do \
admindir=$$admindir/..; \
if test `cd $$admindir && pwd` = / ; then break; fi; \
done; \
admindir=$$admindir/admin; \
if test -f $$admindir/cvs.sh; then :; else \
echo "Can't find the admin/ directory in any parent of the"; \
echo "current directory. Please set it with admindir=..."; \
exit 1; \
fi; \
fi; \
if test "$@" = "package-merge"; then \
MAKE="$(MAKE)" POFILES="$(POFILES)" PACKAGE="$(PACKAGE)" \
$(SHELL) $$admindir/cvs.sh package-merge ;\
else \
MAKE="$(MAKE)" $(SHELL) $$admindir/cvs.sh $@ ;\
fi
configure.in: configure.files subdirs
configure.files: subdirs
svn: cvs
.SILENT:
.PHONY: svn cvs dist package-merge package-messages

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,157 @@
#!/usr/bin/perl -w
use DB_File;
use Fcntl ':flock';
if (!defined($ARGV[0])) {
print "usage: requires .class dump as parameter!\n";
exit;
}
sub bailout
{
untie %bcheckdb if(defined(%bcheckdb));
if(defined(MYLOCK)) {
flock MYLOCK, LOCK_UN;
close(MYLOCK);
}
print @_;
exit 5;
}
sub ask_user
{
my ($dbkey, $dbchunk) = @_;
if (defined($ENV{"BCHECK_UPDATE"})) {
$bcheckdb{$dbkey} = $dbchunk;
return;
}
&bailout("BC problem detected") if (! -t STDIN);
print "(I)gnore / (Q)uit / (U)pdate: ";
my $key;
while(defined(read STDIN, $key, 1)) {
$key = lc($key);
print "got: >$key<\n";
return if ($key eq 'i');
&bailout("BC problem. aborted") if ($key eq 'q');
if ($key eq 'u') {
$bcheckdb{$dbkey} = $dbchunk;
return;
}
print "\n(I)gnore / (Q)uit / (U)pdate: ";
}
}
sub diff_chunk($$)
{
my ($oldl, $newl) = @_;
my @old = split /^/m, $oldl;
my @new = split /^/m, $newl;
my $haschanges = 0;
my $max = $#old > $#new ? $#old : $#new;
die "whoops. key different" if ($old[0] ne $new[0]);
if ($#old != $#new) {
warn ("Structural difference.\n");
print @old;
print "-----------------------------------------------\n";
print @new;
$haschanges = 1;
return $haschanges;
}
print $old[0];
my ($class) = ($old[0] =~ /^(?:Class |Vtable for )(\S+)/);
my $c = 1;
while ($c < $max) {
my ($o, $n) = ($old[$c], $new[$c]);
chomp $o;
chomp $n;
$c++;
next if ($o eq $n);
if(defined($class) and $n =~ /^(\d+\s+)\w+(::\S+\s*.*)$/) {
next if ($n eq "$1$class$2");
}
$haschanges = 1;
print "-$o\n+$n\n\n";
}
return $haschanges;
}
local $dblock = $ENV{"HOME"} . "/bcheck.lock";
my $dbfile = $ENV{"HOME"} . "/bcheck.db";
my $cdump = $ARGV[0];
die "file $cdump is not readable: $!" if (! -f $cdump);
# make sure the advisory lock exists
open(MYLOCK, ">$dblock");
print MYLOCK "";
flock MYLOCK, LOCK_EX;
tie %bcheckdb, 'DB_File', $dbfile;
my $chunk = "";
open (IN, "<$cdump") or die "cannot open $cdump: $!";
while (<IN>) {
chop;
s/0x[0-9a-fA-F]+/0x......../g;
s/base size=/size=/g;
s/\(\)\s*$//g;
s/base align=/align=/g;
$chunk .= $_ . "\n";
if(/^\s*$/) {
my @lines = split /^/m, $chunk;
my $key = $lines[0];
chomp $key;
if($key !~ /<anonymous struct>/ &&
$key !~ /<anonymous union>/) {
if(defined($bcheckdb{$key})) {
my $dbversion = $bcheckdb{$key};
if($dbversion ne $chunk) {
&ask_user($key, $chunk) if(&diff_chunk($dbversion, $chunk));
}
}
else {
$bcheckdb{$key} = $chunk;
print "NEW: $key\n";
}
}
$chunk = "";
next;
}
}
close(IN);
untie %bcheckdb;
flock MYLOCK, LOCK_UN;
close(MYLOCK);
exit 0;

@ -0,0 +1,142 @@
#! /bin/sh
# Wrapper for compilers which do not understand `-c -o'.
scriptversion=2005-05-14.22
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.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, 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.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand `-c -o'.
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file `INSTALL'.
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "compile $scriptversion"
exit $?
;;
esac
ofile=
cfile=
eat=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as `compile cc -o foo foo.c'.
# So we strip `-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
ofile=$2
;;
*)
set x "$@" -o "$2"
shift
;;
esac
;;
*.c)
cfile=$1
set x "$@" "$1"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no `-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# `.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
# Create the lock directory.
# Note: use `[/.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15
# Run the compile.
"$@"
ret=$?
if test -f "$cofile"; then
mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

@ -0,0 +1,191 @@
#!/usr/bin/env perl
# this script patches a config.status file, to use our own perl script
# in the main loop
# we do it this way to circumvent hacking (and thereby including)
# autoconf function (which are GPL) into our LGPL acinclude.m4.in
# written by Michael Matz <matz@kde.org>
# adapted by Dirk Mueller <mueller@kde.org>
#
# This file 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.
# we have to change two places
# 1. the splitting of the substitutions into chunks of 90 (or even 48 in
# later autoconf's
# 2. the big main loop which patches all Makefile.in's
use strict;
use File::Basename;
my $ac_aux_dir = dirname($0);
my ($flag);
my $ac_version = 0;
my $vpath_seen = 0;
$flag = 0;
while (<>) {
# usage of $flag: 0 -- we have seen nothing yet
# 1 -- we are in (1)
# 2 -- we have ended (1)
# 3 -- we are in (2)
# 4 -- we ended (2)
if ($flag == 4) {
print;
} elsif ($flag == 0) {
# 1. begins with (including): "ac_max_sed_\S+\s*=\s*[0-9]+..."
# ends with (excluding) "CONFIG_FILE=..."
# in later autoconf (2.14.1) there is no CONFIG_FILES= line,
# but instead the (2) directly follow (1)
if (/^\s*ac_max_sed_([a-z]+).*=\s*([0-9]+)/ ) {
$flag = 1;
if ($1 eq 'lines') {
# lets hope its different with 2141,
# wasn't able to verify that
if ($2 eq '48') {
$ac_version = 250;
}
else {
$ac_version = 2141;
}
} elsif ($1 eq 'cmds') {
$ac_version = 213;
}
# hmm, we don't know the autoconf version, but we try anyway
} else {
print;
}
} elsif ($flag == 1) {
if (/^\s*CONFIG_FILES=/ && ($ac_version != 250)) {
print;
$flag = 2;
} elsif (/^\s*for\s+ac_file\s+in\s+.*CONFIG_FILES/ ) {
$flag = 3;
}
} elsif ($flag == 2) {
# 2. begins with: "for ac_file in.*CONFIG_FILES" (the next 'for' after (1))
# end with: "rm -f conftest.s\*"
# on autoconf 250, it ends with '# CONFIG_HEADER section'
#
# gg: if a post-processing commands section is found first,
# stop there and insert a new loop to honor the case/esac.
# (pattern: /^\s+#\sRun the commands associated with the file./)
if (/^\s*for\s+ac_file\s+in\s+.*CONFIG_FILES/ ) {
$flag = 3;
} else {
print;
}
} elsif ($flag == 3) {
if (/^\s*rm\s+-f\s+conftest/ ) {
$flag = 4;
&insert_main_loop();
} elsif (/^\s*rm\s+-f\s+.*ac_cs_root/ ) {
$flag = 4;
&insert_main_loop();
#die "hhhhhhh";
if ($ac_version != 2141) {
print STDERR "hmm, don't know autoconf version\n";
}
} elsif (/^\#\s*CONFIG_(HEADER|COMMANDS) section.*|^\s+#\s(Run) the commands associated/) {
$flag = 4;
my $commands = defined $2;
&insert_main_loop();
$commands && insert_command_loop();
if($ac_version != 250) {
print STDERR "hmm, something went wrong :-(\n";
}
} elsif (/VPATH/ ) {
$vpath_seen = 1;
}
}
}
die "wrong input (flag != 4)" unless $flag == 4;
print STDERR "hmm, don't know autoconf version\n" unless $ac_version;
sub insert_main_loop {
if ($ac_version == 250) {
&insert_main_loop_250();
}
else {
&insert_main_loop_213();
}
}
sub insert_main_loop_250 {
print <<EOF;
#echo Doing the fast build of Makefiles -- autoconf $ac_version
EOF
if ($vpath_seen) {
print <<EOF;
# VPATH subst was seen in original config.status main loop
echo '/^[ ]*VPATH[ ]*=[^:]*\$/d' >>\$tmp/subs.sed
EOF
}
print <<EOF;
rm -f \$tmp/subs.files
for ac_file in .. \$CONFIG_FILES ; do
if test "x\$ac_file" != x..; then
echo \$ac_file >> \$tmp/subs.files
fi
done
if test -f \$tmp/subs.files ; then
perl $ac_aux_dir/config.pl "\$tmp/subs.sed" "\$tmp/subs.files" "\$srcdir" "\$INSTALL"
fi
rm -f \$tmp/subs.files
fi
EOF
return;
}
sub insert_main_loop_213 {
print <<EOF;
#echo Doing the fast build of Makefiles -- autoconf $ac_version
if test "x\$ac_cs_root" = "x" ; then
ac_cs_root=conftest
fi
EOF
if ($vpath_seen) {
print <<EOF;
# VPATH subst was seen in original config.status main loop
echo '/^[ ]*VPATH[ ]*=[^:]*\$/d' >> \$ac_cs_root.subs
EOF
}
print <<EOF;
rm -f \$ac_cs_root.sacfiles
for ac_file in .. \$CONFIG_FILES ; do
if test "x\$ac_file" != x..; then
echo \$ac_file >> \$ac_cs_root.sacfiles
fi
done
if test -f \$ac_cs_root.sacfiles ; then
perl $ac_aux_dir/config.pl "\$ac_cs_root.subs" "\$ac_cs_root.sacfiles" "\$ac_given_srcdir" "\$ac_given_INSTALL"
fi
rm -f \$ac_cs_root.s*
EOF
return;
}
sub insert_command_loop {
print <<EOF;
for ac_file in .. \$CONFIG_FILES ; do
EOF
}

1464
admin/config.guess vendored

File diff suppressed because it is too large Load Diff

@ -0,0 +1,238 @@
#!/usr/bin/env perl
# a script for use by autoconf to make the Makefiles
# from the Makefile.in's
#
# the original autoconf mechanism first splits all substitutions into groups
# of ca. 90, and than invokes sed for _every_ Makefile.in and every group
# (so around 2-3 times per Makefile.in). So this takes forever, as sed
# has to recompile the regexps every time.
#
# this script does better. It changes all Makefile.ins in one process.
# in kdelibs the time for building Makefile went down from 2:59 min to 13 sec!
#
# written by Michael Matz <matz@kde.org>
# adapted by Dirk Mueller <mueller@kde.org>
# This file 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.
use strict;
use File::Path;
my $ac_subs=$ARGV[0];
my $ac_sacfiles = $ARGV[1];
my $ac_given_srcdir=$ARGV[2];
my $ac_given_INSTALL=$ARGV[3];
my @comp_match;
my @comp_subs;
#print "ac_subs=$ac_subs\n";
#print "ac_sacfiles=$ac_sacfiles\n";
#print "ac_given_srcdir=$ac_given_srcdir\n";
#print "ac_given_INSTALL=$ac_given_INSTALL\n";
my $configure_input;
my ($srcdir, $top_srcdir);
my $INSTALL;
my $bad_perl = ($] < 5.005);
my $created_file_count = 0;
open(CF, "< $ac_subs") || die "can't open $ac_subs: $!";
my @subs = <CF>;
my $pat;
close(CF);
chomp @subs;
@comp_match=();
@comp_subs=();
if ($bad_perl) {
print "Using perl older than version 5.005\n";
foreach $pat (@subs) {
if ( ($pat =~ m/s%([^%]*)%([^%]*)%g/ )
|| ($pat =~ m/s%([^%]*)%([^%]*)%;t/ )
|| ($pat =~ m/s,([^,]*),(.*),;t/)
|| ($pat =~ m%s/([^/]*)/([^/]*)/g% )
|| ($pat =~ m%s/([^/]*)/([^/]*)/;t% )
) {
# form : s%bla%blubb%g
# or s%bla%blubb%;t t (autoconf > 2.13 and < 2.52 ?)
# or s,bla,blubb,;t t (autoconf 2.52)
my $srch = $1;
my $repl = $2;
$repl =~ s/\\(.)/$1/g;
push @comp_subs, make_closure($srch, $repl);
} elsif ( ($pat =~ /%([^%]*)%d/ )
|| ($pat =~ m%/([^/]*)/d% )
) {
push @comp_subs, make_closure($1, "");
} else {
die "Uhh. Malformed pattern in $ac_subs ($pat)"
unless ( $pat =~ /^\s*$/ ); # ignore white lines
}
}
} else {
foreach $pat (@subs) {
if ( ($pat =~ /s%([^%]*)%([^%]*)%g/ ) ||
($pat =~ /s%([^%]*)%([^%]*)%;t/ ) ||
($pat =~ /s,([^,]*),(.*),;t/) ) {
# form : s%bla%blubb%g
# or s%bla%blubb%;t t (autoconf > 2.13 and < 2.52 ?)
# or s,bla,blubb,;t t (autoconf 2.52)
my $srch = $1;
my $repl = $2;
push @comp_match, eval "qr/\Q$srch\E/"; # compile match pattern
$repl =~ s/\\(.)/$1/g;
push @comp_subs, $repl;
} elsif ( ($pat =~ /%([^%]*)%d/ )
|| ($pat =~ m%/([^/]*)/d% )
) {
push @comp_match, eval "qr/\Q$1\E/";
push @comp_subs, "";
} else {
die "Uhh. Malformed pattern in $ac_subs ($pat)"
unless ( $pat =~ /^\s*$/ ); # ignore white lines
}
}
}
undef @subs;
# read the list of files to be patched, form:
# ./Makefile arts/Makefile arts/examples/Makefile arts/flow/Makefile
open(CF, "< $ac_sacfiles") || die "can't open $ac_sacfiles: $!";
my @ac_files = <CF>;
close(CF);
chomp @ac_files;
my $ac_file;
foreach $ac_file (@ac_files) {
next if $ac_file =~ /\.\./;
next if $ac_file =~ /^\s*$/;
my $ac_file_in;
my ($ac_dir, $ac_dots, $ac_dir_suffix);
if ($ac_file =~ /.*:.*/ ) {
($ac_file_in = $ac_file) =~ s%[^:]*:%%;
$ac_file =~ s%:.*%%;
} else {
$ac_file_in = $ac_file.".in";
}
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
($ac_dir = $ac_file) =~ s%/[^/][^/]*$%%;
if ( ($ac_dir ne $ac_file) && ($ac_dir ne ".")) {
# The file is in a subdirectory.
if (! -d "$ac_dir") { mkpath "$ac_dir", 0, 0777; }
($ac_dir_suffix = $ac_dir) =~ s%^./%%;
$ac_dir_suffix="/".$ac_dir_suffix;
# A "../" for each directory in $ac_dir_suffix.
($ac_dots = $ac_dir_suffix) =~ s%/[^/]*%../%g;
} else {
$ac_dir_suffix="";
$ac_dots="";
}
if ($ac_given_srcdir eq ".") {
$srcdir=".";
if ($ac_dots) {
( $top_srcdir = $ac_dots) =~ s%/$%%;
} else { $top_srcdir="."; }
} elsif ($ac_given_srcdir =~ m%^/%) {
$srcdir=$ac_given_srcdir.$ac_dir_suffix;
$top_srcdir = $ac_given_srcdir;
} else {
$srcdir = $ac_dots.$ac_given_srcdir.$ac_dir_suffix;
$top_srcdir = $ac_dots.$ac_given_srcdir;
}
if ($ac_given_INSTALL) {
if ($ac_given_INSTALL =~ m%^/% ) {
$INSTALL = $ac_given_INSTALL;
} else {
$INSTALL = $ac_dots.$ac_given_INSTALL;
}
}
print "fast creating $ac_file\n";
unlink $ac_file;
my $ac_comsub="";
my $fname=$ac_file_in;
$fname =~ s%.*/%%;
$configure_input="$ac_file. Generated from $fname by config.pl.";
my $ac_file_inputs;
($ac_file_inputs = $ac_file_in) =~ s%^%$ac_given_srcdir/%;
$ac_file_inputs =~ s%:% $ac_given_srcdir/%g;
patch_file($ac_file, $ac_file_inputs);
++$created_file_count;
}
print "config.pl: fast created $created_file_count file(s).\n";
sub patch_file {
my ($outf, $infiles) = @_;
my $filedata;
my @infiles=split(' ', $infiles);
my $i=0;
my $name;
foreach $name (@infiles) {
if (open(CF, "< $name")) {
while (<CF>) {
$filedata .= $_;
}
close(CF);
} else {
print STDERR "can't open $name: $!"."\n";
}
}
$filedata =~ s%\@configure_input\@%$configure_input%g;
$filedata =~ s%\@srcdir\@%$srcdir%g;
$filedata =~ s%\@top_srcdir\@%$top_srcdir%g;
$filedata =~ s%\@INSTALL\@%$INSTALL%g;
if ($bad_perl) {
while ($i <= $#comp_subs) {
my $ref = $comp_subs[$i];
&$ref(\$filedata);
$i++;
}
} else {
while ($i <= $#comp_match) {
$filedata =~ s/$comp_match[$i]/$comp_subs[$i]/g;
$i++;
}
}
open(CF, "> $outf") || die "can't create $outf: $!";
print CF $filedata;
close(CF);
}
sub make_closure {
my ($pat, $sub) = @_;
my $ret = eval "return sub { my \$ref=shift; \$\$ref =~ s%\Q$pat\E%\Q$sub\E%g; }";
if ($@) {
print "can't create CODE: $@\n";
}
return $ret;
}

1575
admin/config.sub vendored

File diff suppressed because it is too large Load Diff

@ -0,0 +1,45 @@
# Check if KDE_SET_PREFIX was called, and --prefix was passed to configure
if test -n "$kde_libs_prefix" -a -n "$given_prefix"; then
# And if so, warn when they don't match
if test "$kde_libs_prefix" != "$given_prefix"; then
# And if kde doesn't know about the prefix yet
echo ":"`kde-config --path exe`":" | grep ":$given_prefix/bin/:" 2>&1 >/dev/null
if test $? -ne 0; then
echo ""
echo "Warning: you chose to install this package in $given_prefix,"
echo "but KDE was found in $kde_libs_prefix."
echo "For this to work, you will need to tell KDE about the new prefix, by ensuring"
echo "that KDEDIRS contains it, e.g. export KDEDIRS=$given_prefix:$kde_libs_prefix"
echo "Then restart KDE."
echo ""
fi
fi
fi
if test x$GXX = "xyes" -a x$kde_have_gcc_visibility = "xyes" -a x$kde_cv_val_qt_gcc_visibility_patched = "xno"; then
echo ""
echo "Your GCC supports symbol visibility, but the patch for Qt supporting visibility"
echo "was not included. Therefore, GCC symbol visibility support remains disabled."
echo ""
echo "For better performance, consider including the Qt visibility supporting patch"
echo "located at:"
echo ""
echo "http://bugs.kde.org/show_bug.cgi?id=109386"
echo ""
echo "and recompile all of Qt and KDE. Note, this is entirely optional and"
echo "everything will continue to work just fine without it."
echo ""
fi
if test "$all_tests" = "bad"; then
if test ! "$cache_file" = "/dev/null"; then
echo ""
echo "Please remove the file $cache_file after changing your setup"
echo "so that configure will find the changes next time."
echo ""
fi
else
echo ""
echo "Good - your configure finished. Start make now"
echo ""
fi

@ -0,0 +1,57 @@
dnl This file is part of the KDE libraries/packages
dnl Copyright (C) 2001 Stephan Kulow (coolo@kde.org)
dnl This file is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Library General Public
dnl License as published by the Free Software Foundation; either
dnl version 2 of the License, or (at your option) any later version.
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Library General Public License for more details.
dnl You should have received a copy of the GNU Library General Public License
dnl along with this library; see the file COPYING.LIB. If not, write to
dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
dnl Boston, MA 02110-1301, USA.
# Original Author was Kalle@kde.org
# I lifted it in some mater. (Stephan Kulow)
# I used much code from Janos Farkas
dnl Process this file with autoconf to produce a configure script.
AC_INIT(acinclude.m4) dnl a source file from your sub dir
dnl This is so we can use kde-common
AC_CONFIG_AUX_DIR(admin)
dnl This ksh/zsh feature conflicts with `cd blah ; pwd`
unset CDPATH
dnl Checking host/target/build systems, for make, install etc.
AC_CANONICAL_SYSTEM
dnl Perform program name transformation
AC_ARG_PROGRAM
dnl Automake doc recommends to do this only here. (Janos)
AM_INIT_AUTOMAKE(@MODULENAME@, @VERSION@) dnl searches for some needed programs
KDE_SET_PREFIX
dnl generate the config header
AM_CONFIG_HEADER(config.h) dnl at the distribution this done
dnl Checks for programs.
AC_CHECK_COMPILERS
AC_ENABLE_SHARED(yes)
AC_ENABLE_STATIC(no)
KDE_PROG_LIBTOOL
dnl for NLS support. Call them in this order!
dnl WITH_NLS is for the po files
AM_KDE_WITH_NLS
dnl KDE_USE_QT
AC_PATH_KDE

@ -0,0 +1,661 @@
#! /bin/sh
#
# cvs.sh
#
# This file contains support code from Makefile.common
# It defines a shell function for each known target
# and then does a case to call the correct function.
unset MAKEFLAGS
call_and_fix_autoconf()
{
$AUTOCONF || exit 1
if test -r configure.in.in ; then
perl -pi -e "print \"if test \\\"x\\\$with_fast_perl\\\" = \\\"xyes\\\"; then\
\\n perl -i.bak \\\$ac_aux_dir/conf.change.pl \\\$CONFIG_STATUS\
\\\\\\n || mv \\\$CONFIG_STATUS.bak \\\$CONFIG_STATUS\
\\n rm -f \\\$CONFIG_STATUS.bak\\nfi\
\\n\" if /^\\s*chmod\\s+.*\\+x\\s+.*CONFIG_STATUS/; s,^#line.*LINENO.*\$,/* \$& */, ;" configure
fi
}
strip_makefile()
{
if test ! -f $makefile_wo; then
perl -e '$in=0; while ( <> ) { $in = 1 if ($_ =~ m/^if / ); print $_ unless ($in || $_ =~ m/^include /); $in = 0 if ($_ =~ m/^endif/); }' < $makefile_am > $makefile_wo
fi
}
check_autotool_versions()
{
required_autoconf_version="2.53 or newer"
AUTOCONF_VERSION=`$AUTOCONF --version | head -n 1`
case $AUTOCONF_VERSION in
Autoconf*2.5* | autoconf*2.5* | autoconf*2.6* ) : ;;
"" )
echo "*** AUTOCONF NOT FOUND!."
echo "*** KDE requires autoconf $required_autoconf_version"
exit 1
;;
* )
echo "*** YOU'RE USING $AUTOCONF_VERSION."
echo "*** KDE requires autoconf $required_autoconf_version"
exit 1
;;
esac
AUTOHEADER_VERSION=`$AUTOHEADER --version | head -n 1`
case $AUTOHEADER_VERSION in
Autoconf*2.5* | autoheader*2.5* | autoheader*2.6* ) : ;;
"" )
echo "*** AUTOHEADER NOT FOUND!."
echo "*** KDE requires autoheader $required_autoconf_version"
exit 1
;;
* )
echo "*** YOU'RE USING $AUTOHEADER_VERSION."
echo "*** KDE requires autoheader $required_autoconf_version"
exit 1
;;
esac
AUTOMAKE_STRING=`$AUTOMAKE --version | head -n 1`
required_automake_version="1.6.1 or newer"
case $AUTOMAKE_STRING in
automake*1.5d* | automake*1.5* | automake*1.5-* )
echo "*** YOU'RE USING $AUTOMAKE_STRING."
echo "*** KDE requires automake $required_automake_version"
exit 1
;;
automake*1.6.* | automake*1.7* | automake*1.8* | automake*1.9* | automake*1.10*)
echo "*** $AUTOMAKE_STRING found."
UNSERMAKE=no
;;
"" )
echo "*** AUTOMAKE NOT FOUND!."
echo "*** KDE requires automake $required_automake_version"
exit 1
;;
*unsermake* ) :
echo "*** YOU'RE USING UNSERMAKE."
echo "*** GOOD LUCK!! :)"
UNSERMAKE=unsermake
;;
* )
echo "*** YOU'RE USING $AUTOMAKE_STRING."
echo "*** KDE requires automake $required_automake_version"
exit 1
;;
esac
unset required_automake_version
}
cvs()
{
check_autotool_versions
acinclude_m4
### Make new subdirs and configure.in.
### The make calls could be optimized away here,
### with a little thought.
if test -r configure.in.in; then
rm -f configure.in
echo "*** Creating list of subdirectories"
create_subdirs
if test -r Makefile.am.in; then
echo "*** Creating Makefile.am"
if grep '\$(top_srcdir)/Makefile.am:' $makefile_am >/dev/null; then
strip_makefile
$MAKE -f $makefile_wo top_srcdir=. ./Makefile.am || exit 1
else
Makefile_am
fi
fi
configure_files
echo "*** Creating configure.in"
if grep '\$(top_srcdir)/configure.in:' $makefile_am >/dev/null; then
strip_makefile
$MAKE -f $makefile_wo top_srcdir=. ./configure.in || exit 1
else
configure_in
fi
fi
echo "*** Creating aclocal.m4"
$ACLOCAL $ACLOCALFLAGS || exit 1
echo "*** Creating configure"
call_and_fix_autoconf
if egrep "^AM_CONFIG_HEADER" configure.in >/dev/null 2>&1; then
echo "*** Creating config.h template"
$AUTOHEADER || exit 1
touch config.h.in
fi
echo "*** Creating Makefile templates"
$AUTOMAKE || exit 1
if test "$UNSERMAKE" = no; then
echo "*** Postprocessing Makefile templates"
perl -w admin/am_edit || exit 1
fi
if egrep "^cvs-local:" $makefile_am >/dev/null; then \
strip_makefile
$MAKE -f $makefile_wo cvs-local top_srcdir=. || exit 1
fi
echo "*** Creating date/time stamp"
touch stamp-h.in
echo "*** Finished"
echo " Don't forget to run ./configure"
echo " If you haven't done so in a while, run ./configure --help"
}
dist()
{
check_autotool_versions
###
### First build all of the files necessary to do just "make"
###
acinclude_m4
if test -r configure.in.in; then
rm -f configure.in
create_subdirs
if test -r Makefile.am.in; then
if grep '\$(top_srcdir)/Makefile.am:' $makefile_am >/dev/null; then
strip_makefile
$MAKE -f $makefile_wo top_srcdir=. ./Makefile.am || exit 1
else
Makefile_am
fi
fi
configure_files
if grep '\$(top_srcdir)/configure.in:' $makefile_am >/dev/null; then
strip_makefile
$MAKE -f $makefile_wo top_srcdir=. ./configure.in || exit 1
else
configure_in
fi
fi
$ACLOCAL $ACLOCALFLAGS
if egrep "^AM_CONFIG_HEADER" configure.in >/dev/null 2>&1; then
echo "*** Creating config.h template"
$AUTOHEADER || exit 1
touch config.h.in
fi
$AUTOMAKE --foreign || exit 1
if test "$UNSERMAKE" = no; then
echo "*** Postprocessing Makefile templates"
perl -w admin/am_edit || exit 1
fi
call_and_fix_autoconf
touch stamp-h.in
if grep "^cvs-local:" $makefile_am >/dev/null; then
strip_makefile
$MAKE -f $makefile_wo cvs-local top_srcdir=.
fi
###
### Then make messages
###
if test -d po; then
LIST=`find ./po -name "*.po"`
for i in $LIST; do
file2=`echo $i | sed -e "s#\.po#\.gmo#"`
msgfmt -o $file2 $i || touch $file2
done
fi
if grep "^cvs-dist-local:" $makefile_am >/dev/null; then
strip_makefile
$MAKE -f $makefile_wo cvs-dist-local top_srcdir=.
fi
}
subdir_dist()
{
$ACLOCAL $ACLOCALFLAGS
$AUTOHEADER
touch config.h.in
$AUTOMAKE
AUTOMAKE_STRING=`$AUTOMAKE --version | head -n 1`
case $AUTOMAKE_STRING in
*unsermake* ) :
;;
*)
perl -w ../admin/am_edit --path=../admin
esac
call_and_fix_autoconf
touch stamp-h.in
}
configure_in()
{
rm -f configure.in configure.in.new
kde_use_qt_param=
test -f configure.files || { echo "need configure.files for configure.in"; exit 1; }
list=`fgrep -v "configure.in.bot" < configure.files | fgrep -v "configure.in.mid"`
: > configure.in.new
for file in $list; do
echo "dnl =======================================================" >> configure.in.new
echo "dnl FILE: $file" >> configure.in.new
echo "dnl =======================================================" >> configure.in.new
echo "" >> configure.in.new
cat $file >> configure.in.new
done
echo "KDE_CREATE_SUBDIRSLIST" >> configure.in.new
if test -f Makefile.am.in; then
subdirs=`cat subdirs`
for dir in $subdirs; do
vdir=`echo $dir | sed -e 's,[-+.@],_,g'`
echo "AM_CONDITIONAL($vdir""_SUBDIR_included, test \"x\$$vdir""_SUBDIR_included\" = xyes)" >> configure.in.new
if test -f "$dir/configure.in"; then
echo "if test \"x\$$vdir""_SUBDIR_included\" = xyes; then " >> configure.in.new
echo " AC_CONFIG_SUBDIRS($dir)" >> configure.in.new
echo "fi" >> configure.in.new
fi
done
fi
echo "AC_CONFIG_FILES([ Makefile ])" >> configure.in.new
if test -f inst-apps; then
topleveldirs=`cat inst-apps`
else
topleveldirs=
for dir in `ls -1d * | sort`; do
if test "$dir" != "debian" && test -d $dir; then
topleveldirs="$topleveldirs $dir"
fi
done
fi
for topleveldir in $topleveldirs; do
if test -f $topleveldir/configure.in; then
continue
fi
if test -f $topleveldir/Makefile.am; then :; else
continue
fi
mfs=`find $topleveldir -follow -name Makefile.am -print | fgrep -v "/." | \
sed -e 's#\./##; s#/Makefile.am$##' | sort | sed -e 's#$#/Makefile#'`
for i in $mfs; do
echo "AC_CONFIG_FILES([ $i ])" >> configure.in.new
done
done
files=`cat configure.files`
list=`egrep '^dnl AC_OUTPUT\(.*\)' $files | sed -e "s#^.*dnl AC_OUTPUT(\(.*\))#\1#"`
for file in $list; do
echo "AC_CONFIG_FILES([ $file ])" >> configure.in.new
done
midfiles=`cat configure.files | fgrep "configure.in.mid"`
test -n "$midfiles" && cat $midfiles >> configure.in.new
echo "AC_OUTPUT" >> configure.in.new
modulename=
if test -f configure.in.in; then
if head -n 2 configure.in.in | egrep "^#MIN_CONFIG\(.*\)$" > /dev/null; then
kde_use_qt_param=`cat configure.in.in | sed -n -e "s/#MIN_CONFIG(\(.*\))/\1/p"`
fi
if head -n 2 configure.in.in | egrep "^#MIN_CONFIG" > /dev/null; then
line=`grep "^AM_INIT_AUTOMAKE(" configure.in.in`
if test -n "$line"; then
modulename=`echo $line | sed -e "s#AM_INIT_AUTOMAKE(\([^,]*\),.*#\1#"`
VERSION=`echo $line | sed -e "s#AM_INIT_AUTOMAKE([^,]*, *\([^)]*\)).*#\1#"`
fi
sed -e "s#AM_INIT_AUTOMAKE([^@].*#dnl PACKAGE set before#" \
configure.in.new > configure.in && mv configure.in configure.in.new
fi
fi
if test -z "$VERSION" || test "$VERSION" = "@VERSION@"; then
VERSION="\"3.5.8\""
fi
if test -z "$modulename" || test "$modulename" = "@MODULENAME@"; then
modulename=`pwd`;
modulename=`basename $modulename`
esc_VERSION=`echo $VERSION | sed -e "s#[^.0-9a-zA-Z]##g"`
modulename=`echo $modulename | sed -e "s#-$esc_VERSION##"`
fi
if test -n "$kde_use_qt_param"; then
sed -e "s#^dnl KDE_USE_QT#KDE_USE_QT($kde_use_qt_param)#" \
configure.in.new > configure.in && mv configure.in configure.in.new
fi
sed -e "s#@MODULENAME@#$modulename#" configure.in.new |
sed -e "s#@VERSION@#$VERSION#" > configure.in
botfiles=`cat configure.files | egrep "configure.in.bot"`
test -n "$botfiles" && cat $botfiles >> configure.in
cat $admindir/configure.in.bot.end >> configure.in
rm -f configure.in.new
}
configure_files()
{
echo "*** Creating configure.files"
admindir=NO
for i in . .. ../.. ../../..; do
if test -x $i/admin; then admindir=$i/admin; break; fi
done
rm -f configure.files
touch configure.files
if test -f configure.in.in && head -n 2 configure.in.in | grep "^#MIN_CONFIG" > /dev/null; then
echo $admindir/configure.in.min >> configure.files
fi
test -f configure.in.in && echo configure.in.in >> configure.files
# we collect files in the subdirs and do some sorting tricks, so subsubdirs come after subdirs
if test -f inst-apps; then
inst=`cat inst-apps`
list=""
for i in $inst; do
list="$list `find $i/ -follow -name "configure.in.in" -o -name "configure.in.bot" -o -name "configure.in.mid" | \
sed -e "s,/configure,/aaaconfigure," | sort | sed -e "s,/aaaconfigure,/configure,"`"
done
else
list=`find . -follow -name "configure.in.in" -o -name "configure.in.bot" -o -name "configure.in.mid" | \
sed -e "s,/configure,/aaaconfigure," | sort | sed -e "s,/aaaconfigure,/configure,"`
fi
for i in $list; do if test -f $i && test `dirname $i` != "." ; then
echo $i >> configure.files
fi; done
test -f configure.in.mid && echo configure.in.mid >> configure.files
test -f configure.in.bot && echo configure.in.bot >> configure.files
if test ! -s configure.files; then
echo "There are no files to build a configure. Please check your checkout."
exit 1
fi
}
create_subdirs()
{
if grep '\$(top_srcdir)/subdirs:' $makefile_am >/dev/null; then
# as many modules contain rules to create subdirs without any
# dependencies make won't create it unless there is no file.
# so we check if that's a dummy rule or one that works
rm -f subdirs.cvs.sh.$$
if test -f subdirs; then
mv subdirs subdirs.cvs.sh.$$
fi
strip_makefile
$MAKE -f $makefile_wo top_srcdir=. ./subdirs || exit 1
if test -f subdirs.cvs.sh.$$; then
if test -s subdirs; then
rm subdirs.cvs.sh.$$
else
mv subdirs.cvs.sh.$$ subdirs
fi
fi
else
subdirs
fi
}
subdirs()
{
dirs=
idirs=
if test -f inst-apps; then
idirs=`cat inst-apps`
else
idirs=`ls -1 | sort`
fi
compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' $makefile_am | head -n 1`
compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' $makefile_am | head -n 1`
for i in $idirs; do
if test -f $i/Makefile.am; then
case " $compilefirst $compilelast " in
*" $i "*) ;;
*) dirs="$dirs $i"
esac
fi
done
: > ./_SUBDIRS
for d in $compilefirst; do
echo $d >> ./_SUBDIRS
done
(for d in $dirs; do
list=`sed -ne "s#^COMPILE_BEFORE_$d""[ ]*=[ ]*##p" $makefile_am | head -n 1`
for s in $list; do
echo $s $d
done
list=`sed -ne "s#^COMPILE_AFTER_$d""[ ]*=[ ]*##p" $makefile_am | head -n 1`
for s in $list; do
echo $d $s
done
echo $d $d
done ) | tsort >> ./_SUBDIRS
for d in $compilelast; do
echo $d >> ./_SUBDIRS
done
if test -r subdirs && cmp -s subdirs _SUBDIRS; then
rm -f _SUBDIRS
fi
test -r _SUBDIRS && mv _SUBDIRS subdirs || true
}
Makefile_am()
{
if test -f Makefile.am.in; then
compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' $makefile_am | head -n 1`
compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' $makefile_am | head -n 1`
idirs=
dirs=
if test -f inst-apps; then
idirs=`cat inst-apps`
else
idirs=`cat subdirs`
fi
for i in $idirs; do
case " $compilefirst $compilelast " in
*" $i "*) ;;
*) dirs="$dirs $i"
esac
done
adds=`fgrep '$(top_srcdir)/acinclude.m4:' Makefile.am.in | sed -e 's,^[^:]*: *,,; s,\$(top_srcdir)/,,g'`
if echo "$adds" | fgrep "*" >/dev/null ; then
adds=`ls -d -1 $adds 2>/dev/null`
fgrep -v '$(top_srcdir)/acinclude.m4:' Makefile.am.in > Makefile.am.in.adds
str='$(top_srcdir)/acinclude.m4:'
for add in $adds; do
str="$str \$(top_srcdir)/$add"
done
echo $str >> Makefile.am.in.adds
else
cat Makefile.am.in > Makefile.am.in.adds
fi
cat Makefile.am.in.adds | \
sed -e 's,^\s*\(COMPILE_BEFORE.*\),# \1,' | \
sed -e 's,^\s*\(COMPILE_AFTER.*\),# \1,' > Makefile.am
echo "SUBDIRS="'$(TOPSUBDIRS)' >> Makefile.am
rm Makefile.am.in.adds
fi
}
acinclude_m4()
{
echo "*** Creating acinclude.m4"
adds=
if grep '\$(top_srcdir)/acinclude.m4:' $makefile_am >/dev/null; then
strip_makefile
rm -f acinclude.m4
adds=`grep '\$(top_srcdir)/acinclude.m4:' $makefile_wo | sed -e 's,^[^:]*: *,,; s,\$(top_srcdir),.,g'`
if echo $adds | fgrep "*" >/dev/null ; then
adds=`ls -d -1 $adds 2>/dev/null`
else
$MAKE -f $makefile_wo top_srcdir=. ./acinclude.m4 || exit 1
fi
else
rm -f acinclude.m4
fi
# if it wasn't created up to now, then we do it better
if test ! -f acinclude.m4; then
cat admin/acinclude.m4.in admin/libtool.m4.in admin/pkg.m4.in $adds > acinclude.m4
fi
}
package_merge()
{
catalogs=$POFILES
for cat in $catalogs; do
msgmerge -o $cat.new $cat $PACKAGE.pot
if test -s $cat.new; then
grep -v "\"POT-Creation" $cat.new > $cat.new.2
grep -v "\"POT-Creation" $cat >> $cat.new.1
if diff $cat.new.1 $cat.new.2; then
rm $cat.new
else
mv $cat.new $cat
fi
rm -f $cat.new.1 $cat.new.2
fi
done
}
extract_messages()
{
podir=${podir:-$PWD/po}
files=`find . -name Makefile.am | xargs egrep -l '^messages:' `
dirs=`for i in $files; do echo \`dirname $i\`; done`
tmpname="$PWD/messages.log"
if test -z "$EXTRACTRC"; then EXTRACTRC=extractrc ; fi
if test -z "$PREPARETIPS"; then PREPARETIPS=preparetips ; fi
export EXTRACTRC PREPARETIPS
for subdir in $dirs; do
test -z "$VERBOSE" || echo "Making messages in $subdir"
(cd $subdir
if test -n "`grep -e '^messages:.*rc.cpp' Makefile.am`"; then
$EXTRACTRC *.rc *.ui *.kcfg > rc.cpp
else
candidates=`ls -1 *.rc *.ui *.kcfg 2>/dev/null`
if test -n "$candidates"; then
echo "$subdir has *.rc, *.ui or *.kcfg files, but not correct messages line"
fi
fi
if find . -name \*.c\* -o -name \*.h\* | fgrep -v ".svn" | xargs fgrep -s -q KAboutData ; then
echo -e 'i18n("_: NAME OF TRANSLATORS\\n"\n"Your names")\ni18n("_: EMAIL OF TRANSLATORS\\n"\n"Your emails")' > _translatorinfo.cpp
else echo " " > _translatorinfo.cpp
fi
perl -e '$mes=0; while (<STDIN>) { next if (/^(if\s|else\s|endif)/); if (/^messages:/) { $mes=1; print $_; next; } if ($mes) { if (/$\\(XGETTEXT\)/ && / -o/) { s/ -o \$\(podir\)/ _translatorinfo.cpp -o \$\(podir\)/ } print $_; } else { print $_; } }' < Makefile.am | egrep -v '^include ' > _transMakefile
kdepotpath=${includedir:-`kde-config --expandvars --install include`}/kde.pot
if ! test -f $kdepotpath; then
kdepotpath=`kde-config --expandvars --prefix`/include/kde.pot
fi
$MAKE -s -f _transMakefile podir=$podir EXTRACTRC="$EXTRACTRC" PREPARETIPS="$PREPARETIPS" srcdir=. \
XGETTEXT="${XGETTEXT:-xgettext} --foreign-user -C -ci18n -ki18n -ktr2i18n -kI18N_NOOP -kI18N_NOOP2 -kaliasLocale -x $kdepotpath" messages
exit_code=$?
if test "$exit_code" != 0; then
echo "make exit code: $exit_code"
fi
) 2>&1 | grep -v '^make\[1\]' > $tmpname
test -s $tmpname && { echo $subdir ; cat "$tmpname"; }
test -f $subdir/rc.cpp && rm -f $subdir/rc.cpp
rm -f $subdir/_translatorinfo.cpp
rm -f $subdir/_transMakefile
done
rm -f $tmpname
}
package_messages()
{
rm -rf po.backup
mkdir po.backup
for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
egrep -v '^#[^,]' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > po.backup/$i
cat po/$i > po.backup/backup_$i
touch -r po/$i po.backup/backup_$i
rm po/$i
done
extract_messages
for i in `ls -1 po.backup/*.pot 2>/dev/null | sed -e "s#po.backup/##" | egrep -v '^backup_'`; do
test -f po/$i || echo "disappeared: $i"
done
for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
sed -e 's,^"Content-Type: text/plain; charset=CHARSET\\n"$,"Content-Type: text/plain; charset=UTF-8\\n",' po/$i > po/$i.new && mv po/$i.new po/$i
#msgmerge -q -o po/$i po/$i po/$i
egrep -v '^#[^,]' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > temp.pot
if test -f po.backup/$i && ! cmp -s temp.pot po.backup/$i; then
echo "will update $i"
else
if test -f po.backup/backup_$i; then
test -z "$VERBOSE" || echo "I'm restoring $i"
mv po.backup/backup_$i po/$i
rm po.backup/$i
else
echo "will add $i"
fi
fi
done
rm -f temp.pot
rm -rf po.backup
}
# Make sure that sorting is always done the same way
LC_ALL=C
export LC_ALL
unset LANG || :
unset LC_CTYPE || :
unset LANGUAGE || :
unset CDPATH || :
admindir=`echo "$0" | sed 's%[\\/][^\\/][^\\/]*$%%'`
test "x$admindir" = "x$0" && admindir=.
test "x$MAKE" = x && MAKE=make
makefile_am=Makefile.am
makefile_wo=Makefile.am.wo
if test -f Makefile.am.in; then
makefile_am=Makefile.am.in
makefile_wo=Makefile.am.in.wo
rm -f $makefile_wo
fi
# Call script to find autoconf and friends. Uses eval since the script outputs
# sh-compatible code.
eval `$admindir/detect-autoconf.pl`
###
### Main
###
arg=`echo $1 | tr .- __`
case $arg in
cvs | dist | subdir_dist | configure_in | configure_files | subdirs | \
cvs_clean | package_merge | package_messages | Makefile_am | acinclude_m4 | extract_messages ) $arg ;;
configure ) call_and_fix_autoconf ;;
* ) echo "Usage: cvs.sh <target>"
echo "Target can be one of:"
echo " cvs svn dist"
echo " configure.in configure.files"
echo " package-merge package-messages"
echo ""
echo "Usage: anything but $1"
exit 1 ;;
esac
if test -f $makefile_wo; then
rm $makefile_wo
fi
exit 0

@ -0,0 +1,43 @@
#!/usr/bin/perl -w
use Shell qw(mv cp mkdir rm) ;
use File::Find;
use Cwd;
$origPwd = `pwd`;
chomp $origPwd;
$kde_prefix = "/usr";
$sysconfdir = "/etc";
$kde_includedir = "$kde_prefix/include/kde";
$infodir = "$kde_prefix/share/info";
$mandir = "$kde_prefix/share/man";
$qtdir = "/usr/share/qt3";
$kde_cgidir = "$kde_prefix/lib/cgi-bin";
$kde_confdir = "$sysconfdir/kde3";
$kde_htmldir = "$kde_prefix/share/doc/kde/HTML";
if (defined $ENV{DEB_BUILD_OPTIONS} &&
$ENV{DEB_BUILD_OPTIONS} =~ /\bnostrip\b/) {
$enable_debug="--enable-debug=full";
} else {
$enable_debug="--disable-debug";
}
if (@ARGV && $ARGV[0] eq 'echodirs') {
print STDOUT "export kde_prefix=$kde_prefix\n";
print STDOUT "export sysconfdir=$sysconfdir\n";
print STDOUT "export kde_includedir=$kde_includedir\n";
print STDOUT "export infodir=$infodir\n";
print STDOUT "export mandir=$mandir\n";
print STDOUT "export qtdir=$qtdir\n";
print STDOUT "export kde_cgidir=$kde_cgidir\n";
print STDOUT "export kde_confdir=$kde_confdir\n";
print STDOUT "export kde_htmldir=$kde_htmldir\n";
print STDOUT "configkde=$enable_debug --disable-rpath --prefix=\$(kde_prefix) --sysconfdir=\$(sysconfdir) --includedir=\$(kde_includedir) --infodir=\$(infodir) --mandir=\$(mandir) --with-qt-dir=\$(qtdir)\n";
exit
}

@ -0,0 +1,530 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
scriptversion=2005-07-09.11
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
# 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, 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.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.
Environment variables:
depmode Dependency tracking mode.
source Source file read by `PROGRAMS ARGS'.
object Object file output by `PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputing dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "depcomp $scriptversion"
exit $?
;;
esac
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like `#:fec' to the end of the
# dependency line.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr '
' ' ' >> $depfile
echo >> $depfile
# The second pass generates a dummy entry for each header file.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts `$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test -f "$tmpdepfile"; then :
else
stripped=`echo "$stripped" | sed 's,^.*/,,'`
tmpdepfile="$stripped.u"
fi
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
outname="$stripped.o"
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
icc)
# Intel's C compiler understands `-MD -MF file'. However on
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
# which is wrong. We want:
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using \ :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form `foo.o: dependent.h',
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
# With Tru64 cc, shared objects can also be used to make a
# static library. This mecanism is used in libtool 1.4 series to
# handle both shared and static libraries in a single compilation.
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
#
# With libtool 1.5 this exception was removed, and libtool now
# generates 2 separate objects for the 2 libraries. These two
# compilations output dependencies in in $dir.libs/$base.o.d and
# in $dir$base.o.d. We have to check for both files, because
# one of the two compilations can be disabled. We should prefer
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
# automatically cleaned when .libs/ is deleted, while ignoring
# the former would cause a distcleancheck panic.
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
tmpdepfile2=$dir$base.o.d # libtool 1.5
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
"$@" -Wc,-MD
else
tmpdepfile1=$dir$base.o.d
tmpdepfile2=$dir$base.d
tmpdepfile3=$dir$base.d
tmpdepfile4=$dir$base.d
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a tab and a space in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for `:'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
"$@" $dashmflag |
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

@ -0,0 +1,19 @@
$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in $(top_srcdir)/admin/cvs.sh $(top_srcdir)/admin/pkg.m4.in
@cd $(top_srcdir) && $(SHELL) admin/cvs.sh acinclude_m4
$(top_srcdir)/configure.in: $(top_srcdir)/subdirs $(top_srcdir)/configure.files $(top_srcdir)/admin/cvs.sh
@cd $(top_srcdir) && $(SHELL) admin/cvs.sh configure_in
$(top_srcdir)/configure.files: $(top_srcdir)/subdirs $(CONF_FILES)
@cd $(top_srcdir) && $(SHELL) admin/cvs.sh configure.files $(top_srcdir)/admin/cvs.sh
$(top_srcdir)/Makefile.am: $(top_srcdir)/Makefile.am.in $(top_srcdir)/subdirs $(top_srcdir)/admin/cvs.sh
@cd $(top_srcdir) && $(SHELL) admin/cvs.sh Makefile_am
$(top_srcdir)/subdirs: $(top_srcdir)/Makefile.am.in $(top_srcdir)/admin/cvs.sh
@cd $(top_srcdir) && $(SHELL) admin/cvs.sh subdirs
# defining default rules for files that may not be present
$(top_srcdir)/Makefile.am.in:
$(CONF_FILES):

@ -0,0 +1,175 @@
#!/usr/bin/env perl
# Try to locate best version of auto*
# By Michael Pyne <michael.pyne@kdemail.net>
#
# Copyright (c) 2005.
# This code is public domain. You may use it however you like (including
# relicensing).
# Emulate the 'which' program.
sub which
{
my $prog = shift;
my @paths = split(/:/, $ENV{'PATH'});
for $path (@paths)
{
return "$path/$prog" if -x "$path/$prog";
}
return "";
}
# Subroutine to determine the highest installed version of the given program,
# searching from the given paths.
sub findBest
{
my ($program, @paths) = @_;
my $best_version_found = '0'; # Deliberately a string.
my %versions;
my %minimumVersions = (
'autoconf' => '2.5',
'automake' => '1.6',
);
# Allow user to use environment variable to override search.
return $ENV{uc $program} if $ENV{uc $program};
for $prefix (@paths)
{
@files = glob "$prefix/$program*";
for $file (@files)
{
# Don't check non-executable scripts.
next unless -x $file;
($version) = $file =~ /$prefix\/$program-?(.*)$/;
$version =~ s/-|\.//g;
# Don't check the -wrapper ones
next if $version eq "wrapper";
# Special case some programs to make sure it has a minimum version.
if (not $version and exists $minimumVersions{$program})
{
my $min_version = $minimumVersions{$program};
my $versionOutput = `$program --version 2>/dev/null | head -n 1`;
# If we can't run the script to get the version it likely won't work later.
next unless $versionOutput;
# Use number.number for version (we don't need the excess in general).
($versionOutput) = ($versionOutput =~ /(\d\.\d)/);
# Use lt to do lexicographical comparison of strings (which should be
# equivalent and doesn't involve issues with floating point conversions).
if (not $versionOutput or $versionOutput lt $min_version)
{
next;
}
}
# If no version suffix then use it in favor of a versioned autotool
# since the ever-popular WANT_AUTOFOO should then work (in theory).
return $file unless $version;
# Emulate 'which', and abort if we've already seen this version.
next if exists $versions{$version};
# Save filename of program.
$versions{$version} = $file;
# Use string comparison so that e.g. 253a will be > 253 but < 254.
if ($version gt $best_version_found)
{
$best_version_found = $version;
}
}
}
return $versions{$best_version_found};
}
# Find an appropriate "which" program for later use by the shell script calling
# us.
sub findWhich
{
for $candidate ('type -p', 'which', 'type')
{
$test = `$candidate sh 2>/dev/null`;
chomp $test;
return $candidate if -x $test;
}
}
# Uses which() to find a program unless the user provided its path in the
# environment (the upper case program name is searched).
sub findProgram
{
$suffix = ""; # For use if @_ has only one param.
my ($program, $suffix) = @_;
return $ENV{uc $program} if $ENV{uc $program};
return which("$program$suffix");
}
# SCRIPT STARTS.
# Search in path.
@paths = split(/:/, $ENV{'PATH'});
# Make sure at least /usr/bin and /usr/local/bin are in this search.
unshift @paths, '/usr/local/bin' unless grep $_ eq '/usr/local/bin', @paths;
unshift @paths, '/usr/bin' unless grep $_ eq '/usr/bin', @paths;
$autoconf = findBest('autoconf', @paths);
($autoconf_suffix) = $autoconf =~ /.*autoconf(.*)$/;
# Find matching autoconf companions.
$autoheader = findProgram('autoheader', $autoconf_suffix);
$autom4te = findProgram('autom4te', $autoconf_suffix);
# Get best automake, and look for unsermake to possibly override it.
$automake = findBest('automake', @paths);
$unsermake = "";
# backward compatible: if $UNSERMAKE points to a path, use it
$unsermake = findProgram('unsermake') if (defined($ENV{'UNSERMAKE'}) and $ENV{'UNSERMAKE'} =~ /\//);
# new compatible: if it says 'yes', use the one from path
$unsermake = which('unsermake') if ($ENV{'UNSERMAKE'} ne 'no');
($automake_suffix) = $automake =~ /.*automake(.*)$/;
# Use unsermake if we found it.
$automake = "$unsermake -c" if $unsermake;
# Find matching automake companions.
$aclocal = findProgram('aclocal', $automake_suffix);
$which = findWhich();
# Make sure we have all of the needed programs.
for $i (qw'autoconf autoheader autom4te automake aclocal')
{
unless(${$i})
{
print "# Unable to find $i!!\n";
exit 1;
}
}
# Print results in eval-able form.
print <<EOF;
AUTOCONF="$autoconf"
AUTOHEADER="$autoheader"
AUTOM4TE="$autom4te"
AUTOMAKE="$automake"
ACLOCAL="$aclocal"
WHICH="$which"
export AUTOCONF AUTOHEADER AUTOM4TE AUTOMAKE ACLOCAL WHICH
EOF
exit 0;

@ -0,0 +1,883 @@
#! /bin/sh
#
# doxygen.sh Copyright (C) 2005 by Adriaan de Groot
# Based on some code from Doxyfile.am, among other things.
# License: GPL version 2.
# See file COPYING in kdelibs for details.
echo "*** doxygen.sh"
# Recurse handling is a little complicated, since normally
# subdir (given on the command-line) processing doesn't recurse
# but you can force it to do so.
recurse=1
recurse_given=NO
use_modulename=1
cleanup=YES
while test -n "$1" ; do
case "x$1" in
"x--no-cleanup" )
cleanup=NO
;;
"x--no-recurse" )
recurse=0
recurse_given=YES
;;
"x--recurse" )
recurse=1
recurse_given=YES
;;
"x--no-modulename" )
use_modulename=0
;;
"x--modulename" )
use_modulename=1
;;
"x--help" )
echo "doxygen.sh usage:"
echo "doxygen.sh [--no-recurse] [--no-modulename] <srcdir> [<subdir>]"
exit 2
;;
x--doxdatadir=* )
DOXDATA=`echo $1 | sed -e 's+--doxdatadir=++'`
;;
x--installdir=*)
PREFIX=`echo $1 | sed -e 's+--installdir=++'`
;;
x--* )
echo "Unknown option: $1"
exit 1
;;
* )
top_srcdir="$1"
break
;;
esac
shift
done
### Sanity check the mandatory "top srcdir" argument.
if test -z "$top_srcdir" ; then
echo "Usage: doxygen.sh <top_srcdir>"
exit 1
fi
if test ! -d "$top_srcdir" ; then
echo "top_srcdir ($top_srcdir) is not a directory."
exit 1
fi
### Normalize top_srcdir so it is an absolute path.
if expr "x$top_srcdir" : "x/" > /dev/null ; then
# top_srcdir is absolute already
:
else
top_srcdir=`cd "$top_srcdir" 2> /dev/null && pwd`
if test ! -d "$top_srcdir" ; then
echo "top_srcdir ($top_srcdir) is not a directory."
exit 1
fi
fi
### Sanity check and guess QTDOCDIR.
if test -z "$QTDOCDIR" ; then
if test -z "$QTDIR" ; then
for i in /usr/X11R6/share/doc/qt/html
do
QTDOCDIR="$i"
test -d "$QTDOCDIR" && break
done
else
for i in share/doc/qt/html doc/html
do
QTDOCDIR="$QTDIR/$i"
test -d "$QTDOCDIR" && break
done
fi
fi
if test -z "$QTDOCDIR" || test ! -d "$QTDOCDIR" ; then
if test -z "$QTDOCDIR" ; then
echo "* QTDOCDIR could not be guessed."
else
echo "* QTDOCDIR does not name a directory."
fi
if test -z "$QTDOCTAG" ; then
echo "* QTDOCDIR set to \"\""
QTDOCDIR=""
else
echo "* But I'll use $QTDOCDIR anyway because of QTDOCTAG."
fi
fi
### Get the "top srcdir", also its name, and handle the case that subdir "."
### is given (which would be top_srcdir then, so it's equal to none-given
### but no recursion either).
###
# top_srcdir="$1" # Already set by options processing
module_name=`basename "$top_srcdir"`
subdir="$2"
if test "x." = "x$subdir" ; then
subdir=""
if test "x$recurse_given" = "xNO" ; then
recurse=0
fi
fi
if test "x" != "x$subdir" ; then
# If no recurse option given explicitly, default to
# no recurse when processing subdirs given on the command-line.
if test "x$recurse_given" = "xNO" ; then
recurse=0
fi
fi
if test -z "$DOXDATA" || test ! -d "$DOXDATA" ; then
if test -n "$DOXDATA" ; then
echo "* \$DOXDATA is '$DOXDATA' which does not name a directory"
fi
DOXDATA="$top_srcdir/doc/common"
fi
if test ! -d "$DOXDATA" ; then
echo "* \$DOXDATA does not name a directory ( or is unset ), tried \"$DOXDATA\""
exit 1
fi
if test -n "$PREFIX" && test ! -d "$PREFIX" ; then
echo "* \$PREFIX does not name a directory, tried \"$PREFIX\""
echo "* \$PREFIX is disabled."
PREFIX=""
fi
### We need some values from top-level files, which
### are not preserved between invocations of this
### script, so factor it out for easy use.
create_doxyfile_in()
{
eval `grep 'VERSION="' "$top_srcdir/admin/cvs.sh"`
echo "PROJECT_NUMBER = $VERSION" > Doxyfile.in
grep '^KDE_INIT_DOXYGEN' "$top_srcdir/configure.in.in" | \
sed -e 's+[^[]*\[\([^]]*\)+PROJECT_NAME = "\1"+' \
-e 's+].*++' >> Doxyfile.in
}
apidoxdir="$module_name"-apidocs
test "x$use_modulename" = "x0" && apidoxdir="apidocs"
### If we're making the top subdir, create the structure
### for the apidox and initialize it. Otherwise, just use the
### structure assumed to be there.
if test -z "$subdir" ; then
if test ! -d "$apidoxdir" ; then
mkdir "$apidoxdir" > /dev/null 2>&1
fi
cd "$apidoxdir" > /dev/null 2>&1 || {
echo "Cannot create and cd into $apidoxdir"
exit 1
}
test -f "Doxyfile.in" || create_doxyfile_in
# Copy in logos and the like
for i in "favicon.ico" "kde_gear_64.png"
do
cp "$DOXDATA/$i" . > /dev/null 2> /dev/null
done
for i in "$top_srcdir/doc/api/Dox-"*.png
do
T=`basename "$i" | sed -e 's+Dox-++'`
test -f "$i" && cp "$i" "./$T" > /dev/null 2> /dev/null
done
top_builddir="."
srcdir="$1"
subdir="."
else
cd "$apidoxdir" > /dev/null 2>&1 || {
echo "Cannot cd into $apidoxdir -- maybe you need to"
echo "build the top-level dox first."
exit 1
}
if test "x1" = "x$recurse" ; then
# OK, so --recurse was requested
if test ! -f "subdirs.top" ; then
echo "* No subdirs.top available in the $apidoxdir."
echo "* The --recurse option will be ignored."
recurse=0
fi
fi
fi
### Read a single line (TODO: support \ continuations) from the Makefile.am.
### Used to extract variable assignments from it.
extract_line()
{
file="$2" ; test -z "$file" && file="$srcdir/Makefile.am"
pattern=`echo "$1" | tr + .`
grep "^$1" "$file" | \
sed -e "s+$pattern.*=\s*++"
}
### Handle the COMPILE_{FIRST,LAST,BEFORE,AFTER} part of Makefile.am
### in the toplevel. Copied from admin/cvs.sh. Licence presumed LGPL).
create_subdirs()
{
echo "* Sorting top-level subdirs"
dirs=
idirs=
if test -f "$top_srcdir/inst-apps"; then
idirs=`cat "$top_srcdir/"inst-apps`
else
idirs=`cd "$top_srcdir" && ls -1 | sort`
fi
compilefirst=""
compilelast=""
if test -f "$top_srcdir/"Makefile.am.in ; then
compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' "$top_srcdir/"Makefile.am.in | head -n 1`
compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' "$top_srcdir/"Makefile.am.in | head -n 1`
fi
for i in $idirs; do
if test -f "$top_srcdir/$i"/Makefile.am; then
case " $compilefirst $compilelast " in
*" $i "*) ;;
*) dirs="$dirs $i"
esac
fi
done
: > ./_SUBDIRS
for d in $compilefirst; do
echo $d >> ./_SUBDIRS
done
(for d in $dirs; do
list=""
if test -f "$top_srcdir/"Makefile.am.in ; then
list=`sed -ne "s#^COMPILE_BEFORE_$d""[ ]*=[ ]*##p" "$top_srcdir/"Makefile.am.in | head -n 1`
fi
for s in $list; do
echo $s $d
done
list=""
if test -f "$top_srcdir/"Makefile.am.in ; then
list=`sed -ne "s#^COMPILE_AFTER_$d""[ ]*=[ ]*##p" "$top_srcdir/"Makefile.am.in | head -n 1`
fi
for s in $list; do
echo $d $s
done
echo $d $d
done ) | tsort >> ./_SUBDIRS
for d in $compilelast; do
echo $d >> ./_SUBDIRS
done
test -r _SUBDIRS && mv _SUBDIRS subdirs.top || true
}
### Add HTML header, footer, CSS tags to Doxyfile.
### Assumes $subdir is set. Argument is a string
### to stick in front of the file if needed.
apidox_htmlfiles()
{
dox_header="$top_srcdir/doc/api/$1header.html"
dox_footer="$top_srcdir/doc/api/$1footer.html"
dox_css="$top_srcdir/doc/api/doxygen.css"
test -f "$dox_header" || dox_header="$DOXDATA/$1header.html"
test -f "$dox_footer" || dox_footer="$DOXDATA/$1footer.html"
test -f "$dox_css" || dox_css="$DOXDATA/doxygen.css"
echo "HTML_HEADER = $dox_header" >> "$subdir/Doxyfile" ; \
echo "HTML_FOOTER = $dox_footer" >> "$subdir/Doxyfile" ; \
echo "HTML_STYLESHEET = $dox_css" >> "$subdir/Doxyfile"
}
apidox_specials()
{
line=`extract_line DOXYGEN_PROJECTNAME "$1"`
test -n "$line" && echo "PROJECT_NAME = \"$line\"" >> "$2"
}
apidox_local()
{
for i in "$top_srcdir/doc/api/Doxyfile.local"
do
if test -f "$i" ; then
cat "$i" >> "$subdir/Doxyfile"
break
fi
done
}
### Post-process HTML files by substituting in the menu files
#
# In non-top directories, both <!-- menu --> and <!-- gmenu -->
# are calculated and replaced. Top directories get an empty <!-- menu -->
# if any.
doxyndex()
{
# Special case top-level to have an empty MENU.
if test "x$subdir" = "x." ; then
MENU=""
htmldir="."
htmltop="$top_builddir" # Just ., presumably
echo "* Post-processing top-level files"
else
MENU="<ul>"
htmldir="$subdir/html"
htmltop="$top_builddir.." # top_builddir ends with /
echo "* Post-processing files in $htmldir"
# Build a little PHP file that maps class names to file
# names, for the quick-class-picker functionality.
# (The quick-class-picker is disabled due to styling
# problems in IE & FF).
(
echo "<?php \$map = array("; \
for htmlfile in `find $htmldir/ -type f -name "class[A-Z]*.html" | grep -v "\-members.html$"`; do
classname=`echo $htmlfile | sed -e "s,.*/class\\(.*\\).html,\1," -e "s,_1_1,::,g" -e "s,_01, ,g" -e "s,_4,>,g" -e "s+_00+,+g" -e "s+_3+<+g" | tr "[A-Z]" "[a-z]"`
echo " \"$classname\" => \"$htmlfile\","
done | sort ; \
echo ") ?>"
) > "$subdir/classmap.inc"
# This is a list of pairs, with / separators so we can use
# basename and dirname (a crude shell hack) to split them
# into parts. For each, if the file part exists (as a html
# file) tack it onto the MENU variable as a <li> with link.
for i in "Main Page/index" \
"Modules/modules" \
"Namespace List/namespaces" \
"Class Hierarchy/hierarchy" \
"Alphabetical List/classes" \
"Class List/annotated" \
"File List/files" \
"Directories/dirs" \
"Namespace Members/namespacemembers" \
"Class Members/functions" \
"Related Pages/pages"
do
NAME=`dirname "$i"`
FILE=`basename "$i"`
test -f "$htmldir/$FILE.html" && MENU="$MENU<li><a href=\"$FILE.html\">$NAME</a></li>"
done
MENU="$MENU</ul>"
fi
# Get the list of global Menu entries.
GMENU=`cat subdirs | tr -d '\n'`
PMENU=`grep '<!-- pmenu' "$htmldir/index.html" | sed -e 's+.*pmenu *++' -e 's+ *-->++' | awk '{ c=split($0,a,"/"); for (j=1; j<=c; j++) { printf " / <a href=\""; if (j==c) { printf("."); } for (k=j; k<c; k++) { printf "../"; } if (j<c) { printf("../html/index.html"); } printf "\">%s</a>\n" , a[j]; } }' | tr -d '\n'`
# Map the PHP file into HTML options so that
# it can be substituted in for the quick-class-picker.
CMENU=""
# For now, leave the CMENU disabled
CMENUBEGIN="<!--"
CMENUEND="-->"
if test "x$subdir" = "x." ; then
# Disable CMENU on toplevel anyway
CMENUBEGIN="<!--"
CMENUEND="-->"
else
test -f "$subdir/classmap.inc" && \
CMENU=`grep '=>' "$subdir/classmap.inc" | sed -e 's+"\([^"]*\)" => "'"$subdir/html/"'\([^"]*\)"+<option value="\2">\1<\/option>+' | tr -d '\n'`
if test -f "$subdir/classmap.inc" && grep "=>" "$subdir/classmap.inc" > /dev/null 2>&1 ; then
# Keep the menu, it's useful
:
else
CMENUBEGIN="<!--"
CMENUEND="-->"
fi
fi
# Now substitute in the MENU in every file. This depends
# on HTML_HEADER (ie. header.html) containing the
# <!-- menu --> comment.
for i in "$htmldir"/*.html
do
if test -f "$i" ; then
sed -e "s+<!-- menu -->+$MENU+" \
-e "s+<!-- gmenu -->+$GMENU+" \
-e "s+<!-- pmenu.*-->+$PMENU+" \
-e "s+<!-- cmenu.begin -->+$CMENUBEGIN+" \
-e "s+<!-- cmenu.end -->+$CMENUEND+" \
< "$i" | sed -e "s+@topdir@+$htmltop+g" > "$i.new" && mv "$i.new" "$i"
sed -e "s+<!-- cmenu -->+$CMENU+" < "$i" > "$i.new"
test -s "$i.new" && mv "$i.new" "$i"
fi
done
}
### Handle the Doxygen processing of a toplevel directory.
apidox_toplevel()
{
echo ""
echo "*** Creating API documentation main page for $module_name"
echo "*"
rm -f "Doxyfile"
for i in "$top_srcdir/doc/api/Doxyfile.global" \
"$top_srcdir/admin/Doxyfile.global" \
"$DOXDATA/Doxyfile.global"
do
if test -f "$i" ; then
cp "$i" Doxyfile
break
fi
done
if test ! -f "Doxyfile" ; then
echo "* Cannot create Doxyfile."
exit 1
fi
cat "$top_builddir/Doxyfile.in" >> Doxyfile
echo "INPUT = $top_srcdir" >> Doxyfile
echo "OUTPUT_DIRECTORY = $top_builddir" >> Doxyfile ; \
echo "FILE_PATTERNS = *.dox" >> Doxyfile ; \
echo "RECURSIVE = NO" >> Doxyfile ; \
echo "ALPHABETICAL_INDEX = NO" >> Doxyfile ; \
echo "HTML_OUTPUT = ." >> Doxyfile ; \
apidox_htmlfiles "main"
# KDevelop has a top-level Makefile.am with settings.
for i in "$top_srcdir/Makefile.am.in" "$top_srcdir/Makefile.am"
do
if test -f "$i" ; then
grep '^DOXYGEN_SET_' "$i" | \
sed -e 's+DOXYGEN_SET_++' -e "s+@topdir@+$top_srcdir+" >> Doxyfile
apidox_specials "$srcdir/Makefile.am" "$subdir/Doxyfile"
break
fi
done
apidox_local
doxygen Doxyfile
( cd "$top_srcdir" && grep -l '^include.*Doxyfile.am' `find . -name Makefile.am` ) | sed -e 's+/Makefile.am$++' -e 's+^\./++' | sort > subdirs.in
for i in `cat subdirs.in`
do
test "x." = "x$i" && continue;
dir=`dirname "$i"`
file=`basename "$i"`
if test "x." = "x$dir" ; then
dir=""
else
dir="$dir/"
fi
indent=`echo "$dir" | sed -e 's+[^/]*/+\&nbsp;\&nbsp;+g' | sed -e 's+&+\\\&+g'`
entryname=`extract_line DOXYGEN_SET_PROJECT_NAME "$top_srcdir/$dir/$file/Makefile.am"`
test -z "$entryname" && entryname="$file"
if grep DOXYGEN_EMPTY "$top_srcdir/$dir/$file/Makefile.am" > /dev/null 2>&1 ; then
echo "<li>$indent$file</li>"
else
echo "<li>$indent<a href=\"@topdir@/$dir$file/html/index.html\">$entryname</a></li>"
fi
done > subdirs
doxyndex
}
### Handle the Doxygen processing of a non-toplevel directory.
apidox_subdir()
{
echo ""
echo "*** Creating apidox in $subdir"
echo "*"
rm -f "$subdir/Doxyfile"
if test ! -d "$top_srcdir/$subdir" ; then
echo "* No source (sub)directory $subdir"
return
fi
for i in "$top_srcdir/doc/api/Doxyfile.global" \
"$top_srcdir/admin/Doxyfile.global" \
"$DOXDATA/Doxyfile.global"
do
if test -f "$i" ; then
cp "$i" "$subdir/Doxyfile"
break
fi
done
test -f "Doxyfile.in" || create_doxyfile_in
cat "Doxyfile.in" >> "$subdir/Doxyfile"
echo "PROJECT_NAME = \"$subdir\"" >> "$subdir/Doxyfile"
echo "INPUT = $srcdir" >> "$subdir/Doxyfile"
echo "OUTPUT_DIRECTORY = ." >> "$subdir/Doxyfile"
if grep -l "$subdir/" subdirs.in > /dev/null 2>&1 ; then
echo "RECURSIVE = NO" >> "$subdir/Doxyfile"
fi
echo "HTML_OUTPUT = $subdir/html" >> "$subdir/Doxyfile"
echo "GENERATE_TAGFILE = $subdir/$subdirname.tag" >> "$subdir/Doxyfile"
test -d "$top_srcdir/doc/api" && \
echo "IMAGE_PATH = $top_srcdir/doc/api" >> "$subdir/Doxyfile"
apidox_htmlfiles ""
# Makefile.ams may contain overrides to our settings,
# so copy them in.
grep '^DOXYGEN_SET_' "$srcdir/Makefile.am" | \
sed -e 's+DOXYGEN_SET_++' >> "$subdir/Doxyfile"
apidox_specials "$srcdir/Makefile.am" "$subdir/Doxyfile"
excludes=`extract_line DOXYGEN_EXCLUDE`
if test -n "$excludes"; then
patterns=""
dirs=""
for item in `echo "$excludes"`; do
if test -d "$top_srcdir/$subdir/$item"; then
dirs="$dirs $top_srcdir/$subdir/$item/"
else
patterns="$patterns $item"
fi
done
echo "EXCLUDE_PATTERNS += $patterns" >> "$subdir/Doxyfile"
echo "EXCLUDE += $dirs" >> "$subdir/Doxyfile"
fi
echo "TAGFILES = \\" >> "$subdir/Doxyfile"
## For now, don't support \ continued references lines
tags=`extract_line DOXYGEN_REFERENCES`
for i in $tags qt ; do
tagsubdir=`dirname $i` ; tag=`basename $i`
tagpath=""
not_found=""
if test "x$tagsubdir" = "x." ; then
tagsubdir=""
else
tagsubdir="$tagsubdir/"
fi
# Find location of tag file
if test -f "$tagsubdir$tag/$tag.tag" ; then
file="$tagsubdir$tag/$tag.tag"
loc="$tagsubdir$tag/html"
else
# This checks for dox built with_out_ --no-modulename
# in the same build dir as this dox run was started in.
file=`ls -1 ../*-apidocs/"$tagsubdir$tag/$tag.tag" 2> /dev/null`
if test -n "$file" ; then
loc=`echo "$file" | sed -e "s/$tag.tag\$/html/"`
else
# If the tag file doesn't exist yet, but should
# because we have the right dirs here, queue
# this directory for re-processing later.
if test -d "$top_srcdir/$tagsubdir$tag" ; then
echo "* Need to re-process $subdir for tag $i"
echo "$subdir" >> "subdirs.later"
else
# Re-check in $PREFIX if needed.
test -n "$PREFIX" && \
file=`cd "$PREFIX" && \
ls -1 *-apidocs/"$tagsubdir$tag/$tag.tag" 2> /dev/null`
# If something is found, patch it up. The location must be
# relative to the installed location of the dox and the
# file must be absolute.
if test -n "$file" ; then
loc=`echo "../$file" | sed -e "s/$tag.tag\$/html/"`
file="$PREFIX/$file"
echo "* Tags for $tagsubdir$tag will only work when installed."
not_found="YES"
fi
fi
fi
fi
if test "$tag" = "qt" ; then
if test -z "$QTDOCDIR" ; then
echo " $file" >> "$subdir/Doxyfile"
else
if test -z "$file" ; then
# Really no Qt tags
echo "" >> "$subdir/Doxyfile"
else
echo " $file=$QTDOCDIR" >> "$subdir/Doxyfile"
fi
fi
else
if test -n "$file" ; then
test -z "$not_found" && echo "* Found tag $file"
echo " $file=../$top_builddir$loc \\" >> "$subdir/Doxyfile"
fi
fi
done
apidox_local
if grep '^DOXYGEN_EMPTY' "$srcdir/Makefile.am" > /dev/null 2>&1 ; then
# This directory is empty, so don't process it, but
# *do* handle subdirs that might have dox.
:
else
# Regular processing
doxygen "$subdir/Doxyfile"
doxyndex
fi
}
### Run a given subdir by setting up global variables first.
do_subdir()
{
subdir=`echo "$1" | sed -e 's+/$++'`
srcdir="$top_srcdir/$subdir"
subdirname=`basename "$subdir"`
mkdir -p "$subdir" 2> /dev/null
if test ! -d "$subdir" ; then
echo "Can't create dox subdirectory $subdir"
return
fi
top_builddir=`echo "/$subdir" | sed -e 's+/[^/]*+../+g'`
apidox_subdir
}
### Create installdox-slow in the toplevel
create_installdox()
{
# Fix up the installdox script so it accepts empty args
#
# This code is copied from the installdox generated by Doxygen,
# copyright by Dimitri van Heesch and released under the GPL.
# This does a _slow_ update of the dox, because it loops
# over the given substitutions instead of assuming all the
# needed ones are given.
#
cat <<\EOF
#! /usr/bin/env perl
%subst = () ;
$quiet = 0;
if (open(F,"search.cfg"))
{
$_=<F> ; s/[ \t\n]*$//g ; $subst{"_doc"} = $_;
$_=<F> ; s/[ \t\n]*$//g ; $subst{"_cgi"} = $_;
}
while ( @ARGV ) {
$_ = shift @ARGV;
if ( s/^-// ) {
if ( /^l(.*)/ ) {
$v = ($1 eq "") ? shift @ARGV : $1;
($v =~ /\/$/) || ($v .= "/");
$_ = $v;
if ( /(.+)\@(.+)/ ) {
$subst{$1} = $2;
} else {
print STDERR "Argument $_ is invalid for option -l\n";
&usage();
}
}
elsif ( /^q/ ) {
$quiet = 1;
}
elsif ( /^\?|^h/ ) {
&usage();
}
else {
print STDERR "Illegal option -$_\n";
&usage();
}
}
else {
push (@files, $_ );
}
}
if ( ! @files ) {
if (opendir(D,".")) {
foreach $file ( readdir(D) ) {
$match = ".html";
next if ( $file =~ /^\.\.?$/ );
($file =~ /$match/) && (push @files, $file);
($file =~ "tree.js") && (push @files, $file);
}
closedir(D);
}
}
if ( ! @files ) {
print STDERR "Warning: No input files given and none found!\n";
}
foreach $f (@files)
{
if ( ! $quiet ) {
print "Editing: $f...\n";
}
$oldf = $f;
$f .= ".bak";
unless (rename $oldf,$f) {
print STDERR "Error: cannot rename file $oldf\n";
exit 1;
}
if (open(F,"<$f")) {
unless (open(G,">$oldf")) {
print STDERR "Error: opening file $oldf for writing\n";
exit 1;
}
if ($oldf ne "tree.js") {
while (<F>) {
foreach $sub (keys %subst) {
s/doxygen\=\"$sub\:([^ \"\t\>\<]*)\" (href|src)=\"\1/doxygen\=\"$sub:$subst{$sub}\" \2=\"$subst{$sub}/g;
print G "$_";
}
}
}
else {
while (<F>) {
foreach $sub (keys %subst) {
s/\"$sub\:([^ \"\t\>\<]*)\", \"\1/\"$sub:$subst{$sub}\" ,\"$subst{$sub}/g;
print G "$_";
}
}
}
}
else {
print STDERR "Warning file $f does not exist\n";
}
unlink $f;
}
sub usage {
print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n";
print STDERR "Options:\n";
print STDERR " -l tagfile\@linkName tag file + URL or directory \n";
print STDERR " -q Quiet mode\n\n";
exit 1;
}
EOF
}
# Do only the subdirs that match the RE passed in as $1
do_subdirs_re()
{
RE=`echo "$1" | sed -e 's+/$++'`
# Here's a queue of dirs to re-process later when
# all the rest have been done already.
> subdirs.later
# subdirs.top lists _all_ subdirs of top in the order they
# should be handled; subdirs.in lists those dirs that contain
# dox. So the intersection of the two is the ordered list
# of top-level subdirs that contain dox.
#
# subdirs.top also doesn't contain ".", so that special
# case can be ignored in the loop.
(
for i in `grep "^$RE" subdirs.top`
do
if test "x$i" = "x." ; then
continue
fi
# Calculate intersection of this element and the
# set of dox dirs.
if grep "^$i\$" subdirs.in > /dev/null 2>&1 ; then
echo "$i"
mkdir -p "$i" 2> /dev/null
# Handle the subdirs of this one
for j in `grep "$i/" subdirs.in`
do
echo "$j"
mkdir -p "$j" 2> /dev/null
done
fi
done
# Now we still need to handle whatever is left
for i in `cat subdirs.in`
do
test -d "$i" || echo "$i"
mkdir -p "$i" 2> /dev/null
done
) > subdirs.sort
for i in `cat subdirs.sort`
do
do_subdir "$i"
done
if test -s "subdirs.later" ; then
sort subdirs.later | uniq > subdirs.sort
for i in `cat subdirs.sort`
do
: > subdirs.later
echo "*** Reprocessing $i"
do_subdir "$i"
test -s "subdirs.later" && echo "* Some tag files were still not found."
done
fi
}
if test "x." = "x$top_builddir" ; then
apidox_toplevel
create_subdirs
create_installdox > installdox-slow
if test "x$recurse" = "x1" ; then
if test "x$module_name" = "xkdelibs" ; then
if test -z "$QTDOCTAG" && test -d "$QTDOCDIR" && \
test ! -f "qt/qt.tag" ; then
# Special case: create a qt tag file.
echo "*** Creating a tag file for the Qt library:"
mkdir qt
doxytag -t qt/qt.tag "$QTDOCDIR" > /dev/null 2>&1
fi
fi
if test -n "$QTDOCTAG" && test -r "$QTDOCTAG" ; then
echo "*** Copying tag file for the Qt library:"
mkdir qt
cp "$QTDOCTAG" qt/qt.tag
fi
do_subdirs_re "."
fi
else
if test "x$recurse" = "x1" ; then
do_subdirs_re "$subdir"
else
do_subdir "$subdir"
fi
fi
# At the end of a run, clean up stuff.
if test "YES" = "$cleanup" ; then
rm -f subdirs.in subdirs.later subdirs.sort subdirs.top Doxyfile.in
rm -f `find . -name Doxyfile`
rm -f qt/qt.tag
rmdir qt > /dev/null 2>&1
fi
exit 0

@ -0,0 +1,401 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2005-11-07.23
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
posix_glob=
posix_mkdir=
# Symbolic mode for testing mkdir with directories.
# It is the same as 755, but also tests that "u+" works.
test_mode=u=rwx,g=rx,o=rx,u+wx
# Desired mode of installed file.
mode=0755
# Desired mode of newly created intermediate directories.
# It is empty if not known yet.
intermediate_mode=
chmodcmd=$chmodprog
chowncmd=
chgrpcmd=
stripcmd=
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=
dst=
dir_arg=
dstarg=
no_target_directory=
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
Options:
-c (ignored)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
-s $stripprog installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
--help display this help and exit.
--version display version info and exit.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
"
while test -n "$1"; do
case $1 in
-c) shift
continue;;
-d) dir_arg=true
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
--help) echo "$usage"; exit $?;;
-m) mode=$2
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-s) stripcmd=$stripprog
shift
continue;;
-t) dstarg=$2
shift
shift
continue;;
-T) no_target_directory=true
shift
continue;;
--version) echo "$0 $scriptversion"; exit $?;;
*) # When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
test -n "$dir_arg$dstarg" && break
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dstarg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dstarg"
shift # fnord
fi
shift # arg
dstarg=$arg
done
break;;
esac
done
if test -z "$1"; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
fi
# It's OK to call `install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
test -n "$dir_arg" || trap '(exit $?); exit' 1 2 13 15
for src
do
# Protect names starting with `-'.
case $src in
-*) src=./$src ;;
esac
if test -n "$dir_arg"; then
dst=$src
dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
echo "$0: $src does not exist." >&2
exit 1
fi
if test -z "$dstarg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dstarg
# Protect names starting with `-'.
case $dst in
-*) dst=./$dst ;;
esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
if test -n "$no_target_directory"; then
echo "$0: $dstarg: Is a directory" >&2
exit 1
fi
dstdir=$dst
dst=$dstdir/`basename "$src"`
dstdir_status=0
else
# Prefer dirname, but fall back on a substitute if dirname fails.
dstdir=`
(dirname "$dst") 2>/dev/null ||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$dst" : 'X\(//\)[^/]' \| \
X"$dst" : 'X\(//\)$' \| \
X"$dst" : 'X\(/\)' \| \
. : '\(.\)' 2>/dev/null ||
echo X"$dst" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
/^X\(\/\/\)[^/].*/{ s//\1/; q; }
/^X\(\/\/\)$/{ s//\1/; q; }
/^X\(\/\).*/{ s//\1/; q; }
s/.*/./; q'
`
test -d "$dstdir"
dstdir_status=$?
fi
fi
obsolete_mkdir_used=false
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
posix_mkdir=false
if $mkdirprog -m $test_mode -p -- / >/dev/null 2>&1; then
posix_mkdir=true
else
# Remove any dirs left behind by ancient mkdir implementations.
rmdir ./-m "$test_mode" ./-p ./-- 2>/dev/null
fi ;;
esac
if
$posix_mkdir && {
# With -d, create the new directory with the user-specified mode.
# Otherwise, create it using the same intermediate mode that
# mkdir -p would use when creating intermediate directories.
# POSIX says that this mode is "$(umask -S),u+wx", so use that
# if umask -S works.
if test -n "$dir_arg"; then
mkdir_mode=$mode
else
case $intermediate_mode in
'')
if umask_S=`(umask -S) 2>/dev/null`; then
intermediate_mode=$umask_S,u+wx
else
intermediate_mode=$test_mode
fi ;;
esac
mkdir_mode=$intermediate_mode
fi
$mkdirprog -m "$mkdir_mode" -p -- "$dstdir"
}
then :
else
# mkdir does not conform to POSIX, or it failed possibly due to
# a race condition. Create the directory the slow way, step by
# step, checking for races as we go.
case $dstdir in
/*) pathcomp=/ ;;
-*) pathcomp=./ ;;
*) pathcomp= ;;
esac
case $posix_glob in
'')
if (set -f) 2>/dev/null; then
posix_glob=true
else
posix_glob=false
fi ;;
esac
oIFS=$IFS
IFS=/
$posix_glob && set -f
set fnord $dstdir
shift
$posix_glob && set +f
IFS=$oIFS
for d
do
test "x$d" = x && continue
pathcomp=$pathcomp$d
if test ! -d "$pathcomp"; then
$mkdirprog "$pathcomp"
# Don't fail if two instances are running concurrently.
test -d "$pathcomp" || exit 1
fi
pathcomp=$pathcomp/
done
obsolete_mkdir_used=true
fi
fi
if test -n "$dir_arg"; then
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
test -z "$chmodcmd" || $doit $chmodcmd "$mode" "$dst"; } || exit 1
else
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Copy the file name to the temp name.
$doit $cpprog "$src" "$dsttmp" &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$mode" "$dsttmp"; } &&
# Now rename the file to the real destination.
{ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
|| {
# The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
# Now remove or move aside any old file at destination location.
# We try this two ways since rm can't unlink itself on some
# systems and the destination file might be busy for other
# reasons. In this case, the final cleanup might fail but the new
# file should still install successfully.
{
if test -f "$dst"; then
$doit $rmcmd -f "$dst" 2>/dev/null \
|| { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
&& { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
|| {
echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1
}
else
:
fi
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dst"
}
} || exit 1
trap '' 0
fi
done
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

5891
admin/libtool.m4.in vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,353 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
scriptversion=2004-09-07.08
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004
# Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# 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, 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.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
if test $# -eq 0; then
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
fi
run=:
# In the cases where this matters, `missing' is being run in the
# srcdir already.
if test -f configure.ac; then
configure_ac=configure.ac
else
configure_ac=configure.in
fi
msg="missing on your system"
case "$1" in
--run)
# Try to run requested program, and just exit if it succeeds.
run=
shift
"$@" && exit 0
# Exit code 63 means version mismatch. This often happens
# when the user try to use an ancient version of a tool on
# a file that requires a minimum version. In this case we
# we should proceed has if the program had been absent, or
# if --run hadn't been passed.
if test $? = 63; then
run=:
msg="probably too old"
fi
;;
-h|--h|--he|--hel|--help)
echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
error status if there is no known handling for PROGRAM.
Options:
-h, --help display this help and exit
-v, --version output version information and exit
--run try to run the given command, and emulate it if it fails
Supported PROGRAM values:
aclocal touch file \`aclocal.m4'
autoconf touch file \`configure'
autoheader touch file \`config.h.in'
automake touch all \`Makefile.in' files
bison create \`y.tab.[ch]', if possible, from existing .[ch]
flex create \`lex.yy.c', if possible, from existing .c
help2man touch the output file
lex create \`lex.yy.c', if possible, from existing .c
makeinfo touch the output file
tar try tar, gnutar, gtar, then tar without non-portable flags
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
Send bug reports to <bug-automake@gnu.org>."
exit 0
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)"
exit 0
;;
-*)
echo 1>&2 "$0: Unknown \`$1' option"
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
;;
esac
# Now exit if we have it, but it failed. Also exit now if we
# don't have it and --version was passed (most likely to detect
# the program).
case "$1" in
lex|yacc)
# Not GNU programs, they don't have --version.
;;
tar)
if test -n "$run"; then
echo 1>&2 "ERROR: \`tar' requires --run"
exit 1
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
exit 1
fi
;;
*)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
# Could not run --version or --help. This is probably someone
# running `$TOOL --version' or `$TOOL --help' to check whether
# $TOOL exists and not knowing $TOOL uses missing.
exit 1
fi
;;
esac
# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case "$1" in
aclocal*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
to install the \`Automake' and \`Perl' packages. Grab them from
any GNU archive site."
touch aclocal.m4
;;
autoconf)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`${configure_ac}'. You might want to install the
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
archive site."
touch configure
;;
autoheader)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acconfig.h' or \`${configure_ac}'. You might want
to install the \`Autoconf' and \`GNU m4' packages. Grab them
from any GNU archive site."
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
test -z "$files" && files="config.h"
touch_files=
for f in $files; do
case "$f" in
*:*) touch_files="$touch_files "`echo "$f" |
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
*) touch_files="$touch_files $f.in";;
esac
done
touch $touch_files
;;
automake*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
You might want to install the \`Automake' and \`Perl' packages.
Grab them from any GNU archive site."
find . -type f -name Makefile.am -print |
sed 's/\.am$/.in/' |
while read f; do touch "$f"; done
;;
autom4te)
echo 1>&2 "\
WARNING: \`$1' is needed, but is $msg.
You might have modified some files without having the
proper tools for further handling them.
You can get \`$1' as part of \`Autoconf' from any GNU
archive site."
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
if test -f "$file"; then
touch $file
else
test -z "$file" || exec >$file
echo "#! /bin/sh"
echo "# Created by GNU Automake missing as a replacement of"
echo "# $ $@"
echo "exit 0"
chmod +x $file
exit 1
fi
;;
bison|yacc)
echo 1>&2 "\
WARNING: \`$1' $msg. You should only need it if
you modified a \`.y' file. You may need the \`Bison' package
in order for those modifications to take effect. You can get
\`Bison' from any GNU archive site."
rm -f y.tab.c y.tab.h
if [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.y)
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.c
fi
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.h
fi
;;
esac
fi
if [ ! -f y.tab.h ]; then
echo >y.tab.h
fi
if [ ! -f y.tab.c ]; then
echo 'main() { return 0; }' >y.tab.c
fi
;;
lex|flex)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a \`.l' file. You may need the \`Flex' package
in order for those modifications to take effect. You can get
\`Flex' from any GNU archive site."
rm -f lex.yy.c
if [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.l)
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" lex.yy.c
fi
;;
esac
fi
if [ ! -f lex.yy.c ]; then
echo 'main() { return 0; }' >lex.yy.c
fi
;;
help2man)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a dependency of a manual page. You may need the
\`Help2man' package in order for those modifications to take
effect. You can get \`Help2man' from any GNU archive site."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
fi
if [ -f "$file" ]; then
touch $file
else
test -z "$file" || exec >$file
echo ".ab help2man is required to generate this page"
exit 1
fi
;;
makeinfo)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a \`.texi' or \`.texinfo' file, or any other file
indirectly affecting the aspect of the manual. The spurious
call might also be the consequence of using a buggy \`make' (AIX,
DU, IRIX). You might want to install the \`Texinfo' package or
the \`GNU make' package. Grab either from any GNU archive site."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
fi
touch $file
;;
tar)
shift
# We have already tried tar in the generic part.
# Look for gnutar/gtar before invocation to avoid ugly error
# messages.
if (gnutar --version > /dev/null 2>&1); then
gnutar "$@" && exit 0
fi
if (gtar --version > /dev/null 2>&1); then
gtar "$@" && exit 0
fi
firstarg="$1"
if shift; then
case "$firstarg" in
*o*)
firstarg=`echo "$firstarg" | sed s/o//`
tar "$firstarg" "$@" && exit 0
;;
esac
case "$firstarg" in
*h*)
firstarg=`echo "$firstarg" | sed s/h//`
tar "$firstarg" "$@" && exit 0
;;
esac
fi
echo 1>&2 "\
WARNING: I can't seem to be able to run \`tar' with the given arguments.
You may want to install GNU tar or Free paxutils, or check the
command line arguments."
exit 1
;;
*)
echo 1>&2 "\
WARNING: \`$1' is needed, and is $msg.
You might have modified some files without having the
proper tools for further handling them. Check the \`README' file,
it often tells you about the needed prerequisites for installing
this package. You may also peek at any GNU archive site, in case
some other package would contain this missing \`$1' program."
exit 1
;;
esac
exit 0
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

@ -0,0 +1,158 @@
#! /bin/sh
# mkinstalldirs --- make directory hierarchy
scriptversion=2005-06-29.22
# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
# Public domain.
#
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
errstatus=0
dirmode=
usage="\
Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
Create each directory DIR (with mode MODE, if specified), including all
leading file name components.
Report bugs to <bug-automake@gnu.org>."
# process command line arguments
while test $# -gt 0 ; do
case $1 in
-h | --help | --h*) # -h for help
echo "$usage"
exit $?
;;
-m) # -m PERM arg
shift
test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
dirmode=$1
shift
;;
--version)
echo "$0 $scriptversion"
exit $?
;;
--) # stop option processing
shift
break
;;
-*) # unknown option
echo "$usage" 1>&2
exit 1
;;
*) # first non-opt arg
break
;;
esac
done
for file
do
if test -d "$file"; then
shift
else
break
fi
done
case $# in
0) exit 0 ;;
esac
# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
# mkdir -p a/c at the same time, both will detect that a is missing,
# one will create a, then the other will try to create a and die with
# a "File exists" error. This is a problem when calling mkinstalldirs
# from a parallel make. We use --version in the probe to restrict
# ourselves to GNU mkdir, which is thread-safe.
case $dirmode in
'')
if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
echo "mkdir -p -- $*"
exec mkdir -p -- "$@"
else
# On NextStep and OpenStep, the `mkdir' command does not
# recognize any option. It will interpret all options as
# directories to create, and then abort because `.' already
# exists.
test -d ./-p && rmdir ./-p
test -d ./--version && rmdir ./--version
fi
;;
*)
if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
test ! -d ./--version; then
echo "mkdir -m $dirmode -p -- $*"
exec mkdir -m "$dirmode" -p -- "$@"
else
# Clean up after NextStep and OpenStep mkdir.
for d in ./-m ./-p ./--version "./$dirmode";
do
test -d $d && rmdir $d
done
fi
;;
esac
for file
do
case $file in
/*) pathcomp=/ ;;
*) pathcomp= ;;
esac
oIFS=$IFS
IFS=/
set fnord $file
shift
IFS=$oIFS
for d
do
test "x$d" = x && continue
pathcomp=$pathcomp$d
case $pathcomp in
-*) pathcomp=./$pathcomp ;;
esac
if test ! -d "$pathcomp"; then
echo "mkdir $pathcomp"
mkdir "$pathcomp" || lasterr=$?
if test ! -d "$pathcomp"; then
errstatus=$lasterr
else
if test ! -z "$dirmode"; then
echo "chmod $dirmode $pathcomp"
lasterr=
chmod "$dirmode" "$pathcomp" || lasterr=$?
if test ! -z "$lasterr"; then
errstatus=$lasterr
fi
fi
fi
fi
pathcomp=$pathcomp/
done
done
exit $errstatus
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

@ -0,0 +1,371 @@
#!/usr/bin/perl -w
# Check namespace cleanness of a library.
# Allowed symbols are passed as arguments.
# They may have trailing * = wildcard.
# Wildcards may be also specified as *::* (e.g. K*::* for all KDE classes)
# Symbols are listed as full function unmangled names without arguments,
# e.g. 'foo bar* nspace::*' allows foo(), foo(int), bar(), barbar()
# and all symbols in namespace/class nspace.
# If an argument has comma in it, it's a filename of a file containing
# allowed symbols, one per line.
$thisProg = "$0"; # This programs name
$library = "";
$allowed_symbols = "";
$debug = 0;
$allowed_weak = "";
$weak_specified = 0;
while( defined( $ARGV[ 0 ] ))
{
$_ = shift;
if( /^--verbose$|^-v$/ )
{
$debug = 1;
}
elsif( /^--help$|^-h$/ )
{
print STDOUT "Usage $thisProg [OPTION] ... library [allowed symbols] ...\n",
"\n",
"Check if the given library has only allowed public symbols.\n",
"\n",
" --allowweak=[symbol] allow only these weak symbols\n",
" -v, --verbose verbosely list files processed\n",
" -h, --help print this help, then exit\n";
exit 0;
}
elsif( /^--allowweak=(.*)$/ )
{
$allowed_weak .= " " . $1;
$weak_specified = 1;
}
elsif( /^--allowweak$/ ) # simply list all weak
{
$allowed_weak .= " ";
$weak_specified = 1;
}
elsif( /^--*/ )
{
die "Invalid argument!\n";
}
else
{
if( ! $library )
{
$library = $_;
}
else
{
$allowed_symbols .= " " . $_;
}
}
}
if( ! $weak_specified )
{
$allowed_weak = "*";
# allow all weak symbols by default
# instances of templates and similar stuff - unfortunately includes also things from other libraries,
# so it cannot be on by default
}
print STDERR "library:" . $library . "\n" if $debug;
print STDERR "allowed_symbols:" . $allowed_symbols . "\n" if $debug;
print STDERR "allowed_weak:" . $allowed_weak . "\n" if $debug;
$default_symbols = "_fini _init"; # system symbols
# on my system, every .so has :
# A _DYNAMIC
# A _GLOBAL_OFFSET_TABLE_
# A __bss_start
# A _edata
# A _end
# T _fini
# T _init
# no need to list A symbols in $default_symbols
print STDERR "default_symbols: " . $default_symbols . "\n" if $debug;
print STDOUT "Namespace cleanness check for " . $library . " :\n";
$lib_file = "";
if( $library =~ /\.la$/ )
{
# get the real library file from .la
open( FILEIN, $library ) || die "Couldn't open $! !\n";
while( $line = <FILEIN> )
{
if( $line =~ /library_names=\'([^ ]*).*/o )
{
$lib_file = $1;
}
}
close( FILEIN );
if( ! $lib_file )
{
print STDERR "Library file not found in .la file!\n";
exit 1;
}
my $libpath = $library;
$libpath =~ s%[^/]*$%%;
if( -e $libpath . ".libs/" . $lib_file )
{
$lib_file = $libpath . ".libs/" . $lib_file;
}
else
{
$lib_file = $libpath . $lib_file;
}
}
else
{
$lib_file = $library;
}
print STDERR "libfile: ". $lib_file . "\n" if $debug;
$allowed_symbols .= " " . $default_symbols;
sub process_symbols($\@\%\@);
@wildcards = ();
%exacts = ();
@regwildcards = ();
process_symbols( $allowed_symbols, @wildcards, %exacts, @regwildcards );
@weak_wildcards = ();
%weak_exacts = ();
@weak_regwildcards = ();
process_symbols( $allowed_weak, @weak_wildcards, %weak_exacts, @weak_regwildcards );
# grep is for stripping not exported symbols, which don't have address (=first column)
$nm_command = "nm -BDCg " . $lib_file . " | grep -v '^ ' |";
# TODO how portable is this nmcheck stuff?
print STDERR "nm command:" . $nm_command . "\n" if $debug;
open( FILEIN, $nm_command ) || die "nm command failed\n";
my $exit_code = 0;
while( $line = <FILEIN> )
{
my $type;
my $symbol;
if( $line =~ /^[^ ]* (.) (.*)$/o )
{
$type = $1;
$symbol = $2;
}
else
{
die "Invalid line: " . $line . "\n";
}
print STDERR "Type: " . $type . " , symbol: " . $symbol . "\n" if $debug;
if( $type eq "A" )
{ # these should be system symbols, so ignore them
next;
}
my $orig_symbol = $symbol;
if( $symbol =~ /\(anonymous namespace\)/o )
{ # TODO tell to prefer named namespaces? (shorter symbols)
next;
}
# strip prefixes
# the :: appending is to make "CLASS::*" work also for "vtable for CLASS"
$symbol =~ s/^typeinfo for (.*)$/$1::/o;
$symbol =~ s/^typeinfo fn for (.*)$/$1::/o;
$symbol =~ s/^typeinfo name for (.*)$/$1::/o;
$symbol =~ s/^vtable for (.*)$/$1::/o;
$symbol =~ s/^guard variable for (.*)$/$1::/o;
$symbol =~ s/^reference temporary for (.*)$/$1::/o;
$symbol =~ s/^VTT for (.*)$/$1::/o;
$symbol =~ s/^virtual thunk \[[^\]]*\] to (.*)$/$1::/o;
$symbol =~ s/^non-virtual thunk \[[^\]]*\] to (.*)$/$1::/o;
$symbol =~ s/^covariant return thunk \[[^\]]*\] to (.*)$/$1::/o;
$symbol =~ s/^construction vtable thunk for (.*)$/$1::/o;
$symbol =~ s/^construction vtable for .*-in-(.*) [0-9]*$/$1::/o;
# templates seem to have also return types mangled in their name, and nm prints it too
# they have also template arguments in the symbol
# get rid of both of those
while( $symbol =~ /<.*>/o )
{
$symbol =~ s/<[^<>]*>//o; # strip innermost <>
}
if( $symbol !~ /operator\(\)/o )
{
$symbol =~ s/ ?\(.*\).*$//o; # strip () and all after it
}
else
{
$symbol =~ s/(^|:| )operator\(\) ?\(.*\).*$//o; # strip () and all after it
}
$symbol =~ s/\[.*\] *$//o; # strip [in-charge] etc.
if( $symbol =~ /(^|:| )operator /o )
{
$symbol =~ s/.* ([^\s]*)operator /$1/o; # strip everything before 'X::operator blah'
}
else
{
$symbol =~ s/.* ([^\s]+) *$/$1/o; # get last word (strip return type)
}
# print STDERR "Processed symbol: " . $symbol . "\n" if $debug;
my $found = 0;
if( $exacts{ $symbol } )
{
$found = 1;
}
if( ! $found )
{
for my $wild ( @wildcards )
{
if( index( $symbol, $wild ) == 0 )
{
$found = 1;
last;
}
}
}
if( ! $found )
{
for my $wild ( @regwildcards )
{
if( $symbol =~ /^$wild$/ )
{
$found = 1;
last;
}
}
}
if( ( ! $found ) && ( $type eq "W" || $type eq "V" ))
{
if( $weak_exacts{ $symbol } )
{
$found = 1;
}
if( ! $found )
{
for my $wild ( @weak_wildcards )
{
if( index( $symbol, $wild ) == 0 )
{
$found = 1;
last;
}
}
}
if( ! $found )
{
for my $wild ( @weak_regwildcards )
{
if( $symbol =~ /^$wild$/ )
{
$found = 1;
last;
}
}
}
}
if( ! $found )
{
print STDERR "Public symbol " . $orig_symbol . " is not allowed!\n";
$exit_code = 1;
}
}
close( FILEIN );
print STDOUT $exit_code == 0 ? "OK\n" : "FAILED\n";
exit $exit_code;
sub process_symbols($\@\%\@)
{
my $allowed_symbols = $_[ 0 ];
my $wildcards_ref = $_[ 1 ];
my $exacts_ref = $_[ 2 ];
my $regwildcards_ref = $_[ 3 ];
$allowed_symbols =~ s/^ *//o; # strip whitespace
$allowed_symbols =~ s/ *$//o;
if( $allowed_symbols eq "NONE" )
{
$allowed_symbols = "";
}
my @symbols1 = split( ' ', $allowed_symbols );
my $i = 0;
my @symbols2 = ();
while( defined( $symbols1[ $i ] ))
{
my $symbol = $symbols1[ $i ];
if( $symbol =~ /\./ ) # dot in name -> file
{
open( SYMIN, $symbol ) || die ( "Cannot open file " . $symbol . "!" );
while( $line = <SYMIN> )
{
$line =~ s/^\s*//o; # strip whitespace
$line =~ s/\s*$//o;
if( $line !~ /^$/o # empty line
&& $line !~ /^\s*#/ ) # comment line starting with #
{
$symbols2[ $#symbols2 + 1 ] = $line;
}
}
close( SYMIN );
}
else
{
$symbols2[ $#symbols2 + 1 ] = $symbol;
}
$i++;
}
$i = 0;
while( defined( $symbols2[ $i ] ))
{
my $symbol = $symbols2[ $i ];
if( $symbol =~ /__/
|| $symbol =~ /^_[A-Z]/ )
{ # ISO C++ 2.10.2
die "Symbols containing a double underscore or beginning with an underscore and an upper-case letter are reserved!\n";
}
elsif( $symbol eq "main"
|| $symbol eq "main*" )
{
die "Symbol main is not allowed!\n";
}
if( $symbol =~ /^([^\*]*)\*$/o # trailing * without any * before it
&& $symbol !~ /operator\*$/o )
{
print STDERR "wildcard:" . $symbol . "\n" if $debug;
$wildcards_ref->[ $#{$wildcards_ref} + 1 ] = $1;
}
elsif( $symbol =~ /\*$/o
&& ( $symbol =~ /\*::/o || $symbol =~ /::\*/o )
&& $symbol !~ /^\*/o
&& $symbol !~ /operator\*$/o )
{
print STDERR "regwildcard:" . $symbol . "\n" if $debug;
$symbol =~ s/\*/\.\*/go; # change * to .* (regexp)
$regwildcards_ref->[ $#{$regwildcards_ref} + 1 ] = $symbol;
}
else
{
print STDERR "exact:" . $symbol . "\n" if $debug;
$exacts_ref->{ $symbol } = 1;
}
$i++;
}
}

@ -0,0 +1,192 @@
### -*- autoconf -*-
dnl This file is part of the KDE libraries/packages
dnl Copyright (C) 1997 Janos Farkas (chexum@shadow.banki.hu)
dnl (C) 1997,98,99 Stephan Kulow (coolo@kde.org)
dnl This file is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Library General Public
dnl License as published by the Free Software Foundation; either
dnl version 2 of the License, or (at your option) any later version.
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Library General Public License for more details.
dnl You should have received a copy of the GNU Library General Public License
dnl along with this library; see the file COPYING.LIB. If not, write to
dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
dnl Boston, MA 02110-1301, USA.
AC_DEFUN([KDE_CHECK_MICO],
[
AC_REQUIRE([KDE_CHECK_LIBDL])
AC_REQUIRE([KDE_MISC_TESTS])
AC_MSG_CHECKING(for MICO)
if test -z "$MICODIR"; then
kde_micodir=/usr/local
else
kde_micodir="$MICODIR"
fi
AC_ARG_WITH(micodir,
[ --with-micodir=micodir where mico is installed ],
kde_micodir=$withval,
kde_micodir=$kde_micodir
)
AC_CACHE_VAL(kde_cv_mico_incdir,
[
mico_incdirs="$kde_micodir/include /usr/include /usr/local/include /usr/local/include /opt/local/include $kde_extra_includes"
AC_FIND_FILE(CORBA.h, $mico_incdirs, kde_cv_mico_incdir)
])
kde_micodir=`echo $kde_cv_mico_incdir | sed -e 's#/include##'`
if test ! -r $kde_micodir/include/CORBA.h; then
AC_MSG_ERROR([No CORBA.h found, specify another micodir])
fi
AC_MSG_RESULT($kde_micodir)
MICO_INCLUDES=-I$kde_micodir/include
AC_SUBST(MICO_INCLUDES)
MICO_LDFLAGS=-L$kde_micodir/lib
AC_SUBST(MICO_LDFLAGS)
micodir=$kde_micodir
AC_SUBST(micodir)
AC_MSG_CHECKING([for MICO version])
AC_CACHE_VAL(kde_cv_mico_version,
[
AC_LANG_C
cat >conftest.$ac_ext <<EOF
#include <stdio.h>
#include <mico/version.h>
int main() {
printf("MICO_VERSION=%s\n",MICO_VERSION);
return (0);
}
EOF
ac_compile='${CC-gcc} $CFLAGS $MICO_INCLUDES conftest.$ac_ext -o conftest'
if AC_TRY_EVAL(ac_compile); then
if eval `./conftest 2>&5`; then
kde_cv_mico_version=$MICO_VERSION
else
AC_MSG_ERROR([your system is not able to execute a small application to
find MICO version! Check $kde_micodir/include/mico/version.h])
fi
else
AC_MSG_ERROR([your system is not able to compile a small application to
find MICO version! Check $kde_micodir/include/mico/version.h])
fi
])
dnl installed MICO version
mico_v_maj=`echo $kde_cv_mico_version | sed -e 's/^\(.*\)\..*\..*$/\1/'`
mico_v_mid=`echo $kde_cv_mico_version | sed -e 's/^.*\.\(.*\)\..*$/\1/'`
mico_v_min=`echo $kde_cv_mico_version | sed -e 's/^.*\..*\.\(.*\)$/\1/'`
if test "x$1" = "x"; then
req_version="2.3.0"
else
req_version=$1
fi
dnl required MICO version
req_v_maj=`echo $req_version | sed -e 's/^\(.*\)\..*\..*$/\1/'`
req_v_mid=`echo $req_version | sed -e 's/^.*\.\(.*\)\..*$/\1/'`
req_v_min=`echo $req_version | sed -e 's/^.*\..*\.\(.*\)$/\1/'`
if test "$mico_v_maj" -lt "$req_v_maj" || \
( test "$mico_v_maj" -eq "$req_v_maj" && \
test "$mico_v_mid" -lt "$req_v_mid" ) || \
( test "$mico_v_mid" -eq "$req_v_mid" && \
test "$mico_v_min" -lt "$req_v_min" )
then
AC_MSG_ERROR([found MICO version $kde_cv_mico_version but version $req_version \
at least is required. You should upgrade MICO.])
else
AC_MSG_RESULT([$kde_cv_mico_version (minimum version $req_version, ok)])
fi
LIBMICO="-lmico$kde_cv_mico_version $LIBCRYPT $LIBSOCKET $LIBDL"
AC_SUBST(LIBMICO)
if test -z "$IDL"; then
IDL='$(kde_bindir)/cuteidl'
fi
AC_SUBST(IDL)
IDL_DEPENDENCIES='$(kde_includes)/CUTE.h'
AC_SUBST(IDL_DEPENDENCIES)
idldir="\$(includedir)/idl"
AC_SUBST(idldir)
])
AC_DEFUN([KDE_CHECK_MINI_STL],
[
AC_REQUIRE([KDE_CHECK_MICO])
AC_MSG_CHECKING(if we use mico's mini-STL)
AC_CACHE_VAL(kde_cv_have_mini_stl,
[
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
kde_save_cxxflags="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS $MICO_INCLUDES"
AC_TRY_COMPILE(
[
#include <mico/config.h>
],
[
#ifdef HAVE_MINI_STL
#error "nothing"
#endif
],
kde_cv_have_mini_stl=no,
kde_cv_have_mini_stl=yes)
CXXFLAGS="$kde_save_cxxflags"
AC_LANG_RESTORE
])
if test "x$kde_cv_have_mini_stl" = "xyes"; then
AC_MSG_RESULT(yes)
$1
else
AC_MSG_RESULT(no)
$2
fi
])
])
AC_DEFUN([KDE_CHECK_ANSI],
[
])
AC_DEFUN([KDE_CHECK_INSURE],
[
AC_ARG_ENABLE(insure, [ --enable-insure use insure++ for debugging [default=no]],
[
if test $enableval = "no"; dnl
then ac_use_insure="no"
else ac_use_insure="yes"
fi
], [ac_use_insure="no"])
AC_MSG_CHECKING(if we will use Insure++ to debug)
AC_MSG_RESULT($ac_use_insure)
if test "$ac_use_insure" = "yes"; dnl
then CC="insure"; CXX="insure"; dnl CFLAGS="$CLAGS -fno-rtti -fno-exceptions "????
fi
])
AC_DEFUN([KDE_CHECK_NEWLIBS],
[
])

@ -0,0 +1,57 @@
dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
dnl also defines GSTUFF_PKG_ERRORS on error
AC_DEFUN([PKG_CHECK_MODULES], [
succeeded=no
if test -z "$PKG_CONFIG"; then
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
fi
if test "$PKG_CONFIG" = "no" ; then
echo "*** The pkg-config script could not be found. Make sure it is"
echo "*** in your path, or set the PKG_CONFIG environment variable"
echo "*** to the full path to pkg-config."
echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
AC_MSG_CHECKING(for $2)
if $PKG_CONFIG --exists "$2" ; then
AC_MSG_RESULT(yes)
succeeded=yes
AC_MSG_CHECKING($1_CFLAGS)
$1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
AC_MSG_RESULT($$1_CFLAGS)
AC_MSG_CHECKING($1_LIBS)
$1_LIBS=`$PKG_CONFIG --libs "$2"`
AC_MSG_RESULT($$1_LIBS)
else
$1_CFLAGS=""
$1_LIBS=""
## If we have a custom action on failure, don't print errors, but
## do set a variable so people can do so.
$1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
ifelse([$4], ,echo $$1_PKG_ERRORS,)
fi
AC_SUBST($1_CFLAGS)
AC_SUBST($1_LIBS)
else
echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
echo "*** See http://www.freedesktop.org/software/pkgconfig"
fi
fi
if test $succeeded = yes; then
ifelse([$3], , :, [$3])
else
ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
fi
])

@ -0,0 +1,223 @@
#! /bin/sh
# ylwrap - wrapper for lex/yacc invocations.
scriptversion=2005-05-14.22
# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# Written by Tom Tromey <tromey@cygnus.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, 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.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
case "$1" in
'')
echo "$0: No files given. Try \`$0 --help' for more information." 1>&2
exit 1
;;
--basedir)
basedir=$2
shift 2
;;
-h|--h*)
cat <<\EOF
Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
Wrapper for lex/yacc invocations, renaming files as desired.
INPUT is the input file
OUTPUT is one file PROG generates
DESIRED is the file we actually want instead of OUTPUT
PROGRAM is program to run
ARGS are passed to PROG
Any number of OUTPUT,DESIRED pairs may be used.
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v|--v*)
echo "ylwrap $scriptversion"
exit $?
;;
esac
# The input.
input="$1"
shift
case "$input" in
[\\/]* | ?:[\\/]*)
# Absolute path; do nothing.
;;
*)
# Relative path. Make it absolute.
input="`pwd`/$input"
;;
esac
pairlist=
while test "$#" -ne 0; do
if test "$1" = "--"; then
shift
break
fi
pairlist="$pairlist $1"
shift
done
# The program to run.
prog="$1"
shift
# Make any relative path in $prog absolute.
case "$prog" in
[\\/]* | ?:[\\/]*) ;;
*[\\/]*) prog="`pwd`/$prog" ;;
esac
# FIXME: add hostname here for parallel makes that run commands on
# other machines. But that might take us over the 14-char limit.
dirname=ylwrap$$
trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
mkdir $dirname || exit 1
cd $dirname
case $# in
0) $prog "$input" ;;
*) $prog "$@" "$input" ;;
esac
ret=$?
if test $ret -eq 0; then
set X $pairlist
shift
first=yes
# Since DOS filename conventions don't allow two dots,
# the DOS version of Bison writes out y_tab.c instead of y.tab.c
# and y_tab.h instead of y.tab.h. Test to see if this is the case.
y_tab_nodot="no"
if test -f y_tab.c || test -f y_tab.h; then
y_tab_nodot="yes"
fi
# The directory holding the input.
input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
# Quote $INPUT_DIR so we can use it in a regexp.
# FIXME: really we should care about more than `.' and `\'.
input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
while test "$#" -ne 0; do
from="$1"
# Handle y_tab.c and y_tab.h output by DOS
if test $y_tab_nodot = "yes"; then
if test $from = "y.tab.c"; then
from="y_tab.c"
else
if test $from = "y.tab.h"; then
from="y_tab.h"
fi
fi
fi
if test -f "$from"; then
# If $2 is an absolute path name, then just use that,
# otherwise prepend `../'.
case "$2" in
[\\/]* | ?:[\\/]*) target="$2";;
*) target="../$2";;
esac
# We do not want to overwrite a header file if it hasn't
# changed. This avoid useless recompilations. However the
# parser itself (the first file) should always be updated,
# because it is the destination of the .y.c rule in the
# Makefile. Divert the output of all other files to a temporary
# file so we can compare them to existing versions.
if test $first = no; then
realtarget="$target"
target="tmp-`echo $target | sed s/.*[\\/]//g`"
fi
# Edit out `#line' or `#' directives.
#
# We don't want the resulting debug information to point at
# an absolute srcdir; it is better for it to just mention the
# .y file with no path.
#
# We want to use the real output file name, not yy.lex.c for
# instance.
#
# We want the include guards to be adjusted too.
FROM=`echo "$from" | sed \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
TARGET=`echo "$2" | sed \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
-e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
# Check whether header files must be updated.
if test $first = no; then
if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
echo "$2" is unchanged
rm -f "$target"
else
echo updating "$2"
mv -f "$target" "$realtarget"
fi
fi
else
# A missing file is only an error for the first file. This
# is a blatant hack to let us support using "yacc -d". If -d
# is not specified, we don't want an error when the header
# file is "missing".
if test $first = yes; then
ret=1
fi
fi
shift
shift
first=no
done
else
ret=$?
fi
# Remove the directory.
cd ..
rm -rf $dirname
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

@ -0,0 +1,336 @@
/* config.h.in. Generated from configure.in by autoheader. */
/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
#undef HAVE_CARBON_CARBON_H
/* Define if you have the CoreAudio API */
#undef HAVE_COREAUDIO
/* Define to 1 if you have the <crt_externs.h> header file. */
#undef HAVE_CRT_EXTERNS_H
/* Defines if your system has the crypt function */
#undef HAVE_CRYPT
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
*/
#undef HAVE_DIRENT_H
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define if you have libjpeg */
#undef HAVE_LIBJPEG
/* Define if you have libpng */
#undef HAVE_LIBPNG
/* Define if you have a working libpthread (will enable threaded code) */
#undef HAVE_LIBPTHREAD
/* Define if you have libz */
#undef HAVE_LIBZ
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define if you have mkstemps */
#undef HAVE_MKSTEMPS
/* Define if you have the mkstemps prototype */
#undef HAVE_MKSTEMPS_PROTO
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
#undef HAVE_NDIR_H
/* Define if your system needs _NSGetEnviron to set up the environment */
#undef HAVE_NSGETENVIRON
/* Define to 1 if you have the <paths.h> header file. */
#undef HAVE_PATHS_H
/* Define if you have res_init */
#undef HAVE_RES_INIT
/* Define if you have the res_init prototype */
#undef HAVE_RES_INIT_PROTO
/* Define if you have setenv */
#undef HAVE_SETENV
/* Define if you have the setenv prototype */
#undef HAVE_SETENV_PROTO
/* Define if you have a STL implementation by SGI */
#undef HAVE_SGI_STL
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define if you have strlcat */
#undef HAVE_STRLCAT
/* Define if you have the strlcat prototype */
#undef HAVE_STRLCAT_PROTO
/* Define if you have strlcpy */
#undef HAVE_STRLCPY
/* Define if you have the strlcpy prototype */
#undef HAVE_STRLCPY_PROTO
/* Define to 1 if you have the <sys/bitypes.h> header file. */
#undef HAVE_SYS_BITYPES_H
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
*/
#undef HAVE_SYS_DIR_H
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
*/
#undef HAVE_SYS_NDIR_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define if you have unsetenv */
#undef HAVE_UNSETENV
/* Define if you have the unsetenv prototype */
#undef HAVE_UNSETENV_PROTO
/* Define if you have usleep */
#undef HAVE_USLEEP
/* Define if you have the usleep prototype */
#undef HAVE_USLEEP_PROTO
/* Define to 1 if you have the `vsnprintf' function. */
#undef HAVE_VSNPRINTF
/* Suffix for lib directories */
#undef KDELIBSUFF
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* The size of `char *', as computed by sizeof. */
#undef SIZEOF_CHAR_P
/* The size of `int', as computed by sizeof. */
#undef SIZEOF_INT
/* The size of `long', as computed by sizeof. */
#undef SIZEOF_LONG
/* The size of `short', as computed by sizeof. */
#undef SIZEOF_SHORT
/* The size of `size_t', as computed by sizeof. */
#undef SIZEOF_SIZE_T
/* The size of `unsigned long', as computed by sizeof. */
#undef SIZEOF_UNSIGNED_LONG
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Version number of package */
#undef VERSION
/* Defined if compiling without arts */
#undef WITHOUT_ARTS
/*
* jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
* headers and I'm too lazy to write a configure test as long as only
* unixware is related
*/
#ifdef _UNIXWARE
#define HAVE_BOOLEAN
#endif
/*
* AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
* that defines bzero.
*/
#if defined(_AIX)
#include <strings.h>
#endif
#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
# include <sys/time.h>
# include <crt_externs.h>
# define environ (*_NSGetEnviron())
#endif
#if !defined(HAVE_MKSTEMPS_PROTO)
#ifdef __cplusplus
extern "C" {
#endif
int mkstemps(char *, int);
#ifdef __cplusplus
}
#endif
#endif
#if !defined(HAVE_RES_INIT_PROTO)
#ifdef __cplusplus
extern "C" {
#endif
int res_init(void);
#ifdef __cplusplus
}
#endif
#endif
#if !defined(HAVE_SETENV_PROTO)
#ifdef __cplusplus
extern "C" {
#endif
int setenv (const char *, const char *, int);
#ifdef __cplusplus
}
#endif
#endif
#if !defined(HAVE_STRLCAT_PROTO)
#ifdef __cplusplus
extern "C" {
#endif
unsigned long strlcat(char*, const char*, unsigned long);
#ifdef __cplusplus
}
#endif
#endif
#if !defined(HAVE_STRLCPY_PROTO)
#ifdef __cplusplus
extern "C" {
#endif
unsigned long strlcpy(char*, const char*, unsigned long);
#ifdef __cplusplus
}
#endif
#endif
#if !defined(HAVE_UNSETENV_PROTO)
#ifdef __cplusplus
extern "C" {
#endif
void unsetenv (const char *);
#ifdef __cplusplus
}
#endif
#endif
#if !defined(HAVE_USLEEP_PROTO)
#ifdef __cplusplus
extern "C" {
#endif
int usleep (unsigned int);
#ifdef __cplusplus
}
#endif
#endif
/*
* On HP-UX, the declaration of vsnprintf() is needed every time !
*/
#if !defined(HAVE_VSNPRINTF) || defined(hpux)
#if __STDC__
#include <stdarg.h>
#include <stdlib.h>
#else
#include <varargs.h>
#endif
#ifdef __cplusplus
extern "C"
#endif
int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
#ifdef __cplusplus
extern "C"
#endif
int snprintf(char *str, size_t n, char const *fmt, ...);
#endif
#if defined(__SVR4) && !defined(__svr4__)
#define __svr4__ 1
#endif
/* type to use in place of socklen_t if not defined */
#undef kde_socklen_t
/* type to use in place of socklen_t if not defined (deprecated, use
kde_socklen_t) */
#undef ksize_t

@ -0,0 +1,4 @@
./admin/configure.in.min
configure.in.in
./kuickshow/configure.in.bot
./kuickshow/configure.in.in

@ -0,0 +1,220 @@
dnl =======================================================
dnl FILE: ./admin/configure.in.min
dnl =======================================================
dnl This file is part of the KDE libraries/packages
dnl Copyright (C) 2001 Stephan Kulow (coolo@kde.org)
dnl This file is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Library General Public
dnl License as published by the Free Software Foundation; either
dnl version 2 of the License, or (at your option) any later version.
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Library General Public License for more details.
dnl You should have received a copy of the GNU Library General Public License
dnl along with this library; see the file COPYING.LIB. If not, write to
dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
dnl Boston, MA 02110-1301, USA.
# Original Author was Kalle@kde.org
# I lifted it in some mater. (Stephan Kulow)
# I used much code from Janos Farkas
dnl Process this file with autoconf to produce a configure script.
AC_INIT(acinclude.m4) dnl a source file from your sub dir
dnl This is so we can use kde-common
AC_CONFIG_AUX_DIR(admin)
dnl This ksh/zsh feature conflicts with `cd blah ; pwd`
unset CDPATH
dnl Checking host/target/build systems, for make, install etc.
AC_CANONICAL_SYSTEM
dnl Perform program name transformation
AC_ARG_PROGRAM
dnl Automake doc recommends to do this only here. (Janos)
AM_INIT_AUTOMAKE(kuickshow, "3.5.8") dnl searches for some needed programs
KDE_SET_PREFIX
dnl generate the config header
AM_CONFIG_HEADER(config.h) dnl at the distribution this done
dnl Checks for programs.
AC_CHECK_COMPILERS
AC_ENABLE_SHARED(yes)
AC_ENABLE_STATIC(no)
KDE_PROG_LIBTOOL
dnl for NLS support. Call them in this order!
dnl WITH_NLS is for the po files
AM_KDE_WITH_NLS
dnl KDE_USE_QT
AC_PATH_KDE
dnl =======================================================
dnl FILE: configure.in.in
dnl =======================================================
#MIN_CONFIG
DO_NOT_COMPILE="$DO_NOT_COMPILE"
dnl Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h stdlib.h paths.h)
AC_CHECK_SETENV
AC_CHECK_UNSETENV
AC_CHECK_USLEEP
AC_CHECK_MKSTEMPS
dnl Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_TIME
CXXFLAGS="$CXXFLAGS $KDE_DEFAULT_CXXFLAGS"
KDE_INIT_DOXYGEN([KDE Graphics API Reference], [Version $VERSION])
dnl =======================================================
dnl FILE: ./kuickshow/configure.in.in
dnl =======================================================
#MIN_CONFIG
#dnl PACKAGE set before
# my own additions to KDE's version
#
# checking for Imlib...
AC_DEFUN([KDE_FIND_IMLIB_CONFIG],
[AC_MSG_CHECKING([for imlib-config])
imlib_config_given=NO
ac_imlib_config=""
AC_ARG_WITH(imlib-config,
AC_HELP_STRING([--with-imlib-config=DIR],[directory where "imlib-config" is located]),
[ ac_imlib_config="$withval/imlib-config"
imlib_config_given=yes
])
if test "$imlib_config_given" = "yes"; then
if test ! -r $ac_imlib_config; then
AC_MSG_RESULT(wrong file specified)
ac_imlib_config=""
else
AC_MSG_RESULT($ac_imlib_config)
LIB_IMLIB=`$ac_imlib_config --libs`
AC_SUBST(LIB_IMLIB)
fi
else
ac_imlib_config=`which imlib-config 2>/dev/null`
if test -z "$ac_imlib_config"; then
AC_MSG_RESULT(no)
else
dummy=`echo "$ac_imlib_config" | grep '/imlib-config'`
if test -z "$dummy"; then
AC_MSG_RESULT(no)
ac_imlib_config=""
else
LIB_IMLIB=`$ac_imlib_config --libs`
IMLIB_CFLAGS=`$ac_imlib_config --cflags`
imlib_config=`echo "$LIB_IMLIB" | grep lImlib`
if test -z "$imlib_config"; then
AC_MSG_RESULT(no)
ac_imlib_config=""
else
AC_SUBST(LIB_IMLIB)
AC_SUBST(IMLIB_CFLAGS)
AC_MSG_RESULT($ac_imlib_config)
fi
fi
fi
fi
])
dnl #### now some kuickshow stuff ###
dnl Check if Imlib is installed properly
KDE_PKG_CHECK_MODULES(IMLIB, imlib >= 1.9.10,
LIB_IMLIB=$IMLIB_LIBS
AC_SUBST(LIB_IMLIB)
,
KDE_FIND_IMLIB_CONFIG
)
if test -z "$LIB_IMLIB"; then
dnl AC_MSG_ERROR([You need to install Imlib 1.x, e.g. http://freshmeat.net/redir/imlib/4385/url_tgz/imlib-1.9.10.tar.gz if your distributor doesn't have a package])
DO_NOT_COMPILE="$DO_NOT_COMPILE kuickshow"
fi
KDE_CREATE_SUBDIRSLIST
AM_CONDITIONAL(doc_SUBDIR_included, test "x$doc_SUBDIR_included" = xyes)
AM_CONDITIONAL(kuickshow_SUBDIR_included, test "x$kuickshow_SUBDIR_included" = xyes)
AC_CONFIG_FILES([ Makefile ])
AC_CONFIG_FILES([ doc/Makefile ])
AC_CONFIG_FILES([ doc/kuickshow/Makefile ])
AC_CONFIG_FILES([ kuickshow/Makefile ])
AC_CONFIG_FILES([ kuickshow/misc/Makefile ])
AC_CONFIG_FILES([ kuickshow/pics/Makefile ])
AC_CONFIG_FILES([ kuickshow/src/Makefile ])
AC_OUTPUT
if test -z "$LIB_IMLIB"; then
echo ""
echo "You're missing Imlib 1.x. The graphics browser/viewer KuickShow"
echo "won't be compiled without Imlib."
echo "You can download it from"
echo "http://freshmeat.net/redir/imlib/4385/url_tgz/imlib-1.9.10.tar.gz"
echo ""
all_tests=bad
fi
# Check if KDE_SET_PREFIX was called, and --prefix was passed to configure
if test -n "$kde_libs_prefix" -a -n "$given_prefix"; then
# And if so, warn when they don't match
if test "$kde_libs_prefix" != "$given_prefix"; then
# And if kde doesn't know about the prefix yet
echo ":"`kde-config --path exe`":" | grep ":$given_prefix/bin/:" 2>&1 >/dev/null
if test $? -ne 0; then
echo ""
echo "Warning: you chose to install this package in $given_prefix,"
echo "but KDE was found in $kde_libs_prefix."
echo "For this to work, you will need to tell KDE about the new prefix, by ensuring"
echo "that KDEDIRS contains it, e.g. export KDEDIRS=$given_prefix:$kde_libs_prefix"
echo "Then restart KDE."
echo ""
fi
fi
fi
if test x$GXX = "xyes" -a x$kde_have_gcc_visibility = "xyes" -a x$kde_cv_val_qt_gcc_visibility_patched = "xno"; then
echo ""
echo "Your GCC supports symbol visibility, but the patch for Qt supporting visibility"
echo "was not included. Therefore, GCC symbol visibility support remains disabled."
echo ""
echo "For better performance, consider including the Qt visibility supporting patch"
echo "located at:"
echo ""
echo "http://bugs.kde.org/show_bug.cgi?id=109386"
echo ""
echo "and recompile all of Qt and KDE. Note, this is entirely optional and"
echo "everything will continue to work just fine without it."
echo ""
fi
if test "$all_tests" = "bad"; then
if test ! "$cache_file" = "/dev/null"; then
echo ""
echo "Please remove the file $cache_file after changing your setup"
echo "so that configure will find the changes next time."
echo ""
fi
else
echo ""
echo "Good - your configure finished. Start make now"
echo ""
fi

@ -0,0 +1,17 @@
#MIN_CONFIG
DO_NOT_COMPILE="$DO_NOT_COMPILE"
dnl Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h stdlib.h paths.h)
AC_CHECK_SETENV
AC_CHECK_UNSETENV
AC_CHECK_USLEEP
AC_CHECK_MKSTEMPS
dnl Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_TIME
CXXFLAGS="$CXXFLAGS $KDE_DEFAULT_CXXFLAGS"
KDE_INIT_DOXYGEN([KDE Graphics API Reference], [Version $VERSION])

@ -0,0 +1,108 @@
ifndef _cdbs_bootstrap
_cdbs_scripts_path ?= /usr/lib/cdbs
_cdbs_rules_path ?= /usr/share/cdbs/1/rules
_cdbs_class_path ?= /usr/share/cdbs/1/class
endif
ifndef _cdbs_class_debian-qt-kde
_cdbs_class_debian-qt-kde := 1
# Note: This _must_ be included before autotools.mk, or it won't work.
common-configure-arch common-configure-indep:: debian/stamp-cvs-make
debian/stamp-cvs-make:
if test -n "$(DEB_KDE_CVS_MAKE)" -a ! -f configure; then \
$(MAKE) -C $(DEB_SRCDIR) -f admin/Makefile.common dist; \
fi
touch debian/stamp-cvs-make
include /usr/share/cdbs/1/class/kde.mk$(_cdbs_makefile_suffix)
DEB_PATCHDIRS := debian/patches/common debian/patches
DEB_KDE_ENABLE_FINAL := yes
DEB_INSTALL_DOCS_ALL :=
DEB_DH_MAKESHLIBS_ARGS_ALL := -V
DEB_SHLIBDEPS_INCLUDE = $(foreach p,$(PACKAGES_WITH_LIBS),debian/$(p)/usr/lib)
ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
cdbs_treat_me_gently_arches := arm m68k alpha ppc64
ifeq (,$(filter $(DEB_HOST_ARCH_CPU),$(cdbs_treat_me_gently_arches)))
cdbs_kde_enable_final = $(if $(DEB_KDE_ENABLE_FINAL),--enable-final,)
else
cdbs_kde_enable_final =
endif
endif
common-build-arch:: debian/stamp-man-pages
debian/stamp-man-pages:
if ! test -d debian/man/out; then mkdir -p debian/man/out; fi
for f in $$(find debian/man -name '*.sgml'); do \
docbook-to-man $$f > debian/man/out/`basename $$f .sgml`.1; \
done
for f in $$(find debian/man -name '*.man'); do \
soelim -I debian/man $$f \
> debian/man/out/`basename $$f .man`.`head -n1 $$f | awk '{print $$NF}'`; \
done
touch debian/stamp-man-pages
common-binary-indep::
( set -e; \
tmpf=`mktemp debian/versions.XXXXXX`; \
perl debian/cdbs/versions.pl >$$tmpf; \
for p in $(DEB_INDEP_PACKAGES); do \
cat $$tmpf >>debian/$$p.substvars; \
done; \
rm -f $$tmpf )
common-binary-arch::
( set -e; \
tmpf=`mktemp debian/versions.XXXXXX`; \
perl debian/cdbs/versions.pl >$$tmpf; \
for p in $(DEB_ARCH_PACKAGES); do \
cat $$tmpf >>debian/$$p.substvars; \
done; \
rm -f $$tmpf )
clean::
rm -rf debian/man/out
-rmdir debian/man
rm -f debian/stamp-man-pages
rm -rf debian/shlibs-check
$(patsubst %,binary-install/%,$(DEB_PACKAGES)) :: binary-install/%:
if test -x /usr/bin/dh_desktop; then dh_desktop -p$(cdbs_curpkg) $(DEB_DH_DESKTOP_ARGS); fi
if test -e debian/$(cdbs_curpkg).lintian; then \
install -p -D -m644 debian/$(cdbs_curpkg).lintian \
debian/$(cdbs_curpkg)/usr/share/lintian/overrides/$(cdbs_curpkg); \
fi
if test -e debian/$(cdbs_curpkg).presubj; then \
install -p -D -m644 debian/$(cdbs_curpkg).presubj \
debian/$(cdbs_curpkg)/usr/share/bug/$(cdbs_curpkg)/presubj; \
fi
binary-install/$(DEB_SOURCE_PACKAGE)-doc-html::
set -e; \
for doc in `cd $(DEB_DESTDIR)/usr/share/doc/kde/HTML/en; find . -name index.docbook`; do \
pkg=$${doc%/index.docbook}; pkg=$${pkg#./}; \
echo Building $$pkg HTML docs...; \
mkdir -p $(CURDIR)/debian/$(DEB_SOURCE_PACKAGE)-doc-html/usr/share/doc/kde/HTML/en/$$pkg; \
cd $(CURDIR)/debian/$(DEB_SOURCE_PACKAGE)-doc-html/usr/share/doc/kde/HTML/en/$$pkg; \
/usr/kde3/bin/meinproc $(DEB_DESTDIR)/usr/share/doc/kde/HTML/en/$$pkg/index.docbook; \
done
for pkg in $(DOC_HTML_PRUNE) ; do \
rm -rf debian/$(DEB_SOURCE_PACKAGE)-doc-html/usr/share/doc/kde/HTML/en/$$pkg; \
done
clean::
if test -n "$(DEB_KDE_CVS_MAKE)" && test -d $(DEB_SRCDIR); then \
cd $(DEB_SRCDIR); \
find . -name Makefile.in -print | \
xargs --no-run-if-empty rm -f; \
rm -f Makefile.am acinclude.m4 aclocal.m4 config.h.in \
configure configure.files configure.in stamp-h.in \
subdirs; \
fi
rm -f debian/stamp-cvs-make
endif

@ -0,0 +1,19 @@
#!/usr/bin/env perl
use strict;
use warnings;
my $version = `dpkg-parsechangelog | awk '/^Version/ {print \$2}'`;
my ($version3, $version3_next);
my ($version2, $version2_next);
($version3 = $version) =~ s/-[^-]+$//;
($version2 = $version3) =~ s/\.[^.]+$//;
($version3_next = $version3) =~ s/(?<=\.)(\d+)[a-z]?$/($1+1)/e;
($version2_next = $version2) =~ s/(?<=\.)(\d+)$/($1+1)/e;
print "KDE-Version3=$version3\n";
print "KDE-Version2=$version2\n";
print "KDE-Next-Version3=$version3_next\n";
print "KDE-Next-Version2=$version2_next\n";

42
debian/changelog vendored

@ -0,0 +1,42 @@
kuickshow-kde3 (4:3.5.8-0ubuntu3) karmic; urgency=low
* Karmic rebuild
-- Timothy Pearson <kb9vqf@pearsoncomputing.net> Thu, 02 July 2009 16:08:00 -0600
kuickshow-kde3 (4:3.5.8-0ubuntu2) intrepid; urgency=low
* Moved KDE3 to /opt/kde3
* Integrated properly with KDE4.2+
-- Timothy Pearson <kb9vqf@pearsoncomputing.net> Fri, 06 March 2009 01:35:00 -0600
kuickshow-kde3 (4:3.5.8-0ubuntu1) intrepid; urgency=low
* Added -kde3 suffix
-- Timothy Pearson <kb9vqf@pearsoncomputing.net> Fri, 12 Dec 2008 14:28:00 -0600
kuickshow (4:3.5.8-0ubuntu2) hardy; urgency=low
* No change recompile to build against libgif (not libungif)
-- Jonathan Riddell <jriddell@ubuntu.com> Mon, 07 Jan 2008 10:26:21 +0000
kuickshow (4:3.5.8-0ubuntu1) hardy; urgency=low
* New upstream release, extracted from kdegraphics 3.5.8
-- Jonathan Riddell <jriddell@ubuntu.com> Wed, 14 Nov 2007 17:59:49 +0000
kuickshow (4:3.5.7-0ubuntu1) gutsy; urgency=low
* New upstream release, extracted from kdegraphics 3.5.7
-- Jonathan Riddell <jriddell@ubuntu.com> Sun, 03 Jun 2007 14:45:49 +0100
kuickshow (4:3.5.6-0ubuntu1) feisty; urgency=low
* Initial package, separate from kdegraphics due to imlib11 not being in main
-- Jonathan Riddell <jriddell@ubuntu.com> Wed, 28 Feb 2007 16:29:08 +0000

1
debian/compat vendored

@ -0,0 +1 @@
5

24
debian/control vendored

@ -0,0 +1,24 @@
Source: kuickshow-kde3
Section: kde
Priority: optional
Maintainer: Timothy Pearson <kb9vqf@pearsoncomputing.net>
Build-Depends: cdbs (>= 0.4.39-0.1), debhelper (>= 5.0.31), autotools-dev, gawk, kdelibs4-kde3-dev (>= 4:3.5.6), imlib11-dev
Standards-Version: 3.7.2
Package: kuickshow-kde3
Section: graphics
Architecture: any
Depends: ${shlibs:Depends}
Suggests: khelpcenter-kde3
Description: KDE image/slideshow viewer [KDE3]
KuickShow is an image browser/viewer with a nice filebrowser to
select images to be shown, slideshow support and the ability to
display the following image formats: jpg, gif, tiff, png, bmp, psd,
xpm, xbm, pbm and eim. Images can be displayed either in their own
window, as large as the image, or fullscreen (which shrinks images too
large to display). KuickShow also has a slideshow mode.
.
This package is part of KDE, as a component of the KDE graphics
module. See the 'kde' and 'kdegraphics' packages for more information.
.
Homepage: http://kuickshow.sourceforge.net

424
debian/copyright vendored

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

@ -0,0 +1,41 @@
/* XPM */
static char *kuickshow-16[] = {
/* columns rows colors chars-per-pixel */
"16 14 21 1",
" c black",
". c #000033",
"X c gray20",
"o c #006633",
"O c #336633",
"+ c #0033FF",
"@ c #3333FF",
"# c #6666FF",
"$ c #009933",
"% c #669933",
"& c #9900CC",
"* c #9933CC",
"= c #9933FF",
"- c #9966FF",
"; c #CC66CC",
": c #9999FF",
"> c #CC99FF",
", c #CCCCFF",
"< c #FFCCFF",
"1 c gray100",
"2 c None",
/* pixels */
"2222222221,:2222",
"22211,:21,>:2222",
"22-<>1>-::->1122",
"22-,:->--:11>--2",
"222:-++@@-+-::#2",
"-11>-=>* @@+:@+2",
"1<::@=. @-:@*222",
">-@>>:@@##>+oo22",
"@@1+@>,#@>-=$%O2",
"-1-+@1:#--&OOXOO",
"-1;:@<:::*&2oOO2",
"2+@@2<:*22o%2222",
"2222222222o%2222",
"22222222222oo222"
};

@ -0,0 +1,66 @@
/* XPM */
static char *kuickshow[] = {
/* columns rows colors chars-per-pixel */
"32 29 31 1",
" c black",
". c #000033",
"X c #003333",
"o c gray20",
"O c #006633",
"+ c #336633",
"@ c #0033FF",
"# c #3333FF",
"$ c #6666FF",
"% c #009933",
"& c #339933",
"* c #669933",
"= c #6699CC",
"- c #6699FF",
"; c #9900CC",
": c #9900FF",
"> c #9933CC",
", c #9933FF",
"< c #9966CC",
"1 c #9966FF",
"2 c #CC00CC",
"3 c #CC66CC",
"4 c #CC66FF",
"5 c #9999CC",
"6 c #9999FF",
"7 c #CC99FF",
"8 c #FF99FF",
"9 c #CCCCFF",
"0 c #FFCCFF",
"q c gray100",
"w c None",
/* pixels */
"wwwwwwwwwwwwwwwwwww14114wwwwwwww",
"wwwwwwwwwwwwwwwwww6qqqq66wwwwwww",
"wwwwwww464141wwww4q909941wwwwwww",
"wwwwww1qq09976ww1q0917966wwwwwww",
"wwwww4q99171416w7q14117$1764wwww",
"wwwww1q01719176176667167qqqq7www",
"wwwww7q949617116016161qq979916ww",
"wwwww1q94661-761-1@6@q9q4771716w",
"wwwwww499116#@101#@#946$614616#w",
"wwwwwww671#@#@>#@##11@6166666$#w",
"www71717616#>,q, 6@6##@15$11@#>w",
"w1790997616,q7,, #@#@##@#6@##1ww",
"7q971711##>q6>,X#11611@,#@#>,www",
"1q9096@6@#.,,. #@#=1666#,>,wwwww",
"1q71711#@#-;X7#@#@#1611#>wwwwwww",
"1711@##777#67#@##6$6171@,***wwww",
"#66##q71##@710@1@166166#>++%**ww",
">#@#976@1#17961#6#$791#,*%%+++;w",
"w>6q97@6@#q9166$11776@>+o*;%%+:;",
"w1q0614@1#q096<67191#;:+*+%o++%;",
"w7q946616@q68909901@;,w;+o+%%++:",
"w1q963161#@064116@#,%;;w:O++;:;w",
"ww#70616@>,#@####>,w%&,ww;::;www",
"ww,@##@#,ww>,>,>,wwww%*>wwwwwwww",
"www,>,>,wwwwwwwwwwwwww%2wwwwwwww",
"wwwwwwwwwwwwwwwwwwwwww%*2wwwwwww",
"wwwwwwwwwwwwwwwwwwwwwww%:wwwwwww",
"wwwwwwwwwwwwwwwwwwwwwww%*2wwwwww",
"wwwwwwwwwwwwwwwwwwwwwwww>:wwwwww"
};

@ -0,0 +1,2 @@
debian/icons/kuickshow.xpm /opt/kde3/share/pixmaps
debian/icons/kuickshow-16.xpm /opt/kde3/share/pixmaps

@ -0,0 +1,4 @@
kuickshow-kde3: no-shlibs-control-file opt/kde3/lib/libkdeinit_kuickshow.so
kuickshow-kde3: postinst-must-call-ldconfig opt/kde3/lib/libkdeinit_kuickshow.so
kuickshow-kde3: postrm-should-call-ldconfig opt/kde3/lib/libkdeinit_kuickshow.so
kuickshow-kde3: package-name-doesnt-match-sonames libkdeinit-kuickshow

@ -0,0 +1 @@
debian/man/kuickshow.1

@ -0,0 +1,11 @@
?package(kuickshow):\
needs="X11"\
section="Apps/Graphics"\
hints="KDE"\
title="Kuickshow"\
icon32x32="/usr/share/pixmaps/kuickshow.xpm"\
icon16x16="/usr/share/pixmaps/kuickshow-16.xpm"\
command="/opt/kde3/bin/kuickshow"
# Icon 32x32 kuickshow/src/cr32-app-kuickshow.png kuickshow.xpm
# Icon 16x16 kuickshow/src/cr16-app-kuickshow.png kuickshow-16.xpm

@ -0,0 +1,99 @@
.TH KUICKSHOW "1" "September 2002" KDE "KDE Application"
.SH NAME
kuickshow \- KDE Image Viewer
.SH SYNOPSIS
.B kuickshow
[\fIQt-options\fR] [\fIKDE-options\fR] [\fIoptions\fR] [\fIfiles\fR]
.SH DESCRIPTION
This manual page documents briefly the
.B Kuickshow
KDE Application.
This manual page was written for the Debian GNU/Linux distribution
because the original program does not have a manual page.
.P
.B KuickShow
is a comfortable image browser/viewer. It displays a
filebrowser where you can select images which are then shown.
.P
The following image formats are supported:
.P
.RS
\(bu jpg
.br
\(bu gif
.br
\(bu tiff
.br
\(bu png
.br
\(bu bmp
.br
\(bu psd
.br
\(bu xmp
.br
\(bu xbm
.br
\(bu eim
.RE
.P
Images can be displayed either in their own window, as large as the
image, or fullscreen.
.P
This program is part of the official KDE graphics module.
.SS "Generic options:"
.TP
\fB\-\-help\fR
Show help about options
.TP
\fB\-\-help\-qt\fR
Show Qt specific options
.TP
\fB\-\-help\-kde\fR
Show KDE specific options
.TP
\fB\-\-help\-all\fR
Show all options
.TP
\fB\-\-author\fR
Show author information
.TP
\fB\-v\fR, \fB\-\-version\fR
Show version information
.TP
\fB\-\-license\fR
Show license information
.TP
\fB\-\-\fR
End of options
.SH OPTIONS
.TP
\fB\-\-lastdir\fR
Start in the last visited directory, not the current working directory
.SS "Arguments:"
.TP
files
Optional image filenames/urls to show
.SH "SEE ALSO"
The full documentation for
.B Kuickshow
is maintained as a docbook manual. If the
.B khelpcenter
program is properly installed at your site, the command
.IP
.B khelpcenter help:/kuickshow
.PP
should give you access to the complete manual.
.SH AUTHOR
KuickShow was written by
.nh
Carsten Pfeiffer <pfeiffer@kde.org>.
.hy
.br
Please use http://bugs.kde.org to report bugs, do not mail the authors directly.
.br
This manual page was prepared by
.nh
Karolina Lindqvist <pgd\-karolinali@algonet.se>
.hy
for the Debian GNU/Linux system (but may be used by others).

15
debian/rules vendored

@ -0,0 +1,15 @@
#! /usr/bin/make -f
include /usr/share/cdbs/1/rules/debhelper.mk
include debian/cdbs/debian-qt-kde.mk
include /usr/share/cdbs/1/rules/simple-patchsys.mk
include /usr/share/cdbs/1/rules/utils.mk
DEB_CONFIGURE_INCLUDEDIR := /opt/kde3/include/kde
DEB_CONFIGURE_MANDIR := /opt/kde3/share/man
DEB_CONFIGURE_PREFIX := /opt/kde3
DEB_CONFIGURE_INFODIR := /opt/kde3/share/info
cdbs_configure_flags := --with-qt-dir=/usr/share/qt3 --disable-rpath --with-xinerama $(cdbs_kde_enable_final) $(cdbs_kde_enable_debug)
DEB_CONFIGURE_EXTRA_FLAGS := --prefix=/opt/kde3 --with-extra-libs=/opt/kde3/lib --with-extra-includes=/opt/kde3/include/kde

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

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

File diff suppressed because it is too large Load Diff

Binary file not shown.

@ -0,0 +1,11 @@
Begin4
Title: kdegraphics
Version: 3.5.8
Entered-date: 2007-10-15
Description: Graphical Applications written for the K Desktop Environment (KDE)
Keywords: KDE X11 desktop Qt
Author: http://bugs.kde.org/ (KDE Bugtracking System)
Primary-site: http://www.kde.org/download/
Platforms: Unix, Qt
Copying-policy: GPL, Artistic
End

@ -0,0 +1 @@
Carsten Pfeiffer <pfeiffer@kde.org>

@ -0,0 +1,3 @@
kdelibs issues:
- The filefinder doesn't work when using the splitted view
- in the detailed view, the filefinder can't highlight files during typing.

@ -0,0 +1,339 @@
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
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

@ -0,0 +1,921 @@
<pre>
Fri Mar 31 02:04:21 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* fixed one of the most long-standing bugs: non-local browsing
(i.e. you can browse remote directories like local ones now, flipping
through the images with PageUp/Down etc., including pre-loading
images)
Browsing through /media should work now, but can be improved by
not"downloading" from there. Framework to do this is there, though.
* also allow saving to remote URLs
* fixed image not being completely maximized when opening image in
fullscreen mode
* performance improvement
* layed groundwork for fixing #48812 and #101986
* make sure all temporary files get deleted
Wed Feb 22 16:02:58 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* make autohide-cursor finally work
Wed Feb 22 02:14:24 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp, imagewindow.*
remove nextSlideRequested() and prevSlideRequested() patch, you
can already navigate with PageUp/Down. The arrow-keys are used for
scrolling.
Wed Feb 22 01:31:54 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (KuickShow):
warn before loading >= 10 images at once from the commandline
Wed Feb 22 01:03:07 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (rotated):
auto-scale image on rotation
Wed Feb 22 00:01:02 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* add a warning messagebox when zooming to larger than
4 * desktop area size. The "4*" is configurable in
[GeneralConfiguration]
MaximumZoomFactorByDesktop=4.0
Sun Jan 8 09:47:39 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* fix crash when deleting the last image without having a browser
Sat Jan 7 23:27:32 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* fix deleting images from image window and browser!
* support moving to trash and make that the default
* refactor delayed execution of events/actions (for when the browser window needs to
be loaded lazily)
Sat Jan 7 22:36:25 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (addAlternativeShortcut):
use F5 as default shortcut for "Reload image", keep Enter as alternative
Sat Jan 7 22:33:30 2006 Carsten Pfeiffer <pfeiffer@kde.org>
* src/aboutwidget.cpp:
fixed crash (right-clicking on about widget)
* made the about widget not always-on-top, but a modal widget,
which prevents error messages from being hidden below the about
widget (i.e. when clicking the homepage link while being offline)
Sat Aug 25 02:58:31 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (init):
mouse-wheel can switch between images now, per request of
Bill Benken <bilben1@home.com>
* also fixed the KStdAccel::save() and close() accels not working
in the image window
Sat Aug 4 03:37:50 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* now completely smooth, flicker-free switching between images
and zooming
* Reverted again to current kde-common/admin stuff
* added quit-button to toolbar (also makes Ctrl-Q work)
* made ChangeLog readable by KHelpCenter
* commented out benchmark debug output
* added support for objprelink in the specfile
(copy the tarball to your rpm-dir/SOURCES and rpm -ba kuickshow.spec)
* Fixed some bugs coming from kdelibs 2.1.x vs. 2.2 handling
Thanks a lot to Robert Charbonneau <etriaph@kdesktop.org>
and another anonymous helper from #kde for testing and useful
feedback.
* Added patch from Adrian Schroeter <adrian@suse.de> to make it
work with autoconf 2.5x -- Thanks!
Wed Jul 11 17:19:38 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/filewidget.cpp (initActions):
adopt to KDirOperator's contextmenu (i.e. don't add the "Properties..."
entry when it's already present)
* src/imagewindow.cpp:
show image size in the caption
* reverted to admin/* files from KuickShow 0.8 so that users of older
KDE versions can compile it again.
* cleaned up Imlib configure check
* made background color in viewer configurable
* added delete-action again for users of older kdelibs
* fixed some bugs in the filefinder widget
Wed Jul 4 01:06:58 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (printImage):
Grmbl. Really fixed printing. It even works now :)
Tue Jul 3 3:04:18 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* Oups, the behavior of QPrinter::printCommand() has changed.
It returns a null String by default now :-O Fixed.
Tue Jun 27 15:44:28 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp:
added KTempFile patch from Kevin Lo <kevlo@kde.org>
Tue May 29 15:20:34 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (updateAccel):
changed accels:
shift-accel is now for removing brightness/contrast/gamma
removed delete action, now provided by kfile
Thu Apr 19 23:16:12 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* Integrated Multihead patch from Evan Edwards <evan@onepaper.com>
who was also so kind, to set up a homepage for KuickShow, as well
as a Sourceforge account. See kuickshow.sourceforge.net for details.
Thanks a lot, Evan!
Added handcursor from qwertz <kraftw@gmx.de>, thanks a lot!
* src/imlibwidget.cpp (getKuimage):
hopefully fixed crash reported by Alexxx and linuxphreak:
reorder the kuickimage and file-lists when returning a cached image
Tue Mar 13 03:16:24 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* added lots of translations from the translation team.
I need to add a KAboutDialog somewhere to give them credit
for their excellent work!
Fri Mar 9 21:50:12 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (eventFilter):
call our parent class' eventFilter if we don't stop the event
-> moving/rearranging the toolbar works :)
* caption fixes, show the url in the caption
* save the visible images on SM shutdown and restore them on restore
* src/imlibwidget.cpp:
don't delete this from closeEvent, WDestructiveClose does it better
-> sessionmanagement works
* defaultswidget.cpp:
fix typo found by qwertz
* add icon for delete, as suggested by Florian
Thu Mar 8 13:29:17 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (mouseReleaseEvent):
zooming should work properly now:
- the window size is kept
- scrolling the zoomed image works correctly
- the rubber band sort of works (maybe even as good as in 0.6.7)
- respect maxWidth and maxHeight during zoom with the rubberband
added different icon for image window
* src/kuickshow.cpp
go into window mode when pressing space in fullscreen mode to show
the browser (always-on-top issue)
* src/filewidget.cpp
some more ensureItemVisible()
* installation/spec files fixes
* added im_palette.pal
Wed Mar 7 21:25:15 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* doc/en/index.html:
updated english documentation
* src/imagewindow.cpp
set our nice icon so that kicker can show it in the taskbar for
example. Thanks to Florian for the hint :)
* i18n fix (° -> degrees), and s/-90/270/, another one from Florian
* resizeOptimal(): if we don't resize because we already have the right
size, call centerImage()
* zooming with the mouse works again (still not completely right tho:
- the rubber band is missing
- the size/scrolling does not always match the real imagesize
* src/filewidget.cpp:
ensureItemVisible() in the browser when browsing with PageUp/PageDown
* src/kuickshow.cpp:
disable the slideshow action when a slideshow is running
Wed Mar 7 01:39:34 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (readProperties):
clear the diroperators history stack on startup
* src/imagewindow.cpp:
update the accelerators when applying new configuration
(delete the old and create a new KAccel, setKeyDict() doesn't
work in our case
* use QWidget::x11Display() for later multihead support)
* general cleanup. hmm, this could be added to every entry
in the last days, I guess :}
* added workaround for relative paths not working in the filefinder
relative _files_ don't work yet, tho.
* documentation written for the upcoming 0.8pre release
Mon Mar 5 13:07:59 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (init):
Maximize and close shortcuts, as proposed by Crocodile on IRC.
* WDestructiveClose in ImlibWidget and close(true) everywhere
Mon Mar 5 00:12:45 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (slotReplayEvent):
going to the next/previous/... image now also works when started with
an image on the commandline (== no browser available)
Tricky thing: after creating the browser, we can't simply go on,
because the browser doesn't have any files at all (async listing).
So we save the pageUp/pageDown event and replay it when the browser
is ready.
* fixed Space needed to be hit twice to show the initial browser
* src/kuickshow.cpp, src/filewidget.cpp (eventFilter)
deleting files works from the filebrowser again, not only from the
image window
* Makefile.am
build as KLM (kdeinit-loadable-module) to speed up startup
* hah! Adding two lines makes browsing about twice as fast :)
Well, equally as fast as the KDE1 version at least ;) The new caching
system set the dirty flag wrongly at one place, so the pixmap was
effectively rendered twice per image.
Sun Mar 4 20:33:44 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (initGUI):
open only one window item in toolbar is honored properly now
(replaced the checkbox in the configdialog)
* don't pass the KKeyEntryMap to all the image windows, this doesn't
work (and it also crashes after doing it a second time).
Thanks to Florian Hacker for the bugreport :)
* save the view properties of KDirOperator
* statusbar looks a bit better now (no fixed size entries anymore)
* src/kuickio.cpp (deleteFile):
deletion of directories works, now
* src/imdata.cpp, kuickdata.cpp:
better handling of default values
Sun Mar 4 13:57:52 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (setFullscreen):
hack around QWidget::move() resizing us -> we just ignore that
resizeEvent. Gives less flicker when switching into window-mode.
* initial fullscreen mode works again as well (hacking around a kwin
"limitation")
Sun Mar 4 10:50:23 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickconfigdlg.cpp (KuickConfigDialog):
Keyboard shortcuts configurable for browser and image viewer
* don't check mimetype in isImage() at the moment, people won't have
mimetypes for .eim and .psd probably
* removed unused EditDialog
* Added auto-hide cursor in viewer (doesn't work properly tho)
Sat Mar 3 02:00:41 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (resizeOptimal):
Honor the window manager decoration in window mode. Now always the
entire window including decoration is visible, no matter how large the
image is.
* Fixed a scrolling bug when the window was exactly as large as the
desktop (only in fullscreen mode)
* don't go to the next image when cancelling a deletion of a file or
deletion fails
* some cleanup
Thu Mar 1 03:49:11 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (showImage):
positioning is fixed now. Removed processEvents() after move(),
we don't seem to need this anymore. Actually, this was the cause
for bogus geometries.
Thu Mar 1 02:15:49 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp, src/imlibwidget.cpp:
upScale/downScale mostly works. Some WindowManager positioning
problems are left.
Tue Feb 27 23:30:11 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (viewerDeleted):
Fixed crash when the only image on the commandline couldn't be loaded
Sun Feb 25 23:22:30 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* config-dialog works now, everything is saved, loaded and resetting
defaults works, too. All the layout management rewritten (was still
Qt 1.x style). Default Image modifications work, including the preview.
Only need a nice preview image now :)
* src/imlibwidget.*:
fixed setFlipMode()
* src/filewidget.cpp (eventFilter):
fixed filefinder completion on first character
filefinder enters directory/opens image upon return now
* added nice new calibrate.png from qwertz, thanks!
Wed Jan 10 23:39:14 2001 Carsten Pfeiffer <pfeiffer@kde.org>
* lots of work... getting closer. Commandline handling is really
fixed now %-} Handles multiple files just fine. The filefinder
sort of works now (only the sort-order is not considered, this
could get hairy, I'm afraid). Added browsing actions to toolbar
and shortcuts. Works quite nicely.
Fri Nov 3 14:32:53 2000 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (setFullscreen):
cool, no need to workaround kwin's auto-maximization needed,
setMinimumSize() does it! Thanks Matthias Ettrich!
Fri Nov 3 13:23:41 2000 Carsten Pfeiffer <pfeiffer@kde.org>
* src/*:
some cleanups here and there
fixed commandline handling (dirs, files, absolute, relative)
made KURLWidget use KURLLabel (and fixed KURLLabel bugs)
Fri Nov 3 01:49:57 2000 Carsten Pfeiffer <pfeiffer@kde.org>
* src/*: some more work on the KDE2 port/integration. Workarounds for
kwin's auto-maximization added. Fullscreen works. Moving images inside
the window works properly again. NETWM/KWin handling is better now.
Also better handling of non-loadable files.
Will make it a kdeinit-loadable module (KLM) for fast startup-times
later.
Finally using it again reminds me how fast it is compared to, erm, the
other viewers :)
Thu Aug 31 01:48:55 2000 Carsten Pfeiffer <pfeiffer@kde.org>
* src/*: started reworking/rewriting the whole stuff to make it KDE2
ready. Now I have to pay for rewriting so much of kdelibs/kfile...
The good thing is: it's mostly about removing stuff from KuickShow
because the functionality is already in libkfile, now :)
Tue Sep 28 10:35:39 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (resizeEvent):
ahh, fixed a seldom-happening segfault: when "preload images" was
turned on and kuickshow was started with an image as parameter (so that
the filebrowser was not shown in the beginning), it would segfault
in KuickShow::resizeEvent(). I even got a bugreport about such a
segfault a while ago, but I couldn't reproduce it and neither did the
reporter answer to my mail.
Anyway, this is fixed now.
* src/imagewindow.cpp (dragEnterEvent):
implemented preliminary drag/drop support from Konqueror
Sat Sep 25 18:30:32 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp (saveImage):
(hopefully, untested) fixed bug, that an image was not saved with the
current size - the original size was used. Thanks for the report (and
for some other suggestions) go to Hugo Lopes <hugolopes@netc.pt>
* src/imlibwidget.cpp:
lots of other changes, fixes, there's no sense mentioning them all, as
a lot of stuff is being rewritten/restructured and many things have to
be fixed.
Tue Sep 14 23:57:18 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imagewindow.cpp:
Ok, finally I took the time to restructure ImlibWidget.
Now there is a simple ImlibWidget, that can load and show images
and there is the powerful ImageWindow, that can do all the stuff, the
previous ImlibWidget did.
There is a nice object-oriented wrapper around ImlibImages named
KuickImage - I hated all those C-functions everywhere.
Additionally, the ImageWindow has fully configurable key-bindings.
And thanks to Vitor Fernandes <vitor_fernandes@SoftHome.net>
I got a Brazilian/Portuguese translation for KuickShow
Tue Jul 27 20:32:09 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (setBusyCursor):
loading an image from disk could take quite some time (e.g. on NFS),
so show a busy cursor during that operation, too.
Thu Jul 22 21:26:11 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (preloadImage):
Argh, fixed segfault - don't free the cached image, when it is the
current shown image as well (imCache == im). Occured when switching
back and forth between two images
Fri Jul 16 13:09:07 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kfileview.cpp (refresh):
Oh well, thanks to Robert Hamberger <Robert.Hamberger@AUDI.DE>, I
fixed another (hopefully last, for the next time) segfault. SIGSEGV
happened, when opening the about-dialog, NOT giving the focus back
to the filebrowser and then pressing the "show-hidden-files-button"
twice.
* src/kuickconfigdlg.cpp (keyPressEvent):
fixed bug: pressing escape in config dialog didn't reenable the
toolbar button to open the dialog
* src/imlibwidget.cpp (autoRender):
LOTS of updates, the new configuration dialog sort of works now
- all image manipulations can be daisychained now, just call
setAutoRender( false ) and call updateImage() to apply (render)
configuration dialog makes use of this to show the settings in an
example image
- new and nice about dialog, also based on ImlibWidget :o)
Wed Jul 7 01:09:14 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (loadImageInternal):
Applied patch from Thorsten Scheuermann <uddn@rz.uni-karlsruhe.de>
(autoscale images to screensize) - thanks!
Mon Jul 5 15:27:05 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickconfigdlg.cpp (closeEvent):
Eieiei, introduced closeEvent() in configdialog, which just emits
cancelButtonPressed() - otherwise the Toolbarbutton wouldn't get
reenabled. Thanks to Thorsten Scheuermann for the bugreport!
* src/kuickshow.cpp (deleteFile):
Uh oh, I really thought there were no segfaults in 0.6.6...
Thanks go to Vadim Zaliva, who proved me wrong :-} Just fixed that
core-dump, when trying to delete a directory.
Fri Jul 2 14:27:08 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (initGUI):
moved some code around to delay creating the filebrowser and reading
the directory contents. If you give a filename on the commandline as
parameter, kuickshow will load the filebrowser first, when you really
want to.
* src/imlibwidget.cpp (desktopWidth):
kuickhow now honors the panel and window-frame-size when displaying
images in window-mode - the imagesize is properly adjusted in
auto-shrink mode
* src/imlibwidget.cpp (showImageOriginalSize):
fixed bug in window-mode: displaying image with "o" (original size)
didn't resize the window, if necessary
* src/kuickshow.cpp (eventFilter):
Bugfix: when did I have that crazy idea to set the palette to black
in the filebrowser??? In certain cases, I got an almost completely
black Messagebox...
* src/kfileview.cpp (removeItem):
oups... segfault fixed: removing the very first item in the
filebrowser caused crash
Sat Jun 26 22:47:05 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/fileview.cpp (changeDirDialog):
goto-dialog (ctrl-g) accepts ~ and replaces it with your homedirectory
I love ideas, that can be implemented in half a minute :o)
Mon May 31 12:08:41 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (setFullscreen):
Save and restore the geometry when switching between fullscreen and
window mode. Much nicer now :o)
* src/kuickshow.cpp (showImage):
Honor kpanel's placement, when showing the first image. Don't just move
it to (0,0), but use KWM::geometry().
* src/imlibwidget.cpp (showImageOriginalSize):
implemented Shortcut "o" to show image in the original size. Useful when
autoscaling is active and you want the original size (e.g. scaled text
is hardly readable).
Mon May 31 02:24:56 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* updated polish translation, many thanks to Krzysztof P. Jasiutowicz
* added german documentation, many thanks to Robert Hamberger,
who also enlargened the TODO-list :-P
Fri May 28 11:48:46 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (mouseMoveEvent, mouseReleaseEvent):
several cleanups (replaced bool shiftPressed with the appropriate
QEvent::state() & ShiftButton in the eventhandlers)
* fixed bug: Shift + MousePress + MouseRelease without moving the mouse
moved the image to the lower right corner
* implemented "close image on doubleclick", as suggested by Ralph
Bernecker. Also put Close into popupmenu.
* improved cache of preloaded image, now stores the actual rendered
Pixmap -> a preloaded image shows almost before you press "next image"
;-) It can't get faster now. I only could cache more than one pixmap...
hmm, maybe later
* updated documentation
Tue May 18 21:19:32 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kfileview.cpp (refresh):
sorting does somehow work. Some code seems to be duplicated in
KFileInfoContents and KDir - both offer sorting. However, both
don't work 100% :-/ Anyway, if you have KDE 1.1.1, sorting should
work, it is disabled for earlier releases, as there was a segfault
problem in kfile (nobody ever seemed to use KFileInfoContent's sorting,
so that was never realized).
* src/kfileview.cpp, src/fileview.cpp:
some minor fixlets: always try to highlight the last active file,
whenever the directory contents are updated
* src/kuickconfigdlg.cpp (several):
changed the two KIntLineEdits to more appropriate QSpinBoxes
* src/imlibwidget.cpp (setFullscreen, several),
* src/kuickshow.cpp (several)
FINALLY got the fullscreen/kpanel thing together
KDE 1.1 introduced KWM::staysOnTop, but unfortunately "on top" meant
"below kpanel". Since KDE 1.1.1, on top means on top :o) Even more
unfortunately, this revealed several problems with focus handling and
other widgets on top of the "top"-widget. So I used a timer, check
the focusevents and tell kwm when to make us the top widget, and when
not.
* src/imlibwidget.cpp, src/kuickshow.cpp
improved handling of multiple windows - always the window which last
had the focus will load new images
* src/kuickdata.cpp, src/kuickconfigdlg.cpp, src/kuickshow.cpp
configurable: open all images in one window, or open a new window
Sat Apr 17 18:43:03 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (setToolbarPosition):
added methods to (re)store the toolbar position
* src/imlibwidget.cpp:
changed fullscreen code to use the current (and hopefully final) way
KWM does "stayOnTop"
* src/kuickdata.cpp:
updated file filters (Photoshop psd and bmp)
* src/kfileview.cpp:
changed the kdir behavior, so that the browser displays files
altogether at once, not incrementally. This also let me (finally,
yippeee :-P) highlight the last direcory, where you came from.
And reading directories is a bit faster now, too.
Sun Feb 21 16:02:44 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (zoomImage):
added minimum and maximum sizes for zooming images (thanks to
Robert Hamberger for the idea (and for some funny emails :-P))
* src/kwm-workaround.h (keepOnTop):
added Matthias' workaround for "always on top"-problem in fullscreen
mode, which was introduced with KWM-changes just before KDE 1.1
... too bad it doesn't work :-/ Gotta spend some time finding out, why
* src/kuickshow.cpp (showImage):
always move the first opened image-window to 0x0 (top left)
(thanks to Andreas Gelezun for the idea)
Thu Feb 4 11:40:50 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* doc/en/index.html:
updated documentation
Wed Feb 3 22:43:32 1999 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (KuickShow):
implemented deletion of files (delete/shift-delete/popupmenu)
fixed quite a few buglets with keyboard navigation (pageUp didn't
halt when a directory was found). pageUp/down and the like shall only
select files.
worked around kwm-bug (resize doesn't work properly after
KWM::setDecoration( noDecoration )
Tue Dec 29 16:55:11 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp, imlibwidget.cpp, kfileview.*:
fixed updating of directory in statusbar and filename in caption of
imlibwidget
fileview is prepared to support sorting and filtering
added toggle showing hidden files (accessible via toolbar)
added Home-Button in toolbar to change to home directory
Wed Nov 18 15:40:46 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (mouseMoveEvent):
fixed cursor not being reset to arrorCursor, when shift-key was
released during resize ( == abort resizing )
Wed Nov 18 15:09:36 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (saveSettings):
size of the browserwindow is now saved and restored on next start
Mon Nov 9 23:16:32 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* hopefully fixed autoconf stuff, which was broken at least on SunOS
Now tries to detect imlib-config and links against
`imlib-config --libs`. If this doesn't work, it links against
every graphics lib of libgif, libjpeg, libtiff and libpng, that
is available.
Another little bug is fixed, any changes (contrast/brightness/gamma)
were not saved when using "save as"
Sat Nov 7 15:22:18 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp
added changing of brightness, contrast and gamma via keyboard and popup menu
added saving image
the factor, how much brightness/contrast/gamma you change with one click is
only editable in configfile, no dialog, yet.
Sat Nov 7 12:57:48 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* acinclude.m4 (ac_imlib_config):
added some configure-stuff to use `imlib-config' to determine the libs
to be linked against.
Sun Oct 11 23:58:46 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (loadImageInternal):
added configuration option to not override the color palette
useful for 8bit displays
* src/kuickshow.cpp:
fixed segfault when imlib can't load image
(don't preload the next image, then)
Wed Sep 30 19:39:15 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* acinclude.m4, configure.in:
Added a configure-check for Imlib. Still incomplete (does NOT
check for all those other libs as libgif, libjpeg, libz, ...),
but at least finds libImlibs which are too old.
src/kuickshow.cpp (about):
about dialog is centered, now
Fri Sep 25 19:32:13 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (keyPressEvent):
Now behavior of scrolling/zooming with mouse is fixed:
pressing left mousebutton and moving the mouse will move the image
(only if it image is larger than current window)
Pressing Shift, left mousebutton and moving the mouse will zoom into
the image. Releasing Shift-button before mousebutton will abort zooming
Thu Sep 24 02:41:26 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (mouseReleaseEvent):
Ahh, finally I got "zoom inside image with mouse" working perfectly.
A rectangle is painted and this rectangle is zoomed and centered.
Not the very best solution, tho, as imlib is zooming the entire
image, not only the selected part... guess how long it can take for
bigger images.
Gotta find another solution later, creating a new imlib image with
just the selected part.
Tue Sep 22 21:05:58 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (preloadImage):
Added preloading facility. Fills the cache with the next image, so it
will pop up almost instantaneously, when pressing PageUp/Down.
Configurable via dialog.
Mon Sep 21 16:29:56 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (eventFilter):
Added "Enter-key", that reloads current image (so all zoom/move stuff
is restored to original settings).
Sun Sep 20 19:04:23 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kfileview.cpp (prev):
whoops, fixed a segfault, when trying to get a kfileinfo of index -1.
I shouldn't check, whether an unsigned int is smaller than 0, which it
actually was. Now uses int.
Sun Sep 20 13:35:00 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (closeEvent):
reverted to override closeEvent() and changed every occurrence of
close( true ) to close( false ), as closeEvent now explicitely
deletes itself.
This was due to windowmanagers close-button, which should delete widget
Sun Sep 20 03:08:45 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickshow.cpp (printImage):
added preliminary support for printing
Sat Sep 19 01:40:22 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (rotate):
added rotate-routine to - doh - rotate an image
Fri Sep 18 01:08:46 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (scrollImage):
Now changes cursor when attempting to move the image with the mouse
Also, image can be moved now, when in window mode and window is
larger than desktop
Thu Sep 17 17:25:11 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (setPopupMenu):
the fix for the popupmenu also let me finally delete it without
segfault :o)
Thu Sep 17 13:13:09 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/kuickconfigdlg.cpp (KuickConfigDialog):
enlargened maxCache lineedit and changed tooltip
* src/imlibconfig.cpp
changed default value for maxCache from 0 to 10000 (10megs)
* src/imlibwidget.cpp (scrollImage):
restricted scrolling so that you can move the image only
if it doesn't fit onto the screen.
You can't move the image out of the screen anymore.
Also fixed a segfault (ugh) in viewerMenu->popup(), as it was
initialized in the wrong place (now in initImlib()).
Thu Sep 17 00:11:53 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (loadImage):
re-enabled Imlib_destroy_image()
Found another value in imlib configuration struct, pixmapcachesize
which I wasn't aware of. Now limiting imlib's cache really works :o))
I'm really happy now :-) Running out of Ram and even Swap is not too
funny ;o)
Tue Sep 15 20:28:49 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (centerImage):
fixed images not centering when larger than screen and in fullscreen
mode.
Tue Sep 15 14:06:27 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (mouseMoveEvent):
scrolling the image with the mouse is now possible. Didn't expect
scrolling would be so smooth :o)
Also added a popupmenu (ImlibWidget::setPopupmenu( bool )) for
the basic features like zoom and flip image
Mon Sep 14 16:20:30 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/fileview.cpp/.h
* src/kfileview.cpp/.h
* src/kuickshow.cpp
added "change directory" possibility. A dialog asks for a directory
and the fileview is being updated. Either accessible via the
popupmenu, or via Ctrl-g (goto)
* src/kuickshow.cpp (KuickShow):
once again optimized commandline parsing
Mon Sep 14 13:24:40 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* funny, I added lots of stuff, moved some other stuff around and
the result is a binary about 30k smaller than before :-D
* src/fileview.cpp (findCompletion):
*strike* now even filecompletion works :-) If you hit some keys
on your keyboard, while in the filebrowser, a small edit window pops
up in the bottom-right corner. Just type in the first chars of the
filename of the image you want to see, and it will be highlighted.
* src/kuickshow.cpp, src/imlibwidget.h/.cpp:
Cool. Now, I have only one ImlibData object, so I share imlib's
cache between all open windows. This does not only speed things
up quite a bit, but also reduced memory usage with multiple open
windows.
ImlibWidget therefore has a new constructor, where you can pass the
pointer to the ImlibData object.
* src/imlibwidget.cpp (ImlibWidget):
now creates an ImlibConfig object itself, when none has been given
in the contructor
Sun Sep 13 23:28:31 1998 Carsten Pfeiffer <pfeiffer@kde.org>
* src/imlibwidget.cpp (renderImage):
Don't destroy images ( Imlib_destroy_image() ) anymore. This boosts
browsing a LOT. Showing cached images is almosts instantaneous now!
Hope there's no sideeffect on this :-}
* src/kuickshow.cpp (eventFilter):
space toggles show()ing and hide()ing the browser now.
If started with image as parameter, kuickshow doesn't show
the browser, hit space to show it.
* src/fileview.h (class FileView):
findCompletion() is now public, so that I can tell the browser
to highlight the file, supplied via commandline.
History:
--------
- found that xemacs can create much better changelogs :o)
- hacked a lot of goodies into KuickShow, several configuration options
- decided to have a look at the Xlib stuff and found out, how to map
an Imlib image onto any QWidget - this is cool :o)
- too bad, it was not very reliable and it was a mess, too
- with my Xlib non-knowledge, found a way to "swallow" an Imlib image
onto a QWidget - imagine how happy I was :o)
- if Kopacz got Imlib to work, I could do that, too :-P
- end of August 98, saw Adam Kopacz' release of qiv (quick image viewer)
damn, this was my name (kiv, kuick image viewer) :o(
- first tries to use Imlib to display on Qt/KDE widgets in April 98,
too bad, it didn't work :o(
- first hack of kview to use a filebrowser in January
- had the idea for such an app about December 97
</pre>

@ -0,0 +1,8 @@
SUBDIRS = src misc pics
kuickshow-package:
@export CVSROOT=`cat CVS/Root`; \
kuickdir=$$PWD; \
kuickver=`cat src/version.h | grep define | cut -f3 -d' ' | sed -e 's/"//g'`; \
cd /tmp; \
cvs2dist `dirname $$kuickdir` kuickshow --remove-hidden --version $$kuickver $$kuickdir/TODO $$kuickdir/BUGS $$kuickdir/kuickshow.lsm $$kuickdir/kuickshow.spec $$kuickshow/../Makefile.cvs

@ -0,0 +1,8 @@
KuickShow v0.8
Carsten Pfeiffer <pfeiffer@kde.org>
----------------------------------------------------------------------
KuickShow is a very fast and comfortable imageviewer, somewhat inspired
by ACDSee (early versions :)
See http://devel-home.kde.org/~pfeiffer/kuickshow/ for updated versions,
see ChangeLog for what has changed.

@ -0,0 +1,24 @@
toolbar in imageviewer
- Ctrl-S = Save current, Shift-Ctrl-S = Filedialog
- allow to split browser into subwindows (multiple browsers)
- mouse-usage better (e.g. left button = next image, middle button = previous
image, all configurable)
- anim-gif support (QMovie perhaps)
- cropping images (via Imlib_clone_scaled_image & Imlib_crop_and_clone_image())
- thumbnail view, treeview
- menubar (same as popupmenu) (abschaltbar) (mac-mode!)
- configure-dialog: offer a directory to copy files to -> one click copies to it
- rename/delete into popupmenu of imagewindow
- if image not readable -> no nagscreen, jump to next image
- network transparency with kio
- small preview in browser window
- bookmarks?
- generate wallpaper (background desktop image)
- display more image information (resolution, color depth, image comments...)
- better slideshow (randomize, pause/continue, reverse, ...)
- what else?

@ -0,0 +1,9 @@
if test -z "$LIB_IMLIB"; then
echo ""
echo "You're missing Imlib 1.x. The graphics browser/viewer KuickShow"
echo "won't be compiled without Imlib."
echo "You can download it from"
echo "http://freshmeat.net/redir/imlib/4385/url_tgz/imlib-1.9.10.tar.gz"
echo ""
all_tests=bad
fi

@ -0,0 +1,69 @@
#MIN_CONFIG
#AM_INIT_AUTOMAKE(kuickshow,0.8.2)
# my own additions to KDE's version
#
# checking for Imlib...
AC_DEFUN([KDE_FIND_IMLIB_CONFIG],
[AC_MSG_CHECKING([for imlib-config])
imlib_config_given=NO
ac_imlib_config=""
AC_ARG_WITH(imlib-config,
AC_HELP_STRING([--with-imlib-config=DIR],[directory where "imlib-config" is located]),
[ ac_imlib_config="$withval/imlib-config"
imlib_config_given=yes
])
if test "$imlib_config_given" = "yes"; then
if test ! -r $ac_imlib_config; then
AC_MSG_RESULT(wrong file specified)
ac_imlib_config=""
else
AC_MSG_RESULT($ac_imlib_config)
LIB_IMLIB=`$ac_imlib_config --libs`
AC_SUBST(LIB_IMLIB)
fi
else
ac_imlib_config=`which imlib-config 2>/dev/null`
if test -z "$ac_imlib_config"; then
AC_MSG_RESULT(no)
else
dummy=`echo "$ac_imlib_config" | grep '/imlib-config'`
if test -z "$dummy"; then
AC_MSG_RESULT(no)
ac_imlib_config=""
else
LIB_IMLIB=`$ac_imlib_config --libs`
IMLIB_CFLAGS=`$ac_imlib_config --cflags`
imlib_config=`echo "$LIB_IMLIB" | grep lImlib`
if test -z "$imlib_config"; then
AC_MSG_RESULT(no)
ac_imlib_config=""
else
AC_SUBST(LIB_IMLIB)
AC_SUBST(IMLIB_CFLAGS)
AC_MSG_RESULT($ac_imlib_config)
fi
fi
fi
fi
])
dnl #### now some kuickshow stuff ###
dnl Check if Imlib is installed properly
KDE_PKG_CHECK_MODULES(IMLIB, imlib >= 1.9.10,
LIB_IMLIB=$IMLIB_LIBS
AC_SUBST(LIB_IMLIB)
,
KDE_FIND_IMLIB_CONFIG
)
if test -z "$LIB_IMLIB"; then
dnl AC_MSG_ERROR([You need to install Imlib 1.x, e.g. http://freshmeat.net/redir/imlib/4385/url_tgz/imlib-1.9.10.tar.gz if your distributor doesn't have a package])
DO_NOT_COMPILE="$DO_NOT_COMPILE kuickshow"
fi

@ -0,0 +1,18 @@
Begin3
Title: KuickShow
Version: 0.8.5
Entered-date: August 2001
Description: KuickShow is a very fast image viewer, that lets you easily
browse large galleries. A builtin filebrowser and manager
is also available. Usage is somewhat inspired by ACDSee.
Keywords: KDE Qt Graphics Images Imageviewer Imlib
Author: Carsten Pfeiffer <pfeiffer@kde.org>
Maintained-by: Carsten Pfeiffer <pfeiffer@kde.org>
Home-page: http://devel-home.kde.org/~pfeiffer/kuickshow/
Alternate-site: ftp://ftp.kde.org/pub/kde/stable/apps/graphics/
Primary-site: http://devel-home.kde.org/~pfeiffer/kuickshow/
xxxxxx kuickshow-0.8.5.tar.gz
xxx kuickshow-0.8.5.lsm
Platform: Unix. Needs Qt >= 3.0.4, KDE (kdelibs) >= 3.0 and Imlib 1.x
Copying-policy: GPL
End

@ -0,0 +1,69 @@
%define version 0.8.5
%define release 1
%define serial 1
%define prefix /opt/kde3
Name: kuickshow
Summary: KuickShow -- A very fast image viewer/browser
Version: %{version}
Release: %{release}
Serial: %{serial}
Source: http://devel-home.kde.org/~pfeiffer/kuickshow/kuickshow-%{version}.tar.gz
URL: http://devel-home.kde.org/~pfeiffer/kuickshow/
Copyright: GPL
Packager: Carsten Pfeiffer <pfeiffer@kde.org>
Group: X11/KDE/Graphics
BuildRoot: /tmp/kuickshow-%{version}-root
Prefix: %{prefix}
%description
KuickShow is a very fast image viewer, that lets you easily
browse large galleries. A builtin filebrowser and manager
is also available. Usage is somewhat inspired by ACDSee.
It supports many fileformats, e.g. jpeg, gif, png, psd, bmp,
tiff, xpm, xbm, xcf, eim, ...
KuickShow has a nice user interface, that allows you to browse large amounts
of images in a short time. It can zoom, mirror, rotate images, adjust
brightness, contrast and gamma and can do a slideshow, of course.
It is fully configurable through dialogs.
Besides that, it offers a nice filebrowser with basic filemanager capabilities
like renaming, deleting, creating directories, ...
Install with '--prefix $KDEDIR' unless you have the kde-config program.
%prep
rm -rf $RPM_BUILD_ROOT
%setup -n kuickshow-%{version}
%build
PREFIX=""
which kde-config || PREFIX=%{prefix}
if test -z "$PREFIX"; then
PREFIX=`kde-config --prefix`
fi
export KDEDIR="$PREFIX"
CXXFLAGS="$RPM_OPT_FLAGS -fno-exceptions -pipe" LDFLAGS=-s ./configure --prefix="$PREFIX" --enable-final --disable-debug
mkdir -p $RPM_BUILD_ROOT
make
%install
make install DESTDIR=$RPM_BUILD_ROOT
cd $RPM_BUILD_ROOT
find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > $RPM_BUILD_DIR/file.list.%{name}
find . -type f | sed 's,^\.,\%attr(-\,root\,root) ,' >> $RPM_BUILD_DIR/file.list.%{name}
find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> $RPM_BUILD_DIR/file.list.%{name}
%clean
rm -rf $RPM_BUILD_ROOT
rm -f $RPM_BUILD_DIR/file.list.%{name}
%files -f ../file.list.%{name}

@ -0,0 +1,2 @@
pal_DATA = im_palette.pal
paldir = $(kde_datadir)/kuickshow

@ -0,0 +1,64 @@
0x0 0x0 0x0
0xff 0xff 0xff
0xff 0x0 0x0
0xff 0xff 0x0
0x0 0xff 0x0
0x0 0x0 0xff
0x0 0xff 0xff
0x99 0x99 0x99
0xff 0x88 0x0
0x88 0x0 0x0
0x0 0x88 0x88
0x88 0x88 0x0
0xff 0xcc 0x97
0xbb 0xbb 0xbb
0x9f 0x6b 0x42
0x55 0x55 0x55
0xdd 0xdd 0xdd
0x77 0x77 0x77
0x33 0x33 0x33
0xcc 0x0 0x0
0xff 0x44 0x0
0xff 0xcc 0x0
0xcc 0xcc 0x0
0x60 0x60 0x0
0x0 0x43 0x0
0x0 0x7f 0x0
0x0 0xcc 0x0
0x0 0x44 0x44
0x0 0x0 0x44
0x0 0x0 0x88
0xef 0xb1 0x7b
0xdf 0x98 0x5f
0xbf 0x87 0x56
0x7f 0x57 0x26
0x5f 0x39 0xc
0x3f 0x1c 0x0
0x21 0x0 0x0
0x0 0x43 0x87
0x2d 0x70 0xaf
0x5a 0x9e 0xd7
0x87 0xcc 0xff
0xff 0xe0 0xba
0x21 0x43 0xf
0x3d 0x5d 0x25
0x59 0x78 0x3a
0x75 0x93 0x4f
0x91 0xae 0x64
0xad 0xc8 0x7a
0xf0 0xa8 0xef
0xd0 0x88 0xd0
0xaf 0x66 0xaf
0x8e 0x44 0x8e
0x6d 0x22 0x6d
0x4b 0x0 0x4b
0xff 0xc0 0xbc
0xff 0x93 0x91
0xff 0x66 0x67
0xd8 0xf2 0xbf
0xff 0xc9 0x68
0xff 0x96 0x67
0xa5 0x60 0xff
0x51 0xff 0x99
0x3f 0xa5 0x63
0x98 0x90 0x67

@ -0,0 +1,7 @@
# Add all of your pixmaps here
pics_DATA = calibrate.png kuickshow-day.jpg kuickshow-night.jpg logo.png \
imageviewer-medium.png imageviewer-small.png handcursor.png \
ksslide.png about.png
# This is where it will all be installed
picsdir = $(kde_datadir)/kuickshow/pics

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

@ -0,0 +1,31 @@
## Makefile.am for kuickshow
bin_PROGRAMS =
lib_LTLIBRARIES =
kdeinit_LTLIBRARIES = kuickshow.la
# set the include path for X, qt and KDE
INCLUDES = $(all_includes)
KDE_CXXFLAGS = $(IMLIB_CFLAGS)
METASOURCES = AUTO
kuickshow_la_LDFLAGS = $(all_libraries) -module -avoid-version
kuickshow_la_LIBADD = $(LIB_KDEPRINT) $(LIB_IMLIB)
kuickshow_la_SOURCES = kuickshow.cpp \
aboutwidget.cpp generalwidget.cpp kuickconfigdlg.cpp main.cpp \
defaultswidget.cpp imagewindow.cpp kuickdata.cpp \
imdata.cpp filefinder.cpp kurlwidget.cpp filewidget.cpp \
kuick.cpp imlibwidget.cpp slideshowwidget.cpp printing.cpp \
kuickfile.cpp kuickimage.cpp filecache.cpp
# if you "make distclean", this files get removed. If you want to remove
# them while "make clean", use CLEANFILES
DISTCLEANFILES = $(METASOURCES)
messages:
$(XGETTEXT) *.cpp *.h -o $(podir)/kuickshow.pot
KDE_ICON = kuickshow
# this is where the kdelnk file will go
xdg_apps_DATA = kuickshow.desktop

@ -0,0 +1,95 @@
/* This file is part of the KDE project
Copyright (C) 1998-2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <qdatetime.h>
#include <qevent.h>
#include <qglobal.h>
#include <qgroupbox.h>
#include <qlabel.h>
#include <kwin.h>
#include <kstandarddirs.h>
#include "imlibwidget.h"
#include "kurlwidget.h"
#include "version.h"
#include "aboutwidget.h"
AboutWidget::AboutWidget( QWidget *parent, const char *name )
: QVBox( parent, name, Qt::WShowModal )
{
KWin::setType( winId(), NET::Override );
KWin::setState( winId(), NET::SkipTaskbar );
setFrameStyle( WinPanel | Raised );
QGroupBox *gBox = new QGroupBox( 1, Horizontal, this);
gBox->setGeometry( 10, 10, width()-20, height()-20 );
gBox->setAlignment( AlignHCenter );
gBox->installEventFilter( this );
gBox->setPalette( QPalette( QColor( white ) ) );
gBox->setBackgroundMode( PaletteBackground );
int hour = QTime::currentTime().hour();
QString file;
if ( hour >= 10 && hour < 16 )
file = locate("appdata", "pics/kuickshow-day.jpg");
else
file = locate("appdata", "pics/kuickshow-night.jpg");
QLabel *authors = new QLabel("Kuickshow " KUICKSHOWVERSION
" was brought to you by", gBox);
authors->setAlignment( AlignCenter );
m_homepage = new KURLWidget("Carsten Pfeiffer", gBox);
m_homepage->setURL( "http://devel-home.kde.org/~pfeiffer/kuickshow/" );
m_homepage->setAlignment( AlignCenter );
QLabel *copy = new QLabel("(C) 1998-2006", gBox);
copy->setAlignment( AlignCenter );
ImlibWidget *im = new ImlibWidget( 0L, gBox, "KuickShow Logo" );
if ( im->loadImage( file ) )
im->setFixedSize( im->width(), im->height() );
else {
delete im;
im = 0L;
qWarning( "KuickShow: about-image not found/unreadable." );
}
}
AboutWidget::~AboutWidget()
{
}
bool AboutWidget::eventFilter( QObject *o, QEvent *e )
{
if ( e->type() == QEvent::MouseButtonPress ) {
QMouseEvent *ev = static_cast<QMouseEvent*>( e );
if ( !m_homepage->geometry().contains( ev->pos() ) ) {
deleteLater();
return true;
}
}
return QVBox::eventFilter( o, e );
}
#include "aboutwidget.moc"

@ -0,0 +1,43 @@
/* This file is part of the KDE project
Copyright (C) 1998-2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef ABOUTWIDGET_H
#define ABOUTWIDGET_H
#include <qevent.h>
#include <qvbox.h>
class KURLWidget;
class AboutWidget : public QVBox
{
Q_OBJECT
public:
AboutWidget(QWidget *parent = 0, const char *name = 0);
protected:
~AboutWidget();
bool eventFilter( QObject*, QEvent * );
private:
KURLWidget *m_homepage;
};
#endif

@ -0,0 +1,282 @@
/* This file is part of the KDE project
Copyright (C) 1998-2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <qcheckbox.h>
#include <qgroupbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qvgroupbox.h>
#include <kcombobox.h>
#include <kdialog.h>
#include <klocale.h>
#include <knuminput.h>
#include <kstandarddirs.h>
#include "imlibwidget.h"
#include "defaultswidget.h"
DefaultsWidget::DefaultsWidget( QWidget *parent, const char *name)
: QWidget( parent, name )
{
imFiltered = 0L;
cbEnableMods = new QCheckBox( i18n("Apply default image modifications"), this );
connect( cbEnableMods, SIGNAL( toggled(bool) ), SLOT( enableWidgets(bool) ));
// create all the widgets
gbScale = new QGroupBox( i18n("Scaling"), this );
gbScale->setColumnLayout( 0, Qt::Horizontal );
cbDownScale = new QCheckBox( i18n("Shrink image to screen size, if larger"),
gbScale, "shrinktoscreen" );
cbUpScale = new QCheckBox( i18n("Scale image to screen size, if smaller, up to factor:"), gbScale, "upscale checkbox" );
sbMaxUpScaleFactor = new KIntNumInput( gbScale, "upscale factor" );
sbMaxUpScaleFactor->setRange( 1, 100, 1, false );
connect(cbUpScale, SIGNAL( toggled(bool)), sbMaxUpScaleFactor,
SLOT( setEnabled(bool) ));
// --
gbGeometry = new QGroupBox( i18n("Geometry"), this );
gbGeometry->setColumnLayout( 0, Qt::Horizontal );
cbFlipVertically = new QCheckBox( i18n("Flip vertically"), gbGeometry );
cbFlipHorizontally = new QCheckBox( i18n("Flip horizontally"), gbGeometry );
lbRotate = new QLabel( i18n("Rotate image:"), gbGeometry );
comboRotate = new KComboBox( gbGeometry, "rotate combobox" );
comboRotate->insertItem( i18n("0 Degrees") );
comboRotate->insertItem( i18n("90 Degrees") );
comboRotate->insertItem( i18n("180 Degrees") );
comboRotate->insertItem( i18n("270 Degrees") );
// --
gbAdjust = new QVGroupBox( i18n("Adjustments"), this );
sbBrightness = new KIntNumInput( gbAdjust, "brightness spinbox" );
sbBrightness->setRange( -256, 256, 1, true );
sbBrightness->setLabel( i18n("Brightness:"), AlignVCenter );
sbContrast = new KIntNumInput( sbBrightness, 0,gbAdjust, 10,
"contrast spinbox");
sbContrast->setRange( -256, 256, 1, true );
sbContrast->setLabel( i18n("Contrast:"), AlignVCenter );
sbGamma = new KIntNumInput( sbContrast, 0, gbAdjust, 10, "gamma spinbox" );
sbGamma->setRange( -256, 256, 1, true );
sbGamma->setLabel( i18n("Gamma:"), AlignVCenter );
// --
gbPreview = new QGroupBox( i18n("Preview"), this );
gbPreview->setAlignment( AlignCenter );
lbImOrig = new QLabel( i18n("Original"), gbPreview );
imOrig = new ImlibWidget( 0L, gbPreview, "original image" );
lbImFiltered = new QLabel( i18n("Modified"), gbPreview );
imFiltered = new ImlibWidget( 0L, imOrig->getImlibData(), gbPreview, "" );
connect( imFiltered, SIGNAL( destroyed() ), SLOT( slotNoImage() ));
////
////////////////
// layout management
QVBoxLayout *mainLayout = new QVBoxLayout( this, 0,
KDialog::spacingHint(), "main layout" );
QVBoxLayout *gbScaleLayout = new QVBoxLayout( gbScale->layout(),
KDialog::spacingHint());
QVBoxLayout *gbGeometryLayout = new QVBoxLayout(gbGeometry->layout(),
KDialog::spacingHint());
QGridLayout *gbPreviewLayout = new QGridLayout(gbPreview, 2, 3, 0,
KDialog::spacingHint());
QHBoxLayout *scaleLayout = new QHBoxLayout();
QHBoxLayout *rotateLayout = new QHBoxLayout();
mainLayout->addWidget( cbEnableMods );
mainLayout->addWidget( gbScale );
QHBoxLayout *hl = new QHBoxLayout();
hl->addWidget( gbGeometry );
hl->addWidget( gbAdjust );
mainLayout->addLayout( hl );
mainLayout->addWidget( gbPreview );
mainLayout->addStretch();
// --
gbScaleLayout->addWidget( cbDownScale );
gbScaleLayout->addLayout( scaleLayout );
scaleLayout->addWidget( cbUpScale );
scaleLayout->addWidget( sbMaxUpScaleFactor );
// --
gbGeometryLayout->addWidget( cbFlipVertically, 0, AlignLeft );
gbGeometryLayout->addWidget( cbFlipHorizontally, 0, AlignLeft );
gbGeometryLayout->addLayout( rotateLayout, 0 );
rotateLayout->addWidget( lbRotate, 0, AlignLeft );
rotateLayout->addWidget( comboRotate, 0, AlignLeft );
// --
gbPreviewLayout->setMargin( 10 );
gbPreviewLayout->setSpacing( KDialog::spacingHint() );
gbPreviewLayout->addWidget( lbImOrig, 0, 0, AlignCenter );
gbPreviewLayout->addWidget( imOrig, 1, 0, AlignCenter | AlignTop );
gbPreviewLayout->addWidget( lbImFiltered, 0, 2, AlignCenter );
gbPreviewLayout->addWidget( imFiltered, 1, 2, AlignCenter | AlignTop );
////
////////////////
// connect them all to the update slot
connect( cbDownScale, SIGNAL( clicked() ), SLOT( updatePreview() ));
connect( cbUpScale, SIGNAL( clicked() ), SLOT( updatePreview() ));
connect( cbFlipVertically, SIGNAL( clicked() ), SLOT( updatePreview() ));
connect( cbFlipHorizontally, SIGNAL( clicked() ), SLOT( updatePreview() ));
connect( sbMaxUpScaleFactor, SIGNAL( valueChanged(int) ), SLOT( updatePreview() ));
connect( sbBrightness, SIGNAL( valueChanged(int) ), SLOT( updatePreview() ));
connect( sbContrast, SIGNAL( valueChanged(int) ), SLOT( updatePreview() ));
connect( sbGamma, SIGNAL( valueChanged(int) ), SLOT( updatePreview() ));
connect( comboRotate, SIGNAL( activated(int) ), SLOT( updatePreview() ));
QString filename = locate( "data", "kuickshow/pics/calibrate.png" );
if ( !imOrig->loadImage( filename ) )
imOrig = 0L; // FIXME - display some errormessage!
if ( !imFiltered->loadImage( filename ) )
imFiltered = 0L; // FIXME - display some errormessage!
loadSettings( *kdata );
if ( imOrig )
imOrig->setFixedSize( imOrig->size() );
if ( imFiltered )
imFiltered->setFixedSize( imFiltered->size() );
mainLayout->activate();
}
DefaultsWidget::~DefaultsWidget()
{
// those need to be deleted in the right order, as imFiltered
// references ImlibData from imOrig
delete imFiltered;
delete imOrig;
}
void DefaultsWidget::loadSettings( const KuickData& data )
{
cbDownScale->setChecked( data.downScale );
cbUpScale->setChecked( data.upScale );
sbMaxUpScaleFactor->setValue( data.maxUpScale );
cbFlipVertically->setChecked( data.flipVertically );
cbFlipHorizontally->setChecked( data.flipHorizontally );
comboRotate->setCurrentItem( data.rotation );
ImData *id = data.idata;
sbBrightness->setValue( id->brightness );
sbContrast->setValue( id->contrast );
sbGamma->setValue( id->gamma );
cbEnableMods->setChecked( data.isModsEnabled );
enableWidgets( data.isModsEnabled );
updatePreview();
}
void DefaultsWidget::applySettings( KuickData& data )
{
data.isModsEnabled = cbEnableMods->isChecked();
data.downScale = cbDownScale->isChecked();
data.upScale = cbUpScale->isChecked();
data.maxUpScale = sbMaxUpScaleFactor->value();
data.flipVertically = cbFlipVertically->isChecked();
data.flipHorizontally = cbFlipHorizontally->isChecked();
data.rotation = currentRotation();
ImData *id = data.idata;
id->brightness = sbBrightness->value();
id->contrast = sbContrast->value();
id->gamma = sbGamma->value();
}
void DefaultsWidget::updatePreview()
{
if ( !imFiltered )
return;
imFiltered->setAutoRender( false );
int flipMode = cbFlipHorizontally->isChecked() ? FlipHorizontal : FlipNone;
flipMode |= cbFlipVertically->isChecked() ? FlipVertical : FlipNone;
imFiltered->setFlipMode( flipMode );
Rotation rotation = cbEnableMods->isChecked() ? currentRotation() : ROT_0;
imFiltered->setRotation( rotation );
imFiltered->setBrightness( sbBrightness->value() );
imFiltered->setContrast( sbContrast->value() );
imFiltered->setGamma( sbGamma->value() );
imFiltered->updateImage();
imFiltered->setAutoRender( true );
}
void DefaultsWidget::enableWidgets( bool enable )
{
gbScale->setEnabled( enable );
sbMaxUpScaleFactor->setEnabled( enable & cbUpScale->isChecked() );
gbGeometry->setEnabled( enable );
gbAdjust->setEnabled( enable );
gbPreview->setEnabled( enable );
updatePreview();
}
Rotation DefaultsWidget::currentRotation() const
{
return (Rotation) comboRotate->currentItem();
}
#include "defaultswidget.moc"

@ -0,0 +1,73 @@
/* This file is part of the KDE project
Copyright (C) 1998-2003 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef DEFAULTSWIDGET_H
#define DEFAULTSWIDGET_H
#include "kuickdata.h"
class ImlibWidget;
class ImData;
class QCheckBox;
class QLabel;
class KComboBox;
class KIntNumInput;
class DefaultsWidget : public QWidget
{
Q_OBJECT
public:
DefaultsWidget( QWidget *parent, const char *name );
~DefaultsWidget();
void loadSettings( const KuickData& data );
void applySettings( KuickData& data );
private:
Rotation currentRotation() const;
QCheckBox *cbEnableMods;
QGroupBox *gbScale;
QCheckBox *cbUpScale, *cbDownScale;
KIntNumInput *sbMaxUpScaleFactor;
QGroupBox *gbAdjust;
KIntNumInput *sbBrightness, *sbContrast, *sbGamma;
QGroupBox *gbGeometry;
QLabel *lbRotate;
KComboBox *comboRotate;
QCheckBox *cbFlipVertically, *cbFlipHorizontally;
QGroupBox *gbPreview;
QLabel *lbImOrig, *lbImFiltered;
ImlibWidget *imOrig, *imFiltered;
private slots:
void updatePreview();
void slotNoImage() { imFiltered = 0L; }
void enableWidgets( bool );
};
#endif

@ -0,0 +1,83 @@
#include <unistd.h>
#include <qstring.h>
#include <kdebug.h>
#include <kstandarddirs.h>
#include <ktempdir.h>
#include "filecache.h"
FileCache * FileCache::s_self;
FileCache::FileCache()
: m_limit( 0 ),
m_tempDir( 0L )
{
m_files.setAutoDelete( true );
m_files.setMaxCost( 100 ); // good default? ### make configurable?
}
FileCache::~FileCache()
{
delete m_tempDir;
}
void FileCache::shutdown()
{
if ( s_self )
{
delete s_self;
s_self = 0L;
}
}
FileCache * FileCache::self()
{
if ( !s_self )
s_self = new FileCache();
return s_self;
}
KuickFile * FileCache::getFile( const KURL& url )
{
QString urlString = url.prettyURL();
KuickFile *file = m_files.find( urlString );
if ( !file ) {
file = new KuickFile( url );
m_files.insert( urlString, file );
}
return file;
}
QString FileCache::tempDir()
{
if ( !m_tempDir ) {
m_tempDir = createTempDir();
if ( !m_tempDir ) {
kdWarning() << "Unable to create temporary directory for KuickShow" << endl;
return QString::null;
}
}
return m_tempDir->name();
}
KTempDir * FileCache::createTempDir()
{
QString tmpName = QString::fromLatin1( KGlobal::instance()->instanceName() );
tmpName.append( QString::number( getpid() ) );
QString dirName = locateLocal( "tmp", tmpName );
KTempDir *dir = new KTempDir( dirName );
dir->setAutoDelete( true );
if ( dir->status() != 0L )
{
delete dir;
return 0L;
}
return dir;
}

@ -0,0 +1,47 @@
/****************************************************************************
** $Id: .emacs,v 1.3 2006/02/20 15:06:53 gis Exp $
**
** Created : 2006
**
** Copyright (C) 2006 Carsten Pfeiffer <pfeiffer@kde.org>
**
****************************************************************************/
#ifndef FILECACHE_H
#define FILECACHE_H
#include <qcache.h>
#include "kuickfile.h"
class KTempDir;
class FileCache
{
public:
static FileCache * self();
static void shutdown();
KuickFile * getFile( const KURL& url );
void setLimit( int numFiles );
int getLimit() const { return m_limit; }
/**
* @return the temporary directory or QString::null if none available
*/
QString tempDir();
private:
static FileCache *s_self;
FileCache();
~FileCache();
KTempDir * createTempDir();
QCache<KuickFile> m_files;
int m_limit;
KTempDir *m_tempDir;
};
#endif // FILECACHE_H

@ -0,0 +1,100 @@
/* This file is part of the KDE project
Copyright (C) 1998-2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <qkeycode.h>
#include <kapplication.h>
#include <kconfig.h>
#include <kglobal.h>
#include <kcompletionbox.h>
#include <kurlcompletion.h>
#include "filefinder.h"
FileFinder::FileFinder( QWidget *parent, const char *name )
: KLineEdit( parent, name )
{
// make this widget just as large, as the font is + 8 Pixels
int height = fontMetrics().height() + 8;
setFixedSize( 150, height );
setFrame( true );
setHandleSignals( true ); // we want the completionbox signals
#if KDE_VERSION >= 220
completionBox()->setTabHandling( true );
#endif
connect( completionBox(), SIGNAL( userCancelled(const QString&) ),
SLOT( hide() ));
connect( completionBox(), SIGNAL( activated( const QString& ) ),
SLOT( slotAccept( const QString& )));
connect( this, SIGNAL( returnPressed( const QString& )),
SLOT( slotAccept( const QString& ) ));
KURLCompletion *comp = new KURLCompletion();
comp->setReplaceHome( true );
comp->setReplaceEnv( true );
setCompletionObject( comp, false );
setAutoDeleteCompletionObject( true );
setFocusPolicy( ClickFocus );
KConfig *config = KGlobal::config();
KConfigGroupSaver cs( config, "GeneralConfiguration" );
setCompletionMode( (KGlobalSettings::Completion)
config->readNumEntry( "FileFinderCompletionMode",
KGlobalSettings::completionMode()));
}
FileFinder::~FileFinder()
{
KConfig *config = KGlobal::config();
KConfigGroupSaver cs( config, "GeneralConfiguration" );
config->writeEntry( "FileFinderCompletionMode", completionMode() );
}
void FileFinder::focusOutEvent( QFocusEvent *e )
{
if ( e->reason() != QFocusEvent::Popup )
hide();
}
void FileFinder::keyPressEvent( QKeyEvent *e )
{
int key = e->key();
if ( key == Key_Escape ) {
hide();
e->accept();
}
else {
KLineEdit::keyPressEvent( e );
}
}
void FileFinder::hide()
{
KLineEdit::hide();
parentWidget()->setFocus();
}
void FileFinder::slotAccept( const QString& dir )
{
hide();
emit enterDir( dir );
}
#include "filefinder.moc"

@ -0,0 +1,54 @@
/* This file is part of the KDE project
Copyright (C) 1998-2003 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef FILEFINDER_H
#define FILEFINDER_H
#include <qevent.h>
#include <klineedit.h>
class KURLCompletion;
class FileFinder : public KLineEdit
{
Q_OBJECT
public:
FileFinder( QWidget *parent=0, const char *name=0 );
~FileFinder();
KURLCompletion *completion() {
return static_cast<KURLCompletion*>( completionObject() );
}
virtual void hide();
signals:
void enterDir( const QString& );
protected:
virtual void focusOutEvent( QFocusEvent * );
virtual void keyPressEvent( QKeyEvent * );
private slots:
void slotAccept( const QString& );
};
#endif // FILEFINDER_H

@ -0,0 +1,464 @@
/* This file is part of the KDE project
Copyright (C) 1998-2003 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <qkeycode.h>
#include <kdeversion.h>
#include <kglobal.h>
#include <kglobalsettings.h>
#include <klocale.h>
#include <kpopupmenu.h>
#include <kpropertiesdialog.h>
#include <kurlcompletion.h>
#include "filefinder.h"
#include "filewidget.h"
#include "kuickdata.h"
#include "kuickshow.h"
#ifdef KeyPress
#undef KeyPress
#endif
FileWidget::FileWidget( const KURL& url, QWidget *parent, const char *name )
: KDirOperator( url, parent, name ),
m_validCompletion( false ),
m_fileFinder( 0L )
{
setEnableDirHighlighting( true );
#if KDE_VERSION >= 310
setViewConfig( KGlobal::config(), "Filebrowser" );
#endif
readConfig( KGlobal::config(), "Filebrowser" );
setView( KFile::Default );
// setOnlyDoubleClickSelectsFiles( true );
reloadConfiguration();
completionObject()->setCompletionMode( KGlobalSettings::CompletionAuto );
dirCompletionObject()->setCompletionMode( KGlobalSettings::CompletionAuto);
slotViewChanged();
connect( this, SIGNAL( viewChanged( KFileView * )),
SLOT( slotViewChanged() ));
connect( dirLister(), SIGNAL( clear() ), SLOT( slotItemsCleared() ));
connect( dirLister(), SIGNAL( deleteItem( KFileItem * ) ),
SLOT( slotItemDeleted( KFileItem *) ));
connect( this, SIGNAL( fileHighlighted( const KFileItem * )),
SLOT( slotHighlighted( const KFileItem * )));
connect( this, SIGNAL(urlEntered(const KURL&)),
SLOT( slotURLEntered( const KURL& )));
// should actually be KDirOperator's job!
connect( this, SIGNAL( finishedLoading() ), SLOT( slotFinishedLoading() ));
}
FileWidget::~FileWidget()
{
delete m_fileFinder;
}
void FileWidget::initActions()
{
int index = 0;
KActionCollection *coll = actionCollection();
KActionSeparator *sep = new KActionSeparator( coll, "kuicksep" );
KActionMenu *menu = static_cast<KActionMenu*>( coll->action("popupMenu") );
menu->insert( coll->action("kuick_showInOtherWindow"), index++ );
menu->insert( coll->action("kuick_showInSameWindow"), index++ );
menu->insert( coll->action("kuick_showFullscreen"), index++ );
menu->insert( sep, index++ );
// support for older kdelibs, remove somewhen...
if ( coll->action("kuick_delete") )
menu->insert( coll->action("kuick_delete"), 9 );
// properties dialog is now in kfile, but not at the right position,
// so we move it to the real bottom
menu->remove( coll->action( "properties" ) );
QPopupMenu *pMenu = menu->popupMenu();
int lastItemId = pMenu->idAt( pMenu->count() - 1 );
QMenuItem *mItem = pMenu->findItem( lastItemId );
if ( mItem && !mItem->isSeparator() )
menu->insert( sep );
// those at the bottom
menu->insert( coll->action("kuick_print") );
menu->insert( sep );
menu->insert( coll->action("properties") );
}
void FileWidget::reloadConfiguration()
{
if ( kdata->fileFilter != nameFilter() ) {
// At first, our list must have folders
QStringList mimes;
mimes.append("inode/directory");
// Then, all the images!
KMimeType::List l = KMimeType::allMimeTypes();
for (KMimeType::List::iterator it = l.begin(); it != l.end(); ++it)
if ((*it)->name().startsWith( "image/" ))
mimes.append( (*it)->name() );
// Ok, show what we've done
setMimeFilter (mimes);
updateDir();
}
}
bool FileWidget::hasFiles() const
{
return (numFiles() > 0);
}
void FileWidget::activatedMenu( const KFileItem *item, const QPoint& pos )
{
bool image = isImage( item );
actionCollection()->action("kuick_showInSameWindow")->setEnabled( image );
actionCollection()->action("kuick_showInOtherWindow")->setEnabled( image );
actionCollection()->action("kuick_showFullscreen")->setEnabled( image );
actionCollection()->action("kuick_print")->setEnabled( image );
actionCollection()->action("properties")->setEnabled( item );
bool hasSelection = (item != 0L);
if ( actionCollection()->action("kuick_delete") )
actionCollection()->action("kuick_delete")->setEnabled( hasSelection );
KDirOperator::activatedMenu( item, pos );
}
void FileWidget::findCompletion( const QString& text )
{
if ( text.at(0) == '/' || text.at(0) == '~' ||
text.find('/') != -1 ) {
QString t = m_fileFinder->completion()->makeCompletion( text );
if (m_fileFinder->completionMode() == KGlobalSettings::CompletionPopup ||
m_fileFinder->completionMode() == KGlobalSettings::CompletionPopupAuto)
m_fileFinder->setCompletedItems(
m_fileFinder->completion()->allMatches() );
else
if ( !t.isNull() )
m_fileFinder->setCompletedText( t );
return;
}
QString file = makeDirCompletion( text );
if ( file.isNull() )
file = makeCompletion( text );
m_validCompletion = !file.isNull();
if ( m_validCompletion )
KDirOperator::setCurrentItem( file );
}
bool FileWidget::eventFilter( QObject *o, QEvent *e )
{
if ( e->type() == QEvent::KeyPress ) {
QKeyEvent *k = static_cast<QKeyEvent*>( e );
if ( (k->state() & (ControlButton | AltButton)) == 0 ) {
int key = k->key();
if ( actionCollection()->action("delete")->shortcut().contains( key ) )
{
k->accept();
KFileItem *item = getCurrentItem( false );
if ( item ) {
KFileItemList list;
list.append( item );
del( list, (k->state() & ShiftButton) == 0 );
}
return true;
}
const QString& text = k->text();
if ( !text.isEmpty() && text.unicode()->isPrint() ) {
k->accept();
if ( !m_fileFinder ) {
m_fileFinder = new FileFinder( this, "file finder" );
connect( m_fileFinder, SIGNAL( completion(const QString&)),
SLOT( findCompletion( const QString& )));
connect( m_fileFinder,
SIGNAL( enterDir( const QString& ) ),
SLOT( slotReturnPressed( const QString& )));
m_fileFinder->move( width() - m_fileFinder->width(),
height() - m_fileFinder->height() );
}
bool first = m_fileFinder->isHidden();
m_fileFinder->setText( text );
m_fileFinder->raise();
m_fileFinder->show();
m_fileFinder->setFocus();
if ( first )
findCompletion( text );
return true;
}
}
k->ignore();
}
return KDirOperator::eventFilter( o, e );
}
// KIO::NetAccess::stat() does NOT give us the right mimetype, while
// KIO::NetAccess::mimetype() does. So we have this hacklet to tell
// showImage that the KFileItem is really an image.
#define IS_IMAGE 5
#define MY_TYPE 55
bool FileWidget::isImage( const KFileItem *item )
{
// return item && !item->isDir();
if ( item )
{
return item->isReadable() && item->mimetype().startsWith( "image/") ||
item->extraData( (void*) MY_TYPE ) == (void*) IS_IMAGE;
}
return false;
}
void FileWidget::setImage( KFileItem& item, bool enable )
{
if ( enable )
item.setExtraData( (void*) MY_TYPE, (void*) IS_IMAGE );
else
item.removeExtraData( (void*) MY_TYPE );
}
KFileItem * FileWidget::gotoFirstImage()
{
KFileItemListIterator it( *(fileView()->items()) );
while ( it.current() ) {
if ( isImage( it.current() ) ) {
setCurrentItem( it.current() );
return it.current();
}
++it;
}
return 0L;
}
KFileItem * FileWidget::gotoLastImage()
{
KFileItemListIterator it( *(fileView()->items()) );
it.toLast();
while ( it.current() ) {
if ( isImage( it.current() ) ) {
setCurrentItem( it.current() );
return it.current();
}
--it;
}
return 0L;
}
KFileItem * FileWidget::getNext( bool go )
{
KFileItem *item = getItem( Next, true );
if ( item ) {
if ( go )
setCurrentItem( item );
return item;
}
return 0L;
}
KFileItem * FileWidget::getPrevious( bool go )
{
KFileItem *item = getItem( Previous, true );
if ( item ) {
if ( go )
setCurrentItem( item );
return item;
}
return 0L;
}
// returns 0L when there is no previous/next item/image
// this sucks! Use KFileView::currentFileItem() when implemented
KFileItem * FileWidget::getItem( WhichItem which, bool onlyImage ) const
{
KFileItemListIterator it( *(fileView()->items()) );
while ( it.current() ) { // find the iterator to the current item
if ( it.current()->url() == m_currentURL )
break;
++it;
}
if ( it.current() ) {
switch ( which ) {
case Previous: {
--it;
while ( it.current() ) {
if ( isImage( it.current() ) || !onlyImage )
return it.current();
--it;
}
return 0L; // no previous item / image
}
case Next: {
++it;
while ( it.current() ) {
if ( isImage( it.current() ) || !onlyImage )
return it.current();
++it;
}
return 0L; // no further item / image
}
case Current:
default:
return it.current();
}
}
return 0L;
}
void FileWidget::slotViewChanged()
{
fileView()->widget()->installEventFilter( this );
}
void FileWidget::slotItemsCleared()
{
m_currentURL = QString::null;
}
void FileWidget::slotItemDeleted( KFileItem *item )
{
KFileItem *current = getCurrentItem( false );
if ( item != current ) {
return; // all ok, we already have a new current item
}
KFileItem *next = getNext();
if ( !next )
next = getPrevious();
if ( next )
m_currentURL = next->url().url();
}
void FileWidget::slotHighlighted( const KFileItem *item )
{
m_currentURL = item->url().url();
}
void FileWidget::slotReturnPressed( const QString& t )
{
// we need a / at the end, otherwise replacedPath() will cut off the dir,
// assuming it is a filename
QString text = t;
if ( text.at( text.length()-1 ) != '/' )
text += '/';
if ( text.at(0) == '/' || text.at(0) == '~' ) {
QString dir = m_fileFinder->completion()->replacedPath( text );
KURL url;
url.setPath( dir );
setURL( url, true );
}
else if ( text.find('/') != (int) text.length() -1 ) { // relative path
QString dir = m_fileFinder->completion()->replacedPath( text );
KURL u( url(), dir );
setURL( u, true );
}
else if ( m_validCompletion ) {
KFileItem *item = getCurrentItem( true );
if ( item ) {
if ( item->isDir() )
setURL( item->url(), true );
else
emit fileSelected( item );
}
}
}
void FileWidget::setCurrentItem( const KFileItem *item )
{
if ( item ) {
fileView()->setCurrentItem( item );
fileView()->ensureItemVisible( item );
}
}
void FileWidget::setInitialItem( const QString& filename )
{
m_initialName = filename;
}
void FileWidget::slotURLEntered( const KURL& url )
{
if ( m_fileFinder )
m_fileFinder->completion()->setDir( url.path() );
}
void FileWidget::slotFinishedLoading()
{
KFileItem *current = getCurrentItem( false );
if ( !m_initialName.isEmpty() )
setCurrentItem( m_initialName );
else if ( !current )
setCurrentItem( view()->items()->getFirst() );
m_initialName = QString::null;
emit finished();
}
QSize FileWidget::sizeHint() const
{
return QSize( 300, 300 );
}
void FileWidget::resizeEvent( QResizeEvent *e )
{
KDirOperator::resizeEvent( e );
if ( m_fileFinder )
m_fileFinder->move( width() - m_fileFinder->width(),
height() - m_fileFinder->height() );
}
#include "filewidget.moc"

@ -0,0 +1,98 @@
/* This file is part of the KDE project
Copyright (C) 1998-2003 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef FILEWIDGET_H
#define FILEWIDGET_H
#include <qevent.h>
#include <kdiroperator.h>
class FileFinder;
class KFileItem;
class FileWidget : public KDirOperator
{
Q_OBJECT
public:
enum WhichItem { Previous, Next, Current };
FileWidget( const KURL& url, QWidget *parent = 0L, const char *name = 0L );
~FileWidget();
bool hasFiles() const;
void reloadConfiguration();
void setInitialItem( const QString& filename );
KFileItem *getCurrentItem( bool onlyImage ) const {
return getItem( Current, onlyImage );
}
void setCurrentItem( const KFileItem * );
void setCurrentItem( const QString& filename ) {
KDirOperator::setCurrentItem( filename );
}
KFileItem * gotoFirstImage();
KFileItem * gotoLastImage();
KFileItem * getNext( bool go=true );
KFileItem * getPrevious( bool go=true );
KFileItem *getItem( WhichItem which, bool onlyImage ) const;
static bool isImage( const KFileItem * );
static void setImage( KFileItem& item, bool enable );
void initActions();
signals:
void finished();
protected:
virtual bool eventFilter( QObject *o, QEvent * );
virtual void resizeEvent( QResizeEvent * );
virtual void activatedMenu( const KFileItem *, const QPoint& );
virtual QSize sizeHint() const;
private slots:
void slotReturnPressed( const QString& text );
void findCompletion( const QString& );
void slotViewChanged();
void slotItemsCleared();
void slotItemDeleted( KFileItem * );
void slotHighlighted( const KFileItem * );
void slotURLEntered( const KURL& url );
void slotFinishedLoading();
private:
KFileView * fileView() const { return (KFileView*) view(); }
bool m_validCompletion;
FileFinder *m_fileFinder;
QString m_currentURL;
QString m_initialName;
};
#endif // FILEWIDGET_H

@ -0,0 +1,163 @@
/* This file is part of the KDE project
Copyright (C) 1998-2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <qcheckbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qvgroupbox.h>
#include <kapplication.h>
#include <kcolorbutton.h>
#include <kdialog.h>
#include <kiconloader.h>
#include <klineedit.h>
#include <klocale.h>
#include <knuminput.h>
#include <kurllabel.h>
#include "generalwidget.h"
GeneralWidget::GeneralWidget( QWidget *parent, const char *name )
: QWidget( parent, name )
{
QVBoxLayout *layout = new QVBoxLayout( this );
layout->setSpacing( KDialog::spacingHint() );
QPixmap pixmap = UserIcon( "logo" );
KURLLabel *logo = new KURLLabel( this );
logo->setURL( "http://devel-home.kde.org/~pfeiffer/kuickshow/" );
logo->setPixmap( pixmap );
logo->setFixedSize( pixmap.size() );
logo->setTipText( i18n( "Open KuickShow Website" ) );
logo->setUseTips( true );
connect( logo, SIGNAL( leftClickedURL( const QString & ) ),
SLOT( slotURLClicked( const QString & ) ) );
layout->addWidget( logo, 0, AlignRight );
cbFullscreen = new QCheckBox( i18n("Fullscreen mode"), this, "boscreen" );
cbPreload = new QCheckBox( i18n("Preload next image"), this, "preload");
cbLastdir = new QCheckBox( i18n("Remember last folder"), this, "restart_lastdir");
QGridLayout *gridLayout = new QGridLayout( 2, 2 );
gridLayout->setSpacing( KDialog::spacingHint() );
QLabel *l0 = new QLabel( i18n("Background color:"), this );
colorButton = new KColorButton( this );
QLabel *l1 = new QLabel( i18n("Show only files with extension: "), this, "label" );
editFilter = new KLineEdit( this, "filteredit" );
gridLayout->addWidget( l0, 0, 0 );
gridLayout->addWidget( colorButton, 0, 1 );
gridLayout->addWidget( l1, 1, 0 );
gridLayout->addWidget( editFilter, 1, 1 );
layout->addWidget( cbFullscreen );
layout->addWidget( cbPreload );
layout->addWidget( cbLastdir );
layout->addLayout( gridLayout );
////////////////////////////////////////////////////////////////////////
QVGroupBox *gbox2 = new QVGroupBox( i18n("Quality/Speed"),
this, "qualitybox" );
layout->addWidget( gbox2 );
layout->addStretch();
cbSmoothScale = new QCheckBox( i18n("Smooth scaling"), gbox2, "smoothscale" );
cbFastRender = new QCheckBox( i18n("Fast rendering"), gbox2, "fastrender" );
cbDither16bit = new QCheckBox( i18n("Dither in HiColor (15/16bit) modes"),
gbox2, "dither16bit" );
cbDither8bit = new QCheckBox( i18n("Dither in LowColor (<=8bit) modes"),
gbox2, "dither8bit" );
cbOwnPalette = new QCheckBox( i18n("Use own color palette"),
gbox2, "pal");
connect( cbOwnPalette, SIGNAL( clicked() ), this, SLOT( useOwnPalette() ) );
cbFastRemap = new QCheckBox( i18n("Fast palette remapping"), gbox2, "remap");
maxCacheSpinBox = new KIntNumInput( gbox2, "editmaxcache" );
maxCacheSpinBox->setLabel( i18n("Maximum cache size: "), AlignVCenter );
maxCacheSpinBox->setSuffix( i18n( " MB" ) );
maxCacheSpinBox->setSpecialValueText( i18n( "Unlimited" ) );
maxCacheSpinBox->setRange( 0, 400, 1 );
loadSettings( *kdata );
cbFullscreen->setFocus();
}
GeneralWidget::~GeneralWidget()
{
}
void GeneralWidget::slotURLClicked( const QString & url )
{
kapp->invokeBrowser( url );
}
void GeneralWidget::loadSettings( const KuickData& data )
{
ImData *idata = data.idata;
colorButton->setColor( data.backgroundColor );
editFilter->setText( data.fileFilter );
cbFullscreen->setChecked( data.fullScreen );
cbPreload->setChecked( data.preloadImage );
cbLastdir->setChecked( data.startInLastDir );
cbFastRemap->setChecked( idata->fastRemap );
cbOwnPalette->setChecked( idata->ownPalette );
cbSmoothScale->setChecked( idata->smoothScale );
cbFastRender->setChecked( idata->fastRender );
cbDither16bit->setChecked( idata->dither16bit );
cbDither8bit->setChecked( idata->dither8bit );
maxCacheSpinBox->setValue( idata->maxCache / 1024 );
useOwnPalette(); // enable/disable remap-checkbox
}
void GeneralWidget::applySettings( KuickData& data)
{
ImData *idata = data.idata;
data.backgroundColor = colorButton->color();
data.fileFilter = editFilter->text();
data.fullScreen = cbFullscreen->isChecked();
data.preloadImage = cbPreload->isChecked();
data.startInLastDir = cbLastdir->isChecked();
idata->smoothScale = cbSmoothScale->isChecked();
idata->fastRemap = cbFastRemap->isChecked();
idata->ownPalette = cbOwnPalette->isChecked();
idata->fastRender = cbFastRender->isChecked();
idata->dither16bit = cbDither16bit->isChecked();
idata->dither8bit = cbDither8bit->isChecked();
idata->maxCache = (uint) maxCacheSpinBox->value() * 1024;
}
void GeneralWidget::useOwnPalette()
{
cbFastRemap->setEnabled( cbOwnPalette->isChecked() );
}
#include "generalwidget.moc"

@ -0,0 +1,62 @@
/* This file is part of the KDE project
Copyright (C) 1998-2003 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef GENERALWIDGET_H
#define GENERALWIDGET_H
#include <qwidget.h>
#include "kuickdata.h"
class QCheckBox;
class KColorButton;
class KLineEdit;
class KIntNumInput;
class GeneralWidget : public QWidget
{
Q_OBJECT
public:
GeneralWidget( QWidget *parent, const char *name );
~GeneralWidget();
void loadSettings( const KuickData& data );
void applySettings( KuickData& data );
private:
QCheckBox *cbFullscreen, *cbActiveWindow, *cbPreload, *cbLastdir;
QCheckBox *cbSmoothScale, *cbFastRemap, *cbFastRender;
QCheckBox *cbDither16bit, *cbDither8bit, *cbOwnPalette;
KLineEdit *editFilter;
KIntNumInput *maxCacheSpinBox;
KIntNumInput *sbMaxWidth, *sbMaxHeight;
KIntNumInput *sbZoomFactor;
KColorButton *colorButton;
private slots:
void useOwnPalette();
void slotURLClicked( const QString & );
};
#endif

File diff suppressed because it is too large Load Diff

@ -0,0 +1,176 @@
/* This file is part of the KDE project
Copyright (C) 1998-2003 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef IMAGEWINDOW_H
#define IMAGEWINDOW_H
#include <qevent.h>
#include <kaction.h>
#include <kurl.h>
#include "imlibwidget.h"
class QCursor;
class QPopupMenu;
class QRect;
class QString;
class QTimer;
class QWidget;
class KuickFile;
class ImageWindow : public ImlibWidget
{
Q_OBJECT
public:
ImageWindow( ImData *_idata, ImlibData *id, QWidget *parent=0,
const char *name=0 );
ImageWindow( ImData *_idata=0, QWidget *parent=0, const char *name=0 );
bool showNextImage( KuickFile * file );
bool showNextImage( const KURL& url );
void scrollImage( int, int, bool restrict=true );
void setFullscreen( bool );
bool isFullscreen() const { return myIsFullscreen; }
void addBrightness( int );
void addContrast( int );
void addGamma( int );
void updateActions();
KActionCollection * actionCollection() const { return m_actions; }
/**
* Resizes image to @p w, @p h, but takes into account the workarea, so
* it won't ever get a bigger size than the workarea.
*/
void resizeOptimal( int w, int h );
void autoScale( KuickImage *kuim );
virtual bool autoRotate( KuickImage *kuim );
bool saveImage( const KURL& dest, bool keepOriginalSize );
public slots:
void zoomIn();
void zoomOut();
void moreBrightness();
void lessBrightness();
void moreContrast();
void lessContrast();
void moreGamma();
void lessGamma();
void scrollUp();
void scrollDown();
void scrollLeft();
void scrollRight();
void printImage();
void toggleFullscreen();
void maximize();
void imageDelete();
void imageTrash();
signals:
void sigFocusWindow( ImageWindow * );
// go advance images back/forth
void requestImage( ImageWindow *, int advance );
void deleteImage(ImageWindow *viewer);
void trashImage(ImageWindow *viewer);
protected:
~ImageWindow(); // deletes itself, just call close( true );
void init();
void centerImage();
void addAlternativeShortcut( KAction *action, int key );
virtual void updateGeometry( int imWidth, int imHeight );
virtual void loaded( KuickImage * );
virtual bool canZoomTo( int newWidth, int newHeight );
virtual void rotated( KuickImage *kuim, int rotation );
virtual void wheelEvent( QWheelEvent * );
virtual void keyPressEvent( QKeyEvent * );
virtual void keyReleaseEvent( QKeyEvent * );
virtual void mousePressEvent( QMouseEvent * );
virtual void mouseReleaseEvent( QMouseEvent * );
virtual void mouseMoveEvent( QMouseEvent * );
virtual void focusInEvent( QFocusEvent * );
virtual void resizeEvent( QResizeEvent * );
virtual void dragEnterEvent( QDragEnterEvent * );
virtual void dropEvent( QDropEvent * );
virtual void contextMenuEvent( QContextMenuEvent * );
void showWindow();
enum KuickCursor { DefaultCursor = 0, ZoomCursor, MoveCursor };
void updateCursor( KuickCursor cursor = DefaultCursor );
// popupmenu entries
uint itemViewerZoomMax, itemViewerZoomOrig, itemViewerZoomIn;
uint itemViewerZoomOut, itemViewerFlipH, itemViewerProps;
uint itemRotate90, itemRotate180, itemRotate270;
uint itemViewerFlipV, itemViewerPrint;
uint itemViewerSave, itemViewerClose;
uint itemBrightnessPlus, itemBrightnessMinus;
uint itemContrastPlus, itemContrastMinus;
uint itemGammaPlus, itemGammaMinus;
uint xmove, ymove; // used for scrolling the image with the mouse
int xpos, ypos; // top left corner of the image
int xzoom, yzoom; // used for zooming the image with the mouse
uint xposPress, yposPress;
QPopupMenu *viewerMenu, *gammaMenu, *brightnessMenu, *contrastMenu;
QWidget *transWidget;
protected slots:
void saveImage();
void slotRequestNext() { emit requestImage( this, +1 ); }
void slotRequestPrevious() { emit requestImage( this, -1 ); }
void reload();
void slotProperties();
void pauseSlideShow();
virtual void setBusyCursor();
virtual void restoreCursor();
signals:
void pauseSlideShowSignal();
private:
int desktopWidth( bool totalScreen = false ) const;
int desktopHeight( bool totalScreen = false ) const;
QSize maxImageSize() const;
void setupActions();
void setPopupMenu();
bool isCursorHidden() const;
bool myIsFullscreen;
int m_numHeads;
QString m_saveDirectory;
KActionCollection *m_actions;
static QCursor * s_handCursor;
};
#endif // IMAGEWINDOW_H

@ -0,0 +1,92 @@
/* This file is part of the KDE project
Copyright (C) 1998-2001 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <stdlib.h>
#include <kconfig.h>
#include "imdata.h"
ImData::ImData()
{
ownPalette = true;
fastRemap = true;
fastRender = true;
dither16bit = false;
dither8bit = true;
smoothScale = false;
maxCache = 10240;
gamma = 0;
brightness = 0;
contrast = 0;
gammaFactor = 10;
brightnessFactor = 10;
contrastFactor = 10;
}
void ImData::load( KConfig *kc )
{
ImData def;
kc->setGroup( "ImlibConfiguration" );
ownPalette = kc->readBoolEntry( "UseOwnPalette", def.ownPalette );
fastRemap = kc->readBoolEntry( "FastRemapping", def.fastRemap );
fastRender = kc->readBoolEntry( "FastRendering", def.fastRender );
dither16bit = kc->readBoolEntry( "Dither16Bit", def.dither16bit );
dither8bit = kc->readBoolEntry( "Dither8Bit", def.dither8bit );
smoothScale = kc->readBoolEntry( "SmoothScaling", def.smoothScale );
maxCache = kc->readNumEntry( "MaxCacheSize", 10240 );
gamma = kc->readNumEntry( "GammaDefault", 0 );
brightness = kc->readNumEntry( "BrightnessDefault", 0 );
contrast = kc->readNumEntry( "ContrastDefault", 0 );
gammaFactor = abs( kc->readNumEntry( "GammaFactor", 10 ) );
brightnessFactor = abs( kc->readNumEntry( "BrightnessFactor", 10 ) );
contrastFactor = abs( kc->readNumEntry( "ContrastFactor", 10 ) );
}
void ImData::save( KConfig *kc )
{
kc->setGroup( "ImlibConfiguration" );
kc->writeEntry( "UseOwnPalette", ownPalette );
kc->writeEntry( "FastRemapping", fastRemap );
kc->writeEntry( "FastRendering", fastRender );
kc->writeEntry( "Dither16Bit", dither16bit );
kc->writeEntry( "Dither8Bit", dither8bit );
kc->writeEntry( "MaxCacheSize", maxCache );
kc->writeEntry( "SmoothScaling", smoothScale );
kc->writeEntry( "GammaDefault", gamma );
kc->writeEntry( "BrightnessDefault", brightness );
kc->writeEntry( "ContrastDefault", contrast );
kc->writeEntry( "GammaFactor", gammaFactor );
kc->writeEntry( "BrightnessFactor", brightnessFactor );
kc->writeEntry( "ContrastFactor", contrastFactor );
kc->sync();
}

@ -0,0 +1,57 @@
/* This file is part of the KDE project
Copyright (C) 1998,1999,2000,2001 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef IMBLIBCONFIG_H
#define IMBLIBCONFIG_H
class KConfig;
class ImData
{
public:
ImData();
~ImData() {};
void load( KConfig *kc );
void save( KConfig *kc );
// new stuff..........
int gamma;
int brightness;
int contrast;
// -----------------------
bool ownPalette :1;
bool fastRemap :1;
bool fastRender :1;
bool dither16bit :1;
bool dither8bit :1;
bool smoothScale :1;
uint gammaFactor;
uint brightnessFactor;
uint contrastFactor;
uint maxCache;
};
#endif

@ -0,0 +1,715 @@
/* This file is part of the KDE project
Copyright (C) 1998-2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "kuickdata.h"
#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>
#include <assert.h>
#include <qcolor.h>
#include <qfile.h>
#include <qglobal.h>
#include <qimage.h>
#include <qobject.h>
#include <qpalette.h>
#include <kcursor.h>
#include <kdebug.h>
#include <kfilemetainfo.h>
#include <kimageio.h>
#include "filecache.h"
#include "kuickfile.h"
#include "kuickimage.h"
#include "imlibwidget.h"
const int ImlibWidget::ImlibOffset = 256;
ImlibWidget::ImlibWidget( ImData *_idata, QWidget *parent, const char *name ) :
QWidget( parent, name, WDestructiveClose )
{
idata = _idata;
deleteImData = false;
deleteImlibData = true;
if ( !idata ) { // if no imlib configuration was given, create one ourself
idata = new ImData;
deleteImData = true;
}
ImlibInitParams par;
// PARAMS_PALETTEOVERRIDE taken out because of segfault in imlib :o(
par.flags = ( PARAMS_REMAP | PARAMS_VISUALID |
PARAMS_FASTRENDER | PARAMS_HIQUALITY | PARAMS_DITHER |
PARAMS_IMAGECACHESIZE | PARAMS_PIXMAPCACHESIZE );
Visual* defaultvis = DefaultVisual(x11Display(), x11Screen());
par.paletteoverride = idata->ownPalette ? 1 : 0;
par.remap = idata->fastRemap ? 1 : 0;
par.fastrender = idata->fastRender ? 1 : 0;
par.hiquality = idata->dither16bit ? 1 : 0;
par.dither = idata->dither8bit ? 1 : 0;
par.visualid = defaultvis->visualid;
uint maxcache = idata->maxCache;
// 0 == no cache
par.imagecachesize = maxcache * 1024;
par.pixmapcachesize = maxcache * 1024;
id = Imlib_init_with_params( x11Display(), &par );
init();
}
ImlibWidget::ImlibWidget( ImData *_idata, ImlibData *_id, QWidget *parent,
const char *name )
: QWidget( parent, name, WDestructiveClose )
{
id = _id;
idata = _idata;
deleteImData = false;
deleteImlibData = false;
if ( !idata ) {
idata = new ImData;
deleteImData = true;
}
init();
}
void ImlibWidget::init()
{
int w = 1; // > 0 for XCreateWindow
int h = 1;
myBackgroundColor = Qt::black;
m_kuim = 0L;
m_kuickFile = 0L;
if ( !id )
qFatal("ImlibWidget: Imlib not initialized, aborting.");
setAutoRender( true );
setPalette( QPalette( myBackgroundColor ));
setBackgroundMode( PaletteBackground );
imageCache = new ImageCache( id, 4 ); // cache 4 images (FIXME?)
connect( imageCache, SIGNAL( sigBusy() ), SLOT( setBusyCursor() ));
connect( imageCache, SIGNAL( sigIdle() ), SLOT( restoreCursor() ));
win = XCreateSimpleWindow(x11Display(), winId(), 0,0,w,h,0,0,0);
}
ImlibWidget::~ImlibWidget()
{
delete imageCache;
if ( deleteImlibData && id ) free ( id );
if ( win ) XDestroyWindow( x11Display(), win );
if ( deleteImData ) delete idata;
}
KURL ImlibWidget::url() const
{
if ( m_kuickFile )
return m_kuickFile->url();
return KURL();
}
KuickFile * ImlibWidget::currentFile() const
{
return m_kuickFile;
}
// tries to load "file" and returns the according KuickImage *
// or 0L if unsuccessful
// Note that the given file MUST already be downloaded prior to calling this function
KuickImage * ImlibWidget::loadImageInternal( KuickFile * file )
{
assert( file->isAvailable() );
// apply default image modifications
mod.brightness = idata->brightness + ImlibOffset;
mod.contrast = idata->contrast + ImlibOffset;
mod.gamma = idata->gamma + ImlibOffset;
KuickImage *kuim = imageCache->getKuimage( file, mod );
if ( !kuim ) {// couldn't load file, maybe corrupt or wrong format
kdWarning() << "ImlibWidget: can't load image " << file->url().prettyURL() << endl;
return 0L;
}
loaded( kuim ); // maybe upscale/downscale/rotate in subclasses
return kuim;
}
// overridden in subclass
void ImlibWidget::loaded( KuickImage * )
{
}
bool ImlibWidget::loadImage( const KURL& url )
{
return loadImage( FileCache::self()->getFile( url ));
}
bool ImlibWidget::loadImage( KuickFile * file )
{
if ( file->waitForDownload( this ) != KuickFile::OK)
return false;
KuickImage *kuim = loadImageInternal( file );
// FIXME - check everywhere if we have a kuim or not!
if ( kuim ) {
m_kuim = kuim;
autoUpdate( true ); // -> updateWidget() -> updateGeometry()
m_kuickFile = file;
return true;
}
return false;
}
bool ImlibWidget::cacheImage( const KURL& url )
{
// qDebug("cache image: %s", url.url().latin1());
KuickFile *file = FileCache::self()->getFile( url );
if ( file->isAvailable() )
return cacheImage( file );
else {
if ( !file->download() ) {
return false;
}
connect( file, SIGNAL( downloaded( KuickFile * )), SLOT( cacheImage( KuickFile * )) );
return true; // optimistic
}
}
bool ImlibWidget::cacheImage( KuickFile * file )
{
// qDebug("cache image: %s", file->url().url().latin1());
KuickImage *kuim = loadImageInternal( file );
if ( kuim ) {
kuim->renderPixmap();
return true;
}
return false;
}
void ImlibWidget::showImage()
{
XMapWindow( x11Display(), win );
XSync( x11Display(), False );
}
// -256..256
void ImlibWidget::setBrightness( int factor )
{
mod.brightness = factor + ImlibOffset;
setImageModifier();
autoUpdate();
}
// -256..256
void ImlibWidget::setContrast( int factor )
{
mod.contrast = factor + ImlibOffset;
setImageModifier();
autoUpdate();
}
// -256..256
void ImlibWidget::setGamma( int factor )
{
mod.gamma = factor + ImlibOffset;
setImageModifier();
autoUpdate();
}
Rotation ImlibWidget::rotation() const
{
return m_kuim ? m_kuim->absRotation() : ROT_0;
}
FlipMode ImlibWidget::flipMode() const
{
return m_kuim ? m_kuim->flipMode() : FlipNone;
}
void ImlibWidget::zoomImage( float factor )
{
if ( factor == 1 || factor == 0 || !m_kuim )
return;
int newWidth = (int) (factor * (float) m_kuim->width());
int newHeight = (int) (factor * (float) m_kuim->height());
if ( canZoomTo( newWidth, newHeight ) )
{
m_kuim->resize( newWidth, newHeight, idata->smoothScale ? KuickImage::SMOOTH : KuickImage::FAST );
autoUpdate( true );
}
}
bool ImlibWidget::canZoomTo( int newWidth, int newHeight )
{
if ( newWidth <= 2 || newHeight <= 2 ) // minimum size for an image is 2x2 pixels
return false;
return true;
}
void ImlibWidget::showImageOriginalSize()
{
if ( !m_kuim )
return;
m_kuim->restoreOriginalSize();
autoUpdate( true );
showImage();
}
bool ImlibWidget::autoRotate( KuickImage *kuim )
{
KFileMetaInfo metadatas( kuim->file().localFile() );
if ( !metadatas.isValid() )
return false;
KFileMetaInfoItem metaitem = metadatas.item("Orientation");
if ( !metaitem.isValid()
#if QT_VERSION >= 0x030100
|| metaitem.value().isNull()
#endif
)
return false;
switch ( metaitem.value().toInt() )
{
// Orientation:
// 1: normal
// 2: flipped horizontally
// 3: ROT 180
// 4: flipped vertically
// 5: ROT 90 -> flip horizontally
// 6: ROT 90
// 7: ROT 90 -> flip vertically
// 8: ROT 270
case 1:
default:
kuim->rotateAbs( ROT_0 );
break;
case 2:
kuim->flipAbs( FlipHorizontal );
break;
case 3:
kuim->rotateAbs( ROT_180 );
break;
case 4:
kuim->flipAbs( FlipVertical );
break;
case 5:
kuim->rotateAbs( ROT_90 );
kuim->flipAbs( FlipHorizontal );
break;
case 6:
kuim->rotateAbs( ROT_90 );
break;
case 7:
kuim->rotateAbs( ROT_90 );
kuim->flipAbs( FlipVertical );
break;
case 8:
kuim->rotateAbs( ROT_270 );
break;
}
return true;
}
void ImlibWidget::setRotation( Rotation rot )
{
if ( m_kuim )
{
if ( m_kuim->rotateAbs( rot ) )
autoUpdate( true );
}
}
// slots connected to Accels and popupmenu
void ImlibWidget::rotate90()
{
if ( !m_kuim )
return;
m_kuim->rotate( ROT_90 );
rotated( m_kuim, ROT_90 );
autoUpdate( true );
}
void ImlibWidget::rotate180()
{
if ( !m_kuim )
return;
m_kuim->rotate( ROT_180 );
rotated( m_kuim, ROT_180 );
autoUpdate();
}
void ImlibWidget::rotate270()
{
if ( !m_kuim )
return;
m_kuim->rotate( ROT_270 );
rotated( m_kuim, ROT_270 );
autoUpdate( true );
}
// should this go into a subclass?
void ImlibWidget::flipHoriz()
{
if ( !m_kuim )
return;
m_kuim->flip( FlipHorizontal );
autoUpdate();
}
void ImlibWidget::flipVert()
{
if ( !m_kuim )
return;
m_kuim->flip( FlipVertical );
autoUpdate();
}
// end slots
void ImlibWidget::setFlipMode( int mode )
{
if ( !m_kuim )
return;
if ( m_kuim->flipAbs( mode ) )
autoUpdate();
}
void ImlibWidget::updateWidget( bool geometryUpdate )
{
if ( !m_kuim )
return;
// if ( geometryUpdate )
// XUnmapWindow( x11Display(), win );// remove the old image -> no flicker
XSetWindowBackgroundPixmap( x11Display(), win, m_kuim->pixmap() );
if ( geometryUpdate )
updateGeometry( m_kuim->width(), m_kuim->height() );
XClearWindow( x11Display(), win );
showImage();
}
// here we just use the size of m_kuim, may be overridden in subclass
void ImlibWidget::updateGeometry( int w, int h )
{
XMoveWindow( x11Display(), win, 0, 0 ); // center?
XResizeWindow( x11Display(), win, w, h );
resize( w, h );
}
void ImlibWidget::closeEvent( QCloseEvent *e )
{
e->accept();
QWidget::closeEvent( e );
}
void ImlibWidget::setBackgroundColor( const QColor& color )
{
myBackgroundColor = color;
setPalette( QPalette( myBackgroundColor ));
repaint( false); // FIXME - false? necessary at all?
}
const QColor& ImlibWidget::backgroundColor() const
{
return myBackgroundColor;
}
void ImlibWidget::setImageModifier()
{
if ( !m_kuim )
return;
Imlib_set_image_modifier( id, m_kuim->imlibImage(), &mod );
m_kuim->setDirty( true );
}
int ImlibWidget::imageWidth() const
{
return m_kuim ? m_kuim->width() : 0;
}
int ImlibWidget::imageHeight() const
{
return m_kuim ? m_kuim->height() : 0;
}
void ImlibWidget::setBusyCursor()
{
if ( ownCursor() )
m_oldCursor = cursor();
else
m_oldCursor = QCursor();
setCursor( KCursor::waitCursor() );
}
void ImlibWidget::restoreCursor()
{
if ( cursor().shape() == KCursor::waitCursor().shape() ) // only if nobody changed the cursor in the meantime!
setCursor( m_oldCursor );
}
// Reparenting a widget in Qt in fact means destroying the old X window of the widget
// and creating a new one. And since the X window used for the Imlib image is a child
// of this widget's X window, destroying this widget's X window would mean also
// destroying the Imlib image X window. Therefore it needs to be temporarily reparented
// away and reparented back to the new X window.
// Reparenting may happen e.g. when doing the old-style (non-NETWM) fullscreen changes.
void ImlibWidget::reparent( QWidget* parent, WFlags f, const QPoint& p, bool showIt )
{
XWindowAttributes attr;
XGetWindowAttributes( x11Display(), win, &attr );
XUnmapWindow( x11Display(), win );
XReparentWindow( x11Display(), win, attr.root, 0, 0 );
QWidget::reparent( parent, f, p, showIt );
XReparentWindow( x11Display(), win, winId(), attr.x, attr.y );
if( attr.map_state != IsUnmapped )
XMapWindow( x11Display(), win );
}
void ImlibWidget::rotated( KuickImage *, int )
{
}
//----------
// uhh ugly, we have two lists to map from filename to KuickImage :-/
ImageCache::ImageCache( ImlibData *id, int maxImages )
{
myId = id;
idleCount = 0;
myMaxImages = maxImages;
kuickList.setAutoDelete( true );
fileList.clear();
kuickList.clear();
}
ImageCache::~ImageCache()
{
kuickList.clear();
fileList.clear();
}
void ImageCache::setMaxImages( int maxImages )
{
myMaxImages = maxImages;
int count = kuickList.count();
while ( count > myMaxImages ) {
kuickList.removeLast();
fileList.remove( fileList.fromLast() );
count--;
}
}
void ImageCache::slotBusy()
{
if ( idleCount == 0 )
emit sigBusy();
idleCount++;
}
void ImageCache::slotIdle()
{
idleCount--;
if ( idleCount == 0 )
emit sigIdle();
}
KuickImage * ImageCache::getKuimage( KuickFile * file,
ImlibColorModifier mod )
{
if ( !file )
return 0L;
assert( file->isAvailable() ); // debug build
if ( file->waitForDownload( 0L ) != KuickFile::OK ) // and for users
return 0L;
KuickImage *kuim = 0L;
int index = fileList.findIndex( file );
if ( index != -1 ) {
if ( index == 0 )
kuim = kuickList.at( 0 );
// need to reorder the lists, otherwise we might delete the current
// image when a new one is cached and the current one is the last!
else {
kuim = kuickList.take( index );
kuickList.insert( 0, kuim );
fileList.remove( file );
fileList.prepend( file );
}
return kuim;
}
if ( !kuim ) {
slotBusy();
// #ifndef NDEBUG
// struct timeval tms1, tms2;
// gettimeofday( &tms1, NULL );
// #endif
ImlibImage *im = Imlib_load_image( myId,
QFile::encodeName( file->localFile() ).data() );
// #ifndef NDEBUG
// gettimeofday( &tms2, NULL );
// qDebug("*** LOADING image: %s, took %ld ms", file.latin1(),
// (tms2.tv_usec - tms1.tv_usec)/1000);
// #endif
slotIdle();
if ( !im ) {
slotBusy();
im = loadImageWithQt( file->localFile() );
slotIdle();
if ( !im )
return 0L;
}
Imlib_set_image_modifier( myId, im, &mod );
kuim = new KuickImage( file, im, myId );
connect( kuim, SIGNAL( startRendering() ), SLOT( slotBusy() ));
connect( kuim, SIGNAL( stoppedRendering() ), SLOT( slotIdle() ));
kuickList.insert( 0, kuim );
fileList.prepend( file );
}
if ( kuickList.count() > (uint) myMaxImages ) {
// qDebug(":::: now removing from cache: %s", (*fileList.fromLast()).latin1());
kuickList.removeLast();
fileList.remove( fileList.fromLast() );
}
return kuim;
}
// Note: the returned image's filename will not be the real filename (which it usually
// isn't anyway, according to Imlib's sources).
ImlibImage * ImageCache::loadImageWithQt( const QString& fileName ) const
{
kdDebug() << "Trying to load " << fileName << " with KImageIO..." << endl;
KImageIO::registerFormats();
QImage image( fileName );
if ( image.isNull() )
return 0L;
if ( image.depth() != 32 ) {
image.setAlphaBuffer(false);
image = image.convertDepth(32);
if ( image.isNull() )
return 0L;
}
// convert to 24 bpp (discard alpha)
int numPixels = image.width() * image.height();
const int NUM_BYTES_NEW = 3; // 24 bpp
uchar *newImageData = new uchar[numPixels * NUM_BYTES_NEW];
uchar *newData = newImageData;
int w = image.width();
int h = image.height();
for (int y = 0; y < h; y++) {
QRgb *scanLine = reinterpret_cast<QRgb *>( image.scanLine(y) );
for (int x = 0; x < w; x++) {
const QRgb& pixel = scanLine[x];
*(newData++) = qRed(pixel);
*(newData++) = qGreen(pixel);
*(newData++) = qBlue(pixel);
}
}
ImlibImage *im = Imlib_create_image_from_data( myId, newImageData, NULL,
image.width(), image.height() );
delete[] newImageData;
return im;
}
#include "imlibwidget.moc"

@ -0,0 +1,187 @@
/****************************************************************************
** $Id: imlibwidget.h 524709 2006-03-31 00:03:44Z pfeiffer $
**
** ImlibWidget: maps an Xlib window with Imlib's contents on a QWidget
**
** Created : 98
**
** Copyright (C) 1998-2001 by Carsten Pfeiffer. All rights reserved.
**
****************************************************************************/
#ifndef IMLIBWIDGET_H
#define IMLIBWIDGET_H
#include <qvariant.h>
#include <qcursor.h>
#include <qevent.h>
#include <qptrlist.h>
#include <qtimer.h>
#include <qwidget.h>
#include <kurl.h>
// #include those AFTER Qt-includes!
#include <Imlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
// #include <X11/extensions/shape.h>
#include "imdata.h"
#include "kuickdata.h"
class KuickFile;
class KuickImage;
class ImageCache : public QObject
{
Q_OBJECT
public:
ImageCache( ImlibData *id, int maxImages=1 );
~ImageCache();
void setMaxImages( int maxImages );
int maxImages() const { return myMaxImages; }
KuickImage * getKuimage( KuickFile * file, ImlibColorModifier );
private:
ImlibImage * loadImageWithQt( const QString& filename ) const;
int myMaxImages;
QValueList<KuickFile*>fileList;
QPtrList<KuickImage> kuickList;
// QPtrList<ImlibImage> imList;
ImlibData * myId;
int idleCount;
private slots:
void slotBusy();
void slotIdle();
signals:
void sigBusy();
void sigIdle();
};
// ------------------------------------------
class QColor;
class ImlibWidget : public QWidget
{
Q_OBJECT
public:
ImlibWidget( ImData *_idata=0, QWidget *parent=0, const char *name=0 );
ImlibWidget( ImData *_idata, ImlibData *id, QWidget *parent=0,
const char *name=0 );
virtual ~ImlibWidget();
KURL url() const;
KuickFile * currentFile() const;
bool loadImage( KuickFile * file );
bool loadImage( const KURL& url );
bool cacheImage(const KURL& url );
void zoomImage( float );
void setBrightness( int );
void setContrast( int );
void setGamma( int );
void setRotation( Rotation );
void setFlipMode( int mode );
int brightness() const; // ### no impl!
int contrast() const; // ### no impl!
int gamma() const; // ### no impl!
Rotation rotation() const;
FlipMode flipMode() const;
int imageWidth() const;
int imageHeight() const;
void setAutoRender( bool enable ) { isAutoRendering = enable;}
bool isAutoRenderEnabled() const { return isAutoRendering; }
void setMaxImageCache( int );
int maxImageCache() const { return myMaxImageCache; }
const QColor& backgroundColor() const;
void setBackgroundColor( const QColor& );
/**
* @return true if auto-rotation is not possible, e.g. because no metadata
* about orientation is available
*/
virtual bool autoRotate( KuickImage *kuim );
ImlibData* getImlibData() const { return id; }
virtual void reparent( QWidget* parent, WFlags f, const QPoint& p, bool showIt = FALSE );
public slots:
void rotate90();
void rotate270();
void rotate180();
void flipHoriz();
void flipVert();
void showImageOriginalSize();
inline void updateImage() { updateWidget( true ); }
protected:
KuickImage * loadImageInternal( KuickFile * file );
void showImage();
void setImageModifier();
void rotate( int );
void updateWidget( bool geometryUpdate=true );
virtual void updateGeometry( int width, int height );
virtual void loaded( KuickImage * );
virtual bool canZoomTo( int newWidth, int newHeight );
virtual void rotated( KuickImage *kuim, int rotation );
void closeEvent( QCloseEvent * );
inline void autoUpdate( bool geometryUpdate=false ) {
if ( isAutoRendering )
updateWidget( geometryUpdate );
}
bool stillResizing, deleteImData, deleteImlibData;
bool imlibModifierChanged;
KuickImage *m_kuim;
ImageCache *imageCache;
ImlibData *id;
ImData *idata;
Window win;
ImlibColorModifier mod;
KuickFile *m_kuickFile;
QCursor m_oldCursor;
static const int ImlibOffset;
private:
void init();
bool isAutoRendering;
int myMaxImageCache;
QColor myBackgroundColor;
protected slots:
bool cacheImage( KuickFile *file );
virtual void setBusyCursor();
virtual void restoreCursor();
signals:
void sigImageError( const KuickFile * file, const QString& );
};
#endif

@ -0,0 +1,4 @@
#include "kuick.h"
Kuick * Kuick::s_self = 0L;
QSize Kuick::s_frameSize;

@ -0,0 +1,70 @@
/* This file is part of the KDE project
Copyright (C) 2000,2001,2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KUICKGLOBALS_H
#define KUICKGLOBALS_H
#include <qrect.h>
#include <qsize.h>
#include <kwin.h>
#include <kwinmodule.h>
class Kuick
{
public:
static QRect workArea() {
return self()->winModule.workArea();
}
static QSize frameSize( WId win = 0L ) {
if ( win ) {
KWin::WindowInfo info = KWin::windowInfo(win, NET::WMKDEFrameStrut | NET::WMGeometry);
int wborder = info.frameGeometry().width() - info.geometry().width();
int hborder = info.frameGeometry().height() - info.geometry().height();
if ( wborder || hborder ) { // we get a 0,0 border when not shown
s_frameSize.setWidth( wborder );
s_frameSize.setHeight( hborder );
}
}
if ( !s_frameSize.isValid() )
return QSize( 0, 0 );
return s_frameSize;
}
static Kuick * self() {
if ( !s_self ) {
s_self = new Kuick;
}
return s_self;
}
KWinModule winModule;
private:
Kuick() {}
static Kuick * s_self;
static QSize s_frameSize;
};
#endif // KUICKGLOBALS_H

@ -0,0 +1,99 @@
/* This file is part of the KDE project
Copyright (C) 1998-2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifdef index
#undef index
#endif
#include "kuickconfigdlg.h"
#include <qkeycode.h>
#include <qvbox.h>
#include <kaccel.h>
#include <kconfig.h>
#include <kglobal.h>
#include <klocale.h>
#include "imagewindow.h"
#include "defaultswidget.h"
#include "generalwidget.h"
#include "slideshowwidget.h"
#include "kuickdata.h"
KuickConfigDialog::KuickConfigDialog( KActionCollection *_coll, QWidget *parent,
const char *name, bool modal )
: KDialogBase( Tabbed, i18n("Configure"),
Help | Default | Ok | Apply | Cancel, Ok,
parent, name, modal )
{
coll = _coll;
QVBox *box = addVBoxPage( i18n("&General") );
generalWidget = new GeneralWidget( box, "general widget" );
box = addVBoxPage( i18n("&Modifications") );
defaultsWidget = new DefaultsWidget( box, "defaults widget" );
box = addVBoxPage( i18n("&Slideshow") );
slideshowWidget = new SlideShowWidget( box, "slideshow widget" );
box = addVBoxPage( i18n("&Viewer Shortcuts") );
imageWindow = new ImageWindow(); // just to get the accel...
imageWindow->hide();
imageKeyChooser = new KKeyChooser( imageWindow->actionCollection(), box );
box = addVBoxPage( i18n("Bro&wser Shortcuts") );
browserKeyChooser = new KKeyChooser( coll, box );
connect( this, SIGNAL( defaultClicked() ), SLOT( resetDefaults() ));
}
KuickConfigDialog::~KuickConfigDialog()
{
imageWindow->close( true );
}
void KuickConfigDialog::applyConfig()
{
generalWidget->applySettings( *kdata );
defaultsWidget->applySettings( *kdata );
slideshowWidget->applySettings( *kdata );
imageKeyChooser->save();
browserKeyChooser->save();
KGlobal::config()->sync();
}
void KuickConfigDialog::resetDefaults()
{
KuickData data;
generalWidget->loadSettings( data );
defaultsWidget->loadSettings( data );
slideshowWidget->loadSettings( data );
imageKeyChooser->allDefault();
browserKeyChooser->allDefault();
}
#include "kuickconfigdlg.moc"

@ -0,0 +1,58 @@
/* This file is part of the KDE project
Copyright (C) 1998-2003 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KUICKCONFIGDLG_H
#define KUICKCONFIGDLG_H
#include <qevent.h>
#include <kkeydialog.h>
#include <kdialogbase.h>
class GeneralWidget;
class DefaultsWidget;
class SlideShowWidget;
class ImageWindow;
class KuickConfigDialog : public KDialogBase
{
Q_OBJECT
public:
KuickConfigDialog( KActionCollection *coll, QWidget *parent=0,
const char *name=0, bool modal=true);
~KuickConfigDialog();
void applyConfig();
private slots:
void resetDefaults();
private:
DefaultsWidget *defaultsWidget;
GeneralWidget *generalWidget;
SlideShowWidget *slideshowWidget;
KKeyChooser *imageKeyChooser, *browserKeyChooser;
KActionCollection *coll;
ImageWindow *imageWindow;
};
#endif

@ -0,0 +1,177 @@
/* This file is part of the KDE project
Copyright (C) 1998-2003 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <stdlib.h>
#include <qcolor.h>
#include <kconfig.h>
#include <kglobal.h>
#include "kuickdata.h"
KuickData::KuickData()
{
fileFilter = "*.jpeg *.jpg *.gif *.xpm *.ppm *.pgm *.pbm *.pnm *.png *.bmp *.psd *.eim *.tif *.tiff *.xcf";// *.mng";
slideDelay = 3000;
slideshowCycles = 1;
slideshowFullscreen = true;
slideshowStartAtFirst = true;
preloadImage = true;
isModsEnabled = true;
fullScreen = false;
autoRotation = true;
downScale = true;
upScale = false;
flipVertically = false;
flipHorizontally = false;
maxUpScale = 3;
rotation = ROT_0;
brightnessSteps = 1;
contrastSteps = 1;
gammaSteps = 1;
scrollSteps = 1;
zoomSteps = 1.5;
maxZoomFactor = 4.0;
maxCachedImages = 4;
backgroundColor = Qt::black;
startInLastDir = true;
idata = new ImData;
}
KuickData::~KuickData()
{
delete idata;
}
void KuickData::load()
{
KConfig *kc = KGlobal::config();
KuickData def;
kc->setGroup( "GeneralConfiguration" );
fileFilter = kc->readEntry( "FileFilter", def.fileFilter );
slideDelay = kc->readNumEntry( "SlideShowDelay", def.slideDelay );
slideshowCycles = kc->readUnsignedNumEntry( "SlideshowCycles", 1 );
slideshowFullscreen = kc->readBoolEntry( "SlideshowFullscreen", true );
slideshowStartAtFirst = kc->readBoolEntry("SlideshowStartAtFirst", true );
preloadImage = kc->readBoolEntry( "PreloadNextImage", def.preloadImage );
fullScreen = kc->readBoolEntry( "Fullscreen", def.fullScreen);
autoRotation = kc->readBoolEntry( "AutoRotation", def.autoRotation);
downScale = kc->readBoolEntry( "ShrinkToScreenSize", def.downScale );
upScale = kc->readBoolEntry( "ZoomToScreenSize", def.upScale );
flipVertically = kc->readBoolEntry( "FlipVertically", def.flipVertically );
flipHorizontally = kc->readBoolEntry( "FlipHorizontally",
def.flipHorizontally );
maxUpScale = kc->readNumEntry( "MaxUpscale Factor", def.maxUpScale );
rotation = (Rotation) kc->readNumEntry( "Rotation", def.rotation );
isModsEnabled = kc->readBoolEntry( "ApplyDefaultModifications",
def.isModsEnabled );
brightnessSteps = kc->readNumEntry("BrightnessStepSize",def.brightnessSteps);
contrastSteps = kc->readNumEntry("ContrastStepSize", def.contrastSteps);
gammaSteps = kc->readNumEntry("GammaStepSize", def.gammaSteps);
scrollSteps = kc->readNumEntry("ScrollingStepSize", def.scrollSteps);
zoomSteps = kc->readDoubleNumEntry("ZoomStepSize", def.zoomSteps);
maxZoomFactor = kc->readDoubleNumEntry( "MaximumZoomFactorByDesktop", def.maxZoomFactor );
maxCachedImages = kc->readUnsignedNumEntry( "MaxCachedImages",
def.maxCachedImages );
backgroundColor = kc->readColorEntry( "BackgroundColor", &Qt::black );
startInLastDir = kc->readBoolEntry( "StartInLastDir", true);
idata->load( kc );
// compatibility with KuickShow <= 0.8.3
switch ( rotation )
{
case 90:
rotation = ROT_90;
break;
case 180:
rotation = ROT_180;
break;
case 270:
rotation = ROT_270;
break;
default:
if ( (rotation < ROT_0) || (rotation > ROT_270) )
rotation = ROT_0;
break;
}
}
void KuickData::save()
{
KConfig *kc = KGlobal::config();
kc->setGroup( "GeneralConfiguration" );
kc->writeEntry( "FileFilter", fileFilter );
kc->writeEntry( "SlideShowDelay", slideDelay );
kc->writeEntry( "SlideshowCycles", slideshowCycles );
kc->writeEntry( "SlideshowFullscreen", slideshowFullscreen );
kc->writeEntry( "SlideshowStartAtFirst", slideshowStartAtFirst );
kc->writeEntry( "PreloadNextImage", preloadImage );
kc->writeEntry( "Fullscreen", fullScreen );
kc->writeEntry( "AutoRotation", autoRotation );
kc->writeEntry( "ShrinkToScreenSize", downScale );
kc->writeEntry( "ZoomToScreenSize", upScale );
kc->writeEntry( "FlipVertically", flipVertically );
kc->writeEntry( "FlipHorizontally", flipHorizontally );
kc->writeEntry( "MaxUpscale Factor", maxUpScale );
kc->writeEntry( "Rotation", rotation );
kc->writeEntry( "ApplyDefaultModifications", isModsEnabled );
kc->writeEntry( "BrightnessStepSize", brightnessSteps );
kc->writeEntry( "ContrastStepSize", contrastSteps );
kc->writeEntry( "GammaStepSize", gammaSteps );
kc->writeEntry( "ScrollingStepSize", scrollSteps );
kc->writeEntry( "ZoomStepSize", zoomSteps );
kc->writeEntry( "MaximumZoomFactorByDesktop", maxZoomFactor );
kc->writeEntry( "MaxCachedImages", maxCachedImages );
kc->writeEntry( "BackgroundColor", backgroundColor );
kc->writeEntry( "StartInLastDir", startInLastDir );
idata->save( kc );
kc->sync();
}

@ -0,0 +1,86 @@
/* This file is part of the KDE project
Copyright (C) 1998-2003 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KUICKDATA_H
#define KUICKDATA_H
#include <qcolor.h>
#include <qstring.h>
#include "imdata.h"
class KConfig;
// values are also used as combobox index defaultswidget.*
enum Rotation { ROT_0=0, ROT_90=1, ROT_180=2, ROT_270=3 };
// hmm, global declaration for now
enum FlipMode { FlipNone = 0, FlipHorizontal = 1, FlipVertical = 2 };
class KuickData
{
public:
KuickData();
~KuickData();
void load();
void save();
ImData *idata;
QString fileFilter;
uint slideDelay;
uint slideshowCycles;
bool slideshowFullscreen :1;
bool slideshowStartAtFirst :1;
int brightnessSteps;
int contrastSteps;
int gammaSteps;
int scrollSteps;
float zoomSteps;
bool startInLastDir :1;
bool preloadImage :1;
bool autoRotation :1;
bool fullScreen :1;
// default image modifications
bool isModsEnabled :1;
bool flipVertically :1;
bool flipHorizontally :1;
bool downScale :1;
bool upScale :1;
int maxUpScale;
float maxZoomFactor;
uint maxCachedImages;
Rotation rotation;
QColor backgroundColor;
};
extern KuickData* kdata;
#endif

@ -0,0 +1,194 @@
#include <qfile.h>
#include <kdebug.h>
#include <kdeversion.h>
#include <kinstance.h>
#include <klocale.h>
#include <kprogress.h>
#include <kio/job.h>
#include <kio/netaccess.h>
#include <ktempfile.h>
#include "filecache.h"
#include "kuickfile.h"
KuickFile::KuickFile(const KURL& url)
: QObject(),
m_url( url ),
m_job( 0L ),
m_progress( 0L ),
m_currentProgress( 0 )
{
if ( m_url.isLocalFile())
m_localFile = m_url.path();
else {
const KURL& mostLocal = KIO::NetAccess::mostLocalURL( m_url, 0L );
if ( mostLocal.isValid() && mostLocal.isLocalFile() )
m_localFile = mostLocal.path();
}
}
KuickFile::~KuickFile()
{
delete m_job;
if ( hasDownloaded() )
QFile::remove( m_localFile );
}
QString KuickFile::localFile() const
{
// Note: never call isAvailable() from here, directly or indirectly
if ( isDownloading() )
return QString::null;
return m_localFile;
}
bool KuickFile::hasDownloaded() const
{
return !m_url.isLocalFile() && isAvailable() && m_job != 0L;
}
// ### need an API for refreshing the file?
bool KuickFile::download()
{
if ( m_url.isLocalFile() || isAvailable() )
return true;
if ( isDownloading() )
return true;
// reinitialize
m_localFile = QString::null;
m_currentProgress = 0;
QString ext;
QString fileName = m_url.fileName();
int extIndex = fileName.findRev('.');
if ( extIndex > 0 )
ext = fileName.mid( extIndex + 1 );
QString tempDir = FileCache::self()->tempDir();
KTempFile tempFile( tempDir, ext );
tempFile.setAutoDelete( tempDir.isNull() ); // in case there is no proper tempdir, make sure to delete those files!
if ( tempFile.status() != 0 )
return false;
tempFile.close();
if ( tempFile.status() != 0 )
return false;
KURL destURL;
destURL.setPath( tempFile.name() );
m_job = KIO::file_copy( m_url, destURL, -1, true, false, false ); // handling progress ourselves
m_job->setAutoErrorHandlingEnabled( true );
connect( m_job, SIGNAL( result( KIO::Job * )), SLOT( slotResult( KIO::Job * ) ));
connect( m_job, SIGNAL( percent( KIO::Job *, unsigned long )), SLOT( slotProgress( KIO::Job *, unsigned long ) ));
// TODO: generify background/foreground downloading?
return m_job != 0L;
}
KuickFile::DownloadStatus KuickFile::waitForDownload( QWidget *parent )
{
if ( isAvailable() )
return OK;
if ( !isDownloading() ) {
if ( !download() )
return ERROR;
}
KProgressDialog *dialog = new KProgressDialog( parent );
dialog->setModal( true );
dialog->setCaption( i18n("Downloading %1...").arg( m_url.fileName() ) );
dialog->setLabel( i18n("Please wait while downloading\n%1").arg( m_url.prettyURL() ));
dialog->setAllowCancel( true );
dialog->setAutoClose( true );
m_progress = dialog->progressBar();
m_progress->setTotalSteps( 100 ); // percent
m_progress->setProgress( m_currentProgress );
dialog->exec();
bool canceled = dialog->wasCancelled();
delete dialog;
m_progress = 0L;
if ( canceled && m_job ) {
m_job->kill();
m_job = 0L;
m_currentProgress = 0;
}
// ### when aborted, remove KuickImage from FileCache?
if ( canceled )
return CANCELED;
if ( !isAvailable() )
return ERROR;
// ### use custom progress dialog with OK, SKIP, CANCEL?
return OK;
}
void KuickFile::slotResult( KIO::Job *job )
{
if (job != m_job) { // huh?
return;
}
m_job = 0L;
if ( job->error() != 0 ) {
m_currentProgress = 0;
if ( job->error() != KIO::ERR_USER_CANCELED )
kdWarning() << "ERROR: KuickFile::slotResult: " << job->errorString() << endl;
QString canceledFile = static_cast<KIO::FileCopyJob*>(job)->destURL().path();
QFile::remove( canceledFile );
m_progress->topLevelWidget()->hide();
}
else {
m_localFile = static_cast<KIO::FileCopyJob*>(job)->destURL().path();
emit downloaded( this ); // before closing the progress dialog
if ( m_progress ) {
m_progress->setProgress( 100 );
#define BUGGY_VERSION KDE_MAKE_VERSION(3,5,2)
if ( KDE::version() <= BUGGY_VERSION ) {
m_progress->topLevelWidget()->hide(); // ### workaround broken KProgressDialog
}
}
}
}
void KuickFile::slotProgress( KIO::Job *job, unsigned long percent )
{
if (job != m_job) { // huh?
return;
}
m_currentProgress = percent;
if ( !m_progress )
return;
// only set 100% in slotResult. Otherwise, the progress dialog would be closed
// before slotResult() is called.
if ( percent >= 100 )
percent = 99;
m_progress->setProgress( (int) percent );
}
bool operator==( const KuickFile& first, const KuickFile& second ) {
return first.url().equals( second.url() );
}
#include "kuickfile.moc"

@ -0,0 +1,99 @@
/****************************************************************************
** $Id: .emacs,v 1.3 2002/02/20 15:06:53 gis Exp $
**
** Created : 2006
**
** Copyright (C) 2006 Carsten Pfeiffer <pfeiffer@kde.org>
**
****************************************************************************/
#ifndef KUICKFILE_H
#define KUICKFILE_H
#include <qobject.h>
#include <qstring.h>
#include <kurl.h>
#include <kprogress.h>
namespace KIO {
class Job;
class FileCopyJob;
}
class KuickFile : public QObject
{
Q_OBJECT
public:
enum DownloadStatus
{
OK = 1,
CANCELED,
ERROR
};
KuickFile(const KURL& url);
/**
* Cleans up resources and removes any temporary file, if available.
*/
~KuickFile();
const KURL& url() const { return m_url; }
QString localFile() const;
bool download();
/**
* @return true if download is in progress
*/
bool isDownloading() const { return m_job != 0L; }
/**
* @return true if a local file is available, that is,
* @ref #localFile will return a non-empty name
* ### HERE ADD mostlylocal thing!
*/
bool isAvailable() const { return !localFile().isEmpty(); }
/**
* @return true if @ref #isAvailable() returns true AND @ref #url() is a remote URL,
* i.e. the file really has been downloaded.
*/
bool hasDownloaded() const;
/**
* Opens a modal dialog window, blocking user interaction until the download
* has finished. If the file is already available, this function will return true
* immediately.
* @return true when the download has finished or false when the user aborted the dialog
*/
KuickFile::DownloadStatus waitForDownload( QWidget *parent );
// bool needsDownload();
signals:
/**
* Signals that download has finished for that file. Will only be emitted for non-local files!
*/
void downloaded( KuickFile * );
private slots:
void slotResult( KIO::Job *job );
void slotProgress( KIO::Job *job, unsigned long percent );
private:
KURL m_url;
QString m_localFile;
KIO::FileCopyJob *m_job;
KProgress *m_progress;
int m_currentProgress;
};
bool operator==( const KuickFile& first, const KuickFile& second );
#endif // KUICKFILE_H

@ -0,0 +1,33 @@
/* This file is part of the KDE project
Copyright (C) 2001,2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KUICKGLOBALS_H
#define KUICKGLOBALS_H
#include <kwinmodule.h>
class KuickGlobals
{
public:
KWinModule winModule;
};
#endif // KUICKGLOBALS_H

@ -0,0 +1,527 @@
#include "kuickimage.h"
KuickImage::KuickImage( const KuickFile * file, ImlibImage *im, ImlibData *id)
: QObject( 0L, 0L )
{
myFile = file;
myOrigIm = 0L;
myIm = im;
myId = id;
myPixmap = 0L;
myWidth = im->rgb_width;
myHeight = im->rgb_height;
myIsDirty = true;
myOrigWidth = myWidth;
myOrigHeight = myHeight;
myRotation = ROT_0;
myFlipMode = FlipNone;
}
KuickImage::~KuickImage()
{
if ( myPixmap )
Imlib_free_pixmap( myId, myPixmap );
if ( myOrigIm )
{
Imlib_destroy_image( myId, myOrigIm );
Imlib_kill_image( myId, myIm ); // kill scaled image (### really? analyze!)
}
else
Imlib_destroy_image( myId, myIm );
}
Pixmap& KuickImage::pixmap()
{
if ( myIsDirty )
renderPixmap();
return myPixmap;
}
void KuickImage::renderPixmap()
{
if ( !myIsDirty )
return;
// qDebug("### rendering: %s", myFilename.latin1());
if ( myPixmap )
Imlib_free_pixmap( myId, myPixmap );
emit startRendering();
// #ifndef NDEBUG
// struct timeval tms1, tms2;
// gettimeofday( &tms1, NULL );
// #endif
Imlib_render( myId, myIm, myWidth, myHeight );
myPixmap = Imlib_move_image( myId, myIm );
// #ifndef NDEBUG
// gettimeofday( &tms2, NULL );
// qDebug("*** rendering image: %s, took %ld ms", myFilename.latin1(),
// (tms2.tv_usec - tms1.tv_usec)/1000);
// #endif
emit stoppedRendering();
myIsDirty = false;
}
void KuickImage::rotate( Rotation rot )
{
if ( rot == ROT_180 ) { // rotate 180 degrees
Imlib_flip_image_horizontal( myId, myIm );
Imlib_flip_image_vertical( myId, myIm );
}
else if ( rot == ROT_90 || rot == ROT_270 ) {
qSwap( myWidth, myHeight );
Imlib_rotate_image( myId, myIm, -1 );
if ( rot == ROT_90 ) // rotate 90 degrees
Imlib_flip_image_horizontal( myId, myIm );
else if ( rot == ROT_270 ) // rotate 270 degrees
Imlib_flip_image_vertical( myId, myIm );
}
myRotation = (Rotation) ((myRotation + rot) % 4);
myIsDirty = true;
}
bool KuickImage::rotateAbs( Rotation rot )
{
if ( myRotation == rot )
return false;
int diff = rot - myRotation;
bool clockWise = (diff > 0);
switch( abs(diff) ) {
case ROT_90:
rotate( clockWise ? ROT_90 : ROT_270 );
break;
case ROT_180:
rotate( ROT_180 );
break;
case ROT_270:
rotate( clockWise ? ROT_270 : ROT_90 );
break;
}
return true;
}
void KuickImage::flip( FlipMode flipMode )
{
if ( flipMode & FlipHorizontal )
Imlib_flip_image_horizontal( myId, myIm );
if ( flipMode & FlipVertical )
Imlib_flip_image_vertical( myId, myIm );
myFlipMode = (FlipMode) (myFlipMode ^ flipMode);
myIsDirty = true;
}
bool KuickImage::flipAbs( int mode )
{
if ( myFlipMode == mode )
return false;
bool changed = false;
if ( ((myFlipMode & FlipHorizontal) && !(mode & FlipHorizontal)) ||
(!(myFlipMode & FlipHorizontal) && (mode & FlipHorizontal)) ) {
Imlib_flip_image_horizontal( myId, myIm );
changed = true;
}
if ( ((myFlipMode & FlipVertical) && !(mode & FlipVertical)) ||
(!(myFlipMode & FlipVertical) && (mode & FlipVertical)) ) {
Imlib_flip_image_vertical( myId, myIm );
changed = true;
}
if ( changed ) {
myFlipMode = (FlipMode) mode;
myIsDirty = true;
return true;
}
return false;
}
void KuickImage::restoreOriginalSize()
{
if (myWidth == myOrigWidth && myHeight == myOrigHeight)
return;
// qDebug("-- restoreOriginalSize");
if ( myOrigIm != 0L )
{
Imlib_destroy_image( myId, myIm );
myIm = myOrigIm;
myOrigIm = 0L;
}
myWidth = myOrigWidth;
myHeight = myOrigHeight;
myIsDirty = true;
if ( myRotation == ROT_90 || myRotation == ROT_270 )
qSwap( myWidth, myHeight );
}
void KuickImage::resize( int width, int height, KuickImage::ResizeMode mode )
{
if ( myWidth == width && myHeight == height )
return;
if ( mode == KuickImage::SMOOTH )
{
if ( !smoothResize( width, height ) )
fastResize( width, height );
}
else
{
fastResize( width, height );
}
}
void KuickImage::fastResize( int width, int height )
{
// qDebug("-- fastResize: %i x %i", width, height );
// lazy resizing (only done when rendering pixmap)
myWidth = width;
myHeight = height;
myIsDirty = true;
}
bool KuickImage::smoothResize( int newWidth, int newHeight )
{
// qDebug("-- smoothResize: %i x %i", newWidth, newHeight);
QImage *image = newQImage();
// Note: QImage::ScaleMin seems to have a bug (off-by-one, sometimes results in width being 1 pixel too small)
QImage scaledImage = image->smoothScale(newWidth, newHeight, QImage::ScaleFree);
delete image;
ImlibImage *newIm = toImage( myId, scaledImage );
if ( newIm )
{
if ( myOrigIm == 0 )
myOrigIm = myIm;
myIm = newIm;
myWidth = newWidth;
myHeight = newHeight;
myIsDirty = true;
return true;
}
return false;
}
QImage * KuickImage::newQImage() const
{
ImlibImage *im;
// qDebug("-- newQImage");
if ( myOrigIm != 0L && myRotation == ROT_0 && myFlipMode == FlipNone )
{
// use original image if no other modifications have been applied
// ### use orig image always and reapply mods?
im = myOrigIm;
}
else
{
im = myIm;
}
int w = im->rgb_width;
int h = im->rgb_height;
QImage *image = new QImage( w, h, 32 );
uchar *rgb = im->rgb_data;
QRgb **destImageData = reinterpret_cast<QRgb**>( image->jumpTable() );
int byteIndex = 0;
int destLineIndex = 0;
int destByteIndex = 0;
for ( int pixel = 0; pixel < (w * h); pixel++ )
{
if ( pixel != 0 && (pixel % w) == 0 )
{
destLineIndex++;
destByteIndex = 0;
}
uchar r = rgb[byteIndex++];
uchar g = rgb[byteIndex++];
uchar b = rgb[byteIndex++];
QRgb rgbPixel = qRgb( r, g, b );
destImageData[destLineIndex][destByteIndex++] = rgbPixel;
}
return image;
}
ImlibImage * KuickImage::toImage( ImlibData *id, QImage& image )
{
if ( image.isNull() )
return 0L;
if ( image.depth() != 32 )
{
image.setAlphaBuffer(false);
image = image.convertDepth(32);
if ( image.isNull() )
return 0L;
}
// convert to 24 bpp (discard alpha)
int numPixels = image.width() * image.height();
const int NUM_BYTES_NEW = 3; // 24 bpp
uchar *newImageData = new uchar[numPixels * NUM_BYTES_NEW];
uchar *newData = newImageData;
int w = image.width();
int h = image.height();
for (int y = 0; y < h; y++) {
QRgb *scanLine = reinterpret_cast<QRgb *>( image.scanLine(y) );
for (int x = 0; x < w; x++) {
const QRgb& pixel = scanLine[x];
*(newData++) = qRed(pixel);
*(newData++) = qGreen(pixel);
*(newData++) = qBlue(pixel);
}
}
ImlibImage *im = Imlib_create_image_from_data( id, newImageData, NULL,
image.width(), image.height() );
delete [] newImageData;
return im;
}
#if 0
bool KuickImage::smoothResize( int newWidth, int newHeight )
{
int numPixels = newWidth * newHeight;
const int NUM_BYTES_NEW = 3; // 24 bpp
uchar *newImageData = new uchar[numPixels * NUM_BYTES_NEW];
// ### endianness
// myIm : old image, old size
/////////////////////////////////////////////////
// int w = myOrigWidth; //myViewport.width();
//int h = myOrigHeight; //myViewport.height();
//QImage dst(w, h, myIm->depth(), myIm->numColors(), myIm->bitOrder());
//QRgb *scanline;
int basis_ox, basis_oy, basis_xx, basis_yy;
// ### we only scale with a fixed factor for x and y anyway
double scalex = newWidth / (double) myOrigWidth;
double scaley = newHeight / (double) myOrigHeight;
// basis_ox=(int) (myViewport.left() * 4096.0 / scalex);
// basis_oy=(int) (myViewport.top() * 4096.0 / scaley);
basis_ox = 0;
basis_oy = 0;
basis_xx = (int) (4096.0 / scalex);
basis_yy = (int) (4096.0 / scaley);
//qDebug("Basis: (%d, %d), (%d, 0), (0, %d)", basis_ox, basis_oy, basis_xx, basis_yy);
int x2, y2;
int max_x2 = (myOrigWidth << 12);
int max_y2 = (myOrigHeight << 12);
// QRgb background = idata->backgroundColor.rgb();
// QRgb **imdata = (QRgb **) myIm->jumpTable();
// QRgb *imdata = reinterpret_cast<QRgb*>( myIm->rgb_data );
uchar *imdata = myIm->rgb_data;
int y = 0;
// for (;;) //fill the top of the target pixmap with the background color
// {
// y2 = basis_oy + y * basis_yy;
//
// if ((y2 >= 0 && (y2 >> 12) < myIm->height()) || y >= h)
// break;
//
// scanline = (QRgb*) dst.scanLine(y);
// for (int i = 0; i < w; i++)
// *(scanline++) = background; //qRgb(0,255,0);
// y++;
// }
for (; y < newHeight; y++)
{
// scanline = (QRgb*) dst.scanLine(y);
x2 = basis_ox;
y2 = basis_oy + y * basis_yy;
if (y2 >= max_y2)
break;
int x = 0;
// while ((x2 < 0 || (x2 >> 12) >= myIm->width()) && x < w) //fill the left of the target pixmap with the background color
// {
// *(scanline++) = background; //qRgb(0,0,255);
// x2 += basis_xx;
// x++;
// }
int top = y2 >> 12;
int bottom = top + 1;
if (bottom >= myOrigHeight)
bottom--;
// for (; x < w; x++)
for (; x < newWidth; x++) // ### myOrigWidth orig
{
int left = x2 >> 12;
int right = left + 1;
if (right >= myOrigWidth)
right = myOrigWidth - 1;
unsigned int wx = x2 & 0xfff; //12 bits of precision for reasons which will become clear
unsigned int wy = y2 & 0xfff; //12 bits of precision
unsigned int iwx = 0xfff - wx;
unsigned int iwy = 0xfff - wy;
QRgb tl = 0, tr = 0, bl = 0, br = 0;
int ind = 0;
ind = (left + top * myOrigWidth) * 3;
tl = (imdata[ind] << 16);
tl |= (imdata[ind + 1] << 8);
tl |= (imdata[ind + 2] << 0);
int bar = imdata[ind + 2] << 8;
bar = qBlue(bar);
ind = (right + top * myOrigWidth) * 3;
tr = (imdata[ind] << 16);
tr |= (imdata[ind + 1] << 8);
tr |= (imdata[ind + 2] << 0);
bar = imdata[ind + 2] << 8;
ind = (left + bottom * myOrigWidth) * 3;
bl = (imdata[ind] << 16);
bl |= (imdata[ind + 1] << 8);
bl |= (imdata[ind + 2] << 0);
bar = imdata[ind + 2] << 8;
ind = (right + bottom * myOrigWidth) * 3;
br = (imdata[ind] << 16);
br |= (imdata[ind + 1] << 8);
br |= (imdata[ind + 2] << 0);
// tl=imdata[top][left];
// tr=imdata[top][right];
// bl=imdata[bottom][left];
// br=imdata[bottom][right];
/*
tl=getValidPixel(myIm, left, top, x, y); //these calls are expensive
tr=getValidPixel(myIm, right, top, x, y); //use them to debug segfaults in this function
bl=getValidPixel(myIm, left, bottom, x, y);
br=getValidPixel(myIm, right, bottom, x, y);
*/
unsigned int r = (unsigned int) (qRed(tl) * iwx * iwy + qRed(tr) * wx* iwy + qRed(bl) * iwx * wy + qRed(br) * wx * wy); // NB 12+12+8 == 32
unsigned int g = (unsigned int) (qGreen(tl) * iwx * iwy + qGreen(tr) * wx * iwy + qGreen(bl) * iwx * wy + qGreen(br) * wx * wy);
unsigned int b = (unsigned int) (qBlue(tl) * iwx * iwy + qBlue(tr) * wx * iwy + qBlue(bl) * iwx * wy + qBlue(br) * wx * wy);
// ### endianness
//we're actually off by one in 255 here! (254 instead of 255)
int foo = r >> 24;
foo = g >> 24;
foo = b >> 24;
newImageData[(y * newWidth * 3) + (x * 3) + 0] = (r >> 24);
newImageData[(y * newWidth * 3) + (x * 3) + 1] = (g >> 24);
newImageData[(y * newWidth * 3) + (x * 3) + 2] = (b >> 24);
// *(scanline++) = qRgb(r >> 24, g >> 24, b >> 24); //we're actually off by one in 255 here
x2 += basis_xx;
if (x2 > max_x2)
{
x++;
break;
}
}
// while (x < w) //fill the right of each scanline with the background colour
// {
// *(scanline++) = background; //qRgb(255,0,0);
// x++;
// }
}
// for (;;) //fill the bottom of the target pixmap with the background color
// {
// y2 = basis_oy + y * basis_yy;
//
// if (y >= h)
// break;
//
// scanline = (QRgb*) dst.scanLine(y);
// for (int i = 0; i < w; i++)
// *(scanline++) = background; //qRgb(255,255,0);
// y++;
// }
// ### keep orig image somewhere but delete all scaled images!
ImlibImage *newIm = Imlib_create_image_from_data( myId, newImageData, NULL,
newWidth, newHeight );
delete[] newImageData;
if ( newIm )
{
myScaledIm = newIm;
myIsDirty = true;
myWidth = newWidth;
myHeight = newHeight;
}
return myIm != 0L;
// return dst.copy();
}
#endif
#include "kuickimage.moc"

@ -0,0 +1,92 @@
/****************************************************************************
** $Id: .emacs,v 1.3 2002/02/20 15:06:53 gis Exp $
**
** Created : 2002
**
** Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
**
****************************************************************************/
#ifndef KUICKIMAGE_H
#define KUICKIMAGE_H
#include <qimage.h>
#include <qobject.h>
#include <kurl.h>
#include "kuickdata.h"
#include "kuickfile.h"
// #include those AFTER Qt-includes!
#include <Imlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
// #include <X11/extensions/shape.h>
class KuickImage : public QObject
{
Q_OBJECT
public:
enum ResizeMode { FAST, SMOOTH };
KuickImage( const KuickFile * file, ImlibImage *im, ImlibData *id );
~KuickImage();
int width() const { return myWidth; }
int height() const { return myHeight; }
int originalWidth() const { return myOrigWidth; }
int originalHeight() const { return myOrigHeight; }
void resize( int width, int height, KuickImage::ResizeMode mode );
void restoreOriginalSize();
void rotate( Rotation rot );
bool rotateAbs( Rotation rot );
void flip( FlipMode flipMode );
bool flipAbs( int mode );
ImlibImage * imlibImage() const { return myIm; }
Pixmap& pixmap();
void renderPixmap();
// const QString& filename() const { return myFilename;}
const KuickFile& file() const { return *myFile; }
const KURL& url() const { return myFile->url(); }
void setDirty( bool d ) { myIsDirty = d; }
bool isDirty() const { return myIsDirty; }
Rotation absRotation() const { return myRotation; }
FlipMode flipMode() const { return myFlipMode; }
static ImlibImage * toImage( ImlibData *id, QImage& image );
private:
void fastResize( int newWidth, int newHeight );
bool smoothResize( int width, int height );
/**
* Note: caller must delete it!
*/
QImage * newQImage() const;
const KuickFile * myFile;
int myWidth;
int myHeight;
ImlibImage * myOrigIm;
ImlibImage * myIm;
ImlibData * myId;
Pixmap myPixmap;
bool myIsDirty;
int myOrigWidth;
int myOrigHeight;
Rotation myRotation;
FlipMode myFlipMode;
signals:
void startRendering();
void stoppedRendering();
};
#endif // KUICKIMAGE_H

File diff suppressed because it is too large Load Diff

@ -0,0 +1,93 @@
[Desktop Entry]
Encoding=UTF-8
Name=Kuickshow
Name[af]=Vinnig-vertoon
Name[ar]=عرض سريع
Name[eo]=Rapidmontrilo
Name[fr]=KuickShow
Name[hi]=क्विक-शो
Name[it]=KuickShow
Name[ko]=K퀵쇼
Name[ne]=क्विकशो
Name[pt_BR]=KRápida Exibição
Name[ta]=விரைவுகாட்சி
Name[th]=ดูภาพด่วน - K
Name[ven]=Musumbedzo wa kuick
Name[zh_TW]=Kuickshow 快秀
Name[zu]=I Kuickshow
Exec=kuickshow %i %m -caption "%c" %U
Icon=kuickshow
Type=Application
MimeType=image/gif;image/x-xpm;image/x-xbm;image/jpeg;image/png;image/tiff;image/x-bmp;image/x-psd;image/x-eim;image/x-portable-bitmap;image/x-portable-pixmap;image/x-portable-greymap;
DocPath=kuickshow/index.html
Terminal=false
InitialPreference=6
GenericName=Image Viewer
GenericName[af]=Beeld Aansig
GenericName[ar]=عارض صور
GenericName[bg]=Преглед на изображения
GenericName[br]=Gweler ar skeudennoù
GenericName[bs]=Preglednik slika
GenericName[ca]=Visualitzador d'imatges
GenericName[cs]=Prohlížeč obrázků
GenericName[cy]=Gwelydd Delweddau
GenericName[da]=Billedfremviser
GenericName[de]=Bildbetrachter
GenericName[el]=Προβολέας εικόνων
GenericName[eo]=Bildorigardilo
GenericName[es]=Visor de imágenes
GenericName[et]=Pildifailide näitaja
GenericName[eu]=Irudi ikustailua
GenericName[fa]=مشاهده‌گر تصویر
GenericName[fi]=Kuvannäytin
GenericName[fr]=Afficheur d'images
GenericName[ga]=Amharcán Íomhánna
GenericName[gl]=Visor de imaxes
GenericName[he]=מציג תמונות
GenericName[hi]=छवि प्रदर्शक
GenericName[hr]=Preglednik slika
GenericName[hu]=Képnézegető
GenericName[is]=Myndaskoðari
GenericName[it]=Visore di immagini
GenericName[ja]=画像ビューア
GenericName[kk]=Кескіндерді қарау
GenericName[km]=កម្មវិធី​មើល​រូបភាព
GenericName[lt]=Paveikslėlių žiūriklis
GenericName[lv]=Attēlu Skatītājs
GenericName[ms]=Paparan Imej
GenericName[mt]=Werrej tal-istampi
GenericName[nb]=Bildefremviser
GenericName[nds]=Bildkieker
GenericName[ne]=छवि दर्शक
GenericName[nl]=Afbeeldingenweergaveprogramma
GenericName[nn]=Biletvisar
GenericName[nso]=Molebeledi wa Ponagalo
GenericName[pa]=ਚਿੱਤਰ ਦਰਸ਼ਕ
GenericName[pl]=Przeglądarka obrazków
GenericName[pt]=Visualizador de Imagens
GenericName[pt_BR]=Visualizador de Imagens
GenericName[ro]=Vizualizor de imagini
GenericName[ru]=Просмотр изображений
GenericName[rw]=Mugaraza Shusho
GenericName[se]=Govvačájeheaddji
GenericName[sk]=Prehliadač obrázkov
GenericName[sl]=Pregledovalnik slik
GenericName[sr]=Приказивач слика
GenericName[sr@Latn]=Prikazivač slika
GenericName[sv]=Bildvisare
GenericName[ta]=பிம்ப காட்சி
GenericName[tg]=Намоиши тасвирот
GenericName[th]=เครื่องมือแสดงภาพ
GenericName[tr]=Resim Göstericisi
GenericName[uk]=Переглядач зображень
GenericName[uz]=Расм кўрувчи
GenericName[ven]=Tshivhoni tsha Mutaleli
GenericName[wa]=Håyneu d' imådjes
GenericName[xh]=Umboniseli Womfanekiso
GenericName[zh_CN]=图片查看程序
GenericName[zh_HK]=圖像檢視器
GenericName[zh_TW]=影像檢視程式
GenericName[zu]=Umbonisi Womfanekiso
X-DCOP-ServiceType=Multi
Categories=Qt;KDE;Graphics;

@ -0,0 +1,178 @@
/* This file is part of the KDE project
Copyright (C) 1998-2006 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KUICKSHOW_H
#define KUICKSHOW_H
#include <qevent.h>
#include <qguardedptr.h>
#include <qstring.h>
#include <qvaluelist.h>
#include <kfileitem.h>
#include <kmainwindow.h>
#include <kurl.h>
#include <Imlib.h>
#include "aboutwidget.h"
class FileWidget;
class ImageWindow;
class ImData;
class KuickConfigDialog;
class KAccel;
class KConfig;
class KToggleAction;
class AboutWidget;
class KURL;
class KURLComboBox;
class KuickFile;
class DelayedRepeatEvent
{
public:
DelayedRepeatEvent( ImageWindow *view, QKeyEvent *ev ) {
viewer = view;
event = ev;
}
DelayedRepeatEvent( ImageWindow *view, int action, void *data ) {
this->viewer = view;
this->action = action;
this->data = data;
this->event = 0L;
}
~DelayedRepeatEvent() {
delete event;
}
enum Action
{
DeleteCurrentFile,
TrashCurrentFile,
AdvanceViewer
};
ImageWindow *viewer;
QKeyEvent *event;
int action;
void *data;
};
class KuickShow : public KMainWindow
{
Q_OBJECT
public:
KuickShow( const char *name=0 );
~KuickShow();
virtual void show();
static QValueList<ImageWindow*> s_viewers;
// overridden to make KDCOPActionProxy work -- all our actions are not
// in the mainwindow's collection, but in the filewidget's.
virtual KActionCollection* actionCollection() const;
protected:
virtual void readProperties( KConfig * );
void initImlibParams( ImData *, ImlibInitParams * );
void tryShowNextImage();
private slots:
void toggleBrowser();
void slotQuit() { delete this; }
void slotPrint();
void slotConfigApplied();
void slotConfigClosed();
void messageCantLoadImage( const KuickFile * file, const QString& message);
bool showImage(const KFileItem *, bool newWindow = false,
bool fullscreen = false, bool moveToTopLeft = true );
void showFileItem( ImageWindow *, const KFileItem * );
void slotHighlighted( const KFileItem * );
void slotSelected( const KFileItem * );
void dirSelected( const KURL& );
void configuration();
void about();
void startSlideShow();
void pauseSlideShow();
void nextSlide();
void nextSlide( KFileItem *item );
void viewerDeleted();
void slotDropped( const KFileItem *, QDropEvent *, const KURL::List &);
void slotSetActiveViewer( ImageWindow *i ) { m_viewer = i; }
void slotAdvanceImage( ImageWindow *, int steps );
void slotShowInSameWindow();
void slotShowInOtherWindow();
void slotShowFullscreen();
void slotReplayEvent();
void slotOpenURL();
void slotSetURL( const KURL& );
void slotURLComboReturnPressed();
// void invalidateImages( const KFileItemList& items );
void slotDeleteCurrentImage(ImageWindow *viewer);
void slotTrashCurrentImage(ImageWindow *viewer);
void slotDeleteCurrentImage();
void slotTrashCurrentImage();
void doReplay();
private:
void initGUI( const KURL& startDir );
bool eventFilter( QObject *, QEvent * );
void initImlib();
void saveProperties( KConfig * );
void saveSettings();
bool haveBrowser() const;
void delayedRepeatEvent( ImageWindow *, QKeyEvent * );
void abortDelayedEvent();
void deleteAllViewers();
void redirectDeleteAndTrashActions(KActionCollection *coll);
void delayAction(DelayedRepeatEvent *event);
void replayAdvance(DelayedRepeatEvent *event);
void performDeleteCurrentImage(QWidget *parent);
void performTrashCurrentImage(QWidget *parent);
uint viewItem, renameItem, deleteItem, printItem;
uint m_slideshowCycle;
FileWidget *fileWidget;
KURLComboBox *cmbPath;
KuickConfigDialog *dialog;
ImlibData *id;
ImageWindow *m_viewer;
KToggleAction *oneWindowAction;
KAccel *m_accel;
DelayedRepeatEvent *m_delayedRepeatItem;
QTimer *m_slideTimer;
bool m_slideShowStopped;
KToggleAction *m_toggleBrowserAction;
QGuardedPtr<AboutWidget> aboutWidget;
};
#endif

@ -0,0 +1,42 @@
/* This file is part of the KDE project
Copyright (C) 1998,1999,2000 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <qtooltip.h>
#include <kurl.h>
#include <krun.h>
#include "kurlwidget.h"
KURLWidget::KURLWidget(const QString& text, QWidget *parent, const char *name)
: KURLLabel( parent, name )
{
setText( text );
connect( this, SIGNAL( leftClickedURL() ), SLOT( run() ));
setUseTips( true );
}
void KURLWidget::run()
{
KURL ku( url() );
if ( ku.isValid() ) {
(void) new KRun( ku, this );
}
}
#include "kurlwidget.moc"

@ -0,0 +1,36 @@
/* This file is part of the KDE project
Copyright (C) 1998,1999,2000 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KURLWIDGET_H
#define KURLWIDGET_H
#include <kurllabel.h>
class KURLWidget : public KURLLabel
{
Q_OBJECT
public:
KURLWidget( const QString& text, QWidget *, const char *name=0 );
protected slots:
virtual void run();
};
#endif

@ -0,0 +1,66 @@
/* This file is part of the KDE project
Copyright (C) 1998-2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <qstring.h>
#include <kaboutdata.h>
#include <kapplication.h>
#include <kcmdlineargs.h>
#include <klocale.h>
#include <kdebug.h>
#include "kuickshow.h"
#include "version.h"
static KCmdLineOptions options[] =
{
{ "lastfolder", I18N_NOOP("Start in the last visited folder, not the "
"current working folder."), 0 },
{ "d", 0, 0 }, // short option for --lastdir
{ "+[files]", I18N_NOOP("Optional image filenames/urls to show"), 0 },
KCmdLineLastOption
};
extern "C" KDE_EXPORT int kdemain(int argc, char **argv)
{
KAboutData about(
"kuickshow", I18N_NOOP( "KuickShow" ), KUICKSHOWVERSION,
I18N_NOOP("A fast and versatile image viewer" ),
KAboutData::License_GPL, "(c) 1998-2006, Carsten Pfeiffer",
0 /*text*/, "http://devel-home.kde.org/~pfeiffer/" );
about.addAuthor( "Carsten Pfeiffer", 0, "pfeiffer@kde.org",
"http://devel-home.kde.org/~pfeiffer/" );
about.addCredit( "Rober Hamberger", 0, "rh474@bingo-ev.de" );
about.addCredit( "Thorsten Scheuermann", 0, "uddn@rz.uni-karlsruhe.de" );
KCmdLineArgs::init( argc, argv, &about );
KCmdLineArgs::addCmdLineOptions( options );
KApplication app;
if ( app.isRestored() ) {
(new KuickShow())->restore( 1, false ); // don't show automatically
}
else {
KuickShow *k = new KuickShow( "kuickshow" );
app.setMainWidget( k );
}
return app.exec();
}

@ -0,0 +1,43 @@
/* This file is part of the KDE project
Copyright (C) 1998,1999 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "fileview.h"
#include "kuickdata.h"
#include "mainwidget.h"
MainWidget::MainWidget( QString startDir, QWidget *parent,
const char *name ) : QWidget ( parent, name )
{
box = new FileView( startDir, true, (QDir::Dirs | QDir::Files),
this, "fileview" );
}
MainWidget::~MainWidget()
{
}
// for now, no layout managers
void MainWidget::resizeEvent( QResizeEvent * )
{
box->resize( width(), height() );
}
#include "mainwidget.moc"

@ -0,0 +1,47 @@
/* This file is part of the KDE project
Copyright (C) 1998 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <qevent.h>
#include <qstring.h>
#include <qwidget.h>
class FileView;
class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget( QString, QWidget *parent, const char *name=0L);
~MainWidget();
FileView* getFileBox() { return box; }
protected:
virtual void resizeEvent( QResizeEvent * );
private:
FileView *box;
};
#endif

@ -0,0 +1,338 @@
/* This file is part of the KDE project
Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <qcheckbox.h>
#include <qfont.h>
#include <qfontmetrics.h>
#include <qgrid.h>
#include <qhbox.h>
#include <qlayout.h>
#include <qimage.h>
#include <kimageeffect.h>
#include <qpaintdevicemetrics.h>
#include <qpainter.h>
#include <qradiobutton.h>
#include <qvbuttongroup.h>
#include <qcolor.h>
#include <kcombobox.h>
#include <kdialog.h>
#include <klocale.h>
#include <kdebug.h>
#include <kglobalsettings.h>
#include <knuminput.h>
#include <kprinter.h>
#include <ktempfile.h>
#include "imagewindow.h"
#include "printing.h"
#include "version.h"
bool Printing::printImage( ImageWindow& imageWin, QWidget *parent )
{
QString imageURL = imageWin.url().prettyURL();
KPrinter printer;
printer.setDocName( imageURL );
printer.setCreator( "KuickShow-" KUICKSHOWVERSION );
KPrinter::addDialogPage( new KuickPrintDialogPage( parent, "kuick page"));
if ( printer.setup( parent, i18n("Print %1").arg(printer.docName().section('/', -1)) ) )
{
KTempFile tmpFile( QString::null, ".png" );
if ( tmpFile.status() == 0 )
{
tmpFile.setAutoDelete( true );
if ( imageWin.saveImage( tmpFile.name(), true ) )
return printImageWithQt( tmpFile.name(), printer,
imageURL );
}
return false;
}
return true; // user aborted
}
bool Printing::printImageWithQt( const QString& filename, KPrinter& printer,
const QString& originalFileName )
{
QImage image( filename );
if ( image.isNull() ) {
kdWarning() << "Can't load image: " << filename << " for printing.\n";
return false;
}
QPainter p;
p.begin( &printer );
QPaintDeviceMetrics metrics( &printer );
p.setFont( KGlobalSettings::generalFont() );
QFontMetrics fm = p.fontMetrics();
int w = metrics.width();
int h = metrics.height();
QString t = "true";
QString f = "false";
// Black & white print?
if ( printer.option( "app-kuickshow-blackwhite" ) != f) {
image = image.convertDepth( 1, Qt::MonoOnly | Qt::ThresholdDither | Qt::AvoidDither );
}
int filenameOffset = 0;
bool printFilename = printer.option( "app-kuickshow-printFilename" ) != f;
if ( printFilename ) {
filenameOffset = fm.lineSpacing() + 14;
h -= filenameOffset; // filename goes into one line!
}
//
// shrink image to pagesize, if necessary
//
bool shrinkToFit = (printer.option( "app-kuickshow-shrinkToFit" ) != f);
QSize imagesize = image.size();
if ( shrinkToFit && (image.width() > w || image.height() > h) ) {
imagesize.scale( w, h, QSize::ScaleMin );
}
//
// align image
//
bool ok = false;
int alignment = printer.option("app-kuickshow-alignment").toInt( &ok );
if ( !ok )
alignment = Qt::AlignCenter; // default
int x = 0;
int y = 0;
// ### need a GUI for this in KuickPrintDialogPage!
// x - alignment
if ( alignment & Qt::AlignHCenter )
x = (w - imagesize.width())/2;
else if ( alignment & Qt::AlignLeft )
x = 0;
else if ( alignment & Qt::AlignRight )
x = w - imagesize.width();
// y - alignment
if ( alignment & Qt::AlignVCenter )
y = (h - imagesize.height())/2;
else if ( alignment & Qt::AlignTop )
y = 0;
else if ( alignment & Qt::AlignBottom )
y = h - imagesize.height();
//
// perform the actual drawing
//
p.drawImage( QRect( x, y, imagesize.width(), imagesize.height()), image );
if ( printFilename )
{
QString fname = minimizeString( originalFileName, fm, w );
if ( !fname.isEmpty() )
{
int fw = fm.width( fname );
int x = (w - fw)/2;
int y = metrics.height() - filenameOffset/2;
p.drawText( x, y, fname );
}
}
p.end();
return true;
}
QString Printing::minimizeString( QString text, const QFontMetrics&
metrics, int maxWidth )
{
if ( text.length() <= 5 )
return QString::null; // no sense to cut that tiny little string
bool changed = false;
while ( metrics.width( text ) > maxWidth )
{
int mid = text.length() / 2;
text.remove( mid, 2 ); // remove 2 characters in the middle
changed = true;
}
if ( changed ) // add "..." in the middle
{
int mid = text.length() / 2;
if ( mid <= 5 ) // sanity check
return QString::null;
text.replace( mid - 1, 3, "..." );
}
return text;
}
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
KuickPrintDialogPage::KuickPrintDialogPage( QWidget *parent, const char *name )
: KPrintDialogPage( parent, name )
{
setTitle( i18n("Image Settings") );
QVBoxLayout *layout = new QVBoxLayout( this );
layout->setMargin( KDialog::marginHint() );
layout->setSpacing( KDialog::spacingHint() );
m_addFileName = new QCheckBox( i18n("Print fi&lename below image"), this);
m_addFileName->setChecked( true );
layout->addWidget( m_addFileName );
m_blackwhite = new QCheckBox ( i18n("Print image in &black and white"), this);
m_blackwhite->setChecked( false );
layout->addWidget (m_blackwhite );
QVButtonGroup *group = new QVButtonGroup( i18n("Scaling"), this );
group->setRadioButtonExclusive( true );
layout->addWidget( group );
// m_shrinkToFit = new QRadioButton( i18n("Shrink image to &fit, if necessary"), group );
m_shrinkToFit = new QCheckBox( i18n("Shrink image to &fit, if necessary"), group );
m_shrinkToFit->setChecked( true );
QWidget *widget = new QWidget( group );
QGridLayout *grid = new QGridLayout( widget, 3, 3 );
grid->addColSpacing( 0, 30 );
grid->setColStretch( 0, 0 );
grid->setColStretch( 1, 1 );
grid->setColStretch( 2, 10 );
m_scale = new QRadioButton( i18n("Print e&xact size: "), widget );
m_scale->setEnabled( false ); // ###
grid->addMultiCellWidget( m_scale, 0, 0, 0, 1 );
group->insert( m_scale );
connect( m_scale, SIGNAL( toggled( bool )), SLOT( toggleScaling( bool )));
m_units = new KComboBox( false, widget, "unit combobox" );
grid->addWidget( m_units, 0, 2, AlignLeft );
m_units->insertItem( i18n("Millimeters") );
m_units->insertItem( i18n("Centimeters") );
m_units->insertItem( i18n("Inches") );
m_width = new KIntNumInput( widget, "exact width" );
grid->addWidget( m_width, 1, 1 );
m_width->setLabel( i18n("&Width:" ) );
m_width->setMinValue( 1 );
m_height = new KIntNumInput( widget, "exact height" );
grid->addWidget( m_height, 2, 1 );
m_height->setLabel( i18n("&Height:" ) );
m_height->setMinValue( 1 );
}
KuickPrintDialogPage::~KuickPrintDialogPage()
{
}
void KuickPrintDialogPage::getOptions( QMap<QString,QString>& opts,
bool /*incldef*/ )
{
QString t = "true";
QString f = "false";
// ### opts["app-kuickshow-alignment"] = ;
opts["app-kuickshow-printFilename"] = m_addFileName->isChecked() ? t : f;
opts["app-kuickshow-blackwhite"] = m_blackwhite->isChecked() ? t : f;
opts["app-kuickshow-shrinkToFit"] = m_shrinkToFit->isChecked() ? t : f;
opts["app-kuickshow-scale"] = m_scale->isChecked() ? t : f;
opts["app-kuickshow-scale-unit"] = m_units->currentText();
opts["app-kuickshow-scale-width-pixels"] = QString::number( scaleWidth() );
opts["app-kuickshow-scale-height-pixels"] = QString::number( scaleHeight() );
}
void KuickPrintDialogPage::setOptions( const QMap<QString,QString>& opts )
{
QString t = "true";
QString f = "false";
m_addFileName->setChecked( opts["app-kuickshow-printFilename"] != f );
// This sound strange, but if I copy the code on the line above, the checkbox
// was always checked. And this isn't the wanted behavior. So, with this works.
// KPrint magic ;-)
m_blackwhite->setChecked ( false );
m_shrinkToFit->setChecked( opts["app-kuickshow-shrinkToFit"] != f );
m_scale->setChecked( opts["app-kuickshow-scale"] == t );
m_units->setCurrentItem( opts["app-kuickshow-scale-unit"] );
bool ok;
int val = opts["app-kuickshow-scale-width-pixels"].toInt( &ok );
if ( ok )
setScaleWidth( val );
val = opts["app-kuickshow-scale-height-pixels"].toInt( &ok );
if ( ok )
setScaleHeight( val );
if ( m_scale->isChecked() == m_shrinkToFit->isChecked() )
m_shrinkToFit->setChecked( !m_scale->isChecked() );
// ### re-enable when implementednn
toggleScaling( false && m_scale->isChecked() );
}
void KuickPrintDialogPage::toggleScaling( bool enable )
{
m_width->setEnabled( enable );
m_height->setEnabled( enable );
m_units->setEnabled( enable );
}
int KuickPrintDialogPage::scaleWidth() const
{
return fromUnitToPixels( m_width->value() );
}
int KuickPrintDialogPage::scaleHeight() const
{
return fromUnitToPixels( m_height->value() );
}
void KuickPrintDialogPage::setScaleWidth( int pixels )
{
m_width->setValue( (int) pixelsToUnit( pixels ) );
}
void KuickPrintDialogPage::setScaleHeight( int pixels )
{
m_width->setValue( (int) pixelsToUnit( pixels ) );
}
int KuickPrintDialogPage::fromUnitToPixels( float /*value*/ ) const
{
return 1; // ###
}
float KuickPrintDialogPage::pixelsToUnit( int /*pixels*/ ) const
{
return 1.0; // ###
}
#include "printing.moc"

@ -0,0 +1,85 @@
/* This file is part of the KDE project
Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef PRINTING_H
#define PRINTING_H
#include <qfontmetrics.h>
#include <qstring.h>
#include <kdeprint/kprintdialogpage.h>
class QCheckBox;
class QRadioButton;
class KComboBox;
class KPrinter;
class KIntNumInput;
class ImageWindow;
class Printing
{
public:
static bool printImage( ImageWindow& imageWin, QWidget *parent = 0L);
static bool printImageWithQt( const QString& filename, KPrinter& printer,
const QString& originalFileName );
private:
static void addConfigPages();
static QString minimizeString( QString text, const QFontMetrics& metrics,
int maxWidth );
};
class KuickPrintDialogPage : public KPrintDialogPage
{
Q_OBJECT
public:
KuickPrintDialogPage( QWidget *parent = 0L, const char *name = 0 );
~KuickPrintDialogPage();
virtual void getOptions(QMap<QString,QString>& opts, bool incldef = false);
virtual void setOptions(const QMap<QString,QString>& opts);
private slots:
void toggleScaling( bool enable );
private:
// return values in pixels!
int scaleWidth() const;
int scaleHeight() const;
void setScaleWidth( int pixels );
void setScaleHeight( int pixels );
int fromUnitToPixels( float val ) const;
float pixelsToUnit( int pixels ) const;
QCheckBox *m_shrinkToFit;
QRadioButton *m_scale;
KIntNumInput *m_width;
KIntNumInput *m_height;
KComboBox *m_units;
QCheckBox *m_addFileName;
QCheckBox *m_blackwhite;
};
#endif // PRINTING_H

@ -0,0 +1,80 @@
/* This file is part of the KDE project
Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <qcheckbox.h>
#include <qlayout.h>
#include <kdialog.h>
#include <klocale.h>
#include <knuminput.h>
#include "slideshowwidget.h"
SlideShowWidget::SlideShowWidget( QWidget *parent, const char *name )
: QWidget( parent, name )
{
// setTitle( i18n("Slideshow") );
QVBoxLayout *layout = new QVBoxLayout( this );
layout->setSpacing( KDialog::spacingHint() );
m_fullScreen = new QCheckBox( i18n("Switch to &full-screen"), this );
m_startWithCurrent = new QCheckBox( i18n("S&tart with current image"), this);
m_delayTime = new KIntNumInput( this, "delay time" );
m_delayTime->setLabel( i18n("De&lay between slides:") );
m_delayTime->setSuffix( i18n(" sec") );
m_delayTime->setRange( 0, 60 * 60 ); // 1 hour
m_delayTime->setSpecialValueText( i18n("Wait for key") );
m_cycles = new KIntNumInput( m_delayTime, 1, this );
m_cycles->setLabel( i18n("&Iterations (0 = infinite):") );
m_cycles->setSpecialValueText( i18n("infinite") );
m_cycles->setRange( 0, 500 );
layout->addWidget( m_fullScreen );
layout->addWidget( m_startWithCurrent );
layout->addWidget( m_delayTime );
layout->addWidget( m_cycles );
layout->addStretch( 1 );
loadSettings( *kdata );
}
SlideShowWidget::~SlideShowWidget()
{
}
void SlideShowWidget::loadSettings( const KuickData& data )
{
m_delayTime->setValue( data.slideDelay / 1000 );
m_cycles->setValue( data.slideshowCycles );
m_fullScreen->setChecked( data.slideshowFullscreen );
m_startWithCurrent->setChecked( !data.slideshowStartAtFirst );
}
void SlideShowWidget::applySettings( KuickData& data )
{
data.slideDelay = m_delayTime->value() * 1000;
data.slideshowCycles = m_cycles->value();
data.slideshowFullscreen = m_fullScreen->isChecked();
data.slideshowStartAtFirst = !m_startWithCurrent->isChecked();
}
#include "slideshowwidget.moc"

@ -0,0 +1,44 @@
/* This file is part of the KDE project
Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
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, version 2.
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef SLIDESHOWWIDGET_H
#define SLIDESHOWWIDGET_H
#include "kuickdata.h"
class QCheckBox;
class KIntNumInput;
class SlideShowWidget : public QWidget
{
Q_OBJECT
public:
SlideShowWidget( QWidget *parent, const char *name );
~SlideShowWidget();
virtual void loadSettings( const KuickData& data );
virtual void applySettings( KuickData& data );
private:
KIntNumInput *m_delayTime;
KIntNumInput *m_cycles;
QCheckBox *m_fullScreen;
QCheckBox *m_startWithCurrent;
};
#endif // SLIDESHOWWIDGET_H

@ -0,0 +1,3 @@
#ifndef KUICKSHOWVERSION
#define KUICKSHOWVERSION "0.8.13"
#endif

@ -0,0 +1,2 @@
doc
kuickshow
Loading…
Cancel
Save