git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kbookreader@1242482 283d02a7-25f6-0310-bc7c-ecb5cbfe19dav3.5.13-sru
commit
a3570c360e
@ -0,0 +1,16 @@
|
|||||||
|
Version 0.2 - 2007-06-16 - Alexander Nemish
|
||||||
|
* Rendering engine rewrite
|
||||||
|
* Rendering speed-ups and optimizations (5x speedups)
|
||||||
|
* Painting optimizations (cached painting, partial repaint)
|
||||||
|
* Fullscreen support
|
||||||
|
|
||||||
|
Version 0.1.1 - 2007-06-14 - Alexander Nemish
|
||||||
|
* [FIXED]: Background image resizing bug. Thanks to Alexander Bodnarashik.
|
||||||
|
|
||||||
|
Version 0.1 - 2006-11-09 - Alexander Nemish
|
||||||
|
Initial version.
|
||||||
|
* 2 page book-like style
|
||||||
|
* Custom font selection
|
||||||
|
* Multiple bookmarks per book. You even can give them names.
|
||||||
|
* Bookmarks manager
|
||||||
|
* Quick access to the first 10 bookmarks via Alt+number
|
@ -0,0 +1,276 @@
|
|||||||
|
# Doxyfile 1.4.1-KDevelop
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Project related configuration options
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
PROJECT_NAME = bookreader.kdevelop
|
||||||
|
PROJECT_NUMBER = 0.1
|
||||||
|
OUTPUT_DIRECTORY =
|
||||||
|
CREATE_SUBDIRS = NO
|
||||||
|
OUTPUT_LANGUAGE = English
|
||||||
|
USE_WINDOWS_ENCODING = NO
|
||||||
|
BRIEF_MEMBER_DESC = YES
|
||||||
|
REPEAT_BRIEF = YES
|
||||||
|
ABBREVIATE_BRIEF = "The $name class" \
|
||||||
|
"The $name widget" \
|
||||||
|
"The $name file" \
|
||||||
|
is \
|
||||||
|
provides \
|
||||||
|
specifies \
|
||||||
|
contains \
|
||||||
|
represents \
|
||||||
|
a \
|
||||||
|
an \
|
||||||
|
the
|
||||||
|
ALWAYS_DETAILED_SEC = NO
|
||||||
|
INLINE_INHERITED_MEMB = NO
|
||||||
|
FULL_PATH_NAMES = YES
|
||||||
|
STRIP_FROM_PATH = /home/nau/Projects/bookreader_/
|
||||||
|
STRIP_FROM_INC_PATH =
|
||||||
|
SHORT_NAMES = NO
|
||||||
|
JAVADOC_AUTOBRIEF = NO
|
||||||
|
MULTILINE_CPP_IS_BRIEF = NO
|
||||||
|
DETAILS_AT_TOP = NO
|
||||||
|
INHERIT_DOCS = YES
|
||||||
|
DISTRIBUTE_GROUP_DOC = NO
|
||||||
|
TAB_SIZE = 8
|
||||||
|
ALIASES =
|
||||||
|
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||||
|
OPTIMIZE_OUTPUT_JAVA = NO
|
||||||
|
SUBGROUPING = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Build related configuration options
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
EXTRACT_ALL = NO
|
||||||
|
EXTRACT_PRIVATE = NO
|
||||||
|
EXTRACT_STATIC = NO
|
||||||
|
EXTRACT_LOCAL_CLASSES = YES
|
||||||
|
EXTRACT_LOCAL_METHODS = NO
|
||||||
|
HIDE_UNDOC_MEMBERS = NO
|
||||||
|
HIDE_UNDOC_CLASSES = NO
|
||||||
|
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_MEMBER_DOCS = YES
|
||||||
|
SORT_BRIEF_DOCS = NO
|
||||||
|
SORT_BY_SCOPE_NAME = NO
|
||||||
|
GENERATE_TODOLIST = YES
|
||||||
|
GENERATE_TESTLIST = YES
|
||||||
|
GENERATE_BUGLIST = YES
|
||||||
|
GENERATE_DEPRECATEDLIST= YES
|
||||||
|
ENABLED_SECTIONS =
|
||||||
|
MAX_INITIALIZER_LINES = 30
|
||||||
|
SHOW_USED_FILES = YES
|
||||||
|
SHOW_DIRECTORIES = YES
|
||||||
|
FILE_VERSION_FILTER =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to warning and progress messages
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
QUIET = NO
|
||||||
|
WARNINGS = YES
|
||||||
|
WARN_IF_UNDOCUMENTED = YES
|
||||||
|
WARN_IF_DOC_ERROR = YES
|
||||||
|
WARN_NO_PARAMDOC = NO
|
||||||
|
WARN_FORMAT = "$file:$line: $text"
|
||||||
|
WARN_LOGFILE =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the input files
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
INPUT = /home/nau/Projects/bookreader \
|
||||||
|
/home/nau/Projects/bookreader/src
|
||||||
|
FILE_PATTERNS = *.c \
|
||||||
|
*.cc \
|
||||||
|
*.cxx \
|
||||||
|
*.cpp \
|
||||||
|
*.c++ \
|
||||||
|
*.java \
|
||||||
|
*.ii \
|
||||||
|
*.ixx \
|
||||||
|
*.ipp \
|
||||||
|
*.i++ \
|
||||||
|
*.inl \
|
||||||
|
*.h \
|
||||||
|
*.hh \
|
||||||
|
*.hxx \
|
||||||
|
*.hpp \
|
||||||
|
*.h++ \
|
||||||
|
*.idl \
|
||||||
|
*.odl \
|
||||||
|
*.cs \
|
||||||
|
*.php \
|
||||||
|
*.php3 \
|
||||||
|
*.inc \
|
||||||
|
*.m \
|
||||||
|
*.mm \
|
||||||
|
*.dox \
|
||||||
|
*.C \
|
||||||
|
*.CC \
|
||||||
|
*.C++ \
|
||||||
|
*.II \
|
||||||
|
*.I++ \
|
||||||
|
*.H \
|
||||||
|
*.HH \
|
||||||
|
*.H++ \
|
||||||
|
*.CS \
|
||||||
|
*.PHP \
|
||||||
|
*.PHP3 \
|
||||||
|
*.M \
|
||||||
|
*.MM \
|
||||||
|
*.C \
|
||||||
|
*.H \
|
||||||
|
*.tlh \
|
||||||
|
*.diff \
|
||||||
|
*.patch \
|
||||||
|
*.moc \
|
||||||
|
*.xpm \
|
||||||
|
*.dox
|
||||||
|
RECURSIVE = YES
|
||||||
|
EXCLUDE =
|
||||||
|
EXCLUDE_SYMLINKS = NO
|
||||||
|
EXCLUDE_PATTERNS =
|
||||||
|
EXAMPLE_PATH =
|
||||||
|
EXAMPLE_PATTERNS = *
|
||||||
|
EXAMPLE_RECURSIVE = NO
|
||||||
|
IMAGE_PATH =
|
||||||
|
INPUT_FILTER =
|
||||||
|
FILTER_PATTERNS =
|
||||||
|
FILTER_SOURCE_FILES = NO
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to source browsing
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
SOURCE_BROWSER = YES
|
||||||
|
INLINE_SOURCES = NO
|
||||||
|
STRIP_CODE_COMMENTS = YES
|
||||||
|
REFERENCED_BY_RELATION = YES
|
||||||
|
REFERENCES_RELATION = YES
|
||||||
|
VERBATIM_HEADERS = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the alphabetical class index
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
ALPHABETICAL_INDEX = NO
|
||||||
|
COLS_IN_ALPHA_INDEX = 5
|
||||||
|
IGNORE_PREFIX =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the HTML output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_HTML = YES
|
||||||
|
HTML_OUTPUT = html
|
||||||
|
HTML_FILE_EXTENSION = .html
|
||||||
|
HTML_HEADER =
|
||||||
|
HTML_FOOTER =
|
||||||
|
HTML_STYLESHEET =
|
||||||
|
HTML_ALIGN_MEMBERS = YES
|
||||||
|
GENERATE_HTMLHELP = NO
|
||||||
|
CHM_FILE =
|
||||||
|
HHC_LOCATION =
|
||||||
|
GENERATE_CHI = NO
|
||||||
|
BINARY_TOC = NO
|
||||||
|
TOC_EXPAND = NO
|
||||||
|
DISABLE_INDEX = NO
|
||||||
|
ENUM_VALUES_PER_LINE = 4
|
||||||
|
GENERATE_TREEVIEW = NO
|
||||||
|
TREEVIEW_WIDTH = 250
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the LaTeX output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_LATEX = NO
|
||||||
|
LATEX_OUTPUT = latex
|
||||||
|
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
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the RTF output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_RTF = NO
|
||||||
|
RTF_OUTPUT = rtf
|
||||||
|
COMPACT_RTF = NO
|
||||||
|
RTF_HYPERLINKS = NO
|
||||||
|
RTF_STYLESHEET_FILE =
|
||||||
|
RTF_EXTENSIONS_FILE =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the man page output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_MAN = NO
|
||||||
|
MAN_OUTPUT = man
|
||||||
|
MAN_EXTENSION = .3
|
||||||
|
MAN_LINKS = NO
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the XML output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_XML = NO
|
||||||
|
XML_OUTPUT = xml
|
||||||
|
XML_SCHEMA =
|
||||||
|
XML_DTD =
|
||||||
|
XML_PROGRAMLISTING = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options for the AutoGen Definitions output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_AUTOGEN_DEF = NO
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the Perl module output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_PERLMOD = NO
|
||||||
|
PERLMOD_LATEX = NO
|
||||||
|
PERLMOD_PRETTY = YES
|
||||||
|
PERLMOD_MAKEVAR_PREFIX =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Configuration options related to the preprocessor
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
ENABLE_PREPROCESSING = YES
|
||||||
|
MACRO_EXPANSION = NO
|
||||||
|
EXPAND_ONLY_PREDEF = NO
|
||||||
|
SEARCH_INCLUDES = YES
|
||||||
|
INCLUDE_PATH =
|
||||||
|
INCLUDE_FILE_PATTERNS =
|
||||||
|
PREDEFINED =
|
||||||
|
EXPAND_AS_DEFINED =
|
||||||
|
SKIP_FUNCTION_MACROS = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Configuration::additions related to external references
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
TAGFILES =
|
||||||
|
GENERATE_TAGFILE = bookreader.tag
|
||||||
|
ALLEXTERNALS = NO
|
||||||
|
EXTERNAL_GROUPS = YES
|
||||||
|
PERL_PATH = /usr/bin/perl
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Configuration options related to the dot tool
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
CLASS_DIAGRAMS = YES
|
||||||
|
HIDE_UNDOC_RELATIONS = YES
|
||||||
|
HAVE_DOT = YES
|
||||||
|
CLASS_GRAPH = YES
|
||||||
|
COLLABORATION_GRAPH = YES
|
||||||
|
GROUP_GRAPHS = YES
|
||||||
|
UML_LOOK = YES
|
||||||
|
TEMPLATE_RELATIONS = NO
|
||||||
|
INCLUDE_GRAPH = YES
|
||||||
|
INCLUDED_BY_GRAPH = YES
|
||||||
|
CALL_GRAPH = NO
|
||||||
|
GRAPHICAL_HIERARCHY = YES
|
||||||
|
DIRECTORY_GRAPH = YES
|
||||||
|
DOT_IMAGE_FORMAT = png
|
||||||
|
DOT_PATH =
|
||||||
|
DOTFILE_DIRS =
|
||||||
|
MAX_DOT_GRAPH_WIDTH = 1024
|
||||||
|
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||||
|
MAX_DOT_GRAPH_DEPTH = 1000
|
||||||
|
DOT_TRANSPARENT = NO
|
||||||
|
DOT_MULTI_TARGETS = NO
|
||||||
|
GENERATE_LEGEND = YES
|
||||||
|
DOT_CLEANUP = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Configuration::additions related to the search engine
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
SEARCHENGINE = NO
|
@ -0,0 +1,167 @@
|
|||||||
|
Basic Installation
|
||||||
|
==================
|
||||||
|
|
||||||
|
These are generic installation instructions.
|
||||||
|
|
||||||
|
The `configure' shell script attempts to guess correct values for
|
||||||
|
various system-dependent variables used during compilation. It uses
|
||||||
|
those values to create a `Makefile' in each directory of the package.
|
||||||
|
It may also create one or more `.h' files containing system-dependent
|
||||||
|
definitions. Finally, it creates a shell script `config.status' that
|
||||||
|
you can run in the future to recreate the current configuration, a file
|
||||||
|
`config.cache' that saves the results of its tests to speed up
|
||||||
|
reconfiguring, and a file `config.log' containing compiler output
|
||||||
|
(useful mainly for debugging `configure').
|
||||||
|
|
||||||
|
If you need to do unusual things to compile the package, please try
|
||||||
|
to figure out how `configure' could check whether to do them, and mail
|
||||||
|
diffs or instructions to the address given in the `README' so they can
|
||||||
|
be considered for the next release. If at some point `config.cache'
|
||||||
|
contains results you don't want to keep, you may remove or edit it.
|
||||||
|
|
||||||
|
The file `configure.in' is used to create `configure' by a program
|
||||||
|
called `autoconf'. You only need `configure.in' if you want to change
|
||||||
|
it or regenerate `configure' using a newer version of `autoconf'.
|
||||||
|
|
||||||
|
The simplest way to compile this package is:
|
||||||
|
|
||||||
|
1. `cd' to the directory containing the package's source code and type
|
||||||
|
`./configure' to configure the package for your system. If you're
|
||||||
|
using `csh' on an old version of System V, you might need to type
|
||||||
|
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||||
|
`configure' itself.
|
||||||
|
|
||||||
|
Running `configure' takes a while. While running, it prints some
|
||||||
|
messages telling which features it is checking for.
|
||||||
|
|
||||||
|
2. Type `make' to compile the package.
|
||||||
|
|
||||||
|
3. Type `make install' to install the programs and any data files and
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
4. You can remove the program binaries and object files from the
|
||||||
|
source code directory by typing `make clean'.
|
||||||
|
|
||||||
|
Compilers and Options
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Some systems require unusual options for compilation or linking that
|
||||||
|
the `configure' script does not know about. You can give `configure'
|
||||||
|
initial values for variables by setting them in the environment. Using
|
||||||
|
a Bourne-compatible shell, you can do that on the command line like
|
||||||
|
this:
|
||||||
|
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
||||||
|
|
||||||
|
Or on systems that have the `env' program, you can do it like this:
|
||||||
|
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
||||||
|
|
||||||
|
Compiling For Multiple Architectures
|
||||||
|
====================================
|
||||||
|
|
||||||
|
You can compile the package for more than one kind of computer at the
|
||||||
|
same time, by placing the object files for each architecture in their
|
||||||
|
own directory. To do this, you must use a version of `make' that
|
||||||
|
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||||
|
directory where you want the object files and executables to go and run
|
||||||
|
the `configure' script. `configure' automatically checks for the
|
||||||
|
source code in the directory that `configure' is in and in `..'.
|
||||||
|
|
||||||
|
If you have to use a `make' that does not supports the `VPATH'
|
||||||
|
variable, you have to compile the package for one architecture at a time
|
||||||
|
in the source code directory. After you have installed the package for
|
||||||
|
one architecture, use `make distclean' before reconfiguring for another
|
||||||
|
architecture.
|
||||||
|
|
||||||
|
Installation Names
|
||||||
|
==================
|
||||||
|
|
||||||
|
By default, `make install' will install the package's files in
|
||||||
|
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||||
|
installation prefix other than `/usr/local' by giving `configure' the
|
||||||
|
option `--prefix=PATH'.
|
||||||
|
|
||||||
|
You can specify separate installation prefixes for
|
||||||
|
architecture-specific files and architecture-independent files. If you
|
||||||
|
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||||
|
PATH as the prefix for installing programs and libraries.
|
||||||
|
Documentation and other data files will still use the regular prefix.
|
||||||
|
|
||||||
|
If the package supports it, you can cause programs to be installed
|
||||||
|
with an extra prefix or suffix on their names by giving `configure' the
|
||||||
|
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||||
|
|
||||||
|
Optional Features
|
||||||
|
=================
|
||||||
|
|
||||||
|
Some packages pay attention to `--enable-FEATURE' options to
|
||||||
|
`configure', where FEATURE indicates an optional part of the package.
|
||||||
|
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||||
|
is something like `gnu-as' or `x' (for the X Window System). The
|
||||||
|
`README' should mention any `--enable-' and `--with-' options that the
|
||||||
|
package recognizes.
|
||||||
|
|
||||||
|
For packages that use the X Window System, `configure' can usually
|
||||||
|
find the X include and library files automatically, but if it doesn't,
|
||||||
|
you can use the `configure' options `--x-includes=DIR' and
|
||||||
|
`--x-libraries=DIR' to specify their locations.
|
||||||
|
|
||||||
|
Specifying the System Type
|
||||||
|
==========================
|
||||||
|
|
||||||
|
There may be some features `configure' can not figure out
|
||||||
|
automatically, but needs to determine by the type of host the package
|
||||||
|
will run on. Usually `configure' can figure that out, but if it prints
|
||||||
|
a message saying it can not guess the host type, give it the
|
||||||
|
`--host=TYPE' option. TYPE can either be a short name for the system
|
||||||
|
type, such as `sun4', or a canonical name with three fields:
|
||||||
|
CPU-COMPANY-SYSTEM
|
||||||
|
|
||||||
|
See the file `config.sub' for the possible values of each field. If
|
||||||
|
`config.sub' isn't included in this package, then this package doesn't
|
||||||
|
need to know the host type.
|
||||||
|
|
||||||
|
If you are building compiler tools for cross-compiling, you can also
|
||||||
|
use the `--target=TYPE' option to select the type of system they will
|
||||||
|
produce code for and the `--build=TYPE' option to select the type of
|
||||||
|
system on which you are compiling the package.
|
||||||
|
|
||||||
|
Sharing Defaults
|
||||||
|
================
|
||||||
|
|
||||||
|
If you want to set default values for `configure' scripts to share,
|
||||||
|
you can create a site shell script called `config.site' that gives
|
||||||
|
default values for variables like `CC', `cache_file', and `prefix'.
|
||||||
|
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||||
|
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||||
|
`CONFIG_SITE' environment variable to the location of the site script.
|
||||||
|
A warning: not all `configure' scripts look for a site script.
|
||||||
|
|
||||||
|
Operation Controls
|
||||||
|
==================
|
||||||
|
|
||||||
|
`configure' recognizes the following options to control how it
|
||||||
|
operates.
|
||||||
|
|
||||||
|
`--cache-file=FILE'
|
||||||
|
Use and save the results of the tests in FILE instead of
|
||||||
|
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
|
||||||
|
debugging `configure'.
|
||||||
|
|
||||||
|
`--help'
|
||||||
|
Print a summary of the options to `configure', and exit.
|
||||||
|
|
||||||
|
`--quiet'
|
||||||
|
`--silent'
|
||||||
|
`-q'
|
||||||
|
Do not print messages saying which checks are being made.
|
||||||
|
|
||||||
|
`--srcdir=DIR'
|
||||||
|
Look for the package's source code in directory DIR. Usually
|
||||||
|
`configure' can determine that directory automatically.
|
||||||
|
|
||||||
|
`--version'
|
||||||
|
Print the version of Autoconf used to generate the `configure'
|
||||||
|
script, and exit.
|
||||||
|
|
||||||
|
`configure' also accepts some other, not widely useful, options.
|
||||||
|
|
@ -0,0 +1,22 @@
|
|||||||
|
SUBDIRS = $(TOPSUBDIRS)
|
||||||
|
|
||||||
|
$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
|
||||||
|
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;
|
||||||
|
|
||||||
|
$(top_srcdir)/subdirs:
|
||||||
|
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs
|
||||||
|
|
||||||
|
$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in
|
||||||
|
@cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4
|
||||||
|
|
||||||
|
MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files
|
||||||
|
|
||||||
|
package-messages:
|
||||||
|
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common package-messages
|
||||||
|
$(MAKE) -C po merge
|
||||||
|
|
||||||
|
EXTRA_DIST = admin COPYING configure.in.in
|
||||||
|
|
||||||
|
dist-hook:
|
||||||
|
cd $(top_distdir) && perl admin/am_edit -padmin
|
||||||
|
cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs
|
@ -0,0 +1,10 @@
|
|||||||
|
all:
|
||||||
|
@echo "This Makefile is only for the CVS repository"
|
||||||
|
@echo "This will be deleted before making the distribution"
|
||||||
|
@echo ""
|
||||||
|
$(MAKE) -f admin/Makefile.common cvs
|
||||||
|
|
||||||
|
dist:
|
||||||
|
$(MAKE) -f admin/Makefile.common dist
|
||||||
|
|
||||||
|
.SILENT:
|
@ -0,0 +1,18 @@
|
|||||||
|
Program:
|
||||||
|
- bookmarks in the bottom
|
||||||
|
- archive support
|
||||||
|
- collection manager
|
||||||
|
- search
|
||||||
|
- themes support
|
||||||
|
- KNewStuff for themes
|
||||||
|
- plugins aka loaders to support multiple input formats
|
||||||
|
|
||||||
|
View:
|
||||||
|
- single and double page modes
|
||||||
|
- simple and rendered modes
|
||||||
|
|
||||||
|
Render:
|
||||||
|
- hyphenation
|
||||||
|
- use enca to get a correct codec for text
|
||||||
|
|
||||||
|
BUGS:
|
File diff suppressed because it is too large
Load Diff
@ -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,289 @@
|
|||||||
|
<?xml version = '1.0'?>
|
||||||
|
<kdevelop>
|
||||||
|
<general>
|
||||||
|
<author>Alexander Nemish</author>
|
||||||
|
<email>atlanter@gmail.com</email>
|
||||||
|
<version>0.1</version>
|
||||||
|
<projectmanagement>KDevKDEAutoProject</projectmanagement>
|
||||||
|
<primarylanguage>C++</primarylanguage>
|
||||||
|
<keywords>
|
||||||
|
<keyword>C++</keyword>
|
||||||
|
<keyword>Code</keyword>
|
||||||
|
<keyword>Qt</keyword>
|
||||||
|
<keyword>KDE</keyword>
|
||||||
|
</keywords>
|
||||||
|
<projectdirectory>.</projectdirectory>
|
||||||
|
<absoluteprojectpath>false</absoluteprojectpath>
|
||||||
|
<description/>
|
||||||
|
<ignoreparts/>
|
||||||
|
<versioncontrol>kdevsubversion</versioncontrol>
|
||||||
|
<projectname>bookreader</projectname>
|
||||||
|
</general>
|
||||||
|
<kdevautoproject>
|
||||||
|
<general>
|
||||||
|
<activetarget>src/bookreader</activetarget>
|
||||||
|
<useconfiguration>debug</useconfiguration>
|
||||||
|
</general>
|
||||||
|
<run>
|
||||||
|
<mainprogram>src/bookreader</mainprogram>
|
||||||
|
<terminal>false</terminal>
|
||||||
|
<directoryradio>executable</directoryradio>
|
||||||
|
<customdirectory>/</customdirectory>
|
||||||
|
<programargs/>
|
||||||
|
<autocompile>true</autocompile>
|
||||||
|
<envvars/>
|
||||||
|
<runarguments>
|
||||||
|
<bookreader/>
|
||||||
|
</runarguments>
|
||||||
|
</run>
|
||||||
|
<make>
|
||||||
|
<envvars>
|
||||||
|
<envvar value="1" name="WANT_AUTOCONF_2_5" />
|
||||||
|
<envvar value="1" name="WANT_AUTOMAKE_1_6" />
|
||||||
|
</envvars>
|
||||||
|
<abortonerror>false</abortonerror>
|
||||||
|
<numberofjobs>5</numberofjobs>
|
||||||
|
<dontact>false</dontact>
|
||||||
|
<makebin/>
|
||||||
|
<prio>0</prio>
|
||||||
|
<runmultiplejobs>true</runmultiplejobs>
|
||||||
|
</make>
|
||||||
|
<configurations>
|
||||||
|
<optimized>
|
||||||
|
<builddir>optimized</builddir>
|
||||||
|
<ccompiler>kdevgccoptions</ccompiler>
|
||||||
|
<cxxcompiler>kdevgppoptions</cxxcompiler>
|
||||||
|
<f77compiler>kdevg77options</f77compiler>
|
||||||
|
<cxxflags>-O2 -g0</cxxflags>
|
||||||
|
<envvars/>
|
||||||
|
<configargs/>
|
||||||
|
<topsourcedir/>
|
||||||
|
<cppflags/>
|
||||||
|
<ldflags/>
|
||||||
|
<ccompilerbinary/>
|
||||||
|
<cxxcompilerbinary/>
|
||||||
|
<f77compilerbinary/>
|
||||||
|
<cflags/>
|
||||||
|
<f77flags/>
|
||||||
|
</optimized>
|
||||||
|
<debug>
|
||||||
|
<configargs>--enable-debug=full --prefix=/home/nau/.kde</configargs>
|
||||||
|
<builddir>debug</builddir>
|
||||||
|
<ccompiler>kdevgccoptions</ccompiler>
|
||||||
|
<cxxcompiler>kdevgppoptions</cxxcompiler>
|
||||||
|
<f77compiler>kdevg77options</f77compiler>
|
||||||
|
<cxxflags>-O0 -g3 -pg</cxxflags>
|
||||||
|
<envvars/>
|
||||||
|
<topsourcedir/>
|
||||||
|
<cppflags/>
|
||||||
|
<ldflags/>
|
||||||
|
<ccompilerbinary/>
|
||||||
|
<cxxcompilerbinary/>
|
||||||
|
<f77compilerbinary/>
|
||||||
|
<cflags/>
|
||||||
|
<f77flags/>
|
||||||
|
</debug>
|
||||||
|
</configurations>
|
||||||
|
</kdevautoproject>
|
||||||
|
<kdevfileview>
|
||||||
|
<groups>
|
||||||
|
<group pattern="*.cpp;*.cxx;*.h" name="Sources" />
|
||||||
|
<group pattern="*.ui" name="User Interface" />
|
||||||
|
<group pattern="*.png" name="Icons" />
|
||||||
|
<group pattern="*.po;*.ts" name="Translations" />
|
||||||
|
<group pattern="*" name="Others" />
|
||||||
|
<hidenonprojectfiles>false</hidenonprojectfiles>
|
||||||
|
<hidenonlocation>false</hidenonlocation>
|
||||||
|
</groups>
|
||||||
|
<tree>
|
||||||
|
<hidenonprojectfiles>false</hidenonprojectfiles>
|
||||||
|
<hidepatterns>*.o,*.lo,CVS</hidepatterns>
|
||||||
|
<showvcsfields>false</showvcsfields>
|
||||||
|
</tree>
|
||||||
|
</kdevfileview>
|
||||||
|
<kdevdoctreeview>
|
||||||
|
<ignoretocs>
|
||||||
|
<toc>ada</toc>
|
||||||
|
<toc>ada_bugs_gcc</toc>
|
||||||
|
<toc>bash</toc>
|
||||||
|
<toc>bash_bugs</toc>
|
||||||
|
<toc>clanlib</toc>
|
||||||
|
<toc>w3c-dom-level2-html</toc>
|
||||||
|
<toc>fortran_bugs_gcc</toc>
|
||||||
|
<toc>gnome1</toc>
|
||||||
|
<toc>gnustep</toc>
|
||||||
|
<toc>gtk</toc>
|
||||||
|
<toc>gtk_bugs</toc>
|
||||||
|
<toc>haskell</toc>
|
||||||
|
<toc>haskell_bugs_ghc</toc>
|
||||||
|
<toc>java_bugs_gcc</toc>
|
||||||
|
<toc>java_bugs_sun</toc>
|
||||||
|
<toc>pascal_bugs_fp</toc>
|
||||||
|
<toc>php</toc>
|
||||||
|
<toc>php_bugs</toc>
|
||||||
|
<toc>perl</toc>
|
||||||
|
<toc>perl_bugs</toc>
|
||||||
|
<toc>python</toc>
|
||||||
|
<toc>python_bugs</toc>
|
||||||
|
<toc>ruby</toc>
|
||||||
|
<toc>ruby_bugs</toc>
|
||||||
|
<toc>sdl</toc>
|
||||||
|
<toc>w3c-svg</toc>
|
||||||
|
<toc>sw</toc>
|
||||||
|
<toc>w3c-uaag10</toc>
|
||||||
|
<toc>wxwidgets_bugs</toc>
|
||||||
|
</ignoretocs>
|
||||||
|
<ignoreqt_xml>
|
||||||
|
<toc>qmake User Guide</toc>
|
||||||
|
</ignoreqt_xml>
|
||||||
|
</kdevdoctreeview>
|
||||||
|
<kdevdebugger>
|
||||||
|
<general>
|
||||||
|
<dbgshell>libtool</dbgshell>
|
||||||
|
<programargs/>
|
||||||
|
<gdbpath/>
|
||||||
|
<breakonloadinglibs>true</breakonloadinglibs>
|
||||||
|
<separatetty>false</separatetty>
|
||||||
|
<floatingtoolbar>false</floatingtoolbar>
|
||||||
|
<runappinappdirectory>true</runappinappdirectory>
|
||||||
|
<configGdbScript/>
|
||||||
|
<runShellScript/>
|
||||||
|
<runGdbScript/>
|
||||||
|
</general>
|
||||||
|
<display>
|
||||||
|
<staticmembers>false</staticmembers>
|
||||||
|
<demanglenames>true</demanglenames>
|
||||||
|
<outputradix>10</outputradix>
|
||||||
|
</display>
|
||||||
|
</kdevdebugger>
|
||||||
|
<kdevfilecreate>
|
||||||
|
<filetypes/>
|
||||||
|
<useglobaltypes>
|
||||||
|
<type ext="ui" />
|
||||||
|
<type ext="cpp" />
|
||||||
|
<type ext="h" />
|
||||||
|
</useglobaltypes>
|
||||||
|
</kdevfilecreate>
|
||||||
|
<kdevcvs>
|
||||||
|
<cvsoptions>-f</cvsoptions>
|
||||||
|
<commitoptions/>
|
||||||
|
<updateoptions>-dP</updateoptions>
|
||||||
|
<addoptions/>
|
||||||
|
<removeoptions>-f</removeoptions>
|
||||||
|
<diffoptions>-u3 -p</diffoptions>
|
||||||
|
<logoptions/>
|
||||||
|
<rshoptions/>
|
||||||
|
</kdevcvs>
|
||||||
|
<cppsupportpart>
|
||||||
|
<codecompletion/>
|
||||||
|
<filetemplates>
|
||||||
|
<choosefiles>false</choosefiles>
|
||||||
|
<interfaceURL/>
|
||||||
|
<implementationURL/>
|
||||||
|
<interfacesuffix>.h</interfacesuffix>
|
||||||
|
<implementationsuffix>.cpp</implementationsuffix>
|
||||||
|
<lowercasefilenames>true</lowercasefilenames>
|
||||||
|
</filetemplates>
|
||||||
|
</cppsupportpart>
|
||||||
|
<kdevclassview>
|
||||||
|
<folderhierarchy>true</folderhierarchy>
|
||||||
|
<depthoffolders>2</depthoffolders>
|
||||||
|
</kdevclassview>
|
||||||
|
<kdevdocumentation>
|
||||||
|
<projectdoc>
|
||||||
|
<docsystem>Doxygen Documentation Collection</docsystem>
|
||||||
|
<docurl>bookreader.tag</docurl>
|
||||||
|
</projectdoc>
|
||||||
|
</kdevdocumentation>
|
||||||
|
<substmap>
|
||||||
|
<APPNAME>BookReader</APPNAME>
|
||||||
|
<APPNAMELC>bookreader</APPNAMELC>
|
||||||
|
<APPNAMESC>BookReader</APPNAMESC>
|
||||||
|
<APPNAMEUC>BOOKREADER</APPNAMEUC>
|
||||||
|
<AUTHOR>Alexandr Nemish</AUTHOR>
|
||||||
|
<EMAIL>atlanter@gmail.com</EMAIL>
|
||||||
|
<LICENSE>GPL</LICENSE>
|
||||||
|
<LICENSEFILE>COPYING</LICENSEFILE>
|
||||||
|
<VERSION>0.1</VERSION>
|
||||||
|
<YEAR>2005</YEAR>
|
||||||
|
<dest>/home/nau/Projects/bookreader</dest>
|
||||||
|
</substmap>
|
||||||
|
<kdevcppsupport>
|
||||||
|
<references/>
|
||||||
|
<codecompletion>
|
||||||
|
<includeGlobalFunctions>true</includeGlobalFunctions>
|
||||||
|
<includeTypes>true</includeTypes>
|
||||||
|
<includeEnums>true</includeEnums>
|
||||||
|
<includeTypedefs>false</includeTypedefs>
|
||||||
|
<automaticCodeCompletion>true</automaticCodeCompletion>
|
||||||
|
<automaticArgumentsHint>true</automaticArgumentsHint>
|
||||||
|
<automaticHeaderCompletion>true</automaticHeaderCompletion>
|
||||||
|
<codeCompletionDelay>250</codeCompletionDelay>
|
||||||
|
<argumentsHintDelay>400</argumentsHintDelay>
|
||||||
|
<headerCompletionDelay>250</headerCompletionDelay>
|
||||||
|
<showOnlyAccessibleItems>false</showOnlyAccessibleItems>
|
||||||
|
<completionBoxItemOrder>0</completionBoxItemOrder>
|
||||||
|
<howEvaluationContextMenu>true</howEvaluationContextMenu>
|
||||||
|
<showCommentWithArgumentHint>true</showCommentWithArgumentHint>
|
||||||
|
<statusBarTypeEvaluation>false</statusBarTypeEvaluation>
|
||||||
|
<namespaceAliases>std=_GLIBCXX_STD;__gnu_cxx=std</namespaceAliases>
|
||||||
|
<processPrimaryTypes>true</processPrimaryTypes>
|
||||||
|
<processFunctionArguments>false</processFunctionArguments>
|
||||||
|
<preProcessAllHeaders>false</preProcessAllHeaders>
|
||||||
|
<parseMissingHeadersExperimental>false</parseMissingHeadersExperimental>
|
||||||
|
<resolveIncludePathsUsingMakeExperimental>false</resolveIncludePathsUsingMakeExperimental>
|
||||||
|
<alwaysParseInBackground>true</alwaysParseInBackground>
|
||||||
|
<usePermanentCaching>true</usePermanentCaching>
|
||||||
|
<alwaysIncludeNamespaces>false</alwaysIncludeNamespaces>
|
||||||
|
<includePaths>.;</includePaths>
|
||||||
|
</codecompletion>
|
||||||
|
<creategettersetter>
|
||||||
|
<prefixGet/>
|
||||||
|
<prefixSet>set</prefixSet>
|
||||||
|
<prefixVariable>m_,_</prefixVariable>
|
||||||
|
<parameterName>theValue</parameterName>
|
||||||
|
<inlineGet>true</inlineGet>
|
||||||
|
<inlineSet>true</inlineSet>
|
||||||
|
</creategettersetter>
|
||||||
|
<qt>
|
||||||
|
<used>false</used>
|
||||||
|
<version>3</version>
|
||||||
|
<root>/usr/lib/qt3</root>
|
||||||
|
<includestyle>3</includestyle>
|
||||||
|
<designerintegration>EmbeddedKDevDesigner</designerintegration>
|
||||||
|
<qmake>/usr/lib/qt3/bin/qmake</qmake>
|
||||||
|
<designer>/usr/lib/qt3/bin/designer</designer>
|
||||||
|
<designerpluginpaths/>
|
||||||
|
</qt>
|
||||||
|
</kdevcppsupport>
|
||||||
|
<ctagspart>
|
||||||
|
<customArguments/>
|
||||||
|
<customTagfilePath/>
|
||||||
|
</ctagspart>
|
||||||
|
<dist>
|
||||||
|
<custom>false</custom>
|
||||||
|
<bzip>true</bzip>
|
||||||
|
<archname/>
|
||||||
|
<appname>BooKreader</appname>
|
||||||
|
<version>0.1</version>
|
||||||
|
<release>dont know</release>
|
||||||
|
<vendor>Alexander Nemish</vendor>
|
||||||
|
<licence>GPL</licence>
|
||||||
|
<summary>rgrgrg</summary>
|
||||||
|
<group>Utilities</group>
|
||||||
|
<packager>h45h45</packager>
|
||||||
|
<description>BooKreader is a twin-panel text files viewer specialized for reading e-books.
|
||||||
|
|
||||||
|
</description>
|
||||||
|
<changelog>sfhsfhsfh</changelog>
|
||||||
|
<devpackage>false</devpackage>
|
||||||
|
<docspackage>false</docspackage>
|
||||||
|
<appicon>false</appicon>
|
||||||
|
<arch>2</arch>
|
||||||
|
<genHTML>false</genHTML>
|
||||||
|
<useRPM>false</useRPM>
|
||||||
|
<ftpkde>false</ftpkde>
|
||||||
|
<appskde>false</appskde>
|
||||||
|
<url/>
|
||||||
|
</dist>
|
||||||
|
</kdevelop>
|
@ -0,0 +1,45 @@
|
|||||||
|
# This spec file was generated by KDevelop
|
||||||
|
# Please report any problem to KDevelop Team <kdevelop-devel@kdevelop.org>
|
||||||
|
# Thanks to Matthias Saou for his explanations on http://freshrpms.net/docs/fight.html
|
||||||
|
|
||||||
|
Name: bookreader
|
||||||
|
Version: 0.1
|
||||||
|
Release: 1
|
||||||
|
Vendor: Alexander Nemish
|
||||||
|
License: GPL
|
||||||
|
Summary: summary
|
||||||
|
Group: Applications/Text
|
||||||
|
Packager: Alexander Nemish
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-root
|
||||||
|
Source0: bookreader-0.1.tar.bz2
|
||||||
|
|
||||||
|
%description
|
||||||
|
BooKreader is a twin-panel text files viewer specialized for reading e-books.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup
|
||||||
|
#CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" ./configure \
|
||||||
|
#--host=nau-note --build=i686 --target=i686-suse-linux \
|
||||||
|
#--disable-debug --enable-debug=no
|
||||||
|
|
||||||
|
%build
|
||||||
|
%configure
|
||||||
|
make
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
%makeinstall
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
|
#%post -p /sbin/ldconfig
|
||||||
|
#%postun -p /sbin/ldconfig
|
||||||
|
%files
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%doc AUTHORS COPYING ChangeLog NEWS README TODO
|
||||||
|
%{_bindir}/*
|
||||||
|
#%{_libdir}/*.so.*
|
||||||
|
%{_datadir}/*
|
||||||
|
#%{_mandir}/man8/*
|
||||||
|
|
@ -0,0 +1,219 @@
|
|||||||
|
/* config.h.in. Generated from configure.in by autoheader. */
|
||||||
|
|
||||||
|
/* 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 <dlfcn.h> header file. */
|
||||||
|
#undef HAVE_DLFCN_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 your system needs _NSGetEnviron to set up the environment */
|
||||||
|
#undef HAVE_NSGETENVIRON
|
||||||
|
|
||||||
|
/* Define if you have the res_init function */
|
||||||
|
#undef HAVE_RES_INIT
|
||||||
|
|
||||||
|
/* 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/stat.h> header file. */
|
||||||
|
#undef HAVE_SYS_STAT_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 to 1 if you have the `vsnprintf' function. */
|
||||||
|
#undef HAVE_VSNPRINTF
|
||||||
|
|
||||||
|
/* Suffix for lib directories */
|
||||||
|
#undef KDELIBSUFF
|
||||||
|
|
||||||
|
/* Define a safe value for MAXPATHLEN */
|
||||||
|
#undef KDEMAXPATHLEN
|
||||||
|
|
||||||
|
/* 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 a `char *', as computed by sizeof. */
|
||||||
|
#undef SIZEOF_CHAR_P
|
||||||
|
|
||||||
|
/* The size of a `int', as computed by sizeof. */
|
||||||
|
#undef SIZEOF_INT
|
||||||
|
|
||||||
|
/* The size of a `long', as computed by sizeof. */
|
||||||
|
#undef SIZEOF_LONG
|
||||||
|
|
||||||
|
/* The size of a `short', as computed by sizeof. */
|
||||||
|
#undef SIZEOF_SHORT
|
||||||
|
|
||||||
|
/* The size of a `size_t', as computed by sizeof. */
|
||||||
|
#undef SIZEOF_SIZE_T
|
||||||
|
|
||||||
|
/* The size of a `unsigned long', as computed by sizeof. */
|
||||||
|
#undef SIZEOF_UNSIGNED_LONG
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
|
/* Version number of package */
|
||||||
|
#undef VERSION
|
||||||
|
|
||||||
|
/* Define to 1 if your processor stores words with the most significant byte
|
||||||
|
first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||||
|
#undef WORDS_BIGENDIAN
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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_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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
|
||||||
|
/* Compatibility define */
|
||||||
|
#undef ksize_t
|
||||||
|
|
||||||
|
/* Define the real type of socklen_t */
|
||||||
|
#undef socklen_t
|
@ -0,0 +1,2 @@
|
|||||||
|
./admin/configure.in.min
|
||||||
|
configure.in.in
|
@ -0,0 +1,83 @@
|
|||||||
|
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., 59 Temple Place - Suite 330,
|
||||||
|
dnl Boston, MA 02111-1307, 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(bookreader, 0.1) 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
|
||||||
|
|
||||||
|
KDE_USE_QT(3.2.0)
|
||||||
|
AC_PATH_KDE
|
||||||
|
#MIN_CONFIG(3.2.0)
|
||||||
|
|
||||||
|
dnl PACKAGE set before
|
||||||
|
AC_C_BIGENDIAN
|
||||||
|
AC_CHECK_KDEMAXPATHLEN
|
||||||
|
|
||||||
|
KDE_CREATE_SUBDIRSLIST
|
||||||
|
AC_CONFIG_FILES([ Makefile ])
|
||||||
|
AC_CONFIG_FILES([ doc/Makefile ])
|
||||||
|
AC_CONFIG_FILES([ doc/en/Makefile ])
|
||||||
|
AC_CONFIG_FILES([ images/Makefile ])
|
||||||
|
AC_CONFIG_FILES([ po/Makefile ])
|
||||||
|
AC_CONFIG_FILES([ src/Makefile ])
|
||||||
|
AC_OUTPUT
|
||||||
|
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,6 @@
|
|||||||
|
#MIN_CONFIG(3.2.0)
|
||||||
|
|
||||||
|
AM_INIT_AUTOMAKE(bookreader, 0.1)
|
||||||
|
AC_C_BIGENDIAN
|
||||||
|
AC_CHECK_KDEMAXPATHLEN
|
||||||
|
|
@ -0,0 +1,6 @@
|
|||||||
|
# the SUBDIRS is filled automatically by am_edit. If files are
|
||||||
|
# in this directory they are installed into the english dir
|
||||||
|
|
||||||
|
KDE_LANG = en
|
||||||
|
KDE_DOCS = bookreader
|
||||||
|
SUBDIRS = $(AUTODIRS)
|
@ -0,0 +1,2 @@
|
|||||||
|
KDE_DOCS = bookreader
|
||||||
|
KDE_LANG = en
|
@ -0,0 +1,555 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
|
||||||
|
<!ENTITY bookreader "<application>BookReader 0.1</application>">
|
||||||
|
<!ENTITY kappname "&bookreader;"><!-- Do *not* replace kappname-->
|
||||||
|
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc -->
|
||||||
|
<!ENTITY % addindex "IGNORE">
|
||||||
|
<!ENTITY % English "INCLUDE"><!-- change language only here -->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Do not define any other entities; instead, use the entities
|
||||||
|
from kde-genent.entities and $LANG/user.entities. -->
|
||||||
|
]>
|
||||||
|
<!-- kdoctemplate v0.8 October 1 1999
|
||||||
|
Minor update to "Credits and Licenses" section on August 24, 2000
|
||||||
|
Removed "Revision history" section on 22 January 2001
|
||||||
|
Changed to Installation/Help menu entities 18 October 2001
|
||||||
|
Other minor cleanup and changes 18 October 2001 -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This template was designed by: David Rugge davidrugge@mindspring.com
|
||||||
|
with lots of help from: Eric Bischoff ebisch@cybercable.tm.fr
|
||||||
|
and Frederik Fouvry fouvry@sfs.nphil.uni-tuebingen.de
|
||||||
|
of the KDE DocBook team.
|
||||||
|
|
||||||
|
You may freely use this template for writing any sort of KDE documentation.
|
||||||
|
If you have any changes or improvements, please let us know.
|
||||||
|
|
||||||
|
Remember:
|
||||||
|
- in XML, the case of the <tags> and attributes is relevant ;
|
||||||
|
- also, quote all attributes.
|
||||||
|
|
||||||
|
Please don't forget to remove all these comments in your final documentation,
|
||||||
|
thanks ;-).
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- ................................................................ -->
|
||||||
|
|
||||||
|
<!-- The language must NOT be changed here. -->
|
||||||
|
|
||||||
|
<book lang="&language;">
|
||||||
|
|
||||||
|
<!-- This header contains all of the meta-information for the document such
|
||||||
|
as Authors, publish date, the abstract, and Keywords -->
|
||||||
|
|
||||||
|
<bookinfo>
|
||||||
|
<title>The &bookreader; Handbook</title>
|
||||||
|
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname></firstname>
|
||||||
|
<othername></othername>
|
||||||
|
<surname>Alexandr Nemish</surname>
|
||||||
|
<affiliation>
|
||||||
|
<address><email>atlanter@gmail.com</email></address>
|
||||||
|
</affiliation>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
|
||||||
|
<!-- TRANS:ROLES_OF_TRANSLATORS -->
|
||||||
|
|
||||||
|
<copyright>
|
||||||
|
<year>1999</year>
|
||||||
|
<year>2005</year>
|
||||||
|
<holder>Alexandr Nemish</holder>
|
||||||
|
</copyright>
|
||||||
|
<!-- Translators: put here the copyright notice of the translation -->
|
||||||
|
<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
|
||||||
|
and in the FDL itself on how to use it. -->
|
||||||
|
<legalnotice>&FDLNotice;</legalnotice>
|
||||||
|
|
||||||
|
<!-- Date and version information of the documentation
|
||||||
|
Don't forget to include this last date and this last revision number, we
|
||||||
|
need them for translation coordination !
|
||||||
|
Please respect the format of the date (YYYY-MM-DD) and of the version
|
||||||
|
(V.MM.LL), it could be used by automation scripts.
|
||||||
|
Do NOT change these in the translation. -->
|
||||||
|
|
||||||
|
<date>2001-10-18</date>
|
||||||
|
<releaseinfo>0.1</releaseinfo>
|
||||||
|
|
||||||
|
<!-- Abstract about this handbook -->
|
||||||
|
|
||||||
|
<abstract>
|
||||||
|
<para>
|
||||||
|
&bookreader; is an application specially designed to do nothing you would
|
||||||
|
ever want.
|
||||||
|
</para>
|
||||||
|
</abstract>
|
||||||
|
|
||||||
|
<!-- This is a set of Keywords for indexing by search engines.
|
||||||
|
Please at least include KDE, the KDE package it is in, the name
|
||||||
|
of your application, and a few relevant keywords. -->
|
||||||
|
|
||||||
|
<keywordset>
|
||||||
|
<keyword>KDE</keyword>
|
||||||
|
<keyword>BookReader</keyword>
|
||||||
|
<keyword>nothing</keyword>
|
||||||
|
<keyword>nothing else</keyword>
|
||||||
|
</keywordset>
|
||||||
|
|
||||||
|
</bookinfo>
|
||||||
|
|
||||||
|
<!-- The contents of the documentation begin here. Label
|
||||||
|
each chapter so with the id attribute. This is necessary for two reasons: it
|
||||||
|
allows you to easily reference the chapter from other chapters of your
|
||||||
|
document, and if there is no ID, the name of the generated HTML files will vary
|
||||||
|
from time to time making it hard to manage for maintainers and for the CVS
|
||||||
|
system. Any chapter labelled (OPTIONAL) may be left out at the author's
|
||||||
|
discretion. Other chapters should not be left out in order to maintain a
|
||||||
|
consistent documentation style across all KDE apps. -->
|
||||||
|
|
||||||
|
<chapter id="introduction">
|
||||||
|
<title>Introduction</title>
|
||||||
|
|
||||||
|
<!-- The introduction chapter contains a brief introduction for the
|
||||||
|
application that explains what it does and where to report
|
||||||
|
problems. Basically a long version of the abstract. Don't include a
|
||||||
|
revision history. (see installation appendix comment) -->
|
||||||
|
|
||||||
|
<para>
|
||||||
|
&bookreader; is a program that lets you do absolutely nothing. Please report
|
||||||
|
any problems or feature requests to the &kde; mailing lists.
|
||||||
|
</para>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="using-bookreader">
|
||||||
|
<title>Using &bookreader;</title>
|
||||||
|
|
||||||
|
<!-- This chapter should tell the user how to use your app. You should use as
|
||||||
|
many sections (Chapter, Sect1, Sect3, etc...) as is necessary to fully document
|
||||||
|
your application. -->
|
||||||
|
|
||||||
|
<para>
|
||||||
|
|
||||||
|
<!-- Note that all graphics should be in .png format. Use no gifs because of
|
||||||
|
patent issues. -->
|
||||||
|
|
||||||
|
<screenshot>
|
||||||
|
<screeninfo>Here's a screenshot of &bookreader;</screeninfo>
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject>
|
||||||
|
<imagedata fileref="screenshot.png" format="PNG"/>
|
||||||
|
</imageobject>
|
||||||
|
<imageobject>
|
||||||
|
<imagedata fileref="screenshot.eps" format="EPS"/>
|
||||||
|
</imageobject>
|
||||||
|
<textobject>
|
||||||
|
<phrase>Screenshot</phrase>
|
||||||
|
</textobject>
|
||||||
|
</mediaobject>
|
||||||
|
</screenshot>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
|
||||||
|
<sect1 id="bookreader-features">
|
||||||
|
<title>More &bookreader; features</title>
|
||||||
|
|
||||||
|
<para>It slices! It dices! and it comes with a free toaster!</para>
|
||||||
|
<para>
|
||||||
|
The Squiggle Tool <guiicon><inlinemediaobject>
|
||||||
|
<imageobject>
|
||||||
|
<imagedata fileref="squiggle.png" format="PNG"/>
|
||||||
|
</imageobject>
|
||||||
|
<imageobject>
|
||||||
|
<imagedata fileref="squiggle.eps" format="EPS"/>
|
||||||
|
</imageobject>
|
||||||
|
<textobject>
|
||||||
|
<phrase>Squiggle</phrase>
|
||||||
|
</textobject>
|
||||||
|
</inlinemediaobject></guiicon> is used to draw squiggly lines all over
|
||||||
|
the &bookreader; main window. It's not a bug, it's a feature!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="commands">
|
||||||
|
<title>Command Reference</title>
|
||||||
|
|
||||||
|
<!-- (OPTIONAL, BUT RECOMMENDED) This chapter should list all of the
|
||||||
|
application windows and their menubar and toolbar commands for easy reference.
|
||||||
|
Also include any keys that have a special function but have no equivalent in the
|
||||||
|
menus or toolbars. This may not be necessary for small apps or apps with no tool
|
||||||
|
or menu bars. -->
|
||||||
|
|
||||||
|
<sect1 id="bookreader-mainwindow">
|
||||||
|
<title>The main &bookreader; window</title>
|
||||||
|
|
||||||
|
<sect2>
|
||||||
|
<title>The File Menu</title>
|
||||||
|
<para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><menuchoice>
|
||||||
|
<shortcut>
|
||||||
|
<keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
|
||||||
|
</shortcut>
|
||||||
|
<guimenu>File</guimenu>
|
||||||
|
<guimenuitem>New</guimenuitem>
|
||||||
|
</menuchoice></term>
|
||||||
|
<listitem><para><action>Creates a new document</action></para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><menuchoice>
|
||||||
|
<shortcut>
|
||||||
|
<keycombo action="simul">&Ctrl;<keycap>S</keycap></keycombo>
|
||||||
|
</shortcut>
|
||||||
|
<guimenu>File</guimenu>
|
||||||
|
<guimenuitem>Save</guimenuitem>
|
||||||
|
</menuchoice></term>
|
||||||
|
<listitem><para><action>Saves the document</action></para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><menuchoice>
|
||||||
|
<shortcut>
|
||||||
|
<keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
|
||||||
|
</shortcut>
|
||||||
|
<guimenu>File</guimenu>
|
||||||
|
<guimenuitem>Quit</guimenuitem>
|
||||||
|
</menuchoice></term>
|
||||||
|
<listitem><para><action>Quits</action> &bookreader;</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2>
|
||||||
|
<title>The <guimenu>Help</guimenu> Menu</title>
|
||||||
|
|
||||||
|
<!-- Assuming you have a standard help menu (help, what's this, about -->
|
||||||
|
<!-- &bookreader;, about KDE) then the documentation is already written. -->
|
||||||
|
<!-- The following entity is valid anywhere that a variablelist is -->
|
||||||
|
<!-- valid. -->
|
||||||
|
|
||||||
|
&help.menu.documentation;
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="developers">
|
||||||
|
<title>Developer's Guide to &bookreader;</title>
|
||||||
|
|
||||||
|
<!-- (OPTIONAL) A Programming/Scripting reference chapter should be
|
||||||
|
used for apps that use plugins or that provide their own scripting hooks
|
||||||
|
and/or development libraries. -->
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Programming &bookreader; plugins is a joy to behold. Just read through the next
|
||||||
|
66 pages of API's to learn how!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<!-- Use refentries to describe APIs. Refentries are fairly complicated and you
|
||||||
|
should consult the docbook reference for further details. The example below was
|
||||||
|
taken from that reference and shortened a bit for readability. -->
|
||||||
|
|
||||||
|
<refentry id="re-1007-unmanagechildren-1">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>XtUnmanageChildren</refentrytitle>
|
||||||
|
<refmiscinfo>Xt - Geometry Management</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv>
|
||||||
|
<refname>XtUnmanageChildren
|
||||||
|
</refname>
|
||||||
|
<refpurpose>remove a list of children from a parent widget's managed
|
||||||
|
list.
|
||||||
|
<indexterm id="ix-1007-unmanagechildren-1"><primary>widgets</primary><secondary>removing</secondary></indexterm>
|
||||||
|
<indexterm id="ix-1007-unmanagechildren-2"><primary>XtUnmanageChildren</primary></indexterm>
|
||||||
|
</refpurpose>
|
||||||
|
|
||||||
|
</refnamediv>
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<refsynopsisdivinfo>
|
||||||
|
<date>4 March 1996</date>
|
||||||
|
</refsynopsisdivinfo>
|
||||||
|
<synopsis>
|
||||||
|
void XtUnmanageChildren(<replaceable class="parameter">children</replaceable>, <replaceable class="parameter">num_children</replaceable>)
|
||||||
|
WidgetList <replaceable class="parameter">children</replaceable>;
|
||||||
|
Cardinal <replaceable class="parameter">num_children</replaceable>;
|
||||||
|
</synopsis>
|
||||||
|
|
||||||
|
<refsect2 id="r2-1007-unmanagechildren-1">
|
||||||
|
<title>Inputs</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><replaceable class="parameter">children</replaceable>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Specifies an array of child widgets. Each child must be of
|
||||||
|
class RectObj or any subclass thereof.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><replaceable class="parameter">num_children</replaceable>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Specifies the number of elements in <replaceable class="parameter">children</replaceable>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect2></refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1 id="r1-1007-unmanagechildren-1">
|
||||||
|
<title>Description
|
||||||
|
</title>
|
||||||
|
<para><function>XtUnmanageChildren()</function> unmaps the specified widgets
|
||||||
|
and removes them from their parent's geometry management.
|
||||||
|
The widgets will disappear from the screen, and (depending
|
||||||
|
on its parent) may no longer have screen space allocated for
|
||||||
|
them.
|
||||||
|
</para>
|
||||||
|
<para>Each of the widgets in the <replaceable class="parameter">children</replaceable> array must have
|
||||||
|
the same parent.
|
||||||
|
</para>
|
||||||
|
<para>See the “Algorithm” section below for full details of the
|
||||||
|
widget unmanagement procedure.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 id="r1-1007-unmanagechildren-2">
|
||||||
|
<title>Usage</title>
|
||||||
|
<para>Unmanaging widgets is the usual method for temporarily
|
||||||
|
making them invisible. They can be re-managed with
|
||||||
|
<function>XtManageChildren()</function>.
|
||||||
|
</para>
|
||||||
|
<para>You can unmap a widget, but leave it under geometry
|
||||||
|
management by calling <function>XtUnmapWidget()</function>. You can
|
||||||
|
destroy a widget's window without destroying the widget by
|
||||||
|
calling <function>XtUnrealizeWidget()</function>. You can destroy a
|
||||||
|
widget completely with <function>XtDestroyWidget()</function>.
|
||||||
|
</para>
|
||||||
|
<para>If you are only going to unmanage a single widget, it is
|
||||||
|
more convenient to call <function>XtUnmanageChild()</function>. It is
|
||||||
|
often more convenient to call <function>XtUnmanageChild()</function>
|
||||||
|
several times than it is to declare and initialize an array
|
||||||
|
of widgets to pass to <function>XtUnmanageChildren()</function>. Calling
|
||||||
|
<function>XtUnmanageChildren()</function> is more efficient, however,
|
||||||
|
because it only calls the parent's <function>change_managed()</function>
|
||||||
|
method once.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 id="r1-1007-unmanagechildren-3">
|
||||||
|
<title>Algorithm
|
||||||
|
</title>
|
||||||
|
<para><function>XtUnmanageChildren()</function> performs the following:
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>-
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Ignores the child if it already is unmanaged or is being
|
||||||
|
destroyed.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>-
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Otherwise, if the child is realized, it makes it nonvisible
|
||||||
|
by unmapping it.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<para>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1 id="r1-1007-unmanagechildren-4">
|
||||||
|
<title>Structures</title>
|
||||||
|
<para>The <type>WidgetList</type> type is simply an array of widgets:
|
||||||
|
</para>
|
||||||
|
<screen id="sc-1007-unmanagechildren-1">typedef Widget *WidgetList;
|
||||||
|
</screen>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="faq">
|
||||||
|
<title>Questions and Answers</title>
|
||||||
|
|
||||||
|
<!-- (OPTIONAL but recommended) This chapter should include all of the silly
|
||||||
|
(and not-so-silly) newbie questions that fill up your mailbox. This chapter
|
||||||
|
should be reserved for BRIEF questions and answers! If one question uses more
|
||||||
|
than a page or so then it should probably be part of the
|
||||||
|
"Using this Application" chapter instead. You should use links to
|
||||||
|
cross-reference questions to the parts of your documentation that answer them.
|
||||||
|
This is also a great place to provide pointers to other FAQ's if your users
|
||||||
|
must do some complicated configuration on other programs in order for your
|
||||||
|
application work. -->
|
||||||
|
|
||||||
|
&reporting.bugs;
|
||||||
|
&updating.documentation;
|
||||||
|
|
||||||
|
<qandaset id="faqlist">
|
||||||
|
<qandaentry>
|
||||||
|
<question>
|
||||||
|
<para>My Mouse doesn't work. How do I quit &bookreader;?</para>
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<para>You silly goose! Check out the <link linkend="commands">Commands
|
||||||
|
Section</link> for the answer.</para>
|
||||||
|
</answer>
|
||||||
|
</qandaentry>
|
||||||
|
<qandaentry>
|
||||||
|
<question>
|
||||||
|
<para>Why can't I twiddle my documents?</para>
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<para>You can only twiddle your documents if you have the foobar.lib
|
||||||
|
installed.</para>
|
||||||
|
</answer>
|
||||||
|
</qandaentry>
|
||||||
|
</qandaset>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="credits">
|
||||||
|
|
||||||
|
<!-- Include credits for the programmers, documentation writers, and
|
||||||
|
contributors here. The license for your software should then be included below
|
||||||
|
the credits with a reference to the appropriate license file included in the KDE
|
||||||
|
distribution. -->
|
||||||
|
|
||||||
|
<title>Credits and License</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
&bookreader;
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Program copyright 2005 Alexandr Nemish <email>atlanter@gmail.com</email>
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Contributors:
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem><para>Konqui the KDE Dragon <email>konqui@kde.org</email></para>
|
||||||
|
</listitem>
|
||||||
|
<listitem><para>Tux the Linux Penguin <email>tux@linux.org</email></para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Documentation copyright 2005 Alexandr Nemish <email>atlanter@gmail.com</email>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
|
||||||
|
|
||||||
|
&underFDL; <!-- FDL: do not remove -->
|
||||||
|
|
||||||
|
<!-- Determine which license your application is licensed under,
|
||||||
|
and delete all the remaining licenses below:
|
||||||
|
|
||||||
|
(NOTE: All documentation are licensed under the FDL,
|
||||||
|
regardless of what license the application uses) -->
|
||||||
|
|
||||||
|
&underGPL; <!-- GPL License -->
|
||||||
|
&underBSDLicense; <!-- BSD License -->
|
||||||
|
&underArtisticLicense; <!-- BSD Artistic License -->
|
||||||
|
&underX11License; <!-- X11 License -->
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<appendix id="installation">
|
||||||
|
<title>Installation</title>
|
||||||
|
|
||||||
|
<sect1 id="getting-bookreader">
|
||||||
|
<title>How to obtain &bookreader;</title>
|
||||||
|
|
||||||
|
<!-- This first entity contains boiler plate for applications that are
|
||||||
|
part of KDE CVS. You should remove it if you are releasing your
|
||||||
|
application -->
|
||||||
|
|
||||||
|
&install.intro.documentation;
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="requirements">
|
||||||
|
<title>Requirements</title>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
List any special requirements for your application here. This should include:
|
||||||
|
.Libraries or other software that is not included in kdesupport,
|
||||||
|
kdelibs, or kdebase.
|
||||||
|
.Hardware requirements like amount of RAM, disk space, graphics card
|
||||||
|
capabilities, screen resolution, special expansion cards, etc.
|
||||||
|
.Operating systems the app will run on. If your app is designed only for a
|
||||||
|
specific OS, (you wrote a graphical LILO configurator for example) put this
|
||||||
|
information here.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In order to successfully use &bookreader;, you need &kde; 1.1. Foobar.lib is
|
||||||
|
required in order to support the advanced &bookreader; features. &bookreader; uses
|
||||||
|
about 5 megs of memory to run, but this may vary depending on your
|
||||||
|
platform and configuration.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
All required libraries as well as &bookreader; itself can be found
|
||||||
|
on <ulink url="ftp://ftp.bookreader.org">The &bookreader; home page</ulink>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<!-- For a list of updates, you may refer to the application web site
|
||||||
|
or the ChangeLog file, or ... -->
|
||||||
|
<para>
|
||||||
|
You can find a list of changes at <ulink
|
||||||
|
url="http://apps.kde.org/bookreader">http://apps.kde.org/bookreader</ulink>.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="compilation">
|
||||||
|
<title>Compilation and Installation</title>
|
||||||
|
|
||||||
|
<!-- This entity contains the boilerplate text for standard -->
|
||||||
|
<!-- compilation instructions. If your application requires any -->
|
||||||
|
<!-- special handling, remove it, and replace with your own text. -->
|
||||||
|
|
||||||
|
&install.compile.documentation;
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="configuration">
|
||||||
|
<title>Configuration</title>
|
||||||
|
|
||||||
|
<para>Don't forget to tell your system to start the <filename>dtd</filename>
|
||||||
|
dicer-toaster daemon first, or &bookreader; won't work !</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</appendix>
|
||||||
|
|
||||||
|
&documentation.index;
|
||||||
|
</book>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Local Variables:
|
||||||
|
mode: sgml
|
||||||
|
sgml-minimize-attributes:nil
|
||||||
|
sgml-general-insert-case:lower
|
||||||
|
sgml-indent-step:0
|
||||||
|
sgml-indent-data:nil
|
||||||
|
End:
|
||||||
|
|
||||||
|
vim:tabstop=2:shiftwidth=2:expandtab
|
||||||
|
-->
|
||||||
|
|
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
METASOURCES = AUTO
|
||||||
|
themedir = $(kde_datadir)/bookreader/themes/default
|
||||||
|
theme_DATA = bg.png splash.png bookmark.png
|
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 249 KiB |
@ -0,0 +1 @@
|
|||||||
|
POFILES = AUTO
|
@ -0,0 +1,91 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2005-09-21 02:56+0300\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: bookreader.cpp:132
|
||||||
|
msgid "Cus&tom Menuitem"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: bookreader.cpp:211
|
||||||
|
msgid "Open Location"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: bookreader.cpp:270
|
||||||
|
msgid "General"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: bookreaderview.cpp:81
|
||||||
|
msgid "Could not find a suitable HTML component"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: main.cpp:30
|
||||||
|
msgid "A KDE Application"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: main.cpp:36
|
||||||
|
msgid "Document to open"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: main.cpp:42
|
||||||
|
msgid "BookReader"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pref.cpp:30
|
||||||
|
msgid "BookReader Preferences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pref.cpp:37
|
||||||
|
msgid "First Page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pref.cpp:37
|
||||||
|
msgid "Page One Options"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pref.cpp:40
|
||||||
|
msgid "Second Page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pref.cpp:40
|
||||||
|
msgid "Page Two Options"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pref.cpp:50 pref.cpp:59
|
||||||
|
msgid "Add something here"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: rc.cpp:3
|
||||||
|
#, no-c-format
|
||||||
|
msgid "C&ustom"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: rc.cpp:6
|
||||||
|
#, no-c-format
|
||||||
|
msgid "Form1"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: _translatorinfo.cpp:1
|
||||||
|
msgid ""
|
||||||
|
"_: NAME OF TRANSLATORS\n"
|
||||||
|
"Your names"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: _translatorinfo.cpp:3
|
||||||
|
msgid ""
|
||||||
|
"_: EMAIL OF TRANSLATORS\n"
|
||||||
|
"Your emails"
|
||||||
|
msgstr ""
|
@ -0,0 +1,47 @@
|
|||||||
|
## Makefile.am for bookreader
|
||||||
|
|
||||||
|
# this is the program that gets installed. it's name is used for all
|
||||||
|
# of the other Makefile.am variables
|
||||||
|
bin_PROGRAMS = bookreader bookreader_client
|
||||||
|
|
||||||
|
# set the include path for X, qt and KDE
|
||||||
|
INCLUDES = $(all_includes)
|
||||||
|
|
||||||
|
# the library search path.
|
||||||
|
bookreader_LDFLAGS = $(KDE_RPATH) $(all_libraries)
|
||||||
|
|
||||||
|
# the libraries to link against.
|
||||||
|
bookreader_LDADD = $(LIB_KFILE) $(LIB_KDEPRINT)
|
||||||
|
|
||||||
|
# which sources should be compiled for bookreader
|
||||||
|
bookreader_SOURCES = main.cpp bookreader.cpp bookreaderiface.skel \
|
||||||
|
bookwidget.cpp theme.cpp settings.kcfgc settingsdlg.ui renderer.cpp bookmark.cpp \
|
||||||
|
bookmarksdlg.cpp
|
||||||
|
|
||||||
|
# these are the headers for your project
|
||||||
|
noinst_HEADERS = bookreader.h bookwidget.h theme.h renderer.h bookmark.h \
|
||||||
|
bookmarksdlg.h
|
||||||
|
|
||||||
|
# client stuff
|
||||||
|
bookreader_client_LDFLAGS = $(KDE_RPATH) $(all_libraries)
|
||||||
|
bookreader_client_LDADD = $(LIB_KDECORE)
|
||||||
|
bookreader_client_SOURCES = bookreader_client.cpp
|
||||||
|
|
||||||
|
kde_kcfg_DATA = bookreader.kcfg
|
||||||
|
|
||||||
|
# let automoc handle all of the meta source files (moc)
|
||||||
|
METASOURCES = AUTO
|
||||||
|
|
||||||
|
messages: rc.cpp
|
||||||
|
$(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
|
||||||
|
$(XGETTEXT) *.cpp -o $(podir)/bookreader.pot
|
||||||
|
|
||||||
|
KDE_ICON = AUTO
|
||||||
|
|
||||||
|
# this is where the kdelnk file will go
|
||||||
|
kdelnkdir = $(kde_appsdir)/Utilities
|
||||||
|
kdelnk_DATA = bookreader.desktop
|
||||||
|
|
||||||
|
# this is where the XML-GUI resource file goes
|
||||||
|
rcdir = $(kde_datadir)/bookreader
|
||||||
|
rc_DATA = bookreaderui.rc
|
@ -0,0 +1,81 @@
|
|||||||
|
-----------------------------------------------
|
||||||
|
Kde application framework template quickstart
|
||||||
|
Author: Thomas Nagy
|
||||||
|
Date: 2004-03-22
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
This README file explains you basic things for starting with
|
||||||
|
this application template.
|
||||||
|
|
||||||
|
|
||||||
|
** Building and installing **
|
||||||
|
|
||||||
|
* Build the configure script by "make -f Makefile.cvs"
|
||||||
|
|
||||||
|
* To clean, use "make clean", and to clean everything
|
||||||
|
(remove the makefiles, etc), use "make distclean"
|
||||||
|
|
||||||
|
* To distribute your program, try "make dist".
|
||||||
|
This will make a compact tarball archive of your release with the
|
||||||
|
necessary scripts inside.
|
||||||
|
|
||||||
|
* Modifying the auto-tools scripts
|
||||||
|
for automake scripts there is an excellent tutorial there :
|
||||||
|
http://developer.kde.org/documentation/other/makefile_am_howto.html
|
||||||
|
|
||||||
|
* Simplify your life : install the project in your home directory for
|
||||||
|
testing purposes.
|
||||||
|
./configure --prefix=/home/user/dummyfolder/
|
||||||
|
In the end when you finished the development you can
|
||||||
|
rm -rf /home/user/dummyfolder/
|
||||||
|
without fear.
|
||||||
|
|
||||||
|
|
||||||
|
** Technologies **
|
||||||
|
|
||||||
|
* Build the menus of your application easily
|
||||||
|
kde applications now use an xml file (*ui.rc file) to build the menus.
|
||||||
|
This allow a great customization of the application. However, when
|
||||||
|
programming the menu is shown only after a "make install"
|
||||||
|
|
||||||
|
For more details, consult :
|
||||||
|
http://devel-home.kde.org/~larrosa/tutorial/p9.html
|
||||||
|
http://developer.kde.org/documentation/tutorials/xmlui/preface.html
|
||||||
|
|
||||||
|
* Use KConfig XT to create your configuration dialogs and make
|
||||||
|
them more maintainable.
|
||||||
|
|
||||||
|
For more details, consult :
|
||||||
|
http://developer.kde.org/documentation/tutorials/kconfigxt/kconfigxt.html
|
||||||
|
|
||||||
|
* With KParts, you can embed other kde components in your program, or make your program
|
||||||
|
embeddable in other apps. For example, the kmplayer kpart can be called to play videos
|
||||||
|
in your app.
|
||||||
|
|
||||||
|
For more details, consult :
|
||||||
|
http://www-106.ibm.com/developerworks/library/l-kparts/
|
||||||
|
http://developer.kde.org/documentation/tutorials/dot/writing-plugins.html
|
||||||
|
http://developer.kde.org/documentation/tutorials/developing-a-plugin-structure/index.html
|
||||||
|
|
||||||
|
* With dcop, you can control your app from other applications
|
||||||
|
Make sure to include K_DCOP and a kdcop: section in your .h file
|
||||||
|
http://developer.kde.org/documentation/tutorials/dot/dcopiface/dcop-interface.html
|
||||||
|
|
||||||
|
|
||||||
|
** Documentation **
|
||||||
|
|
||||||
|
* For the translations :
|
||||||
|
1. Download a patched gettext which can be found at:
|
||||||
|
http://public.kde.planetmirror.com/pub/kde/devel/gettext-kde/
|
||||||
|
2. Install that gettext in ~/bin/
|
||||||
|
3. cd ~/yourproject, export PATH=~/bin:$PATH, export
|
||||||
|
KDEDIR=/where_your_KDE3_is
|
||||||
|
4. make -f admin/Makefile.common package-messages
|
||||||
|
5. make package-messages
|
||||||
|
6. Translate the po files (not the pot!!) with kbabel or xemacs
|
||||||
|
|
||||||
|
* Do not forget to write the documentation for your kde app
|
||||||
|
edit the documentation template index.docbook in doc/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexandr Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "bookmark.h"
|
||||||
|
|
||||||
|
Bookmark::Bookmark(int page, const QString& name, QDateTime dateTime):
|
||||||
|
m_page(page),
|
||||||
|
m_name(name),
|
||||||
|
m_dateTime(dateTime)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Bookmark::~Bookmark()
|
||||||
|
{
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef BOOKMARK_H
|
||||||
|
#define BOOKMARK_H
|
||||||
|
|
||||||
|
#include <qdatetime.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Bookmark;
|
||||||
|
typedef std::vector<Bookmark> Bookmarks;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
class Bookmark
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Bookmark(int page, const QString& name = QString::null,
|
||||||
|
QDateTime dateTime = QDateTime::currentDateTime());
|
||||||
|
~Bookmark();
|
||||||
|
|
||||||
|
void setPage(unsigned int page) { m_page = page; }
|
||||||
|
unsigned int page() const { return m_page; }
|
||||||
|
const QString & name() const { return m_name; }
|
||||||
|
const QDateTime & dateTime() const { return m_dateTime; }
|
||||||
|
|
||||||
|
bool operator < (const Bookmark& rhs) const { return (m_page < rhs.m_page); }
|
||||||
|
|
||||||
|
void setName(const QString& theValue)
|
||||||
|
{
|
||||||
|
m_name = theValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int m_page;
|
||||||
|
QString m_name;
|
||||||
|
QDateTime m_dateTime;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,174 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include <kdialog.h>
|
||||||
|
#include <klocale.h>
|
||||||
|
#include <qvariant.h>
|
||||||
|
#include <qpushbutton.h>
|
||||||
|
#include <qheader.h>
|
||||||
|
#include <qtable.h>
|
||||||
|
#include <qlayout.h>
|
||||||
|
#include <qtooltip.h>
|
||||||
|
#include <qwhatsthis.h>
|
||||||
|
|
||||||
|
#include "bookmarksdlg.h"
|
||||||
|
/*
|
||||||
|
* Constructs a BookmarksDlg as a child of 'parent', with the
|
||||||
|
* name 'name' and widget flags set to 'f'.
|
||||||
|
*
|
||||||
|
* The dialog will by default be modeless, unless you set 'modal' to
|
||||||
|
* TRUE to construct a modal dialog.
|
||||||
|
*/
|
||||||
|
|
||||||
|
BookmarksDlg::BookmarksDlg(const Bookmarks& bms, QWidget* parent,
|
||||||
|
const char* name, bool modal, WFlags fl)
|
||||||
|
: QDialog(parent, name, modal, fl),
|
||||||
|
m_bookmarks(bms)
|
||||||
|
{
|
||||||
|
if ( !name )
|
||||||
|
setName( "BookmarksDlg" );
|
||||||
|
setSizeGripEnabled(TRUE);
|
||||||
|
BookmarksDlgLayout = new QVBoxLayout( this, 11, 6, "BookmarksDlgLayout");
|
||||||
|
|
||||||
|
layout3 = new QHBoxLayout( 0, 0, 6, "layout3");
|
||||||
|
|
||||||
|
bookmarksTable = new QTable(3, 2, this, "bookmarksList" );
|
||||||
|
bookmarksTable->horizontalHeader()->setLabel(0, "Title");
|
||||||
|
bookmarksTable->horizontalHeader()->setLabel(1, "Page number");
|
||||||
|
// bookmarksTable->setLeftMargin(0);
|
||||||
|
bookmarksTable->setColumnStretchable(0, true);
|
||||||
|
bookmarksTable->setSelectionMode(QTable::SingleRow);
|
||||||
|
layout3->addWidget( bookmarksTable );
|
||||||
|
|
||||||
|
layout2 = new QVBoxLayout( 0, 0, 6, "layout2");
|
||||||
|
|
||||||
|
addButton = new QPushButton( this, "addButton" );
|
||||||
|
layout2->addWidget( addButton );
|
||||||
|
|
||||||
|
deleteButton = new QPushButton( this, "deleteButton" );
|
||||||
|
layout2->addWidget( deleteButton );
|
||||||
|
Horizontal_Spacing2_2 = new QSpacerItem( 20, 60, QSizePolicy::Minimum, QSizePolicy::Expanding );
|
||||||
|
layout2->addItem( Horizontal_Spacing2_2 );
|
||||||
|
layout3->addLayout( layout2 );
|
||||||
|
BookmarksDlgLayout->addLayout( layout3 );
|
||||||
|
|
||||||
|
Layout1 = new QHBoxLayout( 0, 0, 6, "Layout1");
|
||||||
|
|
||||||
|
buttonHelp = new QPushButton( this, "buttonHelp" );
|
||||||
|
buttonHelp->setAutoDefault( TRUE );
|
||||||
|
Layout1->addWidget( buttonHelp );
|
||||||
|
Horizontal_Spacing2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
|
||||||
|
Layout1->addItem( Horizontal_Spacing2 );
|
||||||
|
|
||||||
|
buttonOk = new QPushButton( this, "buttonOk" );
|
||||||
|
buttonOk->setAutoDefault( TRUE );
|
||||||
|
buttonOk->setDefault( TRUE );
|
||||||
|
Layout1->addWidget( buttonOk );
|
||||||
|
|
||||||
|
buttonCancel = new QPushButton( this, "buttonCancel" );
|
||||||
|
buttonCancel->setAutoDefault( TRUE );
|
||||||
|
Layout1->addWidget( buttonCancel );
|
||||||
|
BookmarksDlgLayout->addLayout( Layout1 );
|
||||||
|
languageChange();
|
||||||
|
resize( QSize(400, 267).expandedTo(minimumSizeHint()) );
|
||||||
|
clearWState( WState_Polished );
|
||||||
|
|
||||||
|
updateBookmarks();
|
||||||
|
// signals and slots connections
|
||||||
|
connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept()));
|
||||||
|
connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
|
||||||
|
connect(addButton, SIGNAL(clicked()), this, SLOT(addBookmark()));
|
||||||
|
connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteBookmark()));
|
||||||
|
connect(bookmarksTable, SIGNAL(valueChanged(int, int)), this, SLOT(valueChanged(int, int)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Destroys the object and frees any allocated resources
|
||||||
|
*/
|
||||||
|
BookmarksDlg::~BookmarksDlg()
|
||||||
|
{
|
||||||
|
// no need to delete child widgets, Qt does it all for us
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sets the strings of the subwidgets using the current
|
||||||
|
* language.
|
||||||
|
*/
|
||||||
|
void BookmarksDlg::languageChange()
|
||||||
|
{
|
||||||
|
setCaption( tr2i18n( "Bookmarks editor" ) );
|
||||||
|
addButton->setText( tr2i18n( "Add" ) );
|
||||||
|
deleteButton->setText( tr2i18n( "Delete" ) );
|
||||||
|
buttonHelp->setText( tr2i18n( "&Help" ) );
|
||||||
|
buttonHelp->setAccel( QKeySequence( tr2i18n( "F1" ) ) );
|
||||||
|
buttonOk->setText( tr2i18n( "&OK" ) );
|
||||||
|
buttonOk->setAccel( QKeySequence( QString::null ) );
|
||||||
|
buttonCancel->setText( tr2i18n( "Ca&ncel" ) );
|
||||||
|
buttonCancel->setAccel( QKeySequence( tr2i18n( "Alt+N" ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookmarksDlg::addBookmark()
|
||||||
|
{
|
||||||
|
m_bookmarks.push_back(Bookmark(2, "new bookmark"));
|
||||||
|
std::sort(m_bookmarks.begin(), m_bookmarks.end());
|
||||||
|
updateBookmarks();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookmarksDlg::deleteBookmark()
|
||||||
|
{
|
||||||
|
int row = bookmarksTable->currentRow();
|
||||||
|
if (row >= 0 && row < m_bookmarks.size())
|
||||||
|
{
|
||||||
|
m_bookmarks.erase(m_bookmarks.begin() + row);
|
||||||
|
updateBookmarks();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookmarksDlg::updateBookmarks()
|
||||||
|
{
|
||||||
|
bookmarksTable->setNumRows(0);
|
||||||
|
for (Bookmarks::size_type i = 0; i < m_bookmarks.size(); ++i)
|
||||||
|
{
|
||||||
|
const Bookmark& bm = m_bookmarks[i];
|
||||||
|
bookmarksTable->setNumRows(i+1);
|
||||||
|
bookmarksTable->setText(i, 0, bm.name());
|
||||||
|
bookmarksTable->setText(i, 1, QString::number(bm.page()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookmarksDlg::valueChanged(int row, int col)
|
||||||
|
{
|
||||||
|
if (row >= m_bookmarks.size()) return;
|
||||||
|
Bookmark& bm = m_bookmarks[row];
|
||||||
|
//Bookmark title
|
||||||
|
if (col == 0)
|
||||||
|
bm.setName(bookmarksTable->text(row, col));
|
||||||
|
//page number
|
||||||
|
else if (col == 1)
|
||||||
|
{
|
||||||
|
bool ok;
|
||||||
|
unsigned int page = bookmarksTable->text(row, col).toUInt(&ok);
|
||||||
|
if (ok)
|
||||||
|
bm.setPage(page);
|
||||||
|
else
|
||||||
|
//return old value
|
||||||
|
bookmarksTable->setText(row, col, QString::number(bm.page()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "bookmarksdlg.moc"
|
@ -0,0 +1,71 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BOOKMARKSDLG_H
|
||||||
|
#define BOOKMARKSDLG_H
|
||||||
|
|
||||||
|
#include <qvariant.h>
|
||||||
|
#include <qdialog.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include "bookmark.h"
|
||||||
|
|
||||||
|
class QVBoxLayout;
|
||||||
|
class QHBoxLayout;
|
||||||
|
class QGridLayout;
|
||||||
|
class QSpacerItem;
|
||||||
|
class QTable;
|
||||||
|
class QPushButton;
|
||||||
|
|
||||||
|
class BookmarksDlg : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
BookmarksDlg(const Bookmarks& bms, QWidget* parent = 0,
|
||||||
|
const char* name = 0, bool modal = FALSE, WFlags fl = 0);
|
||||||
|
~BookmarksDlg();
|
||||||
|
|
||||||
|
const Bookmarks& bookmarks() const { return m_bookmarks; }
|
||||||
|
|
||||||
|
QTable* bookmarksTable;
|
||||||
|
QPushButton* addButton;
|
||||||
|
QPushButton* deleteButton;
|
||||||
|
QPushButton* buttonHelp;
|
||||||
|
QPushButton* buttonOk;
|
||||||
|
QPushButton* buttonCancel;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QVBoxLayout* BookmarksDlgLayout;
|
||||||
|
QHBoxLayout* layout3;
|
||||||
|
QVBoxLayout* layout2;
|
||||||
|
QSpacerItem* Horizontal_Spacing2_2;
|
||||||
|
QHBoxLayout* Layout1;
|
||||||
|
QSpacerItem* Horizontal_Spacing2;
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
virtual void languageChange();
|
||||||
|
void addBookmark();
|
||||||
|
void deleteBookmark();
|
||||||
|
void valueChanged(int row, int col);
|
||||||
|
void updateBookmarks();
|
||||||
|
private:
|
||||||
|
Bookmarks m_bookmarks;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BOOKMARKSDLG_H
|
@ -0,0 +1,511 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include <kaccel.h>
|
||||||
|
#include <kaction.h>
|
||||||
|
#include <kcharsets.h>
|
||||||
|
#include <kconfig.h>
|
||||||
|
#include <kconfigdialog.h>
|
||||||
|
#include <kdebug.h>
|
||||||
|
#include <kdeversion.h>
|
||||||
|
#include <kencodingfiledialog.h>
|
||||||
|
#include <kfiledialog.h>
|
||||||
|
#include <kglobal.h>
|
||||||
|
#include <kinputdialog.h>
|
||||||
|
#include <kiconloader.h>
|
||||||
|
#include <klocale.h>
|
||||||
|
#include <kmenubar.h>
|
||||||
|
#include <kmessagebox.h>
|
||||||
|
#include <kprinter.h>
|
||||||
|
#include <kstatusbar.h>
|
||||||
|
#include <ksplashscreen.h>
|
||||||
|
#include <kstandarddirs.h>
|
||||||
|
#include <kstdaccel.h>
|
||||||
|
#include <kstdaction.h>
|
||||||
|
#include <kurl.h>
|
||||||
|
#include <kurldrag.h>
|
||||||
|
#include <kurlrequesterdlg.h>
|
||||||
|
#include <kio/netaccess.h>
|
||||||
|
#include <qdragobject.h>
|
||||||
|
#include <qpainter.h>
|
||||||
|
#include <qpaintdevicemetrics.h>
|
||||||
|
#include <qpixmap.h>
|
||||||
|
#include <qtextcodec.h>
|
||||||
|
#include <qsignalmapper.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include "bookreader.h"
|
||||||
|
#include "settings.h"
|
||||||
|
#include "settingsdlg.h"
|
||||||
|
#include "bookmarksdlg.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
QStringList listEncodings()
|
||||||
|
{
|
||||||
|
const QStringList encodings(KGlobal::charsets()->availableEncodingNames());
|
||||||
|
QStringList availEncodings;
|
||||||
|
for (unsigned int i=0; i < encodings.count(); ++i)
|
||||||
|
{
|
||||||
|
bool found = false;
|
||||||
|
KGlobal::charsets()->codecForName(encodings[i], found);
|
||||||
|
if (found)
|
||||||
|
availEncodings << encodings[i];
|
||||||
|
}
|
||||||
|
return availEncodings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BookReader::BookReader()
|
||||||
|
: KMainWindow(0, "BookReader"),
|
||||||
|
m_view(new BookWidget(this)),
|
||||||
|
m_fullScreenAction(0),
|
||||||
|
m_splash(0),
|
||||||
|
m_printer(0)
|
||||||
|
{
|
||||||
|
|
||||||
|
QPixmap splash(KGlobal::dirs()->findResource("appdata",
|
||||||
|
"themes/default/splash.png"));
|
||||||
|
m_splash = new KSplashScreen(splash);
|
||||||
|
m_splash->show();
|
||||||
|
// accept dnd
|
||||||
|
setAcceptDrops(true);
|
||||||
|
|
||||||
|
// tell the KMainWindow that this is indeed the main widget
|
||||||
|
setCentralWidget(m_view);
|
||||||
|
|
||||||
|
// then, setup our actions
|
||||||
|
setupActions();
|
||||||
|
|
||||||
|
// and a status bar
|
||||||
|
statusBar()->show();
|
||||||
|
|
||||||
|
// Apply the create the main window and ask the mainwindow to
|
||||||
|
// automatically save settings if changed: window size, toolbar
|
||||||
|
// position, icon size, etc. Also to add actions for the statusbar
|
||||||
|
// toolbar, and keybindings if necessary.
|
||||||
|
KStdAction::keyBindings(guiFactory(), SLOT(configureShortcuts()), actionCollection());
|
||||||
|
createStandardStatusBarAction();
|
||||||
|
setStandardToolBarMenuEnabled( true );
|
||||||
|
KStdAction::configureToolbars(this, SLOT(configureToolbars() ), actionCollection());
|
||||||
|
createGUI(QString::null, false);
|
||||||
|
initialGeometrySet();
|
||||||
|
setAutoSaveSettings();
|
||||||
|
|
||||||
|
// allow the view to change the statusbar and caption
|
||||||
|
connect(m_view, SIGNAL(signalChangeStatusbar(const QString&)),
|
||||||
|
this, SLOT(changeStatusbar(const QString&)));
|
||||||
|
connect(m_view, SIGNAL(signalChangeCaption(const QString&)),
|
||||||
|
this, SLOT(changeCaption(const QString&)));
|
||||||
|
|
||||||
|
readSettings();
|
||||||
|
m_splash->finish(m_view);
|
||||||
|
}
|
||||||
|
|
||||||
|
BookReader::~BookReader()
|
||||||
|
{
|
||||||
|
writeSettings();
|
||||||
|
delete m_splash;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::load(const KURL& url)
|
||||||
|
{
|
||||||
|
QString target;
|
||||||
|
// download the contents
|
||||||
|
if(!KIO::NetAccess::download(url, target, this))
|
||||||
|
{
|
||||||
|
KMessageBox::error(this, KIO::NetAccess::lastErrorString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
recentFilesAction->addURL(url);
|
||||||
|
setCaption(url.fileName());
|
||||||
|
m_view->openURL(url);
|
||||||
|
updateBookmarks();
|
||||||
|
KIO::NetAccess::removeTempFile(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::setupActions()
|
||||||
|
{
|
||||||
|
// KStdAction::openNew(this, SLOT(fileNew()), actionCollection());
|
||||||
|
KStdAction::open(this, SLOT(fileOpen()), actionCollection());
|
||||||
|
recentFilesAction = KStdAction::openRecent(this, SLOT(slotURLSelected(const KURL &)),
|
||||||
|
actionCollection());
|
||||||
|
KStdAction::save(this, SLOT(fileSave()), actionCollection());
|
||||||
|
KStdAction::saveAs(this, SLOT(fileSaveAs()), actionCollection());
|
||||||
|
KStdAction::print(this, SLOT(filePrint()), actionCollection());
|
||||||
|
KStdAction::quit(kapp, SLOT(quit()), actionCollection());
|
||||||
|
|
||||||
|
KStdAction::firstPage(this, SLOT(gotoFirstPage()), actionCollection());
|
||||||
|
KStdAction::prior(this, SLOT(prevPage()), actionCollection());
|
||||||
|
KStdAction::next(this, SLOT(nextPage()), actionCollection());
|
||||||
|
KStdAction::lastPage(this, SLOT(gotoLastPage()), actionCollection());
|
||||||
|
|
||||||
|
KStdAction::addBookmark(this, SLOT(addBookmark()), actionCollection());
|
||||||
|
KStdAction::editBookmarks(this, SLOT(editBookmarks()), actionCollection());
|
||||||
|
|
||||||
|
KStdAction::gotoPage(this, SLOT(gotoPage()), actionCollection());
|
||||||
|
|
||||||
|
m_fullScreenAction = KStdAction::fullScreen(this, SLOT(fullScreen()),
|
||||||
|
actionCollection(), this);
|
||||||
|
|
||||||
|
KStdAction::preferences(this, SLOT(optionsPreferences()), actionCollection());
|
||||||
|
|
||||||
|
KConfig *config = kapp->config();
|
||||||
|
recentFilesAction->loadEntries(config);
|
||||||
|
|
||||||
|
// this doesn't do anything useful. it's just here to illustrate
|
||||||
|
// how to insert a custom menu and menu item
|
||||||
|
/*
|
||||||
|
KAction *custom = new KAction( i18n( "Cus&tom Menuitem" ), 0,
|
||||||
|
this, SLOT( optionsPreferences() ),
|
||||||
|
actionCollection(), "custom_action" );*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::saveProperties(KConfig *config)
|
||||||
|
{
|
||||||
|
// the 'config' object points to the session managed
|
||||||
|
// config file. anything you write here will be available
|
||||||
|
// later when this app is restored
|
||||||
|
if (!m_view->currentURL().isEmpty())
|
||||||
|
{
|
||||||
|
config->writeEntry("lastURL", m_view->currentURL());
|
||||||
|
config->writeEntry("currentPage", m_view->currentPage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::readProperties(KConfig */*config*/)
|
||||||
|
{
|
||||||
|
// the 'config' object points to the session managed
|
||||||
|
// config file. this function is automatically called whenever
|
||||||
|
// the app is being restored. read in here whatever you wrote
|
||||||
|
// in 'saveProperties'
|
||||||
|
|
||||||
|
// QString url = config->readPathEntry("lastURL");
|
||||||
|
// int currentPage = config->readEntry("currentPage").toInt();
|
||||||
|
/* Disable forawhile
|
||||||
|
if (!url.isEmpty())
|
||||||
|
{
|
||||||
|
m_view->openURL(KURL(url));
|
||||||
|
m_view->setCurrentPage(currentPage);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::dragEnterEvent(QDragEnterEvent *event)
|
||||||
|
{
|
||||||
|
// accept uri drops only
|
||||||
|
event->accept(KURLDrag::canDecode(event));
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::dropEvent(QDropEvent *event)
|
||||||
|
{
|
||||||
|
// this is a very simplistic implementation of a drop event. we
|
||||||
|
// will only accept a dropped URL. the Qt dnd code can do *much*
|
||||||
|
// much more, so please read the docs there
|
||||||
|
KURL::List urls;
|
||||||
|
|
||||||
|
// see if we can decode a URI.. if not, just ignore it
|
||||||
|
if (KURLDrag::decode(event, urls) && !urls.isEmpty())
|
||||||
|
{
|
||||||
|
// okay, we have a URI.. process it
|
||||||
|
const KURL & url = urls.first();
|
||||||
|
|
||||||
|
// load in the file
|
||||||
|
load(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::fileOpen()
|
||||||
|
{
|
||||||
|
// this slot is called whenever the File->Open menu is selected,
|
||||||
|
// the Open shortcut is pressed (usually CTRL+O) or the Open toolbar
|
||||||
|
// button is clicked
|
||||||
|
/*
|
||||||
|
// this brings up the generic open dialog
|
||||||
|
KURL url = KURLRequesterDlg::getURL(QString::null, this, i18n("Open Location") );
|
||||||
|
*/
|
||||||
|
// standard filedialog
|
||||||
|
KEncodingFileDialog::Result res =
|
||||||
|
KEncodingFileDialog::getOpenURLAndEncoding(
|
||||||
|
listEncodings()[Settings::defaultEncoding()]);
|
||||||
|
KURL url = res.URLs.front();
|
||||||
|
m_view->setEncoding(res.encoding);
|
||||||
|
if (!url.isEmpty())
|
||||||
|
load(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::fileSave()
|
||||||
|
{
|
||||||
|
// this slot is called whenever the File->Save menu is selected,
|
||||||
|
// the Save shortcut is pressed (usually CTRL+S) or the Save toolbar
|
||||||
|
// button is clicked
|
||||||
|
|
||||||
|
// save the current file
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::fileSaveAs()
|
||||||
|
{
|
||||||
|
// this slot is called whenever the File->Save As menu is selected,
|
||||||
|
KURL file_url = KFileDialog::getSaveURL();
|
||||||
|
if (!file_url.isEmpty() && file_url.isValid())
|
||||||
|
{
|
||||||
|
// save your info, here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::filePrint()
|
||||||
|
{
|
||||||
|
// this slot is called whenever the File->Print menu is selected,
|
||||||
|
// the Print shortcut is pressed (usually CTRL+P) or the Print toolbar
|
||||||
|
// button is clicked
|
||||||
|
if (!m_printer) m_printer = new KPrinter;
|
||||||
|
if (m_printer->setup(this))
|
||||||
|
{
|
||||||
|
// setup the printer. with Qt, you always "print" to a
|
||||||
|
// QPainter.. whether the output medium is a pixmap, a screen,
|
||||||
|
// or paper
|
||||||
|
QPainter p;
|
||||||
|
p.begin(m_printer);
|
||||||
|
|
||||||
|
// we let our view do the actual printing
|
||||||
|
QPaintDeviceMetrics metrics(m_printer);
|
||||||
|
//m_view->print( &p, metrics.height(), metrics.width() );
|
||||||
|
|
||||||
|
// and send the result to the printer
|
||||||
|
p.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::optionsPreferences()
|
||||||
|
{
|
||||||
|
if (KConfigDialog::showDialog("settings"))
|
||||||
|
return ;
|
||||||
|
|
||||||
|
KConfigDialog *dialog = new KConfigDialog(this, "settings", Settings::self(),
|
||||||
|
KDialogBase::IconList);
|
||||||
|
SettingsWidget *general = new SettingsWidget(0, "General");
|
||||||
|
|
||||||
|
const QStringList encodings(listEncodings());
|
||||||
|
|
||||||
|
QString curEncoding(encodings[Settings::defaultEncoding()]);
|
||||||
|
if (curEncoding.isEmpty())
|
||||||
|
curEncoding = QString::fromLatin1(KGlobal::locale()->encoding());
|
||||||
|
|
||||||
|
general->kcfg_DefaultEncoding->clear();
|
||||||
|
general->kcfg_DefaultEncoding->insertStringList(encodings);
|
||||||
|
for (unsigned int i=0; i < encodings.count(); ++i)
|
||||||
|
if (encodings[i] == curEncoding)
|
||||||
|
general->kcfg_DefaultEncoding->setCurrentItem(i);
|
||||||
|
|
||||||
|
dialog->addPage(general, i18n("General"), "settings");
|
||||||
|
connect(dialog, SIGNAL(settingsChanged()), this, SLOT(loadSettings()));
|
||||||
|
dialog->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::changeStatusbar(const QString& text)
|
||||||
|
{
|
||||||
|
// display the text on the statusbar
|
||||||
|
statusBar()->message(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::changeCaption(const QString& text)
|
||||||
|
{
|
||||||
|
// display the text on the caption
|
||||||
|
setCaption(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::loadSettings()
|
||||||
|
{
|
||||||
|
m_view->setFont(Settings::font());
|
||||||
|
m_view->setParaOffset(Settings::paraOffset());
|
||||||
|
m_view->setEncoding(Settings::defaultEncoding());
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::slotURLSelected(const KURL & url)
|
||||||
|
{
|
||||||
|
load(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BookReader::queryExit()
|
||||||
|
{
|
||||||
|
writeSettings();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::writeSettings()
|
||||||
|
{
|
||||||
|
KConfig * config = kapp->config();
|
||||||
|
config->writeEntry("size", m_view->size());
|
||||||
|
config->writeEntry("lastURL", m_view->currentURL());
|
||||||
|
config->writeEntry("lastURLPage", m_view->currentPage());
|
||||||
|
recentFilesAction->saveEntries(KGlobal::config());
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::readSettings()
|
||||||
|
{
|
||||||
|
recentFilesAction->loadEntries(KGlobal::config());
|
||||||
|
recentFilesAction->setEnabled(true); // force enabling
|
||||||
|
|
||||||
|
m_view->setParaOffset(Settings::paraOffset());
|
||||||
|
m_view->setEncodings(listEncodings());
|
||||||
|
m_view->setEncoding(Settings::defaultEncoding());
|
||||||
|
|
||||||
|
if (Settings::loadLastUrl())
|
||||||
|
{
|
||||||
|
loadLastUrl();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::fullScreen()
|
||||||
|
{
|
||||||
|
if (m_fullScreenAction->isChecked())
|
||||||
|
{
|
||||||
|
menuBar()->hide();
|
||||||
|
setWindowState(windowState() | WindowFullScreen);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
menuBar()->show();
|
||||||
|
setWindowState(windowState() & ~WindowFullScreen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::loadLastUrl()
|
||||||
|
{
|
||||||
|
KConfig * config = kapp->config();
|
||||||
|
QSize size = config->readSizeEntry("size");
|
||||||
|
lastURL = config->readEntry("lastURL");
|
||||||
|
connect(m_view, SIGNAL(loadingFinished()), this, SLOT(loadLastURLSetPage()));
|
||||||
|
if (!lastURL.isEmpty())
|
||||||
|
{
|
||||||
|
// kdDebug() << "loadLastUrl: initial size = " << m_view->size() << endl;
|
||||||
|
m_view->resize(size);
|
||||||
|
// kdDebug() << "loadLastUrl: resize = " << m_view->size() << endl;
|
||||||
|
m_view->setupPageSize();
|
||||||
|
// kdDebug() << "render = 1" << endl;
|
||||||
|
load(lastURL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::loaded(int loaded)
|
||||||
|
{
|
||||||
|
//m_loaded = loaded;
|
||||||
|
m_splash->message(tr("Loading: %1 - %2%").arg(lastURL.fileName()).arg(loaded));
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::gotoFirstPage()
|
||||||
|
{
|
||||||
|
m_view->firstPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::nextPage()
|
||||||
|
{
|
||||||
|
m_view->nextPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::prevPage()
|
||||||
|
{
|
||||||
|
m_view->prevPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::gotoLastPage( )
|
||||||
|
{
|
||||||
|
m_view->lastPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::gotoPage()
|
||||||
|
{
|
||||||
|
bool isOk;
|
||||||
|
int page = KInputDialog::getInteger(tr("Goto page"), tr("Page number"),
|
||||||
|
m_view->currentPage(), 1,
|
||||||
|
m_view->pageCount(), 1, &isOk);
|
||||||
|
m_view->setCurrentPage(page - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::loadLastURLSetPage()
|
||||||
|
{
|
||||||
|
int lastURLPage = kapp->config()->readNumEntry("lastURLPage");
|
||||||
|
m_view->setCurrentPage(lastURLPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookReader::addBookmark()
|
||||||
|
{
|
||||||
|
bool isOk;
|
||||||
|
QString name = KInputDialog::getText(tr("Add bookmark"),
|
||||||
|
tr("Bookmark name"), tr("Here"), &isOk);
|
||||||
|
if (isOk)
|
||||||
|
{
|
||||||
|
m_view->addBookmark(name);
|
||||||
|
updateBookmarks();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn BookReader::updateBookmarks()
|
||||||
|
*/
|
||||||
|
void BookReader::updateBookmarks()
|
||||||
|
{
|
||||||
|
unplugActionList("my_bookmarks");
|
||||||
|
m_bookmarkActions.clear();
|
||||||
|
m_bookmarkActions.setAutoDelete(true);
|
||||||
|
const Bookmarks & bms = m_view->bookmarks();
|
||||||
|
|
||||||
|
QSignalMapper *bookmarkMapper = new QSignalMapper(this);
|
||||||
|
connect(bookmarkMapper, SIGNAL(mapped(int)), this, SLOT(gotoBookmark(int)));
|
||||||
|
for (Bookmarks::size_type i = 0; i < 9 && i < bms.size(); ++i)
|
||||||
|
{
|
||||||
|
const Bookmark & bm = bms[i];
|
||||||
|
KAction * action = new KAction(bm.name(), ALT+Key_1 + i);
|
||||||
|
connect(action, SIGNAL(activated()), bookmarkMapper, SLOT(map()));
|
||||||
|
m_bookmarkActions.append(action);
|
||||||
|
bookmarkMapper->setMapping(action, i);
|
||||||
|
}
|
||||||
|
plugActionList("my_bookmarks", m_bookmarkActions);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn BookReader::gotoBookmark(int index)
|
||||||
|
*/
|
||||||
|
void BookReader::gotoBookmark(int index)
|
||||||
|
{
|
||||||
|
const Bookmarks & bms = m_view->bookmarks();
|
||||||
|
assert(index < bms.size());
|
||||||
|
|
||||||
|
unsigned int page = bms[index].page();
|
||||||
|
m_view->setCurrentPage(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn BookReader::editBookmarks()
|
||||||
|
*/
|
||||||
|
void BookReader::editBookmarks()
|
||||||
|
{
|
||||||
|
/// @todo implement me
|
||||||
|
BookmarksDlg dialog(m_view->bookmarks());
|
||||||
|
if (dialog.exec() == QDialog::Accepted)
|
||||||
|
{
|
||||||
|
m_view->setBookmarks(dialog.bookmarks());
|
||||||
|
updateBookmarks();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include "bookreader.moc"
|
@ -0,0 +1,127 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexandr Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _BOOKREADER_H_
|
||||||
|
#define _BOOKREADER_H_
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <kapplication.h>
|
||||||
|
#include <kmainwindow.h>
|
||||||
|
#include "bookwidget.h"
|
||||||
|
|
||||||
|
|
||||||
|
class KPrinter;
|
||||||
|
class KURL;
|
||||||
|
class KRecentFilesAction;
|
||||||
|
class KToggleFullScreenAction;
|
||||||
|
class KSplashScreen;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class serves as the main window for BookReader. It handles the
|
||||||
|
* menus, toolbars, and status bars.
|
||||||
|
*
|
||||||
|
* @short Main window class
|
||||||
|
* @author Alexandr Nemish <atlanter@gmail.com>
|
||||||
|
*/
|
||||||
|
class BookReader : public KMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Default Constructor
|
||||||
|
*/
|
||||||
|
BookReader();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Destructor
|
||||||
|
*/
|
||||||
|
virtual ~BookReader();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this method to load whatever file/URL you have
|
||||||
|
*/
|
||||||
|
void load(const KURL& url);
|
||||||
|
void loadLastUrl();
|
||||||
|
void updateBookmarks();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* Overridden virtuals for Qt drag 'n drop (XDND)
|
||||||
|
*/
|
||||||
|
virtual void dragEnterEvent(QDragEnterEvent *event);
|
||||||
|
virtual void dropEvent(QDropEvent *event);
|
||||||
|
virtual bool queryExit();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* This function is called when it is time for the app to save its
|
||||||
|
* properties for session management purposes.
|
||||||
|
*/
|
||||||
|
void saveProperties(KConfig *);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function is called when this app is restored. The KConfig
|
||||||
|
* object points to the session management config file that was saved
|
||||||
|
* with @ref saveProperties
|
||||||
|
*/
|
||||||
|
void readProperties(KConfig *);
|
||||||
|
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void fileOpen();
|
||||||
|
void fileSave();
|
||||||
|
void fileSaveAs();
|
||||||
|
void filePrint();
|
||||||
|
void optionsPreferences();
|
||||||
|
void slotURLSelected(const KURL &);
|
||||||
|
void fullScreen();
|
||||||
|
void changeStatusbar(const QString& text);
|
||||||
|
void changeCaption(const QString& text);
|
||||||
|
void loadSettings();
|
||||||
|
void loaded(int);
|
||||||
|
void gotoFirstPage();
|
||||||
|
void nextPage();
|
||||||
|
void prevPage();
|
||||||
|
void gotoLastPage();
|
||||||
|
void gotoPage();
|
||||||
|
void loadLastURLSetPage();
|
||||||
|
void addBookmark();
|
||||||
|
void gotoBookmark(int index);
|
||||||
|
void editBookmarks();
|
||||||
|
private:
|
||||||
|
void setupAccel();
|
||||||
|
void setupActions();
|
||||||
|
void readSettings();
|
||||||
|
void writeSettings();
|
||||||
|
private:
|
||||||
|
BookWidget * m_view;
|
||||||
|
//Actions
|
||||||
|
KRecentFilesAction * recentFilesAction;
|
||||||
|
KToggleFullScreenAction * m_fullScreenAction;
|
||||||
|
QPtrList<KAction> m_bookmarkActions;
|
||||||
|
KURL lastURL;
|
||||||
|
KSplashScreen * m_splash;
|
||||||
|
KPrinter * m_printer;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _BOOKREADER_H_
|
||||||
|
|
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
||||||
|
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
|
||||||
|
<kcfgfile name="bookreaderrc"/>
|
||||||
|
<group name="Preferences">
|
||||||
|
<entry name="Font" type="Font">
|
||||||
|
<label>The font used to display the contents of books.</label>
|
||||||
|
<default code="true">KGlobalSettings::generalFont()</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="ParaOffset" type="Int">
|
||||||
|
<label>This is an offset of paragraph's first line in pixels</label>
|
||||||
|
<default>50</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="DefaultEncoding" type="Int">
|
||||||
|
<label>This is a default encoding</label>
|
||||||
|
</entry>
|
||||||
|
<entry name="LoadLastUrl" type="Bool">
|
||||||
|
<label>This is ...</label>
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
</group>
|
||||||
|
</kcfg>
|
@ -0,0 +1,16 @@
|
|||||||
|
Begin3
|
||||||
|
Title: BookReader -- Some description
|
||||||
|
Version: 0.1
|
||||||
|
Entered-date:
|
||||||
|
Description:
|
||||||
|
Keywords: KDE Qt
|
||||||
|
Author: Alexandr Nemish <atlanter@gmail.com>
|
||||||
|
Maintained-by: Alexandr Nemish <atlanter@gmail.com>
|
||||||
|
Home-page:
|
||||||
|
Alternate-site:
|
||||||
|
Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils
|
||||||
|
xxxxxx bookreader-0.1.tar.gz
|
||||||
|
xxx bookreader-0.1.lsm
|
||||||
|
Platform: Linux. Needs KDE
|
||||||
|
Copying-policy: GPL
|
||||||
|
End
|
@ -0,0 +1,45 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include <kapplication.h>
|
||||||
|
#include <dcopclient.h>
|
||||||
|
#include <qdatastream.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
KApplication app(argc, argv, "bookreader_client", false);
|
||||||
|
|
||||||
|
// get our DCOP client and attach so that we may use it
|
||||||
|
DCOPClient *client = app.dcopClient();
|
||||||
|
client->attach();
|
||||||
|
|
||||||
|
// do a 'send' for now
|
||||||
|
QByteArray data;
|
||||||
|
QDataStream ds(data, IO_WriteOnly);
|
||||||
|
if (argc > 1)
|
||||||
|
ds << QString(argv[1]);
|
||||||
|
else
|
||||||
|
ds << QString("http://www.kde.org");
|
||||||
|
client->send("bookreader", "BookReaderIface", "openURL(QString)", data);
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexandr Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _BOOKREADERIFACE_H_
|
||||||
|
#define _BOOKREADERIFACE_H_
|
||||||
|
|
||||||
|
#include <dcopobject.h>
|
||||||
|
|
||||||
|
class BookReaderIface : virtual public DCOPObject
|
||||||
|
{
|
||||||
|
K_DCOP
|
||||||
|
public:
|
||||||
|
|
||||||
|
k_dcop:
|
||||||
|
virtual void openURL(QString url) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _BOOKREADERIFACE_H_
|
@ -0,0 +1,19 @@
|
|||||||
|
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
|
||||||
|
<kpartgui version="1" name="bookreader" >
|
||||||
|
<MenuBar>
|
||||||
|
<Menu name="bookmarks" >
|
||||||
|
<ActionList name="my_bookmarks" />
|
||||||
|
<Action name="copy" />
|
||||||
|
</Menu>
|
||||||
|
</MenuBar>
|
||||||
|
<ToolBar noMerge="1" name="mainToolBar" >
|
||||||
|
<text>Main Toolbar</text>
|
||||||
|
<Action name="file_open" />
|
||||||
|
<Action name="file_save" />
|
||||||
|
<Action name="file_print" />
|
||||||
|
<Separator weakSeparator="1" name="separator_0" />
|
||||||
|
<Action name="go_previous" />
|
||||||
|
<Action name="go_next" />
|
||||||
|
<Action name="fullscreen" />
|
||||||
|
</ToolBar>
|
||||||
|
</kpartgui>
|
@ -0,0 +1,473 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include <qpainter.h>
|
||||||
|
#include <qevent.h>
|
||||||
|
#include <qimage.h>
|
||||||
|
#include <kdebug.h>
|
||||||
|
#include <kprogress.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
#include <qtextstream.h>
|
||||||
|
#include <qtextcodec.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <kglobal.h>
|
||||||
|
#include <kstandarddirs.h>
|
||||||
|
#include "bookwidget.h"
|
||||||
|
#include "theme.h"
|
||||||
|
#include "settings.h"
|
||||||
|
#include "renderer.h"
|
||||||
|
//#include "ktextprogressdlg.h"
|
||||||
|
|
||||||
|
class QStringList;
|
||||||
|
class QRect;
|
||||||
|
class QPixmap;
|
||||||
|
|
||||||
|
BookWidget::BookWidget(QWidget *parent, const char *name)
|
||||||
|
: QWidget(parent, name),
|
||||||
|
m_modified(true),
|
||||||
|
m_currentPage(0),
|
||||||
|
m_left_margin(0),
|
||||||
|
m_right_margin(0),
|
||||||
|
m_top_margin(0),
|
||||||
|
m_bottom_margin(0),
|
||||||
|
m_middle_margin(0),
|
||||||
|
m_encoding(0),
|
||||||
|
m_renderer(new Renderer)
|
||||||
|
{
|
||||||
|
//setupPageSize();
|
||||||
|
//setupSlots();
|
||||||
|
m_left_margin = 30;
|
||||||
|
m_right_margin = 30;
|
||||||
|
m_top_margin = 20;
|
||||||
|
m_bottom_margin = 15;
|
||||||
|
m_middle_margin = 20;
|
||||||
|
|
||||||
|
setFont(Settings::font());
|
||||||
|
|
||||||
|
Theme::self()->loadTheme("default");
|
||||||
|
|
||||||
|
setWFlags(Qt::WNoAutoErase);
|
||||||
|
setFocusPolicy(QWidget::StrongFocus);
|
||||||
|
|
||||||
|
connect(&m_timer, SIGNAL(timeout()), this, SLOT(loadLine()));
|
||||||
|
connect(m_renderer.get(), SIGNAL(renderingFinished()), this, SLOT(renderingFinished()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BookWidget::~BookWidget()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::openURL(const KURL & url)
|
||||||
|
{
|
||||||
|
m_url = url;
|
||||||
|
m_file.setName(m_url.path());
|
||||||
|
if (! m_file.open(IO_ReadOnly)) return;
|
||||||
|
|
||||||
|
///@todo Write encoding detection
|
||||||
|
m_stream.reset(new QTextStream(&m_file));
|
||||||
|
m_textLines.reset(new QStringList);
|
||||||
|
QString name(encoding());
|
||||||
|
QTextCodec *codec = QTextCodec::codecForName(encoding()); // get the codec
|
||||||
|
if (codec)
|
||||||
|
m_stream->setCodec(codec);
|
||||||
|
//show progress dialog
|
||||||
|
m_progressDlg.reset(new KProgressDialog(this, "progressDlg", "Loading...",
|
||||||
|
"Loading file ", true));
|
||||||
|
m_progressDlg->setLabel("Loading file " + m_url.path());
|
||||||
|
m_progressDlg->setAllowCancel(true);
|
||||||
|
m_progressDlg->progressBar()->setTotalSteps(0);
|
||||||
|
connect(m_progressDlg.get(), SIGNAL(cancelClicked()), SLOT(cancelLoading()));
|
||||||
|
KDialog::centerOnScreen(m_progressDlg.get());
|
||||||
|
m_progressDlg->show();
|
||||||
|
//start timer for processing gui events
|
||||||
|
m_timer.start(0, false);
|
||||||
|
//load bookmark for the book
|
||||||
|
loadBookmarks();
|
||||||
|
// just for fun, set the status bar
|
||||||
|
emit signalChangeStatusbar(m_url.prettyURL());
|
||||||
|
}
|
||||||
|
|
||||||
|
QString BookWidget::currentURL()
|
||||||
|
{
|
||||||
|
return m_url.path();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::drawContent(QPainter& paint)
|
||||||
|
{
|
||||||
|
const QRect lrect (rectLeftPage());
|
||||||
|
const QRect rrect(rectRightPage());
|
||||||
|
const unsigned int curPage = currentPage();
|
||||||
|
//draw pages
|
||||||
|
m_renderer->drawPage(paint, lrect, curPage);
|
||||||
|
m_renderer->drawPage(paint, rrect, curPage + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::drawPageNumbers(QPainter & paint)
|
||||||
|
{
|
||||||
|
if (m_renderer->isEmpty())
|
||||||
|
return;
|
||||||
|
const QRect lrect (rectLeftPage());
|
||||||
|
const QRect rrect(rectRightPage());
|
||||||
|
const QString number = QString::number(currentPage() + 2);
|
||||||
|
// setup font
|
||||||
|
QFont pageFont(font());
|
||||||
|
int pointSize = 10;
|
||||||
|
pageFont.setPointSize(pointSize);
|
||||||
|
pageFont.setBold(false);
|
||||||
|
pageFont.setItalic(false);
|
||||||
|
pageFont.setUnderline(false);
|
||||||
|
paint.setFont(pageFont);
|
||||||
|
const QFontMetrics fm(pageFont);
|
||||||
|
const int width = fm.width(number);
|
||||||
|
//paint page numbers
|
||||||
|
const int offset = 8;
|
||||||
|
paint.drawText(lrect.left(), QWidget::height() - offset,
|
||||||
|
QString::number(currentPage() + 1));
|
||||||
|
paint.drawText(rrect.left() + rrect.width() - width,
|
||||||
|
QWidget::height() - offset, number);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::drawBookmark(QPainter & paint, Bookmark const& bm)
|
||||||
|
{
|
||||||
|
const QRect lrect (rectLeftPage());
|
||||||
|
const QRect rrect(rectRightPage());
|
||||||
|
const QPixmap & bookmarkImage = Theme::self()->bookmarkPixmap();
|
||||||
|
const int width = bookmarkImage.width();
|
||||||
|
paint.drawPixmap(QWidget::width()/2 - width/2, 0, bookmarkImage);
|
||||||
|
if (!bm.name().isEmpty())
|
||||||
|
{
|
||||||
|
paint.save();
|
||||||
|
paint.translate(QWidget::width()/2., 20.);
|
||||||
|
paint.rotate(90.);
|
||||||
|
const QString text = bm.name() + " (" + bm.dateTime().toString(Qt::LocalDate) + ")";
|
||||||
|
paint.drawText(0, 0, text);
|
||||||
|
paint.restore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::paintEvent(QPaintEvent* event)
|
||||||
|
{
|
||||||
|
// use cached page pixmap if the page wasn't modified
|
||||||
|
if (!modified())
|
||||||
|
{
|
||||||
|
QRect rect(event->rect());
|
||||||
|
bitBlt(this, rect.x(), rect.y(), &m_cachePixmap, rect.x(), rect.y(), rect.width(), rect.height());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// do full painting otherwise
|
||||||
|
setupPageSize();
|
||||||
|
const QRect lrect (rectLeftPage());
|
||||||
|
const QRect rrect(rectRightPage());
|
||||||
|
const unsigned int curPage = currentPage();
|
||||||
|
QPixmap pm(size());
|
||||||
|
QPainter paint(&pm);
|
||||||
|
//draw background image
|
||||||
|
const QPixmap & image = Theme::self()->bgPixmap(QWidget::size());
|
||||||
|
paint.drawPixmap(0, 0, image);
|
||||||
|
if (m_renderer->busy())
|
||||||
|
{
|
||||||
|
QFont f(font());
|
||||||
|
f.setPointSize(20);
|
||||||
|
paint.setFont(f);
|
||||||
|
const QFontMetrics fm(f);
|
||||||
|
QString text = tr("Rendering...");
|
||||||
|
const int w = fm.width(text);
|
||||||
|
const int h = fm.height();
|
||||||
|
const int dx = (lrect.width() - w) / 2;
|
||||||
|
const int dy = (lrect.height() - h) / 2;
|
||||||
|
paint.drawText(lrect.x() + dx, lrect.y() + dy, text);
|
||||||
|
paint.drawText(rrect.x() + dx, rrect.y() + dy, text);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
paint.setFont(font());
|
||||||
|
//draw pages
|
||||||
|
drawContent(paint);
|
||||||
|
drawPageNumbers(paint);
|
||||||
|
//draw bookmark if it is
|
||||||
|
typedef Bookmarks::const_iterator IT;
|
||||||
|
IT it = std::lower_bound(m_bookmarks.begin(), m_bookmarks.end(), curPage);
|
||||||
|
if (it != m_bookmarks.end() && (*it).page() == curPage)
|
||||||
|
drawBookmark(paint, *it);
|
||||||
|
}
|
||||||
|
paint.end();
|
||||||
|
bitBlt(this, 0, 0, &pm);
|
||||||
|
// store painted pixmap as cache
|
||||||
|
m_cachePixmap = pm;
|
||||||
|
m_modified = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::setupPageSize()
|
||||||
|
{
|
||||||
|
QSize size((width() - m_left_margin - m_right_margin - 2 * m_middle_margin) / 2,
|
||||||
|
(height() - m_top_margin - m_bottom_margin));
|
||||||
|
m_renderer->setPageSize(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::mousePressEvent(QMouseEvent * event)
|
||||||
|
{
|
||||||
|
if (event->button() == LeftButton)
|
||||||
|
{
|
||||||
|
if (rectLeftPage().contains(event->pos()))
|
||||||
|
{
|
||||||
|
prevPage();
|
||||||
|
}
|
||||||
|
else if (rectRightPage().contains(event->pos()))
|
||||||
|
{
|
||||||
|
nextPage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QWidget::mousePressEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QRect BookWidget::rectLeftPage() const
|
||||||
|
{
|
||||||
|
return QRect(m_left_margin, m_top_margin,
|
||||||
|
m_renderer->pageSize().width(),
|
||||||
|
m_renderer->pageSize().height());
|
||||||
|
}
|
||||||
|
|
||||||
|
const QRect BookWidget::rectRightPage() const
|
||||||
|
{
|
||||||
|
return QRect(m_left_margin + 2 * m_middle_margin + m_renderer->pageSize().width(),
|
||||||
|
m_top_margin,
|
||||||
|
m_renderer->pageSize().width(),
|
||||||
|
m_renderer->pageSize().height());
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::clearAll()
|
||||||
|
{
|
||||||
|
setCurrentPage(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BookWidget::prevPage()
|
||||||
|
{
|
||||||
|
setCurrentPage(currentPage() - 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::nextPage()
|
||||||
|
{
|
||||||
|
setCurrentPage(currentPage() + 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::firstPage()
|
||||||
|
{
|
||||||
|
setCurrentPage(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::lastPage()
|
||||||
|
{
|
||||||
|
setCurrentPage(m_renderer->pageCount() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::wheelEvent(QWheelEvent * e)
|
||||||
|
{
|
||||||
|
e->accept();
|
||||||
|
if (e->delta() > 0)
|
||||||
|
prevPage();
|
||||||
|
else nextPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::resizeEvent(QResizeEvent * e)
|
||||||
|
{
|
||||||
|
m_modified = true;
|
||||||
|
setupPageSize();
|
||||||
|
m_renderer->render();
|
||||||
|
// //if size become lower recalc current page
|
||||||
|
// if (currentPage() > m_renderer->pageCount())
|
||||||
|
// lastPage();
|
||||||
|
QWidget::resizeEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize BookWidget::minimumSizeHint() const
|
||||||
|
{
|
||||||
|
return QSize(400, 300);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::setFont(const QFont & font)
|
||||||
|
{
|
||||||
|
m_modified = true;
|
||||||
|
QWidget::setFont(font);
|
||||||
|
m_renderer->setFont(font);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::setCurrentPage(int number)
|
||||||
|
{
|
||||||
|
// do nothing while renderer is working
|
||||||
|
if (m_renderer->busy())
|
||||||
|
return;
|
||||||
|
if (number >= m_renderer->pageCount())
|
||||||
|
number = m_renderer->pageCount() - 1;
|
||||||
|
if (number < 0) number = 0;
|
||||||
|
//only even page numbers allowed
|
||||||
|
int newPage = (number % 2) ? number - 1 : number;
|
||||||
|
if (newPage != m_currentPage)
|
||||||
|
m_modified = true;
|
||||||
|
m_currentPage = newPage;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::keyPressEvent(QKeyEvent * e)
|
||||||
|
{
|
||||||
|
if (e->key() == Qt::Key_Right || e->key() == Qt::Key_Down
|
||||||
|
|| e->key() == Qt::Key_Space)
|
||||||
|
{
|
||||||
|
nextPage();
|
||||||
|
}
|
||||||
|
else if (e->key() == Qt::Key_Left || e->key() == Qt::Key_Up)
|
||||||
|
{
|
||||||
|
prevPage();
|
||||||
|
}
|
||||||
|
else if (e->key() == Qt::Key_Home)
|
||||||
|
{
|
||||||
|
firstPage();
|
||||||
|
}
|
||||||
|
else if (e->key() == Qt::Key_End)
|
||||||
|
{
|
||||||
|
lastPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget::keyPressEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::loadLine()
|
||||||
|
{
|
||||||
|
static int lineCount = 0;
|
||||||
|
if (!m_stream->eof())
|
||||||
|
{
|
||||||
|
*m_textLines << m_stream->readLine();
|
||||||
|
//progress update after every 50 lines
|
||||||
|
if (!(++lineCount % 50))
|
||||||
|
m_progressDlg->progressBar()->setProgress(
|
||||||
|
m_progressDlg->progressBar()->progress() + 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_timer.stop();
|
||||||
|
//render
|
||||||
|
m_renderer->load(*m_textLines);
|
||||||
|
//setup and show
|
||||||
|
firstPage();
|
||||||
|
//clean up
|
||||||
|
m_progressDlg.reset(0);
|
||||||
|
m_stream.reset(0);
|
||||||
|
m_textLines.reset(0);
|
||||||
|
m_file.close();
|
||||||
|
m_modified = true;
|
||||||
|
emit loadingFinished();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::cancelLoading()
|
||||||
|
{
|
||||||
|
m_timer.stop();
|
||||||
|
if (parentWidget())
|
||||||
|
parentWidget()->setCaption("");
|
||||||
|
//clean up
|
||||||
|
m_progressDlg->hide();
|
||||||
|
m_stream.reset(0);
|
||||||
|
m_textLines.reset(0);
|
||||||
|
m_file.close();
|
||||||
|
//setup and show
|
||||||
|
m_renderer->clear();
|
||||||
|
firstPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::setParaOffset(int offset)
|
||||||
|
{
|
||||||
|
m_modified = true;
|
||||||
|
m_renderer->setParaOffset(offset);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::setEncoding(int a_encoding)
|
||||||
|
{
|
||||||
|
m_encoding = a_encoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::setEncodings(const QStringList & a_encodings)
|
||||||
|
{
|
||||||
|
m_encodings = a_encodings;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::setEncoding(const QString & a_encoding)
|
||||||
|
{
|
||||||
|
m_encoding = (m_encodings.findIndex(a_encoding));
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::addBookmark(const QString& name)
|
||||||
|
{
|
||||||
|
m_bookmarks.push_back(Bookmark(currentPage(), name));
|
||||||
|
std::sort(m_bookmarks.begin(), m_bookmarks.end());
|
||||||
|
|
||||||
|
// KAction menu = new KAction()
|
||||||
|
|
||||||
|
saveBookmarks();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::saveBookmarks( )
|
||||||
|
{
|
||||||
|
const QString fileName = "bookreader/" + m_url.fileName();
|
||||||
|
QFile::remove(KGlobal::dirs()->findResource("appdata", m_url.fileName()));
|
||||||
|
KConfig config(fileName, false, false, "data");
|
||||||
|
for (Bookmarks::size_type i = 0; i < m_bookmarks.size(); ++i)
|
||||||
|
{
|
||||||
|
const Bookmark & bm = m_bookmarks[i];
|
||||||
|
config.setGroup(tr("Bookmark %1").arg(i));
|
||||||
|
config.writeEntry("page", bm.page());
|
||||||
|
config.writeEntry("name", bm.name());
|
||||||
|
config.writeEntry("dateTime", bm.dateTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::loadBookmarks()
|
||||||
|
{
|
||||||
|
m_bookmarks.clear();
|
||||||
|
const QString fileName = "bookreader/" + m_url.fileName();
|
||||||
|
KConfig config(fileName, true, false, "data");
|
||||||
|
QStringList groups = config.groupList();
|
||||||
|
typedef QStringList::const_iterator IT;
|
||||||
|
for (IT it = groups.constBegin(); it != groups.constEnd(); ++it)
|
||||||
|
{
|
||||||
|
config.setGroup(*it);
|
||||||
|
const QString name = config.readEntry("name");
|
||||||
|
const unsigned int page = config.readUnsignedNumEntry("page");
|
||||||
|
const QDateTime dateTime = config.readDateTimeEntry("dateTime");
|
||||||
|
const Bookmark bm(page, name, dateTime);
|
||||||
|
m_bookmarks.push_back(bm);
|
||||||
|
}
|
||||||
|
std::sort(m_bookmarks.begin(), m_bookmarks.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::setBookmarks(const Bookmarks & bms)
|
||||||
|
{
|
||||||
|
m_bookmarks.clear();
|
||||||
|
m_bookmarks = bms;
|
||||||
|
std::sort(m_bookmarks.begin(), m_bookmarks.end());
|
||||||
|
saveBookmarks();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookWidget::renderingFinished()
|
||||||
|
{
|
||||||
|
m_modified = true;
|
||||||
|
setCurrentPage(currentPage());
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "bookwidget.moc"
|
@ -0,0 +1,125 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef BOOKWIDGET_H
|
||||||
|
#define BOOKWIDGET_H
|
||||||
|
|
||||||
|
#include <qwidget.h>
|
||||||
|
#include <qevent.h>
|
||||||
|
#include <qpixmap.h>
|
||||||
|
#include <qthread.h>
|
||||||
|
#include <qtimer.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
#include <kurl.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include "renderer.h"
|
||||||
|
#include "bookmark.h"
|
||||||
|
|
||||||
|
class QStringList;
|
||||||
|
class QRect;
|
||||||
|
class KProgressDialog;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
class BookWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
BookWidget(QWidget *parent = 0, const char *name = 0);
|
||||||
|
~BookWidget();
|
||||||
|
|
||||||
|
virtual void openURL(const KURL & url);
|
||||||
|
virtual QString currentURL();
|
||||||
|
void paintEvent (QPaintEvent *);
|
||||||
|
void setFont( const QFont & );
|
||||||
|
void setParaOffset(int offset);
|
||||||
|
void setCurrentPage(int number);
|
||||||
|
int currentPage() const { return m_currentPage; };
|
||||||
|
int pageCount() const { return m_renderer->pageCount(); }
|
||||||
|
void nextPage();
|
||||||
|
void prevPage();
|
||||||
|
void firstPage();
|
||||||
|
void lastPage();
|
||||||
|
QSize minimumSizeHint () const;
|
||||||
|
void setupPageSize();
|
||||||
|
void setEncoding(int);
|
||||||
|
void setEncoding(const QString & a_encoding);
|
||||||
|
void setEncodings(const QStringList & a_encodings);
|
||||||
|
QString encoding() const { return m_encodings[m_encoding]; }
|
||||||
|
//const TextThread * thread() const {return m_thread;}
|
||||||
|
void addBookmark(const QString& name);
|
||||||
|
void saveBookmarks();
|
||||||
|
void loadBookmarks();
|
||||||
|
void setBookmarks(const Bookmarks& bms);
|
||||||
|
const Bookmarks & bookmarks() const { return m_bookmarks; }
|
||||||
|
signals:
|
||||||
|
/**
|
||||||
|
* Use this signal to change the content of the statusbar
|
||||||
|
*/
|
||||||
|
void signalChangeStatusbar(const QString& text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this signal to change the content of the caption
|
||||||
|
*/
|
||||||
|
void signalChangeCaption(const QString& text);
|
||||||
|
|
||||||
|
void loaded(int);
|
||||||
|
void loadingFinished();
|
||||||
|
protected:
|
||||||
|
const QRect rectLeftPage() const;
|
||||||
|
const QRect rectRightPage() const;
|
||||||
|
void mousePressEvent(QMouseEvent *);
|
||||||
|
void keyPressEvent (QKeyEvent * e);
|
||||||
|
void resizeEvent (QResizeEvent * e);
|
||||||
|
void wheelEvent (QWheelEvent * e);
|
||||||
|
void clearAll();
|
||||||
|
void drawContent(QPainter& paint);
|
||||||
|
void drawPageNumbers(QPainter& paint);
|
||||||
|
void drawBookmark(QPainter& paint, Bookmark const& bm);
|
||||||
|
bool modified() const { return m_modified; };
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void loadLine();
|
||||||
|
void cancelLoading();
|
||||||
|
void renderingFinished();
|
||||||
|
|
||||||
|
private:
|
||||||
|
KURL m_url;
|
||||||
|
bool m_modified;
|
||||||
|
QPixmap m_cachePixmap;
|
||||||
|
int m_currentPage;
|
||||||
|
int m_left_margin;
|
||||||
|
int m_right_margin;
|
||||||
|
int m_top_margin;
|
||||||
|
int m_bottom_margin;
|
||||||
|
int m_middle_margin;
|
||||||
|
QFile m_file;
|
||||||
|
QTimer m_timer;
|
||||||
|
QStringList m_encodings;
|
||||||
|
int m_encoding;
|
||||||
|
std::auto_ptr<Renderer> m_renderer;
|
||||||
|
std::auto_ptr<QTextStream> m_stream;
|
||||||
|
std::auto_ptr<QStringList> m_textLines;
|
||||||
|
std::auto_ptr<KProgressDialog> m_progressDlg;
|
||||||
|
Bookmarks m_bookmarks;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
After Width: | Height: | Size: 631 B |
After Width: | Height: | Size: 1.5 KiB |
@ -0,0 +1,66 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include <kapplication.h>
|
||||||
|
#include <dcopclient.h>
|
||||||
|
#include <kaboutdata.h>
|
||||||
|
#include <kcmdlineargs.h>
|
||||||
|
#include <klocale.h>
|
||||||
|
#include <ksplashscreen.h>
|
||||||
|
#include "bookreader.h"
|
||||||
|
|
||||||
|
static const char description[] = I18N_NOOP("A KDE Application");
|
||||||
|
static const char version[] = "0.2";
|
||||||
|
static KCmdLineOptions options[] =
|
||||||
|
{
|
||||||
|
{ "[URL]", I18N_NOOP("Document to open"), 0 },
|
||||||
|
KCmdLineLastOption
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
KAboutData about("bookreader", I18N_NOOP("BooKreader"), version, description,
|
||||||
|
KAboutData::License_GPL,
|
||||||
|
"(C) 2005-2007 Alexander Nemish", 0, 0, "atlanter@gmail.com");
|
||||||
|
about.addAuthor("Alexander Nemish", 0, "atlanter@gmail.com");
|
||||||
|
KCmdLineArgs::init(argc, argv, &about);
|
||||||
|
KCmdLineArgs::addCmdLineOptions(options);
|
||||||
|
KApplication app;
|
||||||
|
|
||||||
|
// register ourselves as a dcop client
|
||||||
|
app.dcopClient()->registerAs(app.name(), false);
|
||||||
|
|
||||||
|
// see if we are starting with session management
|
||||||
|
if (app.isRestored())
|
||||||
|
{
|
||||||
|
RESTORE(BookReader);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// no session.. just start up normally
|
||||||
|
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
|
||||||
|
BookReader *widget = new BookReader;
|
||||||
|
app.setMainWidget(widget->centralWidget());
|
||||||
|
if (args->count() == 1)
|
||||||
|
widget->load(args->url(0));
|
||||||
|
widget->show();
|
||||||
|
args->clear();
|
||||||
|
}
|
||||||
|
return app.exec();
|
||||||
|
}
|
@ -0,0 +1,398 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 - 2007 by Alexander Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include <kdebug.h>
|
||||||
|
#include <qfontmetrics.h>
|
||||||
|
#include <qpainter.h>
|
||||||
|
#include <vector>
|
||||||
|
#include <cmath>
|
||||||
|
#include <iostream>
|
||||||
|
#include "renderer.h"
|
||||||
|
|
||||||
|
Renderer::Renderer():
|
||||||
|
m_pageCount(0),
|
||||||
|
m_linesPerPage(0),
|
||||||
|
m_paraOffset(50),
|
||||||
|
m_fontMetrics(new QFontMetrics(m_font)),
|
||||||
|
m_curParagraph(0),
|
||||||
|
m_isRendering(false)
|
||||||
|
{
|
||||||
|
connect(&m_timer, SIGNAL(timeout()), this, SLOT(timeout()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Renderer::~Renderer()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the list is empty do nothing.
|
||||||
|
* \param a_list List of strings to render
|
||||||
|
*/
|
||||||
|
void Renderer::load(const QStringList & a_list)
|
||||||
|
{
|
||||||
|
if (a_list.isEmpty())
|
||||||
|
return;
|
||||||
|
m_text.clear();
|
||||||
|
|
||||||
|
QString string;
|
||||||
|
TStringIter it(a_list.constBegin());
|
||||||
|
|
||||||
|
while (it != a_list.constEnd())
|
||||||
|
{
|
||||||
|
//skip spaces;
|
||||||
|
string = (*it).stripWhiteSpace();
|
||||||
|
//process string until paragraph ends
|
||||||
|
while (++it != a_list.constEnd())
|
||||||
|
{
|
||||||
|
QChar const ch((*it)[0]);
|
||||||
|
//insert empty lines
|
||||||
|
if ((*it).isEmpty())
|
||||||
|
break;
|
||||||
|
//check whether paragraph not ends
|
||||||
|
if (!ch.isSpace() && (ch != '-'))
|
||||||
|
{
|
||||||
|
string += " " + *it;
|
||||||
|
}
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
// add paragraph
|
||||||
|
m_text.push_back(string);
|
||||||
|
//add empty line if we have one
|
||||||
|
if ((*it).isEmpty())
|
||||||
|
m_text.push_back("");
|
||||||
|
}
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \note You need manually update your widget. Like
|
||||||
|
* \code
|
||||||
|
* renderer->render();
|
||||||
|
* update();
|
||||||
|
* \endcode
|
||||||
|
*/
|
||||||
|
void Renderer::render()
|
||||||
|
{
|
||||||
|
if (isEmpty())
|
||||||
|
return;
|
||||||
|
if (busy())
|
||||||
|
cancel();
|
||||||
|
clear();
|
||||||
|
m_isRendering = true;
|
||||||
|
m_linesPerPage = m_pageSize.height() / (QFontMetrics(font()).height());
|
||||||
|
m_timer.start(0, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Renderer::timeout()
|
||||||
|
{
|
||||||
|
if (m_curParagraph < m_text.size())
|
||||||
|
{
|
||||||
|
parseParagraph(m_curParagraph);
|
||||||
|
m_curParagraph++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cancel();
|
||||||
|
emit renderingFinished();
|
||||||
|
}
|
||||||
|
m_pageCount = m_linesPerPage ? (m_lines.size() / m_linesPerPage) + 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Renderer::cancel()
|
||||||
|
{
|
||||||
|
m_timer.stop();
|
||||||
|
m_curParagraph = 0;
|
||||||
|
m_isRendering = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call it for simple view clearing.
|
||||||
|
* \code
|
||||||
|
* renderer->clear();
|
||||||
|
* update();
|
||||||
|
* \endcode
|
||||||
|
*/
|
||||||
|
void Renderer::clear()
|
||||||
|
{
|
||||||
|
m_lines.clear();
|
||||||
|
m_pageCount = 0;
|
||||||
|
m_linesPerPage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \param a_string Line to parse
|
||||||
|
*/
|
||||||
|
void Renderer::parseParagraph(TIndex paraIndex)
|
||||||
|
{
|
||||||
|
//Don't parse empty lines
|
||||||
|
const QString a_string(m_text[paraIndex]);
|
||||||
|
if (a_string.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QString string(a_string);
|
||||||
|
const int avgCharWidth = m_fontMetrics->width(" ");
|
||||||
|
//calc approx string width
|
||||||
|
unsigned int avgLen = m_pageSize.width() / avgCharWidth;
|
||||||
|
unsigned int len;
|
||||||
|
int begin = 0;
|
||||||
|
m_isStartAdded = false;
|
||||||
|
int curWidth = width(string);
|
||||||
|
|
||||||
|
// whole paragraph in single line
|
||||||
|
if (curWidth <= m_pageSize.width())
|
||||||
|
{
|
||||||
|
addLine(TextLine(paraIndex, 0, a_string.length(), TextLine::PARA_BOTH));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; curWidth > m_pageSize.width(); curWidth = width(string))
|
||||||
|
{
|
||||||
|
len = avgLen;
|
||||||
|
//turn left if missed
|
||||||
|
int w = width(string.left(len));
|
||||||
|
for (; (w > m_pageSize.width()) && (len > 0); w = width(string.left(len)))
|
||||||
|
{
|
||||||
|
int diff = w - m_pageSize.width();
|
||||||
|
int charDiff = diff / 10;
|
||||||
|
if (charDiff > len)
|
||||||
|
charDiff = charDiff % len;
|
||||||
|
charDiff = (charDiff == 0) ? 1 : charDiff;
|
||||||
|
len -= charDiff;
|
||||||
|
}
|
||||||
|
//turn right if missed
|
||||||
|
while ((width(string.left(len)) <= m_pageSize.width())
|
||||||
|
&& (len < string.length()))
|
||||||
|
++len;
|
||||||
|
--len;
|
||||||
|
|
||||||
|
// update statistics on average length
|
||||||
|
avgLen = (unsigned int) (len / (1 + 1. / avgLen));
|
||||||
|
|
||||||
|
//check whether we in a word
|
||||||
|
if (!(string[len - 1].isSpace() || string[len].isSpace()))
|
||||||
|
{
|
||||||
|
//find last word start index
|
||||||
|
const int wordBegin = wordAt(string, len);
|
||||||
|
//check whether its width less than page width
|
||||||
|
if (width(getWord(string, wordBegin)) <= m_pageSize.width())
|
||||||
|
{
|
||||||
|
//if so, move last word to the next line
|
||||||
|
// invariant: wordBegin > 0,
|
||||||
|
// because otherwise the word is greater than page width
|
||||||
|
|
||||||
|
// i points to a space before the word
|
||||||
|
int i = wordBegin -1;
|
||||||
|
// skip spaces
|
||||||
|
while (i && string[i].isSpace())
|
||||||
|
--i;
|
||||||
|
addLine(TextLine(paraIndex, begin, begin + i + 1));
|
||||||
|
string = string.right(string.length() - wordBegin);
|
||||||
|
begin += wordBegin;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//if its width greater than page width - split it
|
||||||
|
addLine(TextLine(paraIndex, begin, begin + len));
|
||||||
|
string = string.right(string.length() - len);
|
||||||
|
begin += len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// line ends with spaces and next line begins with spaces,
|
||||||
|
// trim them
|
||||||
|
else if (string[len - 1].isSpace() && string[len].isSpace())
|
||||||
|
{
|
||||||
|
int idx = len - 1;
|
||||||
|
while (string[--idx] == ' ');
|
||||||
|
addLine(TextLine(paraIndex, begin, begin + idx + 1));
|
||||||
|
idx = len;
|
||||||
|
while (string[++idx] == ' ');
|
||||||
|
string = string.right(string.length() - idx);
|
||||||
|
begin += idx;
|
||||||
|
}
|
||||||
|
else if (string[len - 1].isSpace())
|
||||||
|
{
|
||||||
|
int idx = len - 1;
|
||||||
|
while (string[--idx] == ' ');
|
||||||
|
addLine(TextLine(paraIndex, begin, begin + idx + 1));
|
||||||
|
string = string.right(string.length() - len);
|
||||||
|
begin += len;
|
||||||
|
}
|
||||||
|
else if (string[len].isSpace())
|
||||||
|
{
|
||||||
|
int idx = len;
|
||||||
|
while (string[++idx] == ' ');
|
||||||
|
addLine(TextLine(paraIndex, begin, begin + len));
|
||||||
|
string = string.right(string.length() - idx);
|
||||||
|
begin += idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//last line in multiline para.
|
||||||
|
len = string.length();
|
||||||
|
addLine(TextLine(paraIndex, begin, begin + len, TextLine::PARA_END));
|
||||||
|
}
|
||||||
|
|
||||||
|
int Renderer::width(const QString & a_string) const
|
||||||
|
{
|
||||||
|
int w = m_fontMetrics->width(a_string);
|
||||||
|
return m_isStartAdded ? w : w + paraOffset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Renderer::addLine(TextLine line)
|
||||||
|
{
|
||||||
|
if (!m_isStartAdded)
|
||||||
|
line.setParagraphFlags(line.paragraphFlags() | TextLine::PARA_START);
|
||||||
|
m_lines.push_back(line);
|
||||||
|
m_isStartAdded = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Renderer::wordAt(const QString & string, int len)
|
||||||
|
{
|
||||||
|
while (--len >= 0)
|
||||||
|
if (string[len] == ' ')
|
||||||
|
return ++len;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Renderer::getWord(const QString & a_string, int a_idx)
|
||||||
|
{
|
||||||
|
int idx = a_idx;
|
||||||
|
while (a_string[++idx] != ' ' && idx < a_string.length());
|
||||||
|
return QString(a_string.mid(a_idx, idx - a_idx));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws page number \c pageNumber on \c paint
|
||||||
|
* bounding \c rect rectangle
|
||||||
|
*/
|
||||||
|
void Renderer::drawPage(QPainter & paint, QRect rect, int pageNumber)
|
||||||
|
{
|
||||||
|
int height = m_fontMetrics->height();
|
||||||
|
int line = 1;
|
||||||
|
TLines::size_type count = m_lines.size();
|
||||||
|
|
||||||
|
if (count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((pageNumber * m_linesPerPage) >= count)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TLines::size_type idx = pageNumber * m_linesPerPage;
|
||||||
|
for (; (line <= m_linesPerPage) && idx < m_lines.size(); ++idx, ++line)
|
||||||
|
drawLine(paint, rect.left(), rect.top() + line * height, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Renderer::drawLine(QPainter & paint, int x, int y, const TLines::size_type index)
|
||||||
|
{
|
||||||
|
const TextLine textLine(m_lines[index]);
|
||||||
|
const int length = textLine.size();
|
||||||
|
const QString & paragraph = m_text[textLine.paragraphIndex()];
|
||||||
|
const QString string = paragraph.mid(textLine.begin(), textLine.size());
|
||||||
|
|
||||||
|
// indent paragraph
|
||||||
|
if (textLine.isParaStart())
|
||||||
|
x += paraOffset();
|
||||||
|
|
||||||
|
// don't justify on paragraph end
|
||||||
|
if (textLine.isParaEnd())
|
||||||
|
{
|
||||||
|
paint.drawText(x, y, string);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int pageWidth = m_pageSize.width();
|
||||||
|
const int spaceWidth = m_fontMetrics->width(" ");
|
||||||
|
int width = m_fontMetrics->width(string);
|
||||||
|
const int curWidth = textLine.isParaStart() ? width + paraOffset() : width;
|
||||||
|
|
||||||
|
if (curWidth == pageWidth)
|
||||||
|
{
|
||||||
|
paint.drawText(x, y, string);
|
||||||
|
}
|
||||||
|
|
||||||
|
// string width is lower than page width. justify by space width
|
||||||
|
long pos = 0, off = 0;
|
||||||
|
|
||||||
|
//count spaces
|
||||||
|
std::vector<int> spaces;
|
||||||
|
spaces.reserve(50);
|
||||||
|
while (((pos = string.find(' ', off)) != -1) && (pos < length))
|
||||||
|
{
|
||||||
|
spaces.push_back(pos);
|
||||||
|
off = pos + 1;
|
||||||
|
}
|
||||||
|
const std::vector<int>::size_type spacesCount = spaces.size();
|
||||||
|
// no spaces no justifications
|
||||||
|
if (!spacesCount)
|
||||||
|
{
|
||||||
|
paint.drawText(x, y, string);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// justify line
|
||||||
|
double x1 = x;
|
||||||
|
// calc average space width
|
||||||
|
const double avgLen = ((double)(pageWidth - curWidth) / spacesCount);
|
||||||
|
int start = 0;
|
||||||
|
QString tmp;
|
||||||
|
for (std::vector<int>::size_type i = 0; i < spacesCount; ++i)
|
||||||
|
{
|
||||||
|
pos = spaces[i];
|
||||||
|
tmp = string.mid(start, pos - start);
|
||||||
|
paint.drawText((int)std::ceil(x1), y, tmp);
|
||||||
|
x1 += m_fontMetrics->width(tmp);
|
||||||
|
x1 += spaceWidth + avgLen;
|
||||||
|
start = pos + 1;
|
||||||
|
}
|
||||||
|
//last chunk
|
||||||
|
paint.drawText((int)std::ceil(x1), y, string.right(length - start));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets current font to \c font and re-renders text.
|
||||||
|
* You don't need to directly call render().
|
||||||
|
*/
|
||||||
|
void Renderer::setFont(const QFont & font)
|
||||||
|
{
|
||||||
|
if (font == m_font) return;
|
||||||
|
m_font = font;
|
||||||
|
m_fontMetrics.reset(new QFontMetrics(m_font));
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets current paragraph offset to \c offset
|
||||||
|
* and re-renders text if it's changed.
|
||||||
|
*/
|
||||||
|
void Renderer::setParaOffset(int offset)
|
||||||
|
{
|
||||||
|
if (offset == m_paraOffset) return;
|
||||||
|
m_paraOffset = offset;
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets current page size to \c size.
|
||||||
|
* \note It don't call render() after changing.
|
||||||
|
*/
|
||||||
|
void Renderer::setPageSize(const QSize & size)
|
||||||
|
{
|
||||||
|
m_pageSize = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "renderer.moc"
|
@ -0,0 +1,138 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef RENDERER_H
|
||||||
|
#define RENDERER_H
|
||||||
|
|
||||||
|
#include <qstringlist.h>
|
||||||
|
#include <qfont.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <qsize.h>
|
||||||
|
#include <qtimer.h>
|
||||||
|
#include <vector>
|
||||||
|
#include <memory>
|
||||||
|
class QStringList;
|
||||||
|
|
||||||
|
class TextLine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static const int PARA_NONE = 0;
|
||||||
|
static const int PARA_START = 1;
|
||||||
|
static const int PARA_END = 2;
|
||||||
|
static const int PARA_BOTH = 3;
|
||||||
|
|
||||||
|
TextLine(int index, int begin, int end, int paraFlags = PARA_NONE):
|
||||||
|
m_paragraphFlags(paraFlags),
|
||||||
|
m_begin(begin),
|
||||||
|
m_end(end),
|
||||||
|
m_index(index)
|
||||||
|
{}
|
||||||
|
bool isParaStart() const { return m_paragraphFlags & PARA_START; }
|
||||||
|
bool isParaEnd() const { return m_paragraphFlags & PARA_END; }
|
||||||
|
void setParagraphFlags(int flags) { m_paragraphFlags = flags; }
|
||||||
|
const int paragraphFlags() const { return m_paragraphFlags; }
|
||||||
|
const int paragraphIndex() const { return m_index; }
|
||||||
|
const int begin() const { return m_begin; }
|
||||||
|
const int end() const { return m_end; }
|
||||||
|
const int size() const { return m_end - m_begin; }
|
||||||
|
private:
|
||||||
|
int m_paragraphFlags;
|
||||||
|
int m_begin;
|
||||||
|
int m_end;
|
||||||
|
int m_index;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Renders input text into list of word wrapped strings
|
||||||
|
* \author Alexandr Nemish <anemish@gmail.com>
|
||||||
|
*/
|
||||||
|
class Renderer : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
Renderer();
|
||||||
|
~Renderer();
|
||||||
|
|
||||||
|
/// \brief Loads and renders list of strings
|
||||||
|
void load(const QStringList & list);
|
||||||
|
/// \brief Renders loaded list of strings
|
||||||
|
void render();
|
||||||
|
/// \brief Clears all rendered data
|
||||||
|
void clear();
|
||||||
|
/// \brief Draws page
|
||||||
|
void drawPage(QPainter & paint, QRect rect, int pageNumber);
|
||||||
|
//Getters
|
||||||
|
/// \brief Returns whether the text is empty
|
||||||
|
bool isEmpty() const { return m_text.empty(); };
|
||||||
|
/// \brief Returns current font
|
||||||
|
QFont font() const { return m_font; }
|
||||||
|
/// \brief Returns current paragraph offset in pixels
|
||||||
|
int paraOffset() const { return m_paraOffset; }
|
||||||
|
/// \brief Returns the number of pages
|
||||||
|
int pageCount() const { return m_pageCount; }
|
||||||
|
/// \brief Returns page size in pixels
|
||||||
|
QSize pageSize() const { return m_pageSize; }
|
||||||
|
//Setters
|
||||||
|
/// \brief Sets current font
|
||||||
|
void setFont(const QFont & font);
|
||||||
|
/// \brief Sets current paragraph offset in pixels
|
||||||
|
void setParaOffset(int offset);
|
||||||
|
/// \brief Sets size of a page
|
||||||
|
void setPageSize(const QSize & size);
|
||||||
|
|
||||||
|
bool busy() const { return m_isRendering; }
|
||||||
|
signals:
|
||||||
|
void renderingFinished();
|
||||||
|
private slots:
|
||||||
|
void timeout();
|
||||||
|
private:
|
||||||
|
typedef QStringList::const_iterator TStringIter;
|
||||||
|
typedef std::vector<QString> TParagraphs;
|
||||||
|
typedef TParagraphs::size_type TIndex;
|
||||||
|
typedef std::vector<TextLine> TLines;
|
||||||
|
//make it non-copyable
|
||||||
|
Renderer(const Renderer &);
|
||||||
|
Renderer & operator = (const Renderer &);
|
||||||
|
/// \brief Renders input paragraph into list of wrapped lines
|
||||||
|
void parseParagraph(TIndex idx);
|
||||||
|
/// \brief Returns width of string in pixels
|
||||||
|
int width(const QString & a_string) const;
|
||||||
|
void addLine(TextLine line);
|
||||||
|
int wordAt(const QString & str, int len);
|
||||||
|
QString getWord(const QString & str, int idx);
|
||||||
|
/// \brief Draws justified string
|
||||||
|
void drawLine(QPainter& paint, int x, int y, const TLines::size_type idx);
|
||||||
|
void cancel();
|
||||||
|
|
||||||
|
TParagraphs m_text;
|
||||||
|
TLines m_lines;
|
||||||
|
int m_pageCount;
|
||||||
|
int m_linesPerPage;
|
||||||
|
int m_paraOffset;
|
||||||
|
QFont m_font;
|
||||||
|
std::auto_ptr<QFontMetrics> m_fontMetrics;
|
||||||
|
QSize m_pageSize;
|
||||||
|
bool m_isStartAdded;
|
||||||
|
TIndex m_curParagraph;
|
||||||
|
bool m_isRendering;
|
||||||
|
QTimer m_timer;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,6 @@
|
|||||||
|
# Code generation options for kconfig_compiler
|
||||||
|
File=bookreader.kcfg
|
||||||
|
ClassName=Settings
|
||||||
|
Singleton=true
|
||||||
|
Mutators=col_background,col_foreground
|
||||||
|
# will create the necessary code for setting those variables
|
@ -0,0 +1,167 @@
|
|||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>SettingsWidget</class>
|
||||||
|
<widget class="QWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>SettingsDlg</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>405</width>
|
||||||
|
<height>170</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Form1</string>
|
||||||
|
</property>
|
||||||
|
<vbox>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="margin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QFrame">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>frame3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>Raised</enum>
|
||||||
|
</property>
|
||||||
|
<vbox>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QLayoutWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>layout2</cstring>
|
||||||
|
</property>
|
||||||
|
<hbox>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Font</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy" stdset="0">
|
||||||
|
<cstring>kFontRequester1</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="KFontRequester">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>kcfg_Font</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</hbox>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLayoutWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>layout3</cstring>
|
||||||
|
</property>
|
||||||
|
<hbox>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1_2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Paragraph Offset</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QSpinBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>kcfg_ParaOffset</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</hbox>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLayoutWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>layout8</cstring>
|
||||||
|
</property>
|
||||||
|
<hbox>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1_3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Default encoding</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>kcfg_DefaultEncoding</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="editable">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</hbox>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>kcfg_LoadLastUrl</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Load last URL on startup</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<spacer>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>spacer1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>Expanding</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</vbox>
|
||||||
|
</widget>
|
||||||
|
</vbox>
|
||||||
|
</widget>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>kcfg_ParaOffset</sender>
|
||||||
|
<signal>valueChanged(const QString&)</signal>
|
||||||
|
<receiver>SettingsDlg</receiver>
|
||||||
|
<slot>kcfg_ParaOffset_valueChanged(const QString&)</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<slots>
|
||||||
|
<slot>kcfg_ParaOffset_valueChanged(const QString&)</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
<includehints>
|
||||||
|
<includehint>kfontrequester.h</includehint>
|
||||||
|
</includehints>
|
||||||
|
</UI>
|
@ -0,0 +1,59 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <qpixmap.h>
|
||||||
|
#include <qimage.h>
|
||||||
|
#include <kglobal.h>
|
||||||
|
#include <kstandarddirs.h>
|
||||||
|
#include "theme.h"
|
||||||
|
|
||||||
|
Theme* Theme::theme = 0;
|
||||||
|
|
||||||
|
Theme::Theme()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Theme * Theme::self()
|
||||||
|
{
|
||||||
|
if ( !theme )
|
||||||
|
theme = new Theme();
|
||||||
|
return theme;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Theme::loadTheme(const QString& name)
|
||||||
|
{
|
||||||
|
const QString themePath = "themes/" + name; //FIXME: Add 'name' check. Could be a hole.
|
||||||
|
QString bgPath = KGlobal::dirs()->findResource("appdata", themePath + "/bg.png");
|
||||||
|
QString bookmarkPath = KGlobal::dirs()->findResource("appdata", themePath + "/bookmark.png");
|
||||||
|
m_bgPixmap = QPixmap(bgPath);
|
||||||
|
m_bgResizedPixmap = m_bgPixmap;
|
||||||
|
m_bookmarkPixmap = QPixmap(bookmarkPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QPixmap & Theme::bgPixmap(QSize size) const
|
||||||
|
{
|
||||||
|
if (size == QSize(0, 0) || size == m_bgPixmap.size())
|
||||||
|
return m_bgPixmap;
|
||||||
|
if (size == m_bgResizedPixmap.size())
|
||||||
|
return m_bgResizedPixmap;
|
||||||
|
m_bgResizedPixmap = m_bgPixmap;
|
||||||
|
m_bgResizedPixmap.convertFromImage(m_bgResizedPixmap.convertToImage().scale(size));
|
||||||
|
return m_bgResizedPixmap;
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexander Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef BOOKREADER_THEME_H
|
||||||
|
#define BOOKREADER_THEME_H
|
||||||
|
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <qpixmap.h>
|
||||||
|
|
||||||
|
|
||||||
|
class Theme
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static Theme * self();
|
||||||
|
/// \brief Loads theme with given name. Default is "default". :)
|
||||||
|
void loadTheme(const QString& name = "default");
|
||||||
|
const QPixmap & bgPixmap(QSize size = QSize(0,0)) const;
|
||||||
|
const QPixmap & bookmarkPixmap() const { return m_bookmarkPixmap; }
|
||||||
|
//const QFont & font() const {return m_font;}
|
||||||
|
private:
|
||||||
|
static Theme * theme;
|
||||||
|
Theme();
|
||||||
|
Theme(const Theme &);
|
||||||
|
Theme & operator = (const Theme&);
|
||||||
|
QPixmap m_bgPixmap;
|
||||||
|
mutable QPixmap m_bgResizedPixmap;
|
||||||
|
QPixmap m_bookmarkPixmap;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,19 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexandr Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
@ -0,0 +1,19 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Alexandr Nemish *
|
||||||
|
* atlanter@gmail.com *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
Loading…
Reference in new issue