diff --git a/swisssurfer/AUTHORS b/swisssurfer/AUTHORS
new file mode 100644
index 0000000..e69de29
diff --git a/swisssurfer/COPYING b/swisssurfer/COPYING
new file mode 120000
index 0000000..6168a39
--- /dev/null
+++ b/swisssurfer/COPYING
@@ -0,0 +1 @@
+/usr/share/automake-1.11/COPYING
\ No newline at end of file
diff --git a/swisssurfer/ChangeLog b/swisssurfer/ChangeLog
new file mode 100644
index 0000000..e69de29
diff --git a/swisssurfer/INSTALL b/swisssurfer/INSTALL
new file mode 120000
index 0000000..cbd1c80
--- /dev/null
+++ b/swisssurfer/INSTALL
@@ -0,0 +1 @@
+/usr/share/automake-1.11/INSTALL
\ No newline at end of file
diff --git a/swisssurfer/NEWS b/swisssurfer/NEWS
new file mode 100644
index 0000000..e69de29
diff --git a/swisssurfer/README b/swisssurfer/README
new file mode 100644
index 0000000..e69de29
diff --git a/swisssurfer/bootstrap.sh b/swisssurfer/bootstrap.sh
new file mode 100755
index 0000000..916e283
--- /dev/null
+++ b/swisssurfer/bootstrap.sh
@@ -0,0 +1,19 @@
+#! /bin/sh
+
+## @file
+##
+## $Id: bootstrap.sh 2 2009-06-16 13:20:59Z $
+##
+## $Date: 2004/08/31 15:57:19 $
+## $Author: marc $
+##
+## @copy © Marc Wäckerlin
+## @license LGPL, see file COPYING
+##
+## $Log: bootstrap.sh,v $
+## Revision 1.3 2004/08/31 15:57:19 marc
+## added file header
+##
+
+test -f makefile && make distclean
+aclocal && libtoolize --force && automake -a && autoconf
diff --git a/swisssurfer/configure.in b/swisssurfer/configure.in
new file mode 100644
index 0000000..c63caea
--- /dev/null
+++ b/swisssurfer/configure.in
@@ -0,0 +1,186 @@
+# init
+AC_INIT([README])
+PACKAGENAME=swisssurfer
+SRC_DIR=src
+TST_DIR=
+DOC_DIR=doc
+
+m4_define(x_major, 1)
+m4_define(x_minor, 0)
+m4_define(x_least, 0)
+AM_INIT_AUTOMAKE(@PACKAGENAME@, @MAJOR@.@MINOR@.@LEAST@, [marc@waeckerlin.org])
+
+# files to create
+AC_CONFIG_FILES(makefile
+ src/makefile src/qmake.pro src/languages.qrc
+ doc/doxyfile doc/makefile)
+
+# copy M4 to shell
+MAJOR=x_major
+MINOR=x_minor
+LEAST=x_least
+AC_SUBST(MAJOR)
+AC_SUBST(MINOR)
+AC_SUBST(LEAST)
+
+# libtool versioning
+LIB_MAJOR=m4_eval(x_major+x_minor)
+LIB_MINOR=x_least
+LIB_LEAST=x_minor
+LIB_VERSION="${LIB_MAJOR}:${LIB_MINOR}:${LIB_LEAST}"
+AC_SUBST(LIB_VERSION)
+
+# home
+AC_SUBST(HOME)
+
+# macros
+README=README
+AC_SUBST_FILE(README)
+CHANGE_LOG=ChangeLog
+AC_SUBST_FILE(CHANGE_LOG)
+
+# Get rid of that stupid -O2 -g opions!
+CXXFLAGS="${CXXFLAGS:-}"
+
+# languages
+AC_LANG(C++)
+
+# programs
+AC_PROG_CXX
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_LIBTOOL
+AC_CHECK_PROG(have_doxygen, doxygen, yes, no)
+AC_CHECK_PROG(have_dot, dot, yes, no)
+
+AC_ARG_ENABLE(pedantic,
+ [AS_HELP_STRING([--enable-pedantic],
+ [enable all warnings and checks, abort on warnings])],
+ [have_pedantic="$enableval"; test "$enableval" = "yes" && \
+ AM_CXXFLAGS="${AM_CXXFLAGS:-} -pedantic-errors -Wall -W -Wfloat-equal -Wundef -Wendif-labels -Wpointer-arith -Wcast-align -Wwrite-strings -Wconversion -Wsign-compare -Wmissing-format-attribute -Wno-multichar -Wpacked -Wredundant-decls -Werror -Wshadow -Wcast-qual -Wno-ctor-dtor-privacy"])
+dnl problem in libs: -Wshadow -Wcast-qual
+dnl auto.hpp: -Wno-ctor-dtor-privacy (removed)
+AM_CONDITIONAL(PEDANTIC, test "$enableval" = "yes")
+AC_ARG_ENABLE(dot,
+ [AS_HELP_STRING([--disable-dot],
+ [disable dot graphic tools for documentation])],
+ [have_dot="$enableval"])
+test "$enableval" = "yes" && HAVE_DOT="YES" || HAVE_DOT="NO";
+AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"])
+
+# Special Options
+AC_CHECK_PROGS([QMAKE], [qmake-qt4 qmake-mac qmake])
+test -n "$QMAKE" || AC_MSG_ERROR([qmake for Qt 4 not found!])
+AC_SUBST(QMAKE)
+AC_CHECK_PROGS([LRELEASE], [lrelease-qt4 lrelease-mac lrelease])
+test -n "$LRELEASE" || AC_MSG_ERROR([lrelease for Qt 4 not found!])
+AC_SUBST(LRELEASE)
+AC_CHECK_PROGS([LUPDATE], [lupdate-qt4 lupdate-mac lupdate])
+test -n "$LUPDATE" || AC_MSG_ERROR([lupdate for Qt 4 not found!])
+AC_SUBST(LUPDATE)
+QMAKE_OPTIONS=
+AC_ARG_ENABLE(static-plugins,
+ [AS_HELP_STRING([--enable-static-plugins],
+ [links the image plugins statically])],
+ [static_plugins="$enableval"], [static_plugins="no"])
+#AM_CONDITIONAL(STATIC_PLUGINS, test "$static_plugins" = "yes")
+if test "$static_plugins" = "yes"; then
+ CXXFLAGS+=" -DPLUGINS=static"
+ STATIC_QTPLUGINS="qgif qjpeg qmng"
+ STATIC_QCONFIG="static"
+else
+ CXXFLAGS+=" -DPLUGINS=dynamic"
+ STATIC_QTPLUGINS=
+ STATIC_QCONFIG=
+fi
+AC_ARG_ENABLE(win,
+ [AS_HELP_STRING([--enable-win],
+ [on linux, also builds windows version using mingw])],
+ [build_win="$enableval"], [build_win="no"])
+AM_CONDITIONAL(BUILD_WIN, test "$build_win" = "yes")
+AC_ARG_ENABLE(32bit-linux,
+ [AS_HELP_STRING([--enable-32bit-linux],
+ [build for 32bit linux instead of plattform specific])],
+ [build_lin32="$enableval"], [build_lin32="no"])
+AM_CONDITIONAL(BUILD_LIN32, test "$build_lin32" = "yes")
+
+# Environment Variables
+AC_ARG_VAR(LUPDATE_ARGS, [arguments for qt lupdate command, e.g. -no-obsolete])
+
+# Enviropnment Variables
+AC_ARG_VAR(EDITION, [name of the edition, e.g. comol])
+AC_ARG_VAR(EDITION_USERFRIENDLY, [userfriendly name of the edition, e.g. CoMoL])
+AC_ARG_VAR(BUILDVERSION, [version of this build, e.g. v1.0])
+AC_ARG_VAR(BUILD, [build number of this build, e.g. 213])
+
+# export macros
+SRCDIR=${srcdir}
+AC_SUBST(SRCDIR)
+AC_SUBST(SRC_DIR)
+AC_SUBST(TST_DIR)
+AC_SUBST(DOC_DIR)
+AC_SUBST(HAVE_DOT)
+AC_SUBST(THREADS)
+AC_SUBST(PACKAGENAME)
+AC_SUBST(AM_CXXFLAGS)
+AC_SUBST(AM_CPPFLAGS)
+AC_SUBST(LIBS)
+AC_SUBST(QMAKE)
+AC_SUBST(QMAKE_OPTIONS)
+AC_SUBST(STATIC_QTPLUGINS)
+AC_SUBST(STATIC_QCONFIG)
+
+AC_CHECK_HEADER(xml-cxx/xml.hxx, [found="yes"], [found="no"])
+if test "$found" == "no"; then
+ AC_MSG_CHECKING([looking for xml-cxx headers])
+ for file in /usr/include /usr/local/include /opt/include \
+ /opt/local/include; do
+ if test -d ${file}/xml-cxx; then
+ CPPFLAGS+=" -I$file"
+ LDFLAGS+=" -L$(echo $file | sed 's#/include#/lib#g')"
+ found=$file
+ break;
+ fi
+ done
+ AC_MSG_RESULT([$found])
+fi
+if test "$found" == "no"; then
+ AC_MSG_ERROR([libxml-cxx not found])
+fi
+
+# create output
+AC_OUTPUT
+# infos and warnings
+AC_MSG_NOTICE([Build Information from Environment:
+ - EDITION=$EDITION
+ - EDITION_USERFRIENDLY=$EDITION_USERFRIENDLY
+ - BUILDVERSION=$BUILDVERSION
+ - BUILD=$BUILD
+])
+if test "$have_doxygen" = "no"; then
+AC_MSG_WARN([Missing program doxygen!
+ - you cannot rebuild the documentation with make doc
+ - there are precompiled derived files in the distribution]); fi
+if test "$have_dot" = "no"; then
+AC_MSG_WARN([Missing program dot!
+ - when you rebild documentation with make doc, there are no generated images
+ - there are precompiled derived files in the distribution]); fi
+if test "$have_cppunit" = "no"; then
+AC_MSG_WARN([Missing cppunit development library!
+ - you cannot check the library using "make check"
+ - everything else works perfectly]); fi
+if test "$have_pedantic" == "yes"; then
+AC_MSG_NOTICE([Pedantic compile mode enabled!
+ - all warnings for GNU g++ are enabled
+ - all warnings result in an error
+ - doxygen warnings are treated as error too]); fi
+if test "$build_win" == "yes"; then
+AC_MSG_NOTICE([Will cross-compile for windows
+ Requires:
+ - mingw32, mingw32-binutils, mingw32-runtime
+ - i586-mingw32msvc-g++, i586-mingw32msvc-ar,
+ i586-mingw32msvc-windres, i586-mingw32msvc-strip
+ - Boost for MinGW in ~/.wine/drive_c/Programme/Boost-1.34.1
+ - Qt for MinGW in ~/.wine/drive_c/Qt/4.4.3]); fi
diff --git a/swisssurfer/doc/doxyfile.in b/swisssurfer/doc/doxyfile.in
new file mode 100644
index 0000000..4d56495
--- /dev/null
+++ b/swisssurfer/doc/doxyfile.in
@@ -0,0 +1,1364 @@
+# Doxyfile 1.5.5
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "Projektdokumentation @PACKAGENAME@"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = "Version @MAJOR@.@MINOR@.@LEAST@"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,
+# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish,
+# and Ukrainian.
+
+OUTPUT_LANGUAGE = German
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = YES
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 2
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES = "id=\par File-ID\n" \
+ "copy=\par Copyright\n" \
+ "license=\par License\n" \
+ "classmutex=\par Reentrant:\nAccess is locked with class static mutex @c " \
+ "instancemutex=\par Reentrant:\nAccess is locked with per instance mutex @c " \
+ "mutex=\par Reentrant:\nAccess is locked with mutex @c "
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = YES
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = YES
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command , where is the value of
+# the FILE_VERSION_FILTER tag, and is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = NO
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE = doxygen.errors
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = @SRCDIR@/../src
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS = *.[ch]xx \
+ *.doc
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS = moc_* \
+ uic_* \
+ qrc_*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = .
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command , where
+# is the value of the INPUT_FILTER tag, and is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = YES
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = YES
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED = HAVE_STACKTRACE
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE = @PACKAGENAME@.doxytag
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = NO
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = @HAVE_DOT@
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = NO
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = NO
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is enabled by default, which results in a transparent
+# background. Warning: Depending on the platform used, enabling this option
+# may lead to badly anti-aliased labels on the edges of a graph (i.e. they
+# become hard to read).
+
+DOT_TRANSPARENT = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
diff --git a/swisssurfer/doc/makefile.am b/swisssurfer/doc/makefile.am
new file mode 100644
index 0000000..8443e5a
--- /dev/null
+++ b/swisssurfer/doc/makefile.am
@@ -0,0 +1,48 @@
+## @file
+##
+## $Id: makefile.am 7 2010-03-01 14:55:44Z marc $
+##
+## 1 2 3 4 5 6 7 8
+## 45678901234567890123456789012345678901234567890123456789012345678901234567890
+
+#develdir = ${pkgdatadir}/doc/devel
+#devel_DATA = devel/index.html
+
+ALL_SRC = ${top_srcdir}/src/*.[ch]xx
+# ${top_srcdir}/src/*.doc
+
+DIRS = html latex
+
+all: ${DIRS}
+
+.PHONY: doc clean-local distclean-local dist-hool install-data-hook \
+ uninstall-hook
+
+deps = ${top_srcdir}/COPYING ${top_srcdir}/README \
+ ${top_srcdir}/INSTALL ${top_srcdir}/NEWS ${top_srcdir}/ChangeLog
+
+html: ${ALL_SRC} doxyfile ${deps}
+ doxygen doxyfile
+if PEDANTIC
+ test \! -s doxygen.errors
+endif
+# cd latex && make
+# mv latex/refman.pdf @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.pdf
+
+CLEANFILES = doxygen.errors @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.pdf
+DISTCLEANFILES = @PACKAGENAME@.doxytag
+MAINTAINERCLEANFILES = makefile.in
+
+distclean-local:
+ - rm -r html latex
+
+#dist-hook:
+# cp html/* ${develdir}
+
+#install-data-hook:
+# chmod -R u+w ${pkgdatadir}/doc
+# cp devel/* ${develdir}
+
+#uninstall-hook:
+# chmod -R u+w ${pkgdatadir}/doc
+# rm -rf ${develdir}
diff --git a/swisssurfer/doc/screenshot.png b/swisssurfer/doc/screenshot.png
new file mode 100644
index 0000000..ceb2971
Binary files /dev/null and b/swisssurfer/doc/screenshot.png differ
diff --git a/swisssurfer/makefile.am b/swisssurfer/makefile.am
new file mode 100644
index 0000000..ec7ac86
--- /dev/null
+++ b/swisssurfer/makefile.am
@@ -0,0 +1,68 @@
+## @file
+##
+## $Id: makefile.am 2 2009-06-16 13:20:59Z $
+##
+## $Date: 2008-08-26 13:09:21 $
+## $Author: marc $
+##
+## @copy © Marc Wäckerlin
+## @license LGPL, see file COPYING
+##
+## 1 2 3 4 5 6 7 8
+## 45678901234567890123456789012345678901234567890123456789012345678901234567890
+
+SUBDIRS = @SRC_DIR@ @TST_DIR@ @DOC_DIR@
+
+nobase_include_HEADERS =
+
+EXTRADIST = bootstrap.sh
+
+infosdir = ${pkgdatadir}
+infos_DATA = AUTHORS NEWS README COPYING INSTALL ChangeLog # @PACKAGENAME@.spec
+
+RPMS = /usr/src/packages/RPMS/i586/@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm \
+ /usr/src/packages/RPMS/i586/@PACKAGENAME@-devel-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm \
+ /usr/src/packages/SRPMS/@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@-1.src.rpm
+
+.PHONY: release tag rpm webserver \
+ doc clean-local distclean-local dist-hool install-data-hook \
+ uninstall-hook
+
+release: tag webserver
+
+tag: distcheck
+ cvs ci -R .
+ cvs tag -FR REL_@PACKAGENAME@-@MAJOR@-@MINOR@-@LEAST@ .
+
+#rpm: dist
+# cp @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.tar.gz \
+# /usr/src/packages/SOURCES/
+# rpmbuild -ba --clean @PACKAGENAME@.spec
+
+deps = ${top_srcdir}/COPYING ${top_srcdir}/README ${top_srcdir}/INSTALL ${top_srcdir}/NEWS ${top_srcdir}/ChangeLog
+
+clean-local:
+ - rm doxygen.err lib@PACKAGENAME@.doxytag
+
+distclean-local:
+ - rm -r ${top_builddir}/@DOC_DIR@/html/* ${top_builddir}/@DOC_DIR@/latex/*
+ - rm makefile makefile.in doxygen.err libmrw.doxytag
+ - find . -name '*~' | xargs rm
+ - rm -r autom4te.cache
+ - rm aclocal.m4 config.guess config.sub configure \
+ depcomp install-sh ltmain.sh makefile makefile.in \
+ missing mkinstalldirs
+
+dist-hook:
+ test -d ${distdir}/@DOC_DIR@/html || \
+ mkdir -p ${distdir}/@DOC_DIR@/html
+ cp ${top_builddir}/@DOC_DIR@/html/* ${distdir}/@DOC_DIR@/html/.
+
+install-data-hook:
+ chmod -R u+w ${pkgdatadir}/doc
+ cp -rf ${top_builddir}/@DOC_DIR@/html ${pkgdatadir}/@DOC_DIR@/
+
+uninstall-hook:
+ chmod -R u+w ${pkgdatadir}/doc
+ rm -rf ${pkgdatadir}/@DOC_DIR@/html
+
diff --git a/swisssurfer/src/browser.hxx b/swisssurfer/src/browser.hxx
new file mode 100644
index 0000000..691a0a6
--- /dev/null
+++ b/swisssurfer/src/browser.hxx
@@ -0,0 +1,978 @@
+/*! @file
+
+ @id $Id: browser.hxx 15 2010-06-03 14:17:27Z marc $
+*/
+// 1 2 3 4 5 6 7 8
+// 45678901234567890123456789012345678901234567890123456789012345678901234567890
+
+#ifndef BROWSER_HXX
+#define BROWSER_HXX
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+#include
+
+#define LOG qDebug()<<__PRETTY_FUNCTION__;
+
+class SslClientAuthNetworkAccessManager: public QNetworkAccessManager {
+ Q_OBJECT;
+ public:
+ SslClientAuthNetworkAccessManager(QObject* parent = 0):
+ QNetworkAccessManager(parent) {
+ LOG;
+ }
+ virtual ~SslClientAuthNetworkAccessManager() {
+ LOG;
+ }
+ protected:
+ virtual QNetworkReply* createRequest(Operation op,
+ const QNetworkRequest& req,
+ QIODevice* outgoingData = 0 ) {
+ LOG;
+ QNetworkReply* rep
+ (QNetworkAccessManager::createRequest(op, req, outgoingData));
+ //qDebug()<<"Reply created: "<<(int)rep;
+ qDebug()<<"Reply to URL: "<url().toString();
+ return rep;
+ }
+};
+
+class Browser: public QMainWindow, protected Ui::Browser {
+
+ Q_OBJECT;
+
+ public:
+
+ Browser(const QString& url, bool kiosk = false, bool proxydetection = true):
+ _url(0), _home(url), _proxy(0),
+ _kiosk(kiosk) {
+ LOG;
+ if (!check(url))
+ throw std::runtime_error(tr("access to URL %1 not allowed")
+ .arg(url).toStdString());
+ setupUi(this);
+ actionProxySettings->setEnabled(proxydetection);
+ if (proxydetection) {
+ _proxy = new gui::Proxy(url, this);
+ assert(connect(_proxy, SIGNAL(proxyFound(const QUrl&,
+ const QNetworkProxy&)),
+ SLOT(startDownload(QUrl, const QNetworkProxy&))));
+ assert(connect(_proxy, SIGNAL(temporaryError
+ (QNetworkReply::NetworkError,
+ QString, QString)),
+ SLOT(proxy_error(QNetworkReply::NetworkError,
+ QString, QString))));
+ assert(connect(_proxy, SIGNAL(proxyError(QNetworkReply::NetworkError)),
+ SLOT(proxy_error(QNetworkReply::NetworkError))));
+ }
+ _toolbar->addWidget(_url = new QLineEdit(_toolbar));
+ _url->setText(url);
+ assert(connect(_url, SIGNAL(returnPressed()), SLOT(load())));
+ if (_kiosk) {
+ _menu->hide();
+ _url->setEnabled(false);
+ }
+ statusBar()->addPermanentWidget(_progress = new QProgressBar());
+ statusBar()->addPermanentWidget(_zoom = new QSlider(Qt::Horizontal));
+ _zoom->setMinimum(1);
+ _zoom->setMaximum(100);
+ _zoom->setValue(10);
+ assert(connect(_zoom, SIGNAL(valueChanged(int)), SLOT(zoom(int))));
+ _browser->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
+ _browser->page()->setNetworkAccessManager
+ (new SslClientAuthNetworkAccessManager);
+ // QWebPage WebAction
+ connect(_browser->pageAction(QWebPage::OpenLink),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredOpenLink(bool)));
+ connect(_browser->pageAction(QWebPage::OpenLinkInNewWindow),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredOpenLinkInNewWindow(bool)));
+ connect(_browser->pageAction(QWebPage::OpenFrameInNewWindow),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredOpenFrameInNewWindow(bool)));
+ connect(_browser->pageAction(QWebPage::DownloadLinkToDisk),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredDownloadLinkToDisk(bool)));
+ connect(_browser->pageAction(QWebPage::CopyLinkToClipboard),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredCopyLinkToClipboard(bool)));
+ connect(_browser->pageAction(QWebPage::OpenImageInNewWindow),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredOpenImageInNewWindow(bool)));
+ connect(_browser->pageAction(QWebPage::DownloadImageToDisk),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredDownloadImageToDisk(bool)));
+ connect(_browser->pageAction(QWebPage::CopyImageToClipboard),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredCopyImageToClipboard(bool)));
+ connect(_browser->pageAction(QWebPage::Back),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredBack(bool)));
+ connect(_browser->pageAction(QWebPage::Forward),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredForward(bool)));
+ connect(_browser->pageAction(QWebPage::Stop),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredStop(bool)));
+ connect(_browser->pageAction(QWebPage::Reload),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredReload(bool)));
+ connect(_browser->pageAction(QWebPage::Cut),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredCut(bool)));
+ connect(_browser->pageAction(QWebPage::Copy),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredCopy(bool)));
+ connect(_browser->pageAction(QWebPage::Paste),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredPaste(bool)));
+ connect(_browser->pageAction(QWebPage::Undo),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredUndo(bool)));
+ connect(_browser->pageAction(QWebPage::Redo),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredRedo(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToNextChar),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToNextChar(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToPreviousChar),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToPreviousChar(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToNextWord),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToNextWord(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToPreviousWord),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToPreviousWord(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToNextLine),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToNextLine(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToPreviousLine),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToPreviousLine(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToStartOfLine),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToStartOfLine(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToEndOfLine),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToEndOfLine(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToStartOfBlock),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToStartOfBlock(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToEndOfBlock),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToEndOfBlock(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToStartOfDocument),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToStartOfDocument(bool)));
+ connect(_browser->pageAction(QWebPage::MoveToEndOfDocument),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredMoveToEndOfDocument(bool)));
+ connect(_browser->pageAction(QWebPage::SelectNextChar),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectNextChar(bool)));
+ connect(_browser->pageAction(QWebPage::SelectPreviousChar),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectPreviousChar(bool)));
+ connect(_browser->pageAction(QWebPage::SelectNextWord),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectNextWord(bool)));
+ connect(_browser->pageAction(QWebPage::SelectPreviousWord),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectPreviousWord(bool)));
+ connect(_browser->pageAction(QWebPage::SelectNextLine),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectNextLine(bool)));
+ connect(_browser->pageAction(QWebPage::SelectPreviousLine),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectPreviousLine(bool)));
+ connect(_browser->pageAction(QWebPage::SelectStartOfLine),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectStartOfLine(bool)));
+ connect(_browser->pageAction(QWebPage::SelectEndOfLine),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectEndOfLine(bool)));
+ connect(_browser->pageAction(QWebPage::SelectStartOfBlock),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectStartOfBlock(bool)));
+ connect(_browser->pageAction(QWebPage::SelectEndOfBlock),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectEndOfBlock(bool)));
+ connect(_browser->pageAction(QWebPage::SelectStartOfDocument),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectStartOfDocument(bool)));
+ connect(_browser->pageAction(QWebPage::SelectEndOfDocument),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectEndOfDocument(bool)));
+ connect(_browser->pageAction(QWebPage::DeleteStartOfWord),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredDeleteStartOfWord(bool)));
+ connect(_browser->pageAction(QWebPage::DeleteEndOfWord),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredDeleteEndOfWord(bool)));
+ connect(_browser->pageAction(QWebPage::SetTextDirectionDefault),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSetTextDirectionDefault(bool)));
+ connect(_browser->pageAction(QWebPage::SetTextDirectionLeftToRight),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSetTextDirectionLeftToRight(bool)));
+ connect(_browser->pageAction(QWebPage::SetTextDirectionRightToLeft),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSetTextDirectionRightToLeft(bool)));
+ connect(_browser->pageAction(QWebPage::ToggleBold),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredToggleBold(bool)));
+ connect(_browser->pageAction(QWebPage::ToggleItalic),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredToggleItalic(bool)));
+ connect(_browser->pageAction(QWebPage::ToggleUnderline),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredToggleUnderline(bool)));
+ connect(_browser->pageAction(QWebPage::InspectElement),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredInspectElement(bool)));
+ connect(_browser->pageAction(QWebPage::InsertParagraphSeparator),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredInsertParagraphSeparator(bool)));
+ connect(_browser->pageAction(QWebPage::InsertLineSeparator),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredInsertLineSeparator(bool)));
+ connect(_browser->pageAction(QWebPage::SelectAll),
+ SIGNAL(triggered(bool)),
+ SLOT(triggeredSelectAll(bool)));
+ // QWebPage
+ assert(connect(_browser->page(), SIGNAL(contentsChanged()),
+ SLOT(contentsChanged())));
+ assert(connect(_browser->page(),
+ SIGNAL(databaseQuotaExceeded(QWebFrame*, QString)),
+ SLOT(databaseQuotaExceeded(QWebFrame*, QString))));
+ assert(connect(_browser->page(),
+ SIGNAL(downloadRequested(const QNetworkRequest&)),
+ SLOT(downloadRequested(const QNetworkRequest&))));
+ assert(connect(_browser->page(), SIGNAL(frameCreated(QWebFrame*)),
+ SLOT(frameCreated(QWebFrame*))));
+ assert(connect(_browser->page(),
+ SIGNAL(geometryChangeRequested(const QRect&)),
+ SLOT(geometryChangeRequested(const QRect&))));
+ assert(connect(_browser->page(), SIGNAL(linkClicked(const QUrl&)),
+ SLOT(linkClicked(const QUrl&))));
+ assert(connect(_browser->page(),
+ SIGNAL(linkHovered(const QString&, const QString&,
+ const QString&)),
+ SLOT(linkHovered(const QString&, const QString&,
+ const QString&))));
+ assert(connect(_browser->page(), SIGNAL(loadFinished(bool)),
+ SLOT(loadFinished(bool))));
+ assert(connect(_browser->page(), SIGNAL(loadProgress(int)),
+ SLOT(loadProgress(int))));
+ assert(connect(_browser->page(), SIGNAL(loadStarted()),
+ SLOT(loadStarted())));
+ assert(connect(_browser->page(),
+ SIGNAL(menuBarVisibilityChangeRequested(bool)),
+ SLOT(menuBarVisibilityChangeRequested(bool))));
+ assert(connect(_browser->page(), SIGNAL(microFocusChanged()),
+ SLOT(microFocusChanged())));
+ assert(connect(_browser->page(), SIGNAL(printRequested(QWebFrame*)),
+ SLOT(printRequested(QWebFrame*))));
+ assert(connect(_browser->page(), SIGNAL(repaintRequested(const QRect&)),
+ SLOT(repaintRequested(const QRect&))));
+ assert(connect(_browser->page(),
+ SIGNAL(restoreFrameStateRequested(QWebFrame*)),
+ SLOT(restoreFrameStateRequested(QWebFrame*))));
+ assert(connect(_browser->page(),
+ SIGNAL(saveFrameStateRequested(QWebFrame*,
+ QWebHistoryItem*)),
+ SLOT(saveFrameStateRequested(QWebFrame*,
+ QWebHistoryItem*))));
+ assert(connect(_browser->page(),
+ SIGNAL(scrollRequested(int, int, const QRect&)),
+ SLOT(scrollRequested(int, int, const QRect&))));
+ assert(connect(_browser->page(), SIGNAL(selectionChanged()),
+ SLOT(selectionChanged())));
+ assert(connect(_browser->page(), SIGNAL(statusBarMessage(const QString&)),
+ SLOT(statusBarMessage(const QString&))));
+ assert(connect(_browser->page(),
+ SIGNAL(statusBarVisibilityChangeRequested(bool)),
+ SLOT(statusBarVisibilityChangeRequested(bool))));
+ assert(connect(_browser->page(),
+ SIGNAL(toolBarVisibilityChangeRequested(bool)),
+ SLOT(toolBarVisibilityChangeRequested(bool))));
+ assert(connect(_browser->page(),
+ SIGNAL(unsupportedContent(QNetworkReply*)),
+ SLOT(unsupportedContent(QNetworkReply*))));
+ assert(connect(_browser->page(), SIGNAL(windowCloseRequested()),
+ SLOT(windowCloseRequested())));
+ // QNetworkAccessManager
+ assert(connect(_browser->page()->networkAccessManager(),
+ SIGNAL(authenticationRequired(QNetworkReply*,
+ QAuthenticator*)),
+ SLOT(authenticationRequired(QNetworkReply*,
+ QAuthenticator*))));
+ assert(connect(_browser->page()->networkAccessManager(),
+ SIGNAL(finished(QNetworkReply*)),
+ SLOT(finished(QNetworkReply*))));
+ assert(connect(_browser->page()->networkAccessManager(),
+ SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&,
+ QAuthenticator*)),
+ SLOT(proxyAuthenticationRequired(const QNetworkProxy&,
+ QAuthenticator*))));
+ assert(connect(_browser->page()->networkAccessManager(),
+ SIGNAL(sslErrors(QNetworkReply*, const QList&)),
+ SLOT(sslErrors(QNetworkReply*, const QList&))));
+ load(url);
+ }
+
+ QString networkError(QNetworkReply::NetworkError err) {
+ LOG;
+ switch (err) {
+ case QNetworkReply::NoError:
+ return tr("Network connection successful, remote host can be"
+ " reached.");
+ case QNetworkReply::ConnectionRefusedError:
+ return tr("The remote server refused the connection (the server is"
+ " not accepting requests).");
+ case QNetworkReply::RemoteHostClosedError:
+ return tr("The remote server closed the connection prematurely,"
+ " before the entire reply was received and processed.");
+ case QNetworkReply::HostNotFoundError:
+ return tr("The remote host name was not found (invalid hostname).");
+ case QNetworkReply::TimeoutError:
+ return tr("The connection to the remote server timed out.");
+ case QNetworkReply::OperationCanceledError:
+ return tr("The operation was canceled via calls to abort() or"
+ " close() before it was finished.");
+ case QNetworkReply::SslHandshakeFailedError:
+ return tr("The SSL/TLS handshake failed and the encrypted channel"
+ " could not be established. The sslErrors() signal should"
+ " have been emitted.");
+ case QNetworkReply::ProxyConnectionRefusedError:
+ return tr("The connection to the proxy server was refused (the"
+ " proxy server is not accepting requests).");
+ case QNetworkReply::ProxyConnectionClosedError:
+ return tr("The proxy server closed the connection prematurely,"
+ " before the entire reply was received and processed.");
+ case QNetworkReply::ProxyNotFoundError:
+ return tr("The proxy host name was not found (invalid proxy"
+ " hostname).");
+ case QNetworkReply::ProxyTimeoutError:
+ return tr("The connection to the proxy timed out or the proxy did"
+ " not reply in time to the request sent.");
+ case QNetworkReply::ProxyAuthenticationRequiredError:
+ return tr("The proxy requires authentication in order to honour the"
+ " request but did not accept any credentials offered"
+ " (if any).");
+ case QNetworkReply::ContentAccessDenied:
+ return tr("The access to the remote content was denied (similar to"
+ " HTTP error 401).");
+ case QNetworkReply::ContentOperationNotPermittedError:
+ return tr("The operation requested on the remote content is not"
+ " permitted.");
+ case QNetworkReply::ContentNotFoundError:
+ return tr("The remote content was not found at the server (similar"
+ " to HTTP error 404).");
+ case QNetworkReply::AuthenticationRequiredError:
+ return tr("The remote server requires authentication to serve the"
+ " content but the credentials provided were not accepted"
+ " (if any).");
+ case QNetworkReply::ProtocolUnknownError:
+ return tr("The Network Access API cannot honor the request because"
+ " the protocol is not known.");
+ case QNetworkReply::ProtocolInvalidOperationError:
+ return tr("The requested operation is invalid for this protocol.");
+ case QNetworkReply::UnknownNetworkError:
+ return tr("An unknown network-related error was detected.");
+ case QNetworkReply::UnknownProxyError:
+ return tr("An unknown proxy-related error was detected.");
+ case QNetworkReply::UnknownContentError:
+ return tr("An unknonwn error related to the remote content was"
+ " detected.");
+ case QNetworkReply::ProtocolFailure:
+ return tr("A breakdown in protocol was detected (parsing error,"
+ " invalid or unexpected responses, etc.).");
+ default:
+ return tr("Unknown network error (code: %1).")
+ .arg(err);
+ }
+ }
+
+ bool check(QUrl page) {
+ return true;
+ }
+
+ private Q_SLOTS:
+
+ void load() {
+ LOG;
+ load(_url->text());
+ }
+
+ void load(QString page) {
+ if (QUrl(page).scheme()=="") page = "http://"+page;
+ load(QUrl(page));
+ }
+
+ void load(QUrl page) {
+ LOG;
+ statusBar()->showMessage(tr("Checking: %1").arg(page.toString()));
+ try {
+ if (!check(page)) {
+ qDebug()<<"########## BLACK LISTED IGNORED ##########";
+ statusBar()->showMessage(tr("Forbidden: %1").arg(page.toString()));
+ QMessageBox::warning(this, tr("Access Denied"),
+ tr("Access denied due to security"
+ " considerations.
You are not"
+ " allowed to connect to %1.")
+ .arg(page.toString()));
+ return;
+ }
+ if (_proxy) _proxy->checkUrl(page.toString());
+ _progress->setValue(0);
+ _progress->setMaximum(0);
+ _progress->show();
+ if (!_proxy) startDownload(page);
+ } catch (...) {
+ reply_error(QNetworkReply::ProxyNotFoundError);
+ } // no network
+ }
+
+ void startDownload(QUrl url, const QNetworkProxy& proxy) {
+ LOG;
+ QNetworkProxy::setApplicationProxy(proxy);
+ startDownload(url);
+ }
+
+ void startDownload(QUrl url) {
+ LOG;
+ statusBar()->showMessage(tr("Reading: %1").arg(url.toString()));
+ if (!url.isValid()) {
+ statusBar()->showMessage(tr("Illegal URL: %1").arg(url.errorString()));
+ _progress->hide();
+ return;
+ }
+ //if (url.scheme()=="") url.setScheme("http");
+ _browser->load(url);
+ }
+
+ void reply_error(QNetworkReply::NetworkError err) {
+ LOG;
+ statusBar()->showMessage(tr("network error"));
+ _error += tr("
%1
%2
")
+ .arg(tr("Reply Error"))
+ .arg(networkError(err));
+ }
+
+ //! intermediate proxy error
+ void proxy_error(QNetworkReply::NetworkError err,
+ QString errStr, QString proxy) {
+ LOG;
+ statusBar()->showMessage(tr("proxy error"));
+ _error += tr("%1
Proxy: %3
%2
%4
")
+ .arg(tr("Possible Proxy Failed"))
+ .arg(networkError(err))
+ .arg(proxy)
+ .arg(errStr);
+ }
+
+ //! final proxy error
+ void proxy_error(QNetworkReply::NetworkError err) {
+ LOG;
+ statusBar()->showMessage(tr("proxy error"));
+ _error = tr("%1
%2
")
+ .arg(tr("Connection Cannot Be Established"))
+ .arg(networkError(err)) + _error;
+ on__browser_loadFinished(false);
+ }
+
+ void zoom(int i) {
+ LOG;
+ statusBar()->showMessage(tr("Zoom: %1%").arg(100.0*i/10.0));
+ _browser->setZoomFactor(i/10.0);
+ }
+
+ void on_actionHome_activated() {
+ LOG;
+ load(_home);
+ }
+
+ void on__browser_urlChanged(const QUrl& url) {
+ LOG;
+ if (_url) _url->setText(url.toString());
+ }
+
+ void on__browser_linkClicked(const QUrl& url) {
+ LOG;
+ load(url);
+ }
+
+ void on__browser_iconChanged() {
+ LOG;
+ setWindowIcon(_browser->icon());
+ }
+
+ void on__browser_titleChanged(const QString& text) {
+ LOG;
+ setWindowTitle(trUtf8("%1 - SwissSurfer").arg(text));
+ }
+
+ void on__browser_statusBarMessage(const QString& text) {
+ LOG;
+ qDebug()<<"Message: "<showMessage(tr("Info: %1").arg(text));
+ }
+
+ void on__browser_loadProgress(int i) {
+ LOG;
+ _progress->setValue(i);
+ }
+
+ void on__browser_loadStarted() {
+ LOG;
+ _progress->setValue(0);
+ _progress->setMaximum(100);
+ _progress->show();
+ actionStop->setEnabled(true);
+ actionForward->setEnabled(false);
+ actionBack->setEnabled(false);
+ actionReload->setEnabled(false);
+ actionHome->setEnabled(false);
+ }
+
+ void on__browser_loadFinished(bool ok) {
+ LOG;
+ if (!ok) {
+ _browser->setHtml(tr("Page Load Error"
+ "Page Load Error
%1"
+ "")
+ .arg(_error),
+ _errorUrl);
+ statusBar()->showMessage(tr("download error"));
+ } else {
+ statusBar()->showMessage(tr("done."));
+ }
+ _error.clear();
+ _progress->hide();
+ on__browser_iconChanged();
+ actionStop->setEnabled(false);
+ actionForward->setEnabled(_browser->history()->canGoForward());
+ actionBack->setEnabled(_browser->history()->canGoBack());
+ actionReload->setEnabled(true);
+ actionHome->setEnabled(true);
+ }
+
+ void on_actionNew_triggered() {
+ LOG;
+ (new Browser(_browser->url().toString(), _kiosk))->show();
+ }
+
+ void on_actionClose_triggered() {
+ LOG;
+ close();
+ }
+
+ void on_actionProxySettings_triggered() {
+ LOG;
+ if (_proxy) _proxy->show();
+ }
+
+ //@name QWebPage slots
+ //@{
+
+ void triggeredOpenLink(bool) {
+ LOG;
+ }
+
+ void triggeredOpenLinkInNewWindow(bool) {
+ LOG;
+ }
+
+ void triggeredOpenFrameInNewWindow(bool) {
+ LOG;
+ }
+
+ void triggeredDownloadLinkToDisk(bool) {
+ LOG;
+ }
+
+ void triggeredCopyLinkToClipboard(bool) {
+ LOG;
+ }
+
+ void triggeredOpenImageInNewWindow(bool) {
+ LOG;
+ }
+
+ void triggeredDownloadImageToDisk(bool) {
+ LOG;
+ }
+
+ void triggeredCopyImageToClipboard(bool) {
+ LOG;
+ }
+
+ void triggeredBack(bool) {
+ LOG;
+ }
+
+ void triggeredForward(bool) {
+ LOG;
+ }
+
+ void triggeredStop(bool) {
+ LOG;
+ }
+
+ void triggeredReload(bool) {
+ LOG;
+ }
+
+ void triggeredCut(bool) {
+ LOG;
+ }
+
+ void triggeredCopy(bool) {
+ LOG;
+ }
+
+ void triggeredPaste(bool) {
+ LOG;
+ }
+
+ void triggeredUndo(bool) {
+ LOG;
+ }
+
+ void triggeredRedo(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToNextChar(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToPreviousChar(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToNextWord(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToPreviousWord(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToNextLine(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToPreviousLine(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToStartOfLine(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToEndOfLine(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToStartOfBlock(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToEndOfBlock(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToStartOfDocument(bool) {
+ LOG;
+ }
+
+ void triggeredMoveToEndOfDocument(bool) {
+ LOG;
+ }
+
+ void triggeredSelectNextChar(bool) {
+ LOG;
+ }
+
+ void triggeredSelectPreviousChar(bool) {
+ LOG;
+ }
+
+ void triggeredSelectNextWord(bool) {
+ LOG;
+ }
+
+ void triggeredSelectPreviousWord(bool) {
+ LOG;
+ }
+
+ void triggeredSelectNextLine(bool) {
+ LOG;
+ }
+
+ void triggeredSelectPreviousLine(bool) {
+ LOG;
+ }
+
+ void triggeredSelectStartOfLine(bool) {
+ LOG;
+ }
+
+ void triggeredSelectEndOfLine(bool) {
+ LOG;
+ }
+
+ void triggeredSelectStartOfBlock(bool) {
+ LOG;
+ }
+
+ void triggeredSelectEndOfBlock(bool) {
+ LOG;
+ }
+
+ void triggeredSelectStartOfDocument(bool) {
+ LOG;
+ }
+
+ void triggeredSelectEndOfDocument(bool) {
+ LOG;
+ }
+
+ void triggeredDeleteStartOfWord(bool) {
+ LOG;
+ }
+
+ void triggeredDeleteEndOfWord(bool) {
+ LOG;
+ }
+
+ void triggeredSetTextDirectionDefault(bool) {
+ LOG;
+ }
+
+ void triggeredSetTextDirectionLeftToRight(bool) {
+ LOG;
+ }
+
+ void triggeredSetTextDirectionRightToLeft(bool) {
+ LOG;
+ }
+
+ void triggeredToggleBold(bool) {
+ LOG;
+ }
+
+ void triggeredToggleItalic(bool) {
+ LOG;
+ }
+
+ void triggeredToggleUnderline(bool) {
+ LOG;
+ }
+
+ void triggeredInspectElement(bool) {
+ LOG;
+ }
+
+ void triggeredInsertParagraphSeparator(bool) {
+ LOG;
+ }
+
+ void triggeredInsertLineSeparator(bool) {
+ LOG;
+ }
+
+ void triggeredSelectAll(bool) {
+ LOG;
+ }
+
+ //@}
+
+ //@name QWebPage slots
+ //@{
+
+ void contentsChanged() {
+ LOG;
+ }
+
+ void databaseQuotaExceeded(QWebFrame* frame, QString databaseName) {
+ LOG;
+ }
+
+ void downloadRequested(const QNetworkRequest& request) {
+ LOG;
+ }
+
+ void frameCreated(QWebFrame* frame) {
+ LOG;
+ }
+
+ void geometryChangeRequested(const QRect& geom) {
+ LOG;
+ }
+
+ void linkClicked(const QUrl& url) {
+ LOG;
+ }
+
+ void linkHovered(const QString& link, const QString& title,
+ const QString& textContent) {
+ LOG;
+ statusBar()->showMessage(tr("%1", "statusbar for hovered link %1=url")
+ .arg(link));
+ }
+
+ void loadFinished(bool ok) {
+ LOG;
+ }
+
+ void loadProgress(int progress) {
+ LOG;
+ }
+
+ void loadStarted() {
+ LOG;
+ }
+
+ void menuBarVisibilityChangeRequested(bool visible) {
+ LOG;
+ }
+
+ void microFocusChanged() {
+ LOG;
+ }
+
+ void printRequested(QWebFrame* frame) {
+ LOG;
+ }
+
+ void repaintRequested(const QRect& dirtyRect) {
+ LOG;
+ }
+
+ void restoreFrameStateRequested(QWebFrame* frame) {
+ LOG;
+ }
+
+ void saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item) {
+ LOG;
+ }
+
+ void scrollRequested(int dx, int dy, const QRect& rectToScroll) {
+ LOG;
+ }
+
+ void selectionChanged() {
+ LOG;
+ }
+
+ void statusBarMessage(const QString& text) {
+ LOG;
+ }
+
+ void statusBarVisibilityChangeRequested(bool visible) {
+ LOG;
+ }
+
+ void toolBarVisibilityChangeRequested(bool visible) {
+ LOG;
+ }
+
+ void unsupportedContent(QNetworkReply* reply) {
+ LOG;
+ statusBar()->showMessage(tr("unsupported content"));
+ _error += tr("%1
URL: %3
%2
")
+ .arg(tr("Unsuported Content"))
+ .arg(networkError(reply->error()))
+ .arg(reply->url().toString());
+ _errorUrl = reply->url();
+ }
+
+ void windowCloseRequested() {
+ LOG;
+ }
+
+ //@}
+
+ //@name QNetworkAccessManager signals
+ //@{
+
+ void authenticationRequired(QNetworkReply* reply,
+ QAuthenticator* authenticator) {
+ LOG;
+ statusBar()->showMessage(tr("authentication required"));
+ _error += tr("%1
URL: %3
%2
")
+ .arg(tr("Authentication Required"))
+ .arg(networkError(reply->error()))
+ .arg(reply->url().toString());
+ _errorUrl = reply->url();
+ }
+
+ void finished(QNetworkReply* reply) {
+ LOG;
+ if (reply->error()!=QNetworkReply::NoError) {
+ _error += tr("%1
URL: %3
%2
")
+ .arg(tr("Network Error"))
+ .arg(networkError(reply->error()))
+ .arg(reply->url().toString());
+ _errorUrl = reply->url();
+ }
+ }
+
+ void proxyAuthenticationRequired(const QNetworkProxy& proxy,
+ QAuthenticator* authenticator) {
+ LOG;
+ }
+
+ void sslErrors(QNetworkReply* reply, const QList& errors) {
+ LOG;
+ statusBar()->showMessage(tr("ssl error"));
+ QString e;
+ for (QList::const_iterator err(errors.begin());
+ err!=errors.end(); ++err)
+ e+=tr("%1", "single ssl error").arg(err->errorString());
+ _error += tr("%1
URL: %4
%2
"
+ "SSL Errors
"
+ "
")
+ .arg(tr("SSL Error"))
+ .arg(networkError(reply->error()))
+ .arg(e)
+ .arg(reply->url().toString());
+ _errorUrl = reply->url();
+ }
+
+ //@}
+
+ private:
+
+ QLineEdit* _url;
+ QSlider* _zoom;
+ QProgressBar* _progress;
+ QString _home;
+ gui::Proxy* _proxy;
+ bool _kiosk;
+ bool _proxydetection;
+ QString _error;
+ QUrl _errorUrl;
+
+};
+
+#endif
diff --git a/swisssurfer/src/browser.ui b/swisssurfer/src/browser.ui
new file mode 100644
index 0000000..f3b0e0c
--- /dev/null
+++ b/swisssurfer/src/browser.ui
@@ -0,0 +1,276 @@
+
+
+ Browser
+
+
+
+ 0
+ 0
+ 1052
+ 855
+
+
+
+ SwissSurfer
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ about:blank
+
+
+
+
+
+
+
+
+
+ toolBar
+
+
+
+ 32
+ 32
+
+
+
+ TopToolBarArea
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+ &Proxy Configuration
+
+
+
+
+ Proxy Password
+
+
+
+
+ false
+
+
+
+ :/icons/reload:/icons/reload
+
+
+ neu laden
+
+
+
+
+ true
+
+
+
+ :/icons/stop:/icons/stop
+
+
+ stoppen
+
+
+ Esc
+
+
+
+
+ false
+
+
+
+ :/icons/back:/icons/back
+
+
+ zurückkehren
+
+
+ Alt+Left
+
+
+ Qt::WindowShortcut
+
+
+
+
+ false
+
+
+
+ :/icons/forward:/icons/forward
+
+
+ weitergehen
+
+
+ Alt+Right
+
+
+ Qt::WindowShortcut
+
+
+
+
+
+ :/icons/home:/icons/home
+
+
+ Startseite
+
+
+ Home
+
+
+ Qt::WindowShortcut
+
+
+
+
+ &New Browser
+
+
+ New Browser Window
+
+
+ Ctrl+N
+
+
+
+
+ &Close
+
+
+ Ctrl+W
+
+
+
+
+ &Proxy...
+
+
+ Ctrl+P
+
+
+
+
+
+ QWebView
+ QWidget
+
+
+
+
+
+
+
+
+ actionReload
+ activated()
+ _browser
+ reload()
+
+
+ -1
+ -1
+
+
+ 515
+ 387
+
+
+
+
+ actionBack
+ activated()
+ _browser
+ back()
+
+
+ -1
+ -1
+
+
+ 515
+ 387
+
+
+
+
+ actionForward
+ activated()
+ _browser
+ forward()
+
+
+ -1
+ -1
+
+
+ 515
+ 387
+
+
+
+
+ actionStop
+ activated()
+ _browser
+ stop()
+
+
+ -1
+ -1
+
+
+ 515
+ 387
+
+
+
+
+
diff --git a/swisssurfer/src/languages.qrc.in b/swisssurfer/src/languages.qrc.in
new file mode 100644
index 0000000..57f0a61
--- /dev/null
+++ b/swisssurfer/src/languages.qrc.in
@@ -0,0 +1,8 @@
+
+
+ @PACKAGENAME@_de.qm
+ @PACKAGENAME@_fr.qm
+ @PACKAGENAME@_it.qm
+ @PACKAGENAME@_en.qm
+
+
diff --git a/swisssurfer/src/main.cxx b/swisssurfer/src/main.cxx
new file mode 100644
index 0000000..2e1ae3b
--- /dev/null
+++ b/swisssurfer/src/main.cxx
@@ -0,0 +1,269 @@
+/*! @file
+
+ @id $Id: main.cxx 15 2010-06-03 14:17:27Z marc $
+
+ Build für Windoof:
+ QMAKESPEC=$(pwd)/mkspecs/mingw-g++ qmake-qt4 && make release
+*/
+// 1 2 3 4 5 6 7 8
+// 45678901234567890123456789012345678901234567890123456789012345678901234567890
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+const QByteArray SWISSSIGN_GOLD_CA_G2
+ ("-----BEGIN CERTIFICATE-----\n"
+ "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\n"
+ "-----END CERTIFICATE-----\n");
+const QByteArray SWISSSIGN_PLATINUM_CA_G2
+ ("-----BEGIN CERTIFICATE-----\n"
+ "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\n"
+ "-----END CERTIFICATE-----\n");
+const QByteArray SWISSSIGN_SILVER_CA_G2
+ ("-----BEGIN CERTIFICATE-----\n"
+ "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\n"
+ "-----END CERTIFICATE-----\n");
+
+void notrace(QtMsgType, const char*) {
+ return;
+}
+
+int main(int argv, char** argc) try {
+// qInstallMsgHandler(notrace);
+// std::cout.rdbuf((new std::stringstream)->rdbuf());
+// std::cerr.rdbuf((new std::stringstream)->rdbuf());
+// std::clog.rdbuf((new std::stringstream)->rdbuf());
+ //............................................................................
+ QSslConfiguration sslConfig(QSslConfiguration::defaultConfiguration());
+ QList certs(sslConfig.caCertificates());
+ certs.push_back(QSslCertificate(SWISSSIGN_GOLD_CA_G2));
+ certs.push_back(QSslCertificate(SWISSSIGN_SILVER_CA_G2));
+ certs.push_back(QSslCertificate(SWISSSIGN_PLATINUM_CA_G2));
+ sslConfig.setCaCertificates(certs);
+ //............................................................................
+ QStringList l(QProcess::systemEnvironment());
+ QMap env;
+ for (QStringList::iterator it(l.begin()); it!=l.end(); ++it) {
+ QStringList v(it->split('='));
+ QString key(*v.begin());
+ QString value((v.pop_front(), v.join("=")));
+ env.insert(key, value);
+ qDebug()<<"env:"< ...]\n"
+ "Options:\n"
+ " -h, --help show this help text\n"
+ " -k, --kiosk no url bar\n"
+ " -p, --no-proxy no proxy detection\n"
+ " -c, --cert load local client certificate from \n"
+ " -y, --key load local certificate key from \n"
+ " optional full URL\n"
+ "Environment:\n"
+ " LANGUAGE \"de\", \"en\", ... (actual: %5)\n"
+ " PROXY_TYPE \"http\" or \"socks\" or \"\" (actual: %2)\n"
+ " PROXY_PORT proxy port number (actual: %3)\n"
+ " PROXY_HOST proxy host name (actual: %4)\n")
+ .arg(QFileInfo(argc[0]).fileName())
+ .arg(env["PROXY_TYPE"]).arg(env["PROXY_PORT"]).arg(env["PROXY_HOST"])
+ .arg(env["LANGUAGE"])
+ .toStdString()
+ <show();
+ return app.exec();
+ } catch (std::exception& x) {
+ std::cerr<<"**** Error: "<
+
+ resources/icons/up.png
+ resources/icons/back.png
+ resources/icons/forward.png
+ resources/icons/gohome.png
+ resources/icons/reload.png
+ resources/icons/stop.png
+
+
diff --git a/swisssurfer/src/resources/icons/back.png b/swisssurfer/src/resources/icons/back.png
new file mode 100644
index 0000000..495df52
Binary files /dev/null and b/swisssurfer/src/resources/icons/back.png differ
diff --git a/swisssurfer/src/resources/icons/forward.png b/swisssurfer/src/resources/icons/forward.png
new file mode 100644
index 0000000..71781a5
Binary files /dev/null and b/swisssurfer/src/resources/icons/forward.png differ
diff --git a/swisssurfer/src/resources/icons/gohome.png b/swisssurfer/src/resources/icons/gohome.png
new file mode 100644
index 0000000..279e586
Binary files /dev/null and b/swisssurfer/src/resources/icons/gohome.png differ
diff --git a/swisssurfer/src/resources/icons/reload.png b/swisssurfer/src/resources/icons/reload.png
new file mode 100644
index 0000000..b5040b7
Binary files /dev/null and b/swisssurfer/src/resources/icons/reload.png differ
diff --git a/swisssurfer/src/resources/icons/source b/swisssurfer/src/resources/icons/source
new file mode 100644
index 0000000..3fa4754
--- /dev/null
+++ b/swisssurfer/src/resources/icons/source
@@ -0,0 +1,9 @@
+Icons taken from konqueror-buttonset 1.5 on http://www.kde-look.org/content/show.php/konqueror-buttonset?content=28212 (download: http://www.kde-look.org/content/download.php?content=28212&id=1&tan=58988840)
+License: Artistic 2.0
+
+back.png
+forward.png
+gohome.png
+reload.png
+stop.png
+up.png
diff --git a/swisssurfer/src/resources/icons/stop.png b/swisssurfer/src/resources/icons/stop.png
new file mode 100644
index 0000000..5bba35f
Binary files /dev/null and b/swisssurfer/src/resources/icons/stop.png differ
diff --git a/swisssurfer/src/resources/icons/up.png b/swisssurfer/src/resources/icons/up.png
new file mode 100644
index 0000000..69ca91d
Binary files /dev/null and b/swisssurfer/src/resources/icons/up.png differ
diff --git a/swisssurfer/src/swisssurfer_de.ts b/swisssurfer/src/swisssurfer_de.ts
new file mode 100644
index 0000000..e9b0c53
--- /dev/null
+++ b/swisssurfer/src/swisssurfer_de.ts
@@ -0,0 +1,451 @@
+
+
+
+UTF-8
+
+ Browser
+
+
+ SwissSurfer
+ SwissSign Browser
+
+
+
+
+ about:blank
+
+
+
+
+ toolBar
+
+
+
+
+ &File
+
+
+
+
+ &Settings
+
+
+
+
+ &Proxy Configuration
+
+
+
+
+ Proxy Password
+
+
+
+
+ neu laden
+
+
+
+
+ stoppen
+
+
+
+
+ zurückkehren
+
+
+
+
+ weitergehen
+
+
+
+
+ Startseite
+
+
+
+
+ &New Browser
+
+
+
+
+ New Browser Window
+
+
+
+
+ Ctrl+N
+
+
+
+
+ &Close
+
+
+
+
+ Ctrl+W
+
+
+
+
+ &Proxy...
+
+
+
+
+ Ctrl+P
+
+
+
+
+ The connection to the proxy server was refused (the proxy server is not accepting requests).
+ the connection to the proxy timed out or the proxy did not reply in time to the request sent
+
+
+
+
+ The proxy requires authentication in order to honour the request but did not accept any credentials offered (if any).
+ the Network Access API cannot honor the request because the protocol is not known
+
+
+
+
+ Checking: %1
+ Opening: %1
+
+
+
+
+ Reading: %1
+ Reading: %1%
+
+
+
+
+
+ <h2>%1</h2><p>%2</p>
+
+
+
+
+ Reply Error
+
+
+
+
+ Network Error
+
+
+
+
+ Zoom: %1%
+
+
+
+
+ %1 - SwissSurfer
+
+
+
+
+ <html><title>Page Load Error</title><body><h1>Page Load Error</h1>%1</body></html>
+
+
+
+
+
+
+ <h2>%1</h2><p>URL: %3</p><p>%2</p>
+
+
+
+
+ <h2>%1</h2><p>URL: %4</p><p>%2</p><h3>SSL Errors</h3><p><ul>%3</ul></p>
+ <h2>%1</h2><p>URL: %3</p><p>%2</p><h3>SSL Errors</h3><p><ul>%3</ul></p>
+
+
+
+
+ Unsuported Content
+
+
+
+
+ access to URL %1 not allowed
+
+
+
+
+ Network connection successful, remote host can be reached.
+
+
+
+
+ The remote server refused the connection (the server is not accepting requests).
+
+
+
+
+ The remote server closed the connection prematurely, before the entire reply was received and processed.
+
+
+
+
+ The remote host name was not found (invalid hostname).
+
+
+
+
+ The connection to the remote server timed out.
+
+
+
+
+ The operation was canceled via calls to abort() or close() before it was finished.
+
+
+
+
+ The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.
+
+
+
+
+ The proxy server closed the connection prematurely, before the entire reply was received and processed.
+
+
+
+
+ The proxy host name was not found (invalid proxy hostname).
+
+
+
+
+ The connection to the proxy timed out or the proxy did not reply in time to the request sent.
+
+
+
+
+ The access to the remote content was denied (similar to HTTP error 401).
+
+
+
+
+ The operation requested on the remote content is not permitted.
+
+
+
+
+ The remote content was not found at the server (similar to HTTP error 404).
+
+
+
+
+ The remote server requires authentication to serve the content but the credentials provided were not accepted (if any).
+
+
+
+
+ The Network Access API cannot honor the request because the protocol is not known.
+
+
+
+
+ The requested operation is invalid for this protocol.
+
+
+
+
+ An unknown network-related error was detected.
+
+
+
+
+ An unknown proxy-related error was detected.
+
+
+
+
+ An unknonwn error related to the remote content was detected.
+
+
+
+
+ A breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.).
+
+
+
+
+ <strong>Unknown network error (code: %1).</string>
+
+
+
+
+ Illegal URL: %1
+
+
+
+
+ network error
+
+
+
+
+
+ proxy error
+
+
+
+
+ <h2>%1</h2><p>Proxy: %3</p><p>%2</p><p>%4</p>
+
+
+
+
+ Possible Proxy Failed
+
+
+
+
+ Connection Cannot Be Established
+
+
+
+
+ Info: %1
+
+
+
+
+ download error
+ donload error
+
+
+
+
+ done.
+
+
+
+
+ %1
+ statusbar for hovered link %1=url
+
+
+
+
+ unsupported content
+
+
+
+
+ Forbidden: %1
+
+
+
+
+ Access Denied
+
+
+
+
+ <p>Access denied due to security considerations.</p><p>You are not allowed to connect to %1.
+
+
+
+
+ authentication required
+
+
+
+
+ Authentication Required
+
+
+
+
+ ssl error
+
+
+
+
+ <li>%1</li>
+ single ssl error
+
+
+
+
+ SSL Error
+
+
+
+
+ QObject
+
+
+ Usage: %1 [OPTIONS...] [<url> ...]
+Options:
+ -h, --help show this help text
+ -k, --kiosk no url bar
+ -p, --no-proxy no proxy detection
+ -c, --cert <file> load local client certificate from <file>
+ -y, --key <file> load local certificate key from <file>
+ <url> optional full URL
+Environment:
+ LANGUAGE "de", "en", ... (actual: %5)
+ PROXY_TYPE "http" or "socks" or "" (actual: %2)
+ PROXY_PORT proxy port number (actual: %3)
+ PROXY_HOST proxy host name (actual: %4)
+
+ Usage: %1 [OPTIONS...] [<url> ...]
+Options:
+ -h, --help show this help text
+ -k, --kiosk no url bar
+ -p, --no-proxy no proxy detection
+ -c, --cert <file> load local client certificate from <file>
+ <url> optional full URL
+Environment:
+ LANGUAGE "de", "en", ... (actual: %5)
+ PROXY_TYPE "http" or "socks" or "" (actual: %2)
+ PROXY_PORT proxy port number (actual: %3)
+ PROXY_HOST proxy host name (actual: %4)
+
+
+
+
+
+ Cannot read PEM certificate from file: %1
+
+
+
+
+ Read PEM certificates from file: %1
+
+
+
+
+ Cannot read PEM RSA key from file: %1
+
+
+
+
+ Read private key from file: %1
+
+
+
+
+ Too few arguments.
+Try: %1 --help
+
+
+
+
+ http://swisssign.com
+
+
+
+
diff --git a/swisssurfer/src/swisssurfer_en.ts b/swisssurfer/src/swisssurfer_en.ts
new file mode 100644
index 0000000..e9b0c53
--- /dev/null
+++ b/swisssurfer/src/swisssurfer_en.ts
@@ -0,0 +1,451 @@
+
+
+
+UTF-8
+
+ Browser
+
+
+ SwissSurfer
+ SwissSign Browser
+
+
+
+
+ about:blank
+
+
+
+
+ toolBar
+
+
+
+
+ &File
+
+
+
+
+ &Settings
+
+
+
+
+ &Proxy Configuration
+
+
+
+
+ Proxy Password
+
+
+
+
+ neu laden
+
+
+
+
+ stoppen
+
+
+
+
+ zurückkehren
+
+
+
+
+ weitergehen
+
+
+
+
+ Startseite
+
+
+
+
+ &New Browser
+
+
+
+
+ New Browser Window
+
+
+
+
+ Ctrl+N
+
+
+
+
+ &Close
+
+
+
+
+ Ctrl+W
+
+
+
+
+ &Proxy...
+
+
+
+
+ Ctrl+P
+
+
+
+
+ The connection to the proxy server was refused (the proxy server is not accepting requests).
+ the connection to the proxy timed out or the proxy did not reply in time to the request sent
+
+
+
+
+ The proxy requires authentication in order to honour the request but did not accept any credentials offered (if any).
+ the Network Access API cannot honor the request because the protocol is not known
+
+
+
+
+ Checking: %1
+ Opening: %1
+
+
+
+
+ Reading: %1
+ Reading: %1%
+
+
+
+
+
+ <h2>%1</h2><p>%2</p>
+
+
+
+
+ Reply Error
+
+
+
+
+ Network Error
+
+
+
+
+ Zoom: %1%
+
+
+
+
+ %1 - SwissSurfer
+
+
+
+
+ <html><title>Page Load Error</title><body><h1>Page Load Error</h1>%1</body></html>
+
+
+
+
+
+
+ <h2>%1</h2><p>URL: %3</p><p>%2</p>
+
+
+
+
+ <h2>%1</h2><p>URL: %4</p><p>%2</p><h3>SSL Errors</h3><p><ul>%3</ul></p>
+ <h2>%1</h2><p>URL: %3</p><p>%2</p><h3>SSL Errors</h3><p><ul>%3</ul></p>
+
+
+
+
+ Unsuported Content
+
+
+
+
+ access to URL %1 not allowed
+
+
+
+
+ Network connection successful, remote host can be reached.
+
+
+
+
+ The remote server refused the connection (the server is not accepting requests).
+
+
+
+
+ The remote server closed the connection prematurely, before the entire reply was received and processed.
+
+
+
+
+ The remote host name was not found (invalid hostname).
+
+
+
+
+ The connection to the remote server timed out.
+
+
+
+
+ The operation was canceled via calls to abort() or close() before it was finished.
+
+
+
+
+ The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.
+
+
+
+
+ The proxy server closed the connection prematurely, before the entire reply was received and processed.
+
+
+
+
+ The proxy host name was not found (invalid proxy hostname).
+
+
+
+
+ The connection to the proxy timed out or the proxy did not reply in time to the request sent.
+
+
+
+
+ The access to the remote content was denied (similar to HTTP error 401).
+
+
+
+
+ The operation requested on the remote content is not permitted.
+
+
+
+
+ The remote content was not found at the server (similar to HTTP error 404).
+
+
+
+
+ The remote server requires authentication to serve the content but the credentials provided were not accepted (if any).
+
+
+
+
+ The Network Access API cannot honor the request because the protocol is not known.
+
+
+
+
+ The requested operation is invalid for this protocol.
+
+
+
+
+ An unknown network-related error was detected.
+
+
+
+
+ An unknown proxy-related error was detected.
+
+
+
+
+ An unknonwn error related to the remote content was detected.
+
+
+
+
+ A breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.).
+
+
+
+
+ <strong>Unknown network error (code: %1).</string>
+
+
+
+
+ Illegal URL: %1
+
+
+
+
+ network error
+
+
+
+
+
+ proxy error
+
+
+
+
+ <h2>%1</h2><p>Proxy: %3</p><p>%2</p><p>%4</p>
+
+
+
+
+ Possible Proxy Failed
+
+
+
+
+ Connection Cannot Be Established
+
+
+
+
+ Info: %1
+
+
+
+
+ download error
+ donload error
+
+
+
+
+ done.
+
+
+
+
+ %1
+ statusbar for hovered link %1=url
+
+
+
+
+ unsupported content
+
+
+
+
+ Forbidden: %1
+
+
+
+
+ Access Denied
+
+
+
+
+ <p>Access denied due to security considerations.</p><p>You are not allowed to connect to %1.
+
+
+
+
+ authentication required
+
+
+
+
+ Authentication Required
+
+
+
+
+ ssl error
+
+
+
+
+ <li>%1</li>
+ single ssl error
+
+
+
+
+ SSL Error
+
+
+
+
+ QObject
+
+
+ Usage: %1 [OPTIONS...] [<url> ...]
+Options:
+ -h, --help show this help text
+ -k, --kiosk no url bar
+ -p, --no-proxy no proxy detection
+ -c, --cert <file> load local client certificate from <file>
+ -y, --key <file> load local certificate key from <file>
+ <url> optional full URL
+Environment:
+ LANGUAGE "de", "en", ... (actual: %5)
+ PROXY_TYPE "http" or "socks" or "" (actual: %2)
+ PROXY_PORT proxy port number (actual: %3)
+ PROXY_HOST proxy host name (actual: %4)
+
+ Usage: %1 [OPTIONS...] [<url> ...]
+Options:
+ -h, --help show this help text
+ -k, --kiosk no url bar
+ -p, --no-proxy no proxy detection
+ -c, --cert <file> load local client certificate from <file>
+ <url> optional full URL
+Environment:
+ LANGUAGE "de", "en", ... (actual: %5)
+ PROXY_TYPE "http" or "socks" or "" (actual: %2)
+ PROXY_PORT proxy port number (actual: %3)
+ PROXY_HOST proxy host name (actual: %4)
+
+
+
+
+
+ Cannot read PEM certificate from file: %1
+
+
+
+
+ Read PEM certificates from file: %1
+
+
+
+
+ Cannot read PEM RSA key from file: %1
+
+
+
+
+ Read private key from file: %1
+
+
+
+
+ Too few arguments.
+Try: %1 --help
+
+
+
+
+ http://swisssign.com
+
+
+
+
diff --git a/swisssurfer/src/swisssurfer_fr.ts b/swisssurfer/src/swisssurfer_fr.ts
new file mode 100644
index 0000000..e9b0c53
--- /dev/null
+++ b/swisssurfer/src/swisssurfer_fr.ts
@@ -0,0 +1,451 @@
+
+
+
+UTF-8
+
+ Browser
+
+
+ SwissSurfer
+ SwissSign Browser
+
+
+
+
+ about:blank
+
+
+
+
+ toolBar
+
+
+
+
+ &File
+
+
+
+
+ &Settings
+
+
+
+
+ &Proxy Configuration
+
+
+
+
+ Proxy Password
+
+
+
+
+ neu laden
+
+
+
+
+ stoppen
+
+
+
+
+ zurückkehren
+
+
+
+
+ weitergehen
+
+
+
+
+ Startseite
+
+
+
+
+ &New Browser
+
+
+
+
+ New Browser Window
+
+
+
+
+ Ctrl+N
+
+
+
+
+ &Close
+
+
+
+
+ Ctrl+W
+
+
+
+
+ &Proxy...
+
+
+
+
+ Ctrl+P
+
+
+
+
+ The connection to the proxy server was refused (the proxy server is not accepting requests).
+ the connection to the proxy timed out or the proxy did not reply in time to the request sent
+
+
+
+
+ The proxy requires authentication in order to honour the request but did not accept any credentials offered (if any).
+ the Network Access API cannot honor the request because the protocol is not known
+
+
+
+
+ Checking: %1
+ Opening: %1
+
+
+
+
+ Reading: %1
+ Reading: %1%
+
+
+
+
+
+ <h2>%1</h2><p>%2</p>
+
+
+
+
+ Reply Error
+
+
+
+
+ Network Error
+
+
+
+
+ Zoom: %1%
+
+
+
+
+ %1 - SwissSurfer
+
+
+
+
+ <html><title>Page Load Error</title><body><h1>Page Load Error</h1>%1</body></html>
+
+
+
+
+
+
+ <h2>%1</h2><p>URL: %3</p><p>%2</p>
+
+
+
+
+ <h2>%1</h2><p>URL: %4</p><p>%2</p><h3>SSL Errors</h3><p><ul>%3</ul></p>
+ <h2>%1</h2><p>URL: %3</p><p>%2</p><h3>SSL Errors</h3><p><ul>%3</ul></p>
+
+
+
+
+ Unsuported Content
+
+
+
+
+ access to URL %1 not allowed
+
+
+
+
+ Network connection successful, remote host can be reached.
+
+
+
+
+ The remote server refused the connection (the server is not accepting requests).
+
+
+
+
+ The remote server closed the connection prematurely, before the entire reply was received and processed.
+
+
+
+
+ The remote host name was not found (invalid hostname).
+
+
+
+
+ The connection to the remote server timed out.
+
+
+
+
+ The operation was canceled via calls to abort() or close() before it was finished.
+
+
+
+
+ The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.
+
+
+
+
+ The proxy server closed the connection prematurely, before the entire reply was received and processed.
+
+
+
+
+ The proxy host name was not found (invalid proxy hostname).
+
+
+
+
+ The connection to the proxy timed out or the proxy did not reply in time to the request sent.
+
+
+
+
+ The access to the remote content was denied (similar to HTTP error 401).
+
+
+
+
+ The operation requested on the remote content is not permitted.
+
+
+
+
+ The remote content was not found at the server (similar to HTTP error 404).
+
+
+
+
+ The remote server requires authentication to serve the content but the credentials provided were not accepted (if any).
+
+
+
+
+ The Network Access API cannot honor the request because the protocol is not known.
+
+
+
+
+ The requested operation is invalid for this protocol.
+
+
+
+
+ An unknown network-related error was detected.
+
+
+
+
+ An unknown proxy-related error was detected.
+
+
+
+
+ An unknonwn error related to the remote content was detected.
+
+
+
+
+ A breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.).
+
+
+
+
+ <strong>Unknown network error (code: %1).</string>
+
+
+
+
+ Illegal URL: %1
+
+
+
+
+ network error
+
+
+
+
+
+ proxy error
+
+
+
+
+ <h2>%1</h2><p>Proxy: %3</p><p>%2</p><p>%4</p>
+
+
+
+
+ Possible Proxy Failed
+
+
+
+
+ Connection Cannot Be Established
+
+
+
+
+ Info: %1
+
+
+
+
+ download error
+ donload error
+
+
+
+
+ done.
+
+
+
+
+ %1
+ statusbar for hovered link %1=url
+
+
+
+
+ unsupported content
+
+
+
+
+ Forbidden: %1
+
+
+
+
+ Access Denied
+
+
+
+
+ <p>Access denied due to security considerations.</p><p>You are not allowed to connect to %1.
+
+
+
+
+ authentication required
+
+
+
+
+ Authentication Required
+
+
+
+
+ ssl error
+
+
+
+
+ <li>%1</li>
+ single ssl error
+
+
+
+
+ SSL Error
+
+
+
+
+ QObject
+
+
+ Usage: %1 [OPTIONS...] [<url> ...]
+Options:
+ -h, --help show this help text
+ -k, --kiosk no url bar
+ -p, --no-proxy no proxy detection
+ -c, --cert <file> load local client certificate from <file>
+ -y, --key <file> load local certificate key from <file>
+ <url> optional full URL
+Environment:
+ LANGUAGE "de", "en", ... (actual: %5)
+ PROXY_TYPE "http" or "socks" or "" (actual: %2)
+ PROXY_PORT proxy port number (actual: %3)
+ PROXY_HOST proxy host name (actual: %4)
+
+ Usage: %1 [OPTIONS...] [<url> ...]
+Options:
+ -h, --help show this help text
+ -k, --kiosk no url bar
+ -p, --no-proxy no proxy detection
+ -c, --cert <file> load local client certificate from <file>
+ <url> optional full URL
+Environment:
+ LANGUAGE "de", "en", ... (actual: %5)
+ PROXY_TYPE "http" or "socks" or "" (actual: %2)
+ PROXY_PORT proxy port number (actual: %3)
+ PROXY_HOST proxy host name (actual: %4)
+
+
+
+
+
+ Cannot read PEM certificate from file: %1
+
+
+
+
+ Read PEM certificates from file: %1
+
+
+
+
+ Cannot read PEM RSA key from file: %1
+
+
+
+
+ Read private key from file: %1
+
+
+
+
+ Too few arguments.
+Try: %1 --help
+
+
+
+
+ http://swisssign.com
+
+
+
+
diff --git a/swisssurfer/src/swisssurfer_it.ts b/swisssurfer/src/swisssurfer_it.ts
new file mode 100644
index 0000000..e9b0c53
--- /dev/null
+++ b/swisssurfer/src/swisssurfer_it.ts
@@ -0,0 +1,451 @@
+
+
+
+UTF-8
+
+ Browser
+
+
+ SwissSurfer
+ SwissSign Browser
+
+
+
+
+ about:blank
+
+
+
+
+ toolBar
+
+
+
+
+ &File
+
+
+
+
+ &Settings
+
+
+
+
+ &Proxy Configuration
+
+
+
+
+ Proxy Password
+
+
+
+
+ neu laden
+
+
+
+
+ stoppen
+
+
+
+
+ zurückkehren
+
+
+
+
+ weitergehen
+
+
+
+
+ Startseite
+
+
+
+
+ &New Browser
+
+
+
+
+ New Browser Window
+
+
+
+
+ Ctrl+N
+
+
+
+
+ &Close
+
+
+
+
+ Ctrl+W
+
+
+
+
+ &Proxy...
+
+
+
+
+ Ctrl+P
+
+
+
+
+ The connection to the proxy server was refused (the proxy server is not accepting requests).
+ the connection to the proxy timed out or the proxy did not reply in time to the request sent
+
+
+
+
+ The proxy requires authentication in order to honour the request but did not accept any credentials offered (if any).
+ the Network Access API cannot honor the request because the protocol is not known
+
+
+
+
+ Checking: %1
+ Opening: %1
+
+
+
+
+ Reading: %1
+ Reading: %1%
+
+
+
+
+
+ <h2>%1</h2><p>%2</p>
+
+
+
+
+ Reply Error
+
+
+
+
+ Network Error
+
+
+
+
+ Zoom: %1%
+
+
+
+
+ %1 - SwissSurfer
+
+
+
+
+ <html><title>Page Load Error</title><body><h1>Page Load Error</h1>%1</body></html>
+
+
+
+
+
+
+ <h2>%1</h2><p>URL: %3</p><p>%2</p>
+
+
+
+
+ <h2>%1</h2><p>URL: %4</p><p>%2</p><h3>SSL Errors</h3><p><ul>%3</ul></p>
+ <h2>%1</h2><p>URL: %3</p><p>%2</p><h3>SSL Errors</h3><p><ul>%3</ul></p>
+
+
+
+
+ Unsuported Content
+
+
+
+
+ access to URL %1 not allowed
+
+
+
+
+ Network connection successful, remote host can be reached.
+
+
+
+
+ The remote server refused the connection (the server is not accepting requests).
+
+
+
+
+ The remote server closed the connection prematurely, before the entire reply was received and processed.
+
+
+
+
+ The remote host name was not found (invalid hostname).
+
+
+
+
+ The connection to the remote server timed out.
+
+
+
+
+ The operation was canceled via calls to abort() or close() before it was finished.
+
+
+
+
+ The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.
+
+
+
+
+ The proxy server closed the connection prematurely, before the entire reply was received and processed.
+
+
+
+
+ The proxy host name was not found (invalid proxy hostname).
+
+
+
+
+ The connection to the proxy timed out or the proxy did not reply in time to the request sent.
+
+
+
+
+ The access to the remote content was denied (similar to HTTP error 401).
+
+
+
+
+ The operation requested on the remote content is not permitted.
+
+
+
+
+ The remote content was not found at the server (similar to HTTP error 404).
+
+
+
+
+ The remote server requires authentication to serve the content but the credentials provided were not accepted (if any).
+
+
+
+
+ The Network Access API cannot honor the request because the protocol is not known.
+
+
+
+
+ The requested operation is invalid for this protocol.
+
+
+
+
+ An unknown network-related error was detected.
+
+
+
+
+ An unknown proxy-related error was detected.
+
+
+
+
+ An unknonwn error related to the remote content was detected.
+
+
+
+
+ A breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.).
+
+
+
+
+ <strong>Unknown network error (code: %1).</string>
+
+
+
+
+ Illegal URL: %1
+
+
+
+
+ network error
+
+
+
+
+
+ proxy error
+
+
+
+
+ <h2>%1</h2><p>Proxy: %3</p><p>%2</p><p>%4</p>
+
+
+
+
+ Possible Proxy Failed
+
+
+
+
+ Connection Cannot Be Established
+
+
+
+
+ Info: %1
+
+
+
+
+ download error
+ donload error
+
+
+
+
+ done.
+
+
+
+
+ %1
+ statusbar for hovered link %1=url
+
+
+
+
+ unsupported content
+
+
+
+
+ Forbidden: %1
+
+
+
+
+ Access Denied
+
+
+
+
+ <p>Access denied due to security considerations.</p><p>You are not allowed to connect to %1.
+
+
+
+
+ authentication required
+
+
+
+
+ Authentication Required
+
+
+
+
+ ssl error
+
+
+
+
+ <li>%1</li>
+ single ssl error
+
+
+
+
+ SSL Error
+
+
+
+
+ QObject
+
+
+ Usage: %1 [OPTIONS...] [<url> ...]
+Options:
+ -h, --help show this help text
+ -k, --kiosk no url bar
+ -p, --no-proxy no proxy detection
+ -c, --cert <file> load local client certificate from <file>
+ -y, --key <file> load local certificate key from <file>
+ <url> optional full URL
+Environment:
+ LANGUAGE "de", "en", ... (actual: %5)
+ PROXY_TYPE "http" or "socks" or "" (actual: %2)
+ PROXY_PORT proxy port number (actual: %3)
+ PROXY_HOST proxy host name (actual: %4)
+
+ Usage: %1 [OPTIONS...] [<url> ...]
+Options:
+ -h, --help show this help text
+ -k, --kiosk no url bar
+ -p, --no-proxy no proxy detection
+ -c, --cert <file> load local client certificate from <file>
+ <url> optional full URL
+Environment:
+ LANGUAGE "de", "en", ... (actual: %5)
+ PROXY_TYPE "http" or "socks" or "" (actual: %2)
+ PROXY_PORT proxy port number (actual: %3)
+ PROXY_HOST proxy host name (actual: %4)
+
+
+
+
+
+ Cannot read PEM certificate from file: %1
+
+
+
+
+ Read PEM certificates from file: %1
+
+
+
+
+ Cannot read PEM RSA key from file: %1
+
+
+
+
+ Read private key from file: %1
+
+
+
+
+ Too few arguments.
+Try: %1 --help
+
+
+
+
+ http://swisssign.com
+
+
+
+