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