diff options
author | Patrick J Volkerding <volkerdi@slackware.com> | 2020-10-29 21:55:56 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2020-10-30 08:59:49 +0100 |
commit | c54ffbc86d562b12ffef86f2af11628ec0647899 (patch) | |
tree | afa56b8f437628b14c3ad19ba55f7afe97d96e47 /source/l/poppler | |
parent | 037917abe789c55171028a20ce56284921260d2a (diff) | |
download | current-c54ffbc86d562b12ffef86f2af11628ec0647899.tar.gz |
Thu Oct 29 21:55:56 UTC 202020201029215556
a/aaa_elflibs-15.0-x86_64-26.txz: Rebuilt.
Upgraded: liblber-2.4.so.2.11.3, libldap-2.4.so.2.11.3, libmpc.so.3.2.1.
Added temporarily to allow for third-party packages to be recompiled:
libHalf.so.12.0.0, libIex-2_2.so.12.0.0, libIexMath-2_2.so.12.0.0,
libIlmImf-2_2.so.22.0.0, libIlmImfUtil-2_2.so.22.0.0,
libIlmThread-2_2.so.12.0.0, libImath-2_2.so.12.0.0,
libpoppler-qt4.so.4.11.0, libpoppler.so.79.0.0.
a/kernel-generic-5.4.73-x86_64-1.txz: Upgraded.
a/kernel-huge-5.4.73-x86_64-1.txz: Upgraded.
a/kernel-modules-5.4.73-x86_64-1.txz: Upgraded.
d/kernel-headers-5.4.73-x86-1.txz: Upgraded.
k/kernel-source-5.4.73-noarch-1.txz: Upgraded.
l/LibRaw-0.20.2-x86_64-1.txz: Upgraded.
Shared library .so-version bump.
l/exiv2-0.27.3-x86_64-1.txz: Upgraded.
Shared library .so-version bump.
l/gegl-0.4.26-x86_64-2.txz: Rebuilt.
Recompiled against openexr-2.5.3.
l/gexiv2-0.12.1-x86_64-1.txz: Upgraded.
Compiled against exiv2-0.27.3.
l/graphene-1.10.2-x86_64-1.txz: Added.
l/gst-plugins-base-1.18.1-x86_64-2.txz: Rebuilt.
Recompiled against system libgraphene.
l/ilmbase-2.2.0-x86_64-2.txz: Removed.
These libraries are now part of openexr.
l/imagemagick-7.0.10_34-x86_64-2.txz: Rebuilt.
Recompiled against LibRaw-0.20.2 and openexr-2.5.3.
l/openexr-2.5.3-x86_64-1.txz: Upgraded.
Shared library .so-version bump.
l/poppler-20.10.0-x86_64-1.txz: Upgraded.
Shared library .so-version bump.
Qt4 support dropped.
n/samba-4.13.1-x86_64-1.txz: Upgraded.
This update fixes security issues:
Missing handle permissions check in SMB1/2/3 ChangeNotify.
Denial-of-service vulnerabilities.
For more information, see:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14318
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14323
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14383
(* Security fix *)
xap/geeqie-1.5.1-x86_64-2.txz: Rebuilt.
Recompiled against exiv2-0.27.3.
xap/gimp-2.10.22-x86_64-2.txz: Rebuilt.
Recompiled against openexr-2.5.3.
xap/xlockmore-5.66-x86_64-1.txz: Upgraded.
isolinux/initrd.img: Rebuilt.
kernels/*: Upgraded.
usb-and-pxe-installers/usbboot.img: Rebuilt.
Diffstat (limited to 'source/l/poppler')
-rwxr-xr-x | source/l/poppler/poppler.SlackBuild | 17 | ||||
-rw-r--r-- | source/l/poppler/poppler.remove.qt4.frontend.diff | 26533 | ||||
-rw-r--r-- | source/l/poppler/poppler.splashpath.h.revert.diff | 11 |
3 files changed, 4 insertions, 26557 deletions
diff --git a/source/l/poppler/poppler.SlackBuild b/source/l/poppler/poppler.SlackBuild index 892a0db2..5902adf3 100755 --- a/source/l/poppler/poppler.SlackBuild +++ b/source/l/poppler/poppler.SlackBuild @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2006, 2007, 2008, 2009, 2010, 2012, 2017, 2018 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2007, 2008, 2009, 2010, 2012, 2017, 2018, 2020 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -77,23 +77,15 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \+ -# At least for now, we will revert this patch since we have -# things that depend on it: -xzcat $CWD/poppler.remove.qt4.frontend.diff.xz | patch -p1 -R --verbose || exit 1 - -# Revert a change to SplashPath.h (in 0.63.0) that breaks compiling the qt4 frontend: -zcat $CWD/poppler.splashpath.h.revert.diff.gz | patch -p1 --verbose || exit 1 - -mkdir build -cd build +mkdir cmake-build +cd cmake-build CXXFLAGS="$SLKCFLAGS -std=c++11 -fpermissive" \ cmake \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_MANDIR=/usr/man \ -DBUILD_SHARED_LIBS=ON \ - -DENABLE_QT4=ON \ - -DENABLE_QT5=OFF \ + -DENABLE_QT5=ON \ -DENABLE_XPDF_HEADERS=ON \ -DENABLE_CMS=lcms2 \ -DENABLE_DCTDECODER=libjpeg \ @@ -149,4 +141,3 @@ cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG /sbin/makepkg -l y -c n $TMP/${PKGNAM}-$VERSION-$ARCH-$BUILD.txz - diff --git a/source/l/poppler/poppler.remove.qt4.frontend.diff b/source/l/poppler/poppler.remove.qt4.frontend.diff deleted file mode 100644 index 2b58eb56..00000000 --- a/source/l/poppler/poppler.remove.qt4.frontend.diff +++ /dev/null @@ -1,26533 +0,0 @@ -From fb4c69d270a618bb23791e52f46ec73c86574294 Mon Sep 17 00:00:00 2001 -From: Albert Astals Cid <aacid@kde.org> -Date: Fri, 1 Dec 2017 23:44:17 +0100 -Subject: [PATCH] Remove the Qt4 frontend - ---- - .gitignore | 2 - - CMakeLists.txt | 17 - - cmake/modules/FindQt4.cmake | 1311 ------- - poppler-qt4.pc.cmake | 12 - - qt4/.gitignore | 4 - - qt4/CMakeLists.txt | 6 - - qt4/demos/.gitignore | 4 - - qt4/demos/CMakeLists.txt | 28 - - qt4/demos/abstractinfodock.cpp | 57 - - qt4/demos/abstractinfodock.h | 48 - - qt4/demos/documentobserver.cpp | 50 - - qt4/demos/documentobserver.h | 50 - - qt4/demos/embeddedfiles.cpp | 82 - - qt4/demos/embeddedfiles.h | 44 - - qt4/demos/fonts.cpp | 72 - - qt4/demos/fonts.h | 43 - - qt4/demos/info.cpp | 72 - - qt4/demos/info.h | 43 - - qt4/demos/main_viewer.cpp | 33 - - qt4/demos/metadata.cpp | 50 - - qt4/demos/metadata.h | 43 - - qt4/demos/navigationtoolbar.cpp | 144 - - qt4/demos/navigationtoolbar.h | 65 - - qt4/demos/optcontent.cpp | 69 - - qt4/demos/optcontent.h | 47 - - qt4/demos/pageview.cpp | 101 - - qt4/demos/pageview.h | 53 - - qt4/demos/permissions.cpp | 66 - - qt4/demos/permissions.h | 43 - - qt4/demos/thumbnails.cpp | 84 - - qt4/demos/thumbnails.h | 48 - - qt4/demos/toc.cpp | 88 - - qt4/demos/toc.h | 43 - - qt4/demos/viewer.cpp | 319 -- - qt4/demos/viewer.h | 73 - - qt4/src/.gitignore | 9 - - qt4/src/ArthurOutputDev.cc | 812 ---- - qt4/src/ArthurOutputDev.h | 170 - - qt4/src/CMakeLists.txt | 54 - - qt4/src/Doxyfile | 1637 --------- - qt4/src/Mainpage.dox | 85 - - qt4/src/poppler-annotation-helper.h | 181 - - qt4/src/poppler-annotation-private.h | 112 - - qt4/src/poppler-annotation.cc | 5089 -------------------------- - qt4/src/poppler-annotation.h | 1375 ------- - qt4/src/poppler-base-converter.cc | 105 - - qt4/src/poppler-converter-private.h | 49 - - qt4/src/poppler-document.cc | 850 ----- - qt4/src/poppler-embeddedfile-private.h | 42 - - qt4/src/poppler-embeddedfile.cc | 135 - - qt4/src/poppler-export.h | 20 - - qt4/src/poppler-fontinfo.cc | 150 - - qt4/src/poppler-form.cc | 416 --- - qt4/src/poppler-form.h | 343 -- - qt4/src/poppler-link-extractor-private.h | 57 - - qt4/src/poppler-link-extractor.cc | 84 - - qt4/src/poppler-link-private.h | 57 - - qt4/src/poppler-link.cc | 710 ---- - qt4/src/poppler-link.h | 641 ---- - qt4/src/poppler-media.cc | 168 - - qt4/src/poppler-media.h | 100 - - qt4/src/poppler-movie.cc | 110 - - qt4/src/poppler-optcontent-private.h | 124 - - qt4/src/poppler-optcontent.cc | 456 --- - qt4/src/poppler-optcontent.h | 84 - - qt4/src/poppler-page-private.h | 57 - - qt4/src/poppler-page-transition-private.h | 28 - - qt4/src/poppler-page-transition.cc | 101 - - qt4/src/poppler-page-transition.h | 158 - - qt4/src/poppler-page.cc | 810 ---- - qt4/src/poppler-pdf-converter.cc | 115 - - qt4/src/poppler-private.cc | 296 -- - qt4/src/poppler-private.h | 241 -- - qt4/src/poppler-ps-converter.cc | 280 -- - qt4/src/poppler-qiodeviceoutstream-private.h | 47 - - qt4/src/poppler-qiodeviceoutstream.cc | 64 - - qt4/src/poppler-qt4.h | 1990 ---------- - qt4/src/poppler-sound.cc | 132 - - qt4/src/poppler-textbox.cc | 63 - - qt4/tests/.gitignore | 33 - - qt4/tests/CMakeLists.txt | 67 - - qt4/tests/README.unittest | 23 - - qt4/tests/check_actualtext.cpp | 33 - - qt4/tests/check_attachments.cpp | 157 - - qt4/tests/check_dateConversion.cpp | 142 - - qt4/tests/check_fonts.cpp | 248 -- - qt4/tests/check_goostring.cpp | 127 - - qt4/tests/check_lexer.cpp | 107 - - qt4/tests/check_links.cpp | 98 - - qt4/tests/check_metadata.cpp | 275 -- - qt4/tests/check_optcontent.cpp | 446 --- - qt4/tests/check_pagelabelinfo.cpp | 43 - - qt4/tests/check_pagelayout.cpp | 49 - - qt4/tests/check_pagemode.cpp | 73 - - qt4/tests/check_password.cpp | 88 - - qt4/tests/check_permissions.cpp | 44 - - qt4/tests/check_search.cpp | 175 - - qt4/tests/check_strings.cpp | 250 -- - qt4/tests/poppler-attachments.cpp | 39 - - qt4/tests/poppler-fonts.cpp | 89 - - qt4/tests/poppler-forms.cpp | 166 - - qt4/tests/poppler-texts.cpp | 40 - - qt4/tests/stress-poppler-dir.cpp | 67 - - qt4/tests/stress-poppler-qt4.cpp | 74 - - qt4/tests/stress-threads-qt4.cpp | 309 -- - qt4/tests/test-password-qt4.cpp | 136 - - qt4/tests/test-poppler-qt4.cpp | 235 -- - qt4/tests/test-render-to-file.cpp | 69 - - 108 files changed, 25623 deletions(-) - delete mode 100644 cmake/modules/FindQt4.cmake - delete mode 100644 poppler-qt4.pc.cmake - delete mode 100644 qt4/.gitignore - delete mode 100644 qt4/CMakeLists.txt - delete mode 100644 qt4/demos/.gitignore - delete mode 100644 qt4/demos/CMakeLists.txt - delete mode 100644 qt4/demos/abstractinfodock.cpp - delete mode 100644 qt4/demos/abstractinfodock.h - delete mode 100644 qt4/demos/documentobserver.cpp - delete mode 100644 qt4/demos/documentobserver.h - delete mode 100644 qt4/demos/embeddedfiles.cpp - delete mode 100644 qt4/demos/embeddedfiles.h - delete mode 100644 qt4/demos/fonts.cpp - delete mode 100644 qt4/demos/fonts.h - delete mode 100644 qt4/demos/info.cpp - delete mode 100644 qt4/demos/info.h - delete mode 100644 qt4/demos/main_viewer.cpp - delete mode 100644 qt4/demos/metadata.cpp - delete mode 100644 qt4/demos/metadata.h - delete mode 100644 qt4/demos/navigationtoolbar.cpp - delete mode 100644 qt4/demos/navigationtoolbar.h - delete mode 100644 qt4/demos/optcontent.cpp - delete mode 100644 qt4/demos/optcontent.h - delete mode 100644 qt4/demos/pageview.cpp - delete mode 100644 qt4/demos/pageview.h - delete mode 100644 qt4/demos/permissions.cpp - delete mode 100644 qt4/demos/permissions.h - delete mode 100644 qt4/demos/thumbnails.cpp - delete mode 100644 qt4/demos/thumbnails.h - delete mode 100644 qt4/demos/toc.cpp - delete mode 100644 qt4/demos/toc.h - delete mode 100644 qt4/demos/viewer.cpp - delete mode 100644 qt4/demos/viewer.h - delete mode 100644 qt4/src/.gitignore - delete mode 100644 qt4/src/ArthurOutputDev.cc - delete mode 100644 qt4/src/ArthurOutputDev.h - delete mode 100644 qt4/src/CMakeLists.txt - delete mode 100644 qt4/src/Doxyfile - delete mode 100644 qt4/src/Mainpage.dox - delete mode 100644 qt4/src/poppler-annotation-helper.h - delete mode 100644 qt4/src/poppler-annotation-private.h - delete mode 100644 qt4/src/poppler-annotation.cc - delete mode 100644 qt4/src/poppler-annotation.h - delete mode 100644 qt4/src/poppler-base-converter.cc - delete mode 100644 qt4/src/poppler-converter-private.h - delete mode 100644 qt4/src/poppler-document.cc - delete mode 100644 qt4/src/poppler-embeddedfile-private.h - delete mode 100644 qt4/src/poppler-embeddedfile.cc - delete mode 100644 qt4/src/poppler-export.h - delete mode 100644 qt4/src/poppler-fontinfo.cc - delete mode 100644 qt4/src/poppler-form.cc - delete mode 100644 qt4/src/poppler-form.h - delete mode 100644 qt4/src/poppler-link-extractor-private.h - delete mode 100644 qt4/src/poppler-link-extractor.cc - delete mode 100644 qt4/src/poppler-link-private.h - delete mode 100644 qt4/src/poppler-link.cc - delete mode 100644 qt4/src/poppler-link.h - delete mode 100644 qt4/src/poppler-media.cc - delete mode 100644 qt4/src/poppler-media.h - delete mode 100644 qt4/src/poppler-movie.cc - delete mode 100644 qt4/src/poppler-optcontent-private.h - delete mode 100644 qt4/src/poppler-optcontent.cc - delete mode 100644 qt4/src/poppler-optcontent.h - delete mode 100644 qt4/src/poppler-page-private.h - delete mode 100644 qt4/src/poppler-page-transition-private.h - delete mode 100644 qt4/src/poppler-page-transition.cc - delete mode 100644 qt4/src/poppler-page-transition.h - delete mode 100644 qt4/src/poppler-page.cc - delete mode 100644 qt4/src/poppler-pdf-converter.cc - delete mode 100644 qt4/src/poppler-private.cc - delete mode 100644 qt4/src/poppler-private.h - delete mode 100644 qt4/src/poppler-ps-converter.cc - delete mode 100644 qt4/src/poppler-qiodeviceoutstream-private.h - delete mode 100644 qt4/src/poppler-qiodeviceoutstream.cc - delete mode 100644 qt4/src/poppler-qt4.h - delete mode 100644 qt4/src/poppler-sound.cc - delete mode 100644 qt4/src/poppler-textbox.cc - delete mode 100644 qt4/tests/.gitignore - delete mode 100644 qt4/tests/CMakeLists.txt - delete mode 100644 qt4/tests/README.unittest - delete mode 100644 qt4/tests/check_actualtext.cpp - delete mode 100644 qt4/tests/check_attachments.cpp - delete mode 100644 qt4/tests/check_dateConversion.cpp - delete mode 100644 qt4/tests/check_fonts.cpp - delete mode 100644 qt4/tests/check_goostring.cpp - delete mode 100644 qt4/tests/check_lexer.cpp - delete mode 100644 qt4/tests/check_links.cpp - delete mode 100644 qt4/tests/check_metadata.cpp - delete mode 100644 qt4/tests/check_optcontent.cpp - delete mode 100644 qt4/tests/check_pagelabelinfo.cpp - delete mode 100644 qt4/tests/check_pagelayout.cpp - delete mode 100644 qt4/tests/check_pagemode.cpp - delete mode 100644 qt4/tests/check_password.cpp - delete mode 100644 qt4/tests/check_permissions.cpp - delete mode 100644 qt4/tests/check_search.cpp - delete mode 100644 qt4/tests/check_strings.cpp - delete mode 100644 qt4/tests/poppler-attachments.cpp - delete mode 100644 qt4/tests/poppler-fonts.cpp - delete mode 100644 qt4/tests/poppler-forms.cpp - delete mode 100644 qt4/tests/poppler-texts.cpp - delete mode 100644 qt4/tests/stress-poppler-dir.cpp - delete mode 100644 qt4/tests/stress-poppler-qt4.cpp - delete mode 100644 qt4/tests/stress-threads-qt4.cpp - delete mode 100644 qt4/tests/test-password-qt4.cpp - delete mode 100644 qt4/tests/test-poppler-qt4.cpp - delete mode 100644 qt4/tests/test-render-to-file.cpp - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 0d753efe..2ed1398a 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -40,7 +40,6 @@ set (CMAKE_CXX_EXTENSIONS OFF) - # command line switches - option(ENABLE_XPDF_HEADERS "Install unsupported xpdf headers." OFF) - option(BUILD_GTK_TESTS "Whether compile the GTK+ test programs." ON) --option(BUILD_QT4_TESTS "Whether compile the Qt4 test programs." ON) - option(BUILD_QT5_TESTS "Whether compile the Qt5 test programs." ON) - option(BUILD_CPP_TESTS "Whether compile the CPP test programs." ON) - option(ENABLE_SPLASH "Build the Splash graphics backend." ON) -@@ -48,7 +47,6 @@ option(ENABLE_UTILS "Compile poppler command line utils." ON) - option(ENABLE_CPP "Compile poppler cpp wrapper." ON) - option(ENABLE_GLIB "Compile poppler glib wrapper." ON) - option(ENABLE_GTK_DOC "Whether to generate glib API documentation." OFF) --option(ENABLE_QT4 "Compile poppler qt4 wrapper." ON) - option(ENABLE_QT5 "Compile poppler qt5 wrapper." ON) - set(ENABLE_LIBOPENJPEG "openjpeg2" CACHE STRING "Use libopenjpeg for JPX streams. Possible values: openjpeg2, unmaintained, none. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no JPX decoder at all. Default: openjpeg2") - set(ENABLE_CMS "lcms2" CACHE STRING "Use color management system. Possible values: lcms2, none. 'none' disables color management system.") -@@ -114,7 +112,6 @@ set(OPI_SUPPORT ON) - set(TEXTOUT_WORD_LIST ON) - - # setting the minimum required versions for some components --set(QT4_MIN_VERSION "4.7.0") - set(CAIRO_VERSION "1.10.0") - set(GLIB_REQUIRED "2.41") - -@@ -144,13 +141,6 @@ else() - message(FATAL_ERROR "Invalid ENABLE_DCTDECODER value.") - endif() - --if (ENABLE_QT4) -- macro_optional_find_package(Qt4) -- if (NOT QT4_FOUND) -- set(ENABLE_QT4 OFF) -- endif() --endif() -- - if (ENABLE_QT5) - find_package(Qt5Core) - find_package(Qt5Gui) -@@ -670,9 +660,6 @@ if(ENABLE_GLIB) - add_subdirectory(glib) - endif() - add_subdirectory(test) --if(ENABLE_QT4) -- add_subdirectory(qt4) --endif() - if(ENABLE_QT5) - add_subdirectory(qt5) - endif() -@@ -697,9 +684,6 @@ poppler_create_install_pkgconfig(poppler.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - if(ENABLE_SPLASH) - poppler_create_install_pkgconfig(poppler-splash.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - endif() --if(ENABLE_QT4) -- poppler_create_install_pkgconfig(poppler-qt4.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig) --endif() - if(ENABLE_QT5) - poppler_create_install_pkgconfig(poppler-qt5.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - endif() -@@ -721,7 +705,6 @@ if(SPLASH_CMYK) - message(" with CMYK support") - endif() - show_end_message_yesno("cairo output" CAIRO_FOUND) --show_end_message_yesno("qt4 wrapper" ENABLE_QT4) - show_end_message_yesno("qt5 wrapper" ENABLE_QT5) - show_end_message_yesno("glib wrapper" ENABLE_GLIB) - show_end_message_yesno(" introspection" INTROSPECTION_FOUND) -diff --git a/cmake/modules/FindQt4.cmake b/cmake/modules/FindQt4.cmake -deleted file mode 100644 -index 79378b0c..00000000 ---- a/cmake/modules/FindQt4.cmake -+++ /dev/null -@@ -1,1311 +0,0 @@ --# - Find QT 4 --# This module can be used to find Qt4. --# The most important issue is that the Qt4 qmake is available via the system path. --# This qmake is then used to detect basically everything else. --# This module defines a number of key variables and macros. First is --# QT_USE_FILE which is the path to a CMake file that can be included to compile --# Qt 4 applications and libraries. By default, the QtCore and QtGui --# libraries are loaded. This behavior can be changed by setting one or more --# of the following variables to true: --# QT_DONT_USE_QTCORE --# QT_DONT_USE_QTGUI --# QT_USE_QT3SUPPORT --# QT_USE_QTASSISTANT --# QT_USE_QTDESIGNER --# QT_USE_QTMOTIF --# QT_USE_QTMAIN --# QT_USE_QTNETWORK --# QT_USE_QTNSPLUGIN --# QT_USE_QTOPENGL --# QT_USE_QTSQL --# QT_USE_QTXML --# QT_USE_QTSVG --# QT_USE_QTTEST --# QT_USE_QTUITOOLS --# QT_USE_QTDBUS --# QT_USE_QTSCRIPT --# --# All the libraries required are stored in a variable called QT_LIBRARIES. --# Add this variable to your TARGET_LINK_LIBRARIES. --# --# macro QT4_WRAP_CPP(outfiles inputfile ... OPTIONS ...) --# create moc code from a list of files containing Qt class with --# the Q_OBJECT declaration. Options may be given to moc, such as those found --# when executing "moc -help" --# --# macro QT4_WRAP_UI(outfiles inputfile ... OPTIONS ...) --# create code from a list of Qt designer ui files. --# Options may be given to uic, such as those found --# when executing "uic -help" --# --# macro QT4_ADD_RESOURCES(outfiles inputfile ... OPTIONS ...) --# create code from a list of Qt resource files. --# Options may be given to rcc, such as those found --# when executing "rcc -help" --# --# macro QT4_AUTOMOC(inputfile ... ) --# macro QT4_GENERATE_MOC(inputfile outputfile ) --# --# macro QT4_ADD_DBUS_INTERFACE(outfiles interface basename) --# create a the interface header and implementation files with the --# given basename from the given interface xml file and add it to --# the list of sources. --# To disable generating a namespace header, set the source file property --# NO_NAMESPACE to TRUE on the interface file. --# --# macro QT4_ADD_DBUS_INTERFACES(outfiles inputfile ... ) --# create the interface header and implementation files --# for all listed interface xml files --# the name will be automatically determined from the name of the xml file --# To disable generating namespace headers, set the source file property --# NO_NAMESPACE to TRUE for these inputfiles. --# --# macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname [basename] [classname]) --# create a dbus adaptor (header and implementation file) from the xml file --# describing the interface, and add it to the list of sources. The adaptor --# forwards the calls to a parent class, defined in parentheader and named --# parentclassname. The name of the generated files will be --# <basename>adaptor.{cpp,h} where basename defaults to the basename of the xml file. --# If <classname> is provided, then it will be used as the classname of the --# adaptor itself. --# --# macro QT4_GENERATE_DBUS_INTERFACE( header [interfacename] OPTIONS ...) --# generate the xml interface file from the given header. --# If the optional argument interfacename is omitted, the name of the --# interface file is constructed from the basename of the header with --# the suffix .xml appended. --# Options may be given to uic, such as those found when executing "qdbuscpp2xml --help" --# --# QT_FOUND If false, don't try to use Qt. --# QT4_FOUND If false, don't try to use Qt 4. --# --# QT4_QTCORE_FOUND True if QtCore was found. --# QT4_QTGUI_FOUND True if QtGui was found. --# QT4_QT3SUPPORT_FOUND True if Qt3Support was found. --# QT4_QTASSISTANT_FOUND True if QtAssistant was found. --# QT4_QTDBUS_FOUND True if QtDBus was found. --# QT4_QTDESIGNER_FOUND True if QtDesigner was found. --# QT4_QTDESIGNERCOMPONENTS True if QtDesignerComponents was found. --# QT4_QTMOTIF_FOUND True if QtMotif was found. --# QT4_QTNETWORK_FOUND True if QtNetwork was found. --# QT4_QTNSPLUGIN_FOUND True if QtNsPlugin was found. --# QT4_QTOPENGL_FOUND True if QtOpenGL was found. --# QT4_QTSQL_FOUND True if QtSql was found. --# QT4_QTXML_FOUND True if QtXml was found. --# QT4_QTSVG_FOUND True if QtSvg was found. --# QT4_QTSCRIPT_FOUND True if QtScript was found. --# QT4_QTTEST_FOUND True if QtTest was found. --# QT4_QTUITOOLS_FOUND True if QtUiTools was found. --# --# QT4_DEFINITIONS Definitions to use when compiling code that uses Qt. --# --# QT4_INCLUDES List of paths to all include directories of --# Qt4 QT4_INCLUDE_DIR and QT4_QTCORE_INCLUDE_DIR are --# always in this variable even if NOTFOUND, --# all other INCLUDE_DIRS are --# only added if they are found. --# --# QT4_INCLUDE_DIR Path to "include" of Qt4 --# QT4_QT4_INCLUDE_DIR Path to "include/Qt" --# QT4_QT3SUPPORT_INCLUDE_DIR Path to "include/Qt3Support" --# QT4_QTASSISTANT_INCLUDE_DIR Path to "include/QtAssistant" --# QT4_QTCORE_INCLUDE_DIR Path to "include/QtCore" --# QT4_QTDESIGNER_INCLUDE_DIR Path to "include/QtDesigner" --# QT4_QTDESIGNERCOMPONENTS_INCLUDE_DIR Path to "include/QtDesigner" --# QT4_QTDBUS_INCLUDE_DIR Path to "include/QtDBus" --# QT4_QTGUI_INCLUDE_DIR Path to "include/QtGui" --# QT4_QTMOTIF_INCLUDE_DIR Path to "include/QtMotif" --# QT4_QTNETWORK_INCLUDE_DIR Path to "include/QtNetwork" --# QT4_QTNSPLUGIN_INCLUDE_DIR Path to "include/QtNsPlugin" --# QT4_QTOPENGL_INCLUDE_DIR Path to "include/QtOpenGL" --# QT4_QTSQL_INCLUDE_DIR Path to "include/QtSql" --# QT4_QTXML_INCLUDE_DIR Path to "include/QtXml" --# QT4_QTSVG_INCLUDE_DIR Path to "include/QtSvg" --# QT4_QTSCRIPT_INCLUDE_DIR Path to "include/QtScript" --# QT4_QTTEST_INCLUDE_DIR Path to "include/QtTest" --# --# QT4_LIBRARY_DIR Path to "lib" of Qt4 --# --# QT4_PLUGINS_DIR Path to "plugins" for Qt4 --# --# For every library of Qt, a QT4_QTFOO_LIBRARY variable is defined, with the full path to the library. --# --# So there are the following variables: --# The Qt3Support library: QT4_QT3SUPPORT_LIBRARY --# --# The QtAssistant library: QT4_QTASSISTANT_LIBRARY --# --# The QtCore library: QT4_QTCORE_LIBRARY --# --# The QtDBus library: QT4_QTDBUS_LIBRARY --# --# The QtDesigner library: QT4_QTDESIGNER_LIBRARY --# --# The QtDesignerComponents library: QT4_QTDESIGNERCOMPONENTS_LIBRARY --# --# The QtGui library: QT4_QTGUI_LIBRARY --# --# The QtMotif library: QT4_QTMOTIF_LIBRARY --# --# The QtNetwork library: QT4_QTNETWORK_LIBRARY --# --# The QtNsPLugin library: QT4_QTNSPLUGIN_LIBRARY --# --# The QtOpenGL library: QT4_QTOPENGL_LIBRARY --# --# The QtSql library: QT4_QTSQL_LIBRARY --# --# The QtXml library: QT4_QTXML_LIBRARY --# --# The QtSvg library: QT4_QTSVG_LIBRARY --# --# The QtScript library: QT4_QTSCRIPT_LIBRARY --# --# The QtTest library: QT4_QTTEST_LIBRARY --# --# The qtmain library for Windows QT4_QTMAIN_LIBRARY --# --# The QtUiTools library: QT4_QTUITOOLS_LIBRARY --# --# also defined, but NOT for general use are --# QT4_MOC_EXECUTABLE Where to find the moc tool. --# QT4_UIC_EXECUTABLE Where to find the uic tool. --# QT_UIC3_EXECUTABLE Where to find the uic3 tool. --# QT_RCC_EXECUTABLE Where to find the rcc tool --# QT_DBUSCPP2XML_EXECUTABLE Where to find the qdbuscpp2xml tool. --# QT_DBUSXML2CPP_EXECUTABLE Where to find the qdbusxml2cpp tool. --# --# QT_DOC_DIR Path to "doc" of Qt4 --# QT_MKSPECS_DIR Path to "mkspecs" of Qt4 --# --# --# These are around for backwards compatibility --# they will be set --# QT_WRAP_CPP Set true if QT4_MOC_EXECUTABLE is found --# QT_WRAP_UI Set true if QT4_UIC_EXECUTABLE is found --# --# These variables do _NOT_ have any effect anymore (compared to FindQt.cmake) --# QT_MT_REQUIRED Qt4 is now always multithreaded --# --# These variables are set to "" Because Qt structure changed --# (They make no sense in Qt4) --# QT4_QT_LIBRARY Qt-Library is now split -- --# Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. --# See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. -- --if (QT4_QMAKE_FOUND) -- # Check already done in this cmake run, nothing more to do -- --else (QT4_QMAKE_FOUND) -- --# check that QT_NO_DEBUG is defined for release configurations --MACRO(QT_CHECK_FLAG_EXISTS FLAG VAR DOC) -- IF(NOT ${VAR} MATCHES "${FLAG}") -- SET(${VAR} "${${VAR}} ${FLAG}" -- CACHE STRING "Flags used by the compiler during ${DOC} builds." FORCE) -- ENDIF(NOT ${VAR} MATCHES "${FLAG}") --ENDMACRO(QT_CHECK_FLAG_EXISTS FLAG VAR) --QT_CHECK_FLAG_EXISTS(-DQT_NO_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO "Release with Debug Info") --QT_CHECK_FLAG_EXISTS(-DQT_NO_DEBUG CMAKE_CXX_FLAGS_RELEASE "release") --QT_CHECK_FLAG_EXISTS(-DQT_NO_DEBUG CMAKE_CXX_FLAGS_MINSIZEREL "release minsize") -- --INCLUDE(CheckSymbolExists) --INCLUDE(MacroAddFileDependencies) --INCLUDE(MacroPushRequiredVars) -- --SET(QT_USE_FILE ${CMAKE_ROOT}/Modules/UseQt4.cmake) -- --SET( QT4_DEFINITIONS "") -- --IF (WIN32) -- SET(QT4_DEFINITIONS -DQT_DLL) --ENDIF(WIN32) -- --SET(QT4_INSTALLED_VERSION_TOO_OLD FALSE) -- --# macro for asking qmake to process pro files --MACRO(QT_QUERY_QMAKE outvar invar) -- FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmpQmake/tmp.pro -- "message(CMAKE_MESSAGE<$$${invar}>)") -- -- # Invoke qmake with the tmp.pro program to get the desired -- # information. Use the same variable for both stdout and stderr -- # to make sure we get the output on all platforms. -- EXECUTE_PROCESS(COMMAND ${QT_QMAKE_EXECUTABLE} -- WORKING_DIRECTORY -- ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmpQmake -- OUTPUT_VARIABLE _qmake_query_output -- RESULT_VARIABLE _qmake_result -- ERROR_VARIABLE _qmake_query_output ) -- -- FILE(REMOVE_RECURSE -- "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmpQmake") -- -- IF(_qmake_result) -- MESSAGE(WARNING " querying qmake for ${invar}. qmake reported:\n${_qmake_query_output}") -- ELSE(_qmake_result) -- STRING(REGEX REPLACE ".*CMAKE_MESSAGE<([^>]*).*" "\\1" ${outvar} "${_qmake_query_output}") -- ENDIF(_qmake_result) -- --ENDMACRO(QT_QUERY_QMAKE) -- --MACRO(VERIFY_QMAKE_QT4) -- EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_VERSION" OUTPUT_VARIABLE QTVERSION) -- -- # check for qt3 qmake and then try and find qmake4 or qmake-qt4 in the path -- IF("${QTVERSION}" MATCHES "Unknown") -- SET(QT_QMAKE_EXECUTABLE NOTFOUND CACHE FILEPATH "" FORCE) -- FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake4 qmake-qt4 PATHS -- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin" -- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin" -- $ENV{QTDIR}/bin -- ) -- IF(QT_QMAKE_EXECUTABLE) -- EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} -- ARGS "-query QT_VERSION" OUTPUT_VARIABLE QTVERSION) -- ENDIF(QT_QMAKE_EXECUTABLE) -- ENDIF("${QTVERSION}" MATCHES "Unknown") -- -- # check that we found the Qt4 qmake, Qt3 qmake output won't match here -- STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" qt_version_tmp "${QTVERSION}") -- IF (qt_version_tmp) -- -- # we need at least version 4.0.0 -- IF (NOT QT4_MIN_VERSION) -- SET(QT4_MIN_VERSION "4.0.0") -- ENDIF (NOT QT4_MIN_VERSION) -- -- #now parse the parts of the user given version string into variables -- STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" req_qt_major_vers "${QT4_MIN_VERSION}") -- IF (NOT req_qt_major_vers) -- MESSAGE( FATAL_ERROR "Invalid Qt version string given: \"${QT4_MIN_VERSION}\", expected e.g. \"4.0.1\"") -- ENDIF (NOT req_qt_major_vers) -- -- # now parse the parts of the user given version string into variables -- STRING(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" req_qt_major_vers "${QT4_MIN_VERSION}") -- STRING(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+" "\\1" req_qt_minor_vers "${QT4_MIN_VERSION}") -- STRING(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" req_qt_patch_vers "${QT4_MIN_VERSION}") -- -- IF (NOT req_qt_major_vers EQUAL 4) -- MESSAGE( FATAL_ERROR "Invalid Qt version string given: \"${QT4_MIN_VERSION}\", major version 4 is required, e.g. \"4.0.1\"") -- ENDIF (NOT req_qt_major_vers EQUAL 4) -- -- # and now the version string given by qmake -- STRING(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" found_qt_major_vers "${QTVERSION}") -- STRING(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+.*" "\\1" found_qt_minor_vers "${QTVERSION}") -- STRING(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" found_qt_patch_vers "${QTVERSION}") -- IF (${found_qt_major_vers} EQUAL 4) -- # compute an overall version number which can be compared at once -- MATH(EXPR req_vers "${req_qt_major_vers}*10000 + ${req_qt_minor_vers}*100 + ${req_qt_patch_vers}") -- MATH(EXPR found_vers "${found_qt_major_vers}*10000 + ${found_qt_minor_vers}*100 + ${found_qt_patch_vers}") -- -- -- IF (found_vers LESS req_vers) -- SET(QT4_QMAKE_FOUND FALSE) -- SET(QT4_INSTALLED_VERSION_TOO_OLD TRUE) -- ELSE (found_vers LESS req_vers) -- SET(QT4_QMAKE_FOUND TRUE) -- ENDIF (found_vers LESS req_vers) -- ENDIF () -- ENDIF (qt_version_tmp) --ENDMACRO() -- --GET_FILENAME_COMPONENT(qt_install_version "[HKEY_CURRENT_USER\\Software\\trolltech\\Versions;DefaultQtVersion]" NAME) --# check for qmake --FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake4 qmake-qt4 PATHS -- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin" -- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin" -- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\${qt_install_version};InstallDir]/bin" -- $ENV{QTDIR}/bin --) -- --IF (QT_QMAKE_EXECUTABLE) -- -- SET(QT4_QMAKE_FOUND FALSE) -- VERIFY_QMAKE_QT4() -- -- IF (NOT QT4_QMAKE_FOUND) -- FIND_PROGRAM(QT_QMAKE_EXECUTABLE2 NAMES qmake4 qmake-qt4 PATHS -- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin" -- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin" -- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\${qt_install_version};InstallDir]/bin" -- $ENV{QTDIR}/bin -- ) -- SET(QT_QMAKE_EXECUTABLE ${QT_QMAKE_EXECUTABLE2}) -- VERIFY_QMAKE_QT4() -- ENDIF() -- --ENDIF (QT_QMAKE_EXECUTABLE) -- --IF (QT4_QMAKE_FOUND) -- -- if (WIN32) -- # get qt install dir -- get_filename_component(_DIR ${QT_QMAKE_EXECUTABLE} PATH ) -- get_filename_component(QT_INSTALL_DIR ${_DIR} PATH ) -- endif (WIN32) -- -- # ask qmake for the library dir -- # Set QT4_LIBRARY_DIR -- IF (NOT QT4_LIBRARY_DIR) -- EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} -- ARGS "-query QT_INSTALL_LIBS" -- OUTPUT_VARIABLE QT4_LIBRARY_DIR_TMP ) -- IF(EXISTS "${QT4_LIBRARY_DIR_TMP}") -- SET(QT4_LIBRARY_DIR ${QT4_LIBRARY_DIR_TMP} CACHE PATH "Qt library dir") -- ELSE(EXISTS "${QT4_LIBRARY_DIR_TMP}") -- MESSAGE("Warning: QT_QMAKE_EXECUTABLE reported QT_INSTALL_LIBS as ${QT4_LIBRARY_DIR_TMP}") -- MESSAGE("Warning: ${QT4_LIBRARY_DIR_TMP} does NOT exist, Qt must NOT be installed correctly.") -- ENDIF(EXISTS "${QT4_LIBRARY_DIR_TMP}") -- ENDIF(NOT QT4_LIBRARY_DIR) -- -- IF (APPLE) -- IF (EXISTS ${QT4_LIBRARY_DIR}/QtCore.framework) -- SET(QT_USE_FRAMEWORKS ON -- CACHE BOOL "Set to ON if Qt build uses frameworks.") -- ELSE (EXISTS ${QT4_LIBRARY_DIR}/QtCore.framework) -- SET(QT_USE_FRAMEWORKS OFF -- CACHE BOOL "Set to ON if Qt build uses frameworks.") -- ENDIF (EXISTS ${QT4_LIBRARY_DIR}/QtCore.framework) -- -- MARK_AS_ADVANCED(QT_USE_FRAMEWORKS) -- ENDIF (APPLE) -- -- # ask qmake for the binary dir -- IF (NOT QT_BINARY_DIR) -- EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} -- ARGS "-query QT_INSTALL_BINS" -- OUTPUT_VARIABLE qt_bins ) -- SET(QT_BINARY_DIR ${qt_bins} CACHE INTERNAL "") -- ENDIF (NOT QT_BINARY_DIR) -- -- # ask qmake for the include dir -- IF (NOT QT_HEADERS_DIR) -- EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} -- ARGS "-query QT_INSTALL_HEADERS" -- OUTPUT_VARIABLE qt_headers ) -- SET(QT_HEADERS_DIR ${qt_headers} CACHE INTERNAL "") -- ENDIF(NOT QT_HEADERS_DIR) -- -- -- # ask qmake for the documentation directory -- IF (NOT QT_DOC_DIR) -- EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} -- ARGS "-query QT_INSTALL_DOCS" -- OUTPUT_VARIABLE qt_doc_dir ) -- SET(QT_DOC_DIR ${qt_doc_dir} CACHE PATH "The location of the Qt docs") -- ENDIF (NOT QT_DOC_DIR) -- -- # ask qmake for the mkspecs directory -- IF (NOT QT_MKSPECS_DIR) -- EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} -- ARGS "-query QMAKE_MKSPECS" -- OUTPUT_VARIABLE qt_mkspecs_dirs ) -- STRING(REPLACE ":" ";" qt_mkspecs_dirs "${qt_mkspecs_dirs}") -- FIND_PATH(QT_MKSPECS_DIR qconfig.pri PATHS ${qt_mkspecs_dirs} -- DOC "The location of the Qt mkspecs containing qconfig.pri" -- NO_DEFAULT_PATH ) -- ENDIF (NOT QT_MKSPECS_DIR) -- -- # ask qmake for the plugins directory -- IF (NOT QT4_PLUGINS_DIR) -- EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE} -- ARGS "-query QT_INSTALL_PLUGINS" -- OUTPUT_VARIABLE qt_plugins_dir ) -- SET(QT4_PLUGINS_DIR ${qt_plugins_dir} CACHE PATH "The location of the Qt plugins") -- ENDIF (NOT QT4_PLUGINS_DIR) -- ######################################## -- # -- # Setting the INCLUDE-Variables -- # -- ######################################## -- -- FIND_PATH(QT4_QTCORE_INCLUDE_DIR QtGlobal -- ${QT_HEADERS_DIR}/QtCore -- ${QT4_LIBRARY_DIR}/QtCore.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_INCLUDE_DIR by removine "/QtCore" in the string ${QT4_QTCORE_INCLUDE_DIR} -- IF( QT4_QTCORE_INCLUDE_DIR AND NOT QT4_INCLUDE_DIR) -- IF (QT_USE_FRAMEWORKS) -- SET(QT4_INCLUDE_DIR ${QT_HEADERS_DIR}) -- ELSE (QT_USE_FRAMEWORKS) -- STRING( REGEX REPLACE "/QtCore$" "" qt4_include_dir ${QT4_QTCORE_INCLUDE_DIR}) -- SET( QT4_INCLUDE_DIR ${qt4_include_dir} CACHE PATH "") -- ENDIF (QT_USE_FRAMEWORKS) -- ENDIF( QT4_QTCORE_INCLUDE_DIR AND NOT QT4_INCLUDE_DIR) -- -- IF( NOT QT4_INCLUDE_DIR) -- IF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED) -- MESSAGE( FATAL_ERROR "Could NOT find QtGlobal header") -- ENDIF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED) -- ENDIF( NOT QT4_INCLUDE_DIR) -- -- ############################################# -- # -- # Find out what window system we're using -- # -- ############################################# -- # Save required includes and required_flags variables -- macro_push_required_vars() -- # Add QT4_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES -- SET(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES};${QT4_INCLUDE_DIR}") -- # On Mac OS X when Qt has framework support, also add the framework path -- IF( QT_USE_FRAMEWORKS ) -- SET(CMAKE_REQUIRED_FLAGS "-F${QT4_LIBRARY_DIR} ") -- ENDIF( QT_USE_FRAMEWORKS ) -- # Check for Window system symbols (note: only one should end up being set) -- CHECK_SYMBOL_EXISTS(Q_WS_X11 "QtCore/qglobal.h" Q_WS_X11) -- CHECK_SYMBOL_EXISTS(Q_WS_WIN "QtCore/qglobal.h" Q_WS_WIN) -- CHECK_SYMBOL_EXISTS(Q_WS_QWS "QtCore/qglobal.h" Q_WS_QWS) -- CHECK_SYMBOL_EXISTS(Q_WS_MAC "QtCore/qglobal.h" Q_WS_MAC) -- -- IF (QT4_QTCOPY_REQUIRED) -- CHECK_SYMBOL_EXISTS(QT_IS_QTCOPY "QtCore/qglobal.h" QT_KDE_QT_COPY) -- IF (NOT QT_IS_QTCOPY) -- MESSAGE(FATAL_ERROR "qt-copy is required, but hasn't been found") -- ENDIF (NOT QT_IS_QTCOPY) -- ENDIF (QT4_QTCOPY_REQUIRED) -- -- # Restore CMAKE_REQUIRED_INCLUDES+CMAKE_REQUIRED_FLAGS variables -- macro_pop_required_vars() -- # -- ############################################# -- -- IF (QT_USE_FRAMEWORKS) -- SET(QT4_DEFINITIONS ${QT4_DEFINITIONS} -F${QT4_LIBRARY_DIR} -L${QT4_LIBRARY_DIR} ) -- ENDIF (QT_USE_FRAMEWORKS) -- -- # Set QT4_QT3SUPPORT_INCLUDE_DIR -- FIND_PATH(QT4_QT3SUPPORT_INCLUDE_DIR Qt3Support -- PATHS -- ${QT4_INCLUDE_DIR}/Qt3Support -- ${QT4_LIBRARY_DIR}/Qt3Support.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QT4_INCLUDE_DIR -- FIND_PATH(QT4_QT4_INCLUDE_DIR qglobal.h -- PATHS -- ${QT4_INCLUDE_DIR}/Qt -- ${QT4_LIBRARY_DIR}/QtCore.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTGUI_INCLUDE_DIR -- FIND_PATH(QT4_QTGUI_INCLUDE_DIR QtGui -- PATHS -- ${QT4_INCLUDE_DIR}/QtGui -- ${QT4_LIBRARY_DIR}/QtGui.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTSVG_INCLUDE_DIR -- FIND_PATH(QT4_QTSVG_INCLUDE_DIR QtSvg -- PATHS -- ${QT4_INCLUDE_DIR}/QtSvg -- ${QT4_LIBRARY_DIR}/QtSvg.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTSCRIPT_INCLUDE_DIR -- FIND_PATH(QT4_QTSCRIPT_INCLUDE_DIR QtScript -- PATHS -- ${QT4_INCLUDE_DIR}/QtScript -- ${QT4_LIBRARY_DIR}/QtScript.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTTEST_INCLUDE_DIR -- FIND_PATH(QT4_QTTEST_INCLUDE_DIR QtTest -- PATHS -- ${QT4_INCLUDE_DIR}/QtTest -- ${QT4_LIBRARY_DIR}/QtTest.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTUITOOLS_INCLUDE_DIR -- FIND_PATH(QT4_QTUITOOLS_INCLUDE_DIR QtUiTools -- PATHS -- ${QT4_INCLUDE_DIR}/QtUiTools -- ${QT4_LIBRARY_DIR}/QtUiTools.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- -- -- # Set QT4_QTMOTIF_INCLUDE_DIR -- IF(Q_WS_X11) -- FIND_PATH(QT4_QTMOTIF_INCLUDE_DIR QtMotif PATHS ${QT4_INCLUDE_DIR}/QtMotif NO_DEFAULT_PATH ) -- ENDIF(Q_WS_X11) -- -- # Set QT4_QTNETWORK_INCLUDE_DIR -- FIND_PATH(QT4_QTNETWORK_INCLUDE_DIR QtNetwork -- PATHS -- ${QT4_INCLUDE_DIR}/QtNetwork -- ${QT4_LIBRARY_DIR}/QtNetwork.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTNSPLUGIN_INCLUDE_DIR -- FIND_PATH(QT4_QTNSPLUGIN_INCLUDE_DIR QtNsPlugin -- PATHS -- ${QT4_INCLUDE_DIR}/QtNsPlugin -- ${QT4_LIBRARY_DIR}/QtNsPlugin.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTOPENGL_INCLUDE_DIR -- FIND_PATH(QT4_QTOPENGL_INCLUDE_DIR QtOpenGL -- PATHS -- ${QT4_INCLUDE_DIR}/QtOpenGL -- ${QT4_LIBRARY_DIR}/QtOpenGL.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTSQL_INCLUDE_DIR -- FIND_PATH(QT4_QTSQL_INCLUDE_DIR QtSql -- PATHS -- ${QT4_INCLUDE_DIR}/QtSql -- ${QT4_LIBRARY_DIR}/QtSql.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTXML_INCLUDE_DIR -- FIND_PATH(QT4_QTXML_INCLUDE_DIR QtXml -- PATHS -- ${QT4_INCLUDE_DIR}/QtXml -- ${QT4_LIBRARY_DIR}/QtXml.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTASSISTANT_INCLUDE_DIR -- FIND_PATH(QT4_QTASSISTANT_INCLUDE_DIR QtAssistant -- PATHS -- ${QT4_INCLUDE_DIR}/QtAssistant -- ${QT_HEADERS_DIR}/QtAssistant -- ${QT4_LIBRARY_DIR}/QtAssistant.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTDESIGNER_INCLUDE_DIR -- FIND_PATH(QT4_QTDESIGNER_INCLUDE_DIR QDesignerComponents -- PATHS -- ${QT4_INCLUDE_DIR}/QtDesigner -- ${QT_HEADERS_DIR}/QtDesigner -- ${QT4_LIBRARY_DIR}/QtDesigner.framework/Headers -- NO_DEFAULT_PATH -- ) -- -- # Set QT4_QTDESIGNERCOMPONENTS_INCLUDE_DIR -- FIND_PATH(QT4_QTDESIGNERCOMPONENTS_INCLUDE_DIR QDesignerComponents -- PATHS -- ${QT4_INCLUDE_DIR}/QtDesigner -- ${QT_HEADERS_DIR}/QtDesigner -- NO_DEFAULT_PATH -- ) -- -- -- # Set QT4_QTDBUS_INCLUDE_DIR -- FIND_PATH(QT4_QTDBUS_INCLUDE_DIR QtDBus -- PATHS -- ${QT4_INCLUDE_DIR}/QtDBus -- ${QT_HEADERS_DIR}/QtDBus -- NO_DEFAULT_PATH -- ) -- -- # Make variables changeble to the advanced user -- MARK_AS_ADVANCED( QT4_LIBRARY_DIR QT4_INCLUDE_DIR QT4_QT4_INCLUDE_DIR QT_DOC_DIR QT_MKSPECS_DIR QT4_PLUGINS_DIR) -- -- # Set QT4_INCLUDES -- SET( QT4_INCLUDES ${QT4_QT4_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default ${QT4_INCLUDE_DIR}) -- -- -- ######################################## -- # -- # Setting the LIBRARY-Variables -- # -- ######################################## -- -- IF (QT_USE_FRAMEWORKS) -- # If FIND_LIBRARY found libraries in Apple frameworks, we would NOT have -- # to jump through these hoops. -- IF(EXISTS ${QT4_LIBRARY_DIR}/QtCore.framework) -- SET(QT4_QTCORE_FOUND TRUE) -- SET(QT4_QTCORE_LIBRARY "-F${QT4_LIBRARY_DIR} -framework QtCore" CACHE STRING "The QtCore library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/QtCore.framework) -- SET(QT4_QTCORE_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/QtCore.framework) -- -- IF(EXISTS ${QT4_LIBRARY_DIR}/QtGui.framework) -- SET(QT4_QTGUI_FOUND TRUE) -- SET(QT4_QTGUI_LIBRARY "-F${QT4_LIBRARY_DIR} -framework QtGui" CACHE STRING "The QtGui library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/QtGui.framework) -- SET(QT4_QTGUI_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/QtGui.framework) -- -- IF(EXISTS ${QT4_LIBRARY_DIR}/Qt3Support.framework) -- SET(QT4_QT3SUPPORT_FOUND TRUE) -- SET(QT4_QT3SUPPORT_LIBRARY "-F${QT4_LIBRARY_DIR} -framework Qt3Support" CACHE STRING "The Qt3Support library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/Qt3Support.framework) -- SET(QT4_QT3SUPPORT_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/Qt3Support.framework) -- -- IF(EXISTS ${QT4_LIBRARY_DIR}/QtNetwork.framework) -- SET(QT4_QTNETWORK_FOUND TRUE) -- SET(QT4_QTNETWORK_LIBRARY "-F${QT4_LIBRARY_DIR} -framework QtNetwork" CACHE STRING "The QtNetwork library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/QtNetwork.framework) -- SET(QT4_QTNETWORK_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/QtNetwork.framework) -- -- IF(EXISTS ${QT4_LIBRARY_DIR}/QtOpenGL.framework) -- SET(QT4_QTOPENGL_FOUND TRUE) -- SET(QT4_QTOPENGL_LIBRARY "-F${QT4_LIBRARY_DIR} -framework QtOpenGL" CACHE STRING "The QtOpenGL library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/QtOpenGL.framework) -- SET(QT4_QTOPENGL_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/QtOpenGL.framework) -- -- IF(EXISTS ${QT4_LIBRARY_DIR}/QtSql.framework) -- SET(QT4_QTSQL_FOUND TRUE) -- SET(QT4_QTSQL_LIBRARY "-F${QT4_LIBRARY_DIR} -framework QtSql" CACHE STRING "The QtSql library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/QtSql.framework) -- SET(QT4_QTSQL_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/QtSql.framework) -- -- IF(EXISTS ${QT4_LIBRARY_DIR}/QtXml.framework) -- SET(QT4_QTXML_FOUND TRUE) -- SET(QT4_QTXML_LIBRARY "-F${QT4_LIBRARY_DIR} -framework QtXml" CACHE STRING "The QtXml library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/QtXml.framework) -- SET(QT4_QTXML_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/QtXml.framework) -- -- IF(EXISTS ${QT4_LIBRARY_DIR}/QtSvg.framework) -- SET(QT4_QTSVG_FOUND TRUE) -- SET(QT4_QTSVG_LIBRARY "-F${QT4_LIBRARY_DIR} -framework QtSvg" CACHE STRING "The QtSvg library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/QtSvg.framework) -- SET(QT4_QTSVG_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/QtSvg.framework) -- -- IF(EXISTS ${QT4_LIBRARY_DIR}/QtDBus.framework) -- SET(QT4_QTDBUS_FOUND TRUE) -- SET(QT4_QTDBUS_LIBRARY "-F${QT4_LIBRARY_DIR} -framework QtDBus" CACHE STRING "The QtDBus library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/QtDBus.framework) -- SET(QT4_QTDBUS_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/QtDBus.framework) -- -- IF(EXISTS ${QT4_LIBRARY_DIR}/QtTest.framework) -- SET(QT4_QTTEST_FOUND TRUE) -- SET(QT4_QTTEST_LIBRARY "-F${QT4_LIBRARY_DIR} -framework QtTest" CACHE STRING "The QtTest library.") -- ELSE(EXISTS ${QT4_LIBRARY_DIR}/QtTest.framework) -- SET(QT4_QTTEST_FOUND FALSE) -- ENDIF(EXISTS ${QT4_LIBRARY_DIR}/QtTest.framework) -- -- # WTF? why don't we have frameworks? :P -- # Set QT4_QTUITOOLS_LIBRARY -- FIND_LIBRARY(QT4_QTUITOOLS_LIBRARY NAMES QtUiTools QtUiTools4 PATHS ${QT4_LIBRARY_DIR} ) -- # Set QT4_QTSCRIPT_LIBRARY -- FIND_LIBRARY(QT4_QTSCRIPT_LIBRARY NAMES QtScript QtScript4 PATHS ${QT4_LIBRARY_DIR} ) -- -- ELSE (QT_USE_FRAMEWORKS) -- -- # Set QT4_QTCORE_LIBRARY by searching for a lib with "QtCore." as part of the filename -- FIND_LIBRARY(QT4_QTCORE_LIBRARY NAMES QtCore QtCore4 QtCored4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH ) -- -- # Set QT4_QT3SUPPORT_LIBRARY -- FIND_LIBRARY(QT4_QT3SUPPORT_LIBRARY NAMES Qt3Support Qt3Support4 Qt3Supportd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTGUI_LIBRARY -- FIND_LIBRARY(QT4_QTGUI_LIBRARY NAMES QtGui QtGui4 QtGuid4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTMOTIF_LIBRARY -- IF(Q_WS_X11) -- FIND_LIBRARY(QT4_QTMOTIF_LIBRARY NAMES QtMotif PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- ENDIF(Q_WS_X11) -- -- # Set QT4_QTNETWORK_LIBRARY -- FIND_LIBRARY(QT4_QTNETWORK_LIBRARY NAMES QtNetwork QtNetwork4 QtNetworkd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTNSPLUGIN_LIBRARY -- FIND_LIBRARY(QT4_QTNSPLUGIN_LIBRARY NAMES QtNsPlugin PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTOPENGL_LIBRARY -- FIND_LIBRARY(QT4_QTOPENGL_LIBRARY NAMES QtOpenGL QtOpenGL4 QtOpenGLd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTSQL_LIBRARY -- FIND_LIBRARY(QT4_QTSQL_LIBRARY NAMES QtSql QtSql4 QtSqld4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTXML_LIBRARY -- FIND_LIBRARY(QT4_QTXML_LIBRARY NAMES QtXml QtXml4 QtXmld4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTSVG_LIBRARY -- FIND_LIBRARY(QT4_QTSVG_LIBRARY NAMES QtSvg QtSvg4 QtSvgd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTSCRIPT_LIBRARY -- FIND_LIBRARY(QT4_QTSCRIPT_LIBRARY NAMES QtScript QtScript4 QtScriptd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTUITOOLS_LIBRARY -- FIND_LIBRARY(QT4_QTUITOOLS_LIBRARY NAMES QtUiTools QtUiTools4 QtUiToolsd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTTEST_LIBRARY -- FIND_LIBRARY(QT4_QTTEST_LIBRARY NAMES QtTest QtTest4 QtTestd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- FIND_LIBRARY(QT4_QTDBUS_LIBRARY NAMES QtDBus QtDBus4 QtDBusd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- IF(MSVC) -- FIND_LIBRARY(QT4_QTCORE_LIBRARY_RELEASE NAMES QtCore4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTCORE_LIBRARY_DEBUG NAMES QtCored4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QT3SUPPORT_LIBRARY_RELEASE NAMES Qt3Support4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QT3SUPPORT_LIBRARY_DEBUG NAMES Qt3Supportd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTGUI_LIBRARY_RELEASE NAMES QtGui4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTGUI_LIBRARY_DEBUG NAMES QtGuid4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTNETWORK_LIBRARY_RELEASE NAMES QtNetwork4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTNETWORK_LIBRARY_DEBUG NAMES QtNetworkd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTOPENGL_LIBRARY_RELEASE NAMES QtOpenGL4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTOPENGL_LIBRARY_DEBUG NAMES QtOpenGLd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTSQL_LIBRARY_RELEASE NAMES QtSql4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTSQL_LIBRARY_DEBUG NAMES QtSqld4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTXML_LIBRARY_RELEASE NAMES QtXml4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTXML_LIBRARY_DEBUG NAMES QtXmld4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTSVG_LIBRARY_RELEASE NAMES QtSvg4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTSVG_LIBRARY_DEBUG NAMES QtSvgd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTSCRIPT_LIBRARY_RELEASE NAMES QtScript4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTSCRIPT_LIBRARY_DEBUG NAMES QtScriptd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTUITOOLS_LIBRARY_RELEASE NAMES QtUiTools QtUiTools4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTUITOOLS_LIBRARY_DEBUG NAMES QtUiToolsd QtUiToolsd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTTEST_LIBRARY_RELEASE NAMES QtTest4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTTEST_LIBRARY_DEBUG NAMES QtTestd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTDBUS_LIBRARY_RELEASE NAMES QtDBus4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTDBUS_LIBRARY_DEBUG NAMES QtDBusd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTASSISTANT_LIBRARY_RELEASE NAMES QtAssistantClient4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTASSISTANT_LIBRARY_DEBUG NAMES QtAssistantClientd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTDESIGNER_LIBRARY_RELEASE NAMES QtDesigner4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTDESIGNER_LIBRARY_DEBUG NAMES QtDesignerd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE NAMES QtDesignerComponents4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG NAMES QtDesignerComponentsd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTMAIN_LIBRARY_RELEASE NAMES qtmain PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- FIND_LIBRARY(QT4_QTMAIN_LIBRARY_DEBUG NAMES qtmaind PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- ENDIF(MSVC) -- ENDIF (QT_USE_FRAMEWORKS) -- -- IF( NOT QT4_QTCORE_LIBRARY ) -- IF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED) -- MESSAGE( FATAL_ERROR "Could NOT find QtCore. Check ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log for more details.") -- ENDIF( NOT Qt4_FIND_QUIETLY AND Qt4_FIND_REQUIRED) -- ENDIF( NOT QT4_QTCORE_LIBRARY ) -- -- # Set QT4_QTASSISTANT_LIBRARY -- FIND_LIBRARY(QT4_QTASSISTANT_LIBRARY NAMES QtAssistantClient QtAssistantClient4 QtAssistant QtAssistant4 QtAssistantd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTDESIGNER_LIBRARY -- FIND_LIBRARY(QT4_QTDESIGNER_LIBRARY NAMES QtDesigner QtDesigner4 QtDesignerd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTDESIGNERCOMPONENTS_LIBRARY -- FIND_LIBRARY(QT4_QTDESIGNERCOMPONENTS_LIBRARY NAMES QtDesignerComponents QtDesignerComponents4 QtDesignerComponentsd4 PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- -- # Set QT4_QTMAIN_LIBRARY -- IF(WIN32) -- FIND_LIBRARY(QT4_QTMAIN_LIBRARY NAMES qtmain qtmaind PATHS ${QT4_LIBRARY_DIR} NO_DEFAULT_PATH) -- ENDIF(WIN32) -- -- ############################################ -- # -- # Check the existence of the libraries. -- # -- ############################################ -- -- MACRO (_QT4_ADJUST_LIB_VARS basename) -- IF (QT4_${basename}_LIBRARY OR QT4_${basename}_LIBRARY_DEBUG) -- -- IF(MSVC) -- # Both set -- IF (QT4_${basename}_LIBRARY_RELEASE AND QT4_${basename}_LIBRARY_DEBUG) -- SET(QT4_${basename}_LIBRARY optimized ${QT4_${basename}_LIBRARY_RELEASE} debug ${QT4_${basename}_LIBRARY_DEBUG}) -- ENDIF (QT4_${basename}_LIBRARY_RELEASE AND QT4_${basename}_LIBRARY_DEBUG) -- -- # Only debug was found -- IF (NOT QT4_${basename}_LIBRARY_RELEASE AND QT4_${basename}_LIBRARY_DEBUG) -- SET(QT4_${basename}_LIBRARY ${QT4_${basename}_LIBRARY_DEBUG}) -- ENDIF (NOT QT4_${basename}_LIBRARY_RELEASE AND QT4_${basename}_LIBRARY_DEBUG) -- -- # Only release was found -- IF (QT4_${basename}_LIBRARY_RELEASE AND NOT QT4_${basename}_LIBRARY_DEBUG) -- SET(QT4_${basename}_LIBRARY ${QT4_${basename}_LIBRARY_RELEASE}) -- ENDIF (QT4_${basename}_LIBRARY_RELEASE AND NOT QT4_${basename}_LIBRARY_DEBUG) -- -- # Hmm, is this used anywhere ? Yes, in UseQt4.cmake. We are currently incompatible :-( -- SET(QT4_${basename}_LIBRARIES optimized ${QT4_${basename}_LIBRARY} debug ${QT4_${basename}_LIBRARY_DEBUG}) -- -- ENDIF(MSVC) -- -- SET(QT4_${basename}_LIBRARY ${QT4_${basename}_LIBRARY} CACHE FILEPATH "The Qt4 ${basename} library") -- -- IF (QT4_${basename}_LIBRARY) -- SET(QT4_${basename}_FOUND 1) -- ENDIF (QT4_${basename}_LIBRARY) -- -- ENDIF (QT4_${basename}_LIBRARY OR QT4_${basename}_LIBRARY_DEBUG) -- -- IF (QT4_${basename}_INCLUDE_DIR) -- #add the include directory to QT4_INCLUDES -- SET(QT4_INCLUDES "${QT4_${basename}_INCLUDE_DIR}" ${QT4_INCLUDES}) -- ENDIF (QT4_${basename}_INCLUDE_DIR) -- -- # Make variables changeble to the advanced user -- MARK_AS_ADVANCED(QT4_${basename}_LIBRARY QT4_${basename}_INCLUDE_DIR) -- ENDMACRO (_QT4_ADJUST_LIB_VARS) -- -- -- # Set QT_xyz_LIBRARY variable and add -- # library include path to QT4_INCLUDES -- _QT4_ADJUST_LIB_VARS(QTCORE) -- _QT4_ADJUST_LIB_VARS(QTGUI) -- _QT4_ADJUST_LIB_VARS(QT3SUPPORT) -- _QT4_ADJUST_LIB_VARS(QTASSISTANT) -- _QT4_ADJUST_LIB_VARS(QTDESIGNER) -- _QT4_ADJUST_LIB_VARS(QTDESIGNERCOMPONENTS) -- _QT4_ADJUST_LIB_VARS(QTNETWORK) -- _QT4_ADJUST_LIB_VARS(QTNSPLUGIN) -- _QT4_ADJUST_LIB_VARS(QTOPENGL) -- _QT4_ADJUST_LIB_VARS(QTSQL) -- _QT4_ADJUST_LIB_VARS(QTXML) -- _QT4_ADJUST_LIB_VARS(QTSVG) -- _QT4_ADJUST_LIB_VARS(QTSCRIPT) -- _QT4_ADJUST_LIB_VARS(QTUITOOLS) -- _QT4_ADJUST_LIB_VARS(QTTEST) -- _QT4_ADJUST_LIB_VARS(QTDBUS) -- -- # platform dependent libraries -- IF(Q_WS_X11) -- _QT4_ADJUST_LIB_VARS(QTMOTIF) -- ENDIF(Q_WS_X11) -- IF(WIN32) -- _QT4_ADJUST_LIB_VARS(QTMAIN) -- ENDIF(WIN32) -- -- -- ####################################### -- # -- # Check the executables of Qt -- # ( moc, uic, rcc ) -- # -- ####################################### -- -- -- # find moc and uic using qmake -- QT_QUERY_QMAKE(QT4_MOC_EXECUTABLE_INTERNAL "QMAKE_MOC") -- QT_QUERY_QMAKE(QT4_UIC_EXECUTABLE_INTERNAL "QMAKE_UIC") -- -- FILE(TO_CMAKE_PATH -- "${QT4_MOC_EXECUTABLE_INTERNAL}" QT4_MOC_EXECUTABLE_INTERNAL) -- FILE(TO_CMAKE_PATH -- "${QT4_UIC_EXECUTABLE_INTERNAL}" QT4_UIC_EXECUTABLE_INTERNAL) -- -- SET(QT4_MOC_EXECUTABLE -- ${QT4_MOC_EXECUTABLE_INTERNAL} CACHE FILEPATH "The moc executable") -- SET(QT4_UIC_EXECUTABLE -- ${QT4_UIC_EXECUTABLE_INTERNAL} CACHE FILEPATH "The uic executable") -- -- FIND_PROGRAM(QT_UIC3_EXECUTABLE -- NAMES uic3 -- PATHS ${QT_BINARY_DIR} -- NO_DEFAULT_PATH -- ) -- -- FIND_PROGRAM(QT_RCC_EXECUTABLE -- NAMES rcc -- PATHS ${QT_BINARY_DIR} -- NO_DEFAULT_PATH -- ) -- -- FIND_PROGRAM(QT_DBUSCPP2XML_EXECUTABLE -- NAMES qdbuscpp2xml -- PATHS ${QT_BINARY_DIR} -- NO_DEFAULT_PATH -- ) -- -- FIND_PROGRAM(QT_DBUSXML2CPP_EXECUTABLE -- NAMES qdbusxml2cpp -- PATHS ${QT_BINARY_DIR} -- NO_DEFAULT_PATH -- ) -- -- IF (QT4_MOC_EXECUTABLE) -- SET(QT_WRAP_CPP "YES") -- ENDIF (QT4_MOC_EXECUTABLE) -- -- IF (QT4_UIC_EXECUTABLE) -- SET(QT_WRAP_UI "YES") -- ENDIF (QT4_UIC_EXECUTABLE) -- -- -- -- MARK_AS_ADVANCED( QT4_UIC_EXECUTABLE QT_UIC3_EXECUTABLE QT4_MOC_EXECUTABLE QT_RCC_EXECUTABLE QT_DBUSXML2CPP_EXECUTABLE QT_DBUSCPP2XML_EXECUTABLE) -- -- ###################################### -- # -- # Macros for building Qt files -- # -- ###################################### -- MACRO (QT4_EXTRACT_OPTIONS _qt4_files _qt4_options) -- SET(${_qt4_files}) -- SET(${_qt4_options}) -- SET(_QT4_DOING_OPTIONS FALSE) -- FOREACH(_currentArg ${ARGN}) -- IF ("${_currentArg}" STREQUAL "OPTIONS") -- SET(_QT4_DOING_OPTIONS TRUE) -- ELSE ("${_currentArg}" STREQUAL "OPTIONS") -- IF(_QT4_DOING_OPTIONS) -- LIST(APPEND ${_qt4_options} "${_currentArg}") -- ELSE(_QT4_DOING_OPTIONS) -- LIST(APPEND ${_qt4_files} "${_currentArg}") -- ENDIF(_QT4_DOING_OPTIONS) -- ENDIF ("${_currentArg}" STREQUAL "OPTIONS") -- ENDFOREACH(_currentArg) -- ENDMACRO (QT4_EXTRACT_OPTIONS) -- -- MACRO (QT4_GET_MOC_INC_DIRS _moc_INC_DIRS) -- SET(${_moc_INC_DIRS}) -- GET_DIRECTORY_PROPERTY(_inc_DIRS INCLUDE_DIRECTORIES) -- -- FOREACH(_current ${_inc_DIRS}) -- SET(${_moc_INC_DIRS} ${${_moc_INC_DIRS}} "-I" ${_current}) -- ENDFOREACH(_current ${_inc_DIRS}) -- -- ENDMACRO(QT4_GET_MOC_INC_DIRS) -- -- -- MACRO (QT4_GENERATE_MOC infile outfile ) -- # get include dirs -- QT4_GET_MOC_INC_DIRS(moc_includes) -- -- GET_FILENAME_COMPONENT(abs_infile ${infile} ABSOLUTE) -- -- IF (MSVC_IDE) -- SET (_moc_parameter_file ${outfile}_parameters) -- SET (_moc_param "${moc_includes} \n-o${outfile} \n${abs_infile}") -- STRING(REGEX REPLACE ";-I;" "\\n-I" _moc_param "${_moc_param}") -- FILE (WRITE ${_moc_parameter_file} "${_moc_param}") -- ADD_CUSTOM_COMMAND(OUTPUT ${outfile} -- COMMAND ${QT4_MOC_EXECUTABLE} -- ARGS @"${_moc_parameter_file}" -- DEPENDS ${abs_infile}) -- ELSE (MSVC_IDE) -- ADD_CUSTOM_COMMAND(OUTPUT ${outfile} -- COMMAND ${QT4_MOC_EXECUTABLE} -- ARGS ${moc_includes} -o ${outfile} ${abs_infile} -- DEPENDS ${abs_infile}) -- ENDIF (MSVC_IDE) -- -- SET_SOURCE_FILES_PROPERTIES(${outfile} PROPERTIES SKIP_AUTOMOC TRUE) # dont run automoc on this file -- -- MACRO_ADD_FILE_DEPENDENCIES(${abs_infile} ${outfile}) -- ENDMACRO (QT4_GENERATE_MOC) -- -- -- # QT4_WRAP_CPP(outfiles inputfile ... ) -- # TODO perhaps add support for -D, -U and other minor options -- -- MACRO (QT4_WRAP_CPP outfiles ) -- # get include dirs -- QT4_GET_MOC_INC_DIRS(moc_includes) -- QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN}) -- -- FOREACH (it ${moc_files}) -- GET_FILENAME_COMPONENT(it ${it} ABSOLUTE) -- GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) -- -- SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/moc_${outfile}.cxx) -- ADD_CUSTOM_COMMAND(OUTPUT ${outfile} -- COMMAND ${QT4_MOC_EXECUTABLE} -- ARGS ${moc_includes} ${moc_options} -o ${outfile} ${it} -- DEPENDS ${it}) -- SET(${outfiles} ${${outfiles}} ${outfile}) -- ENDFOREACH(it) -- -- ENDMACRO (QT4_WRAP_CPP) -- -- -- # QT4_WRAP_UI(outfiles inputfile ... ) -- -- MACRO (QT4_WRAP_UI outfiles ) -- QT4_EXTRACT_OPTIONS(ui_files ui_options ${ARGN}) -- -- FOREACH (it ${ui_files}) -- GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) -- GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) -- SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h) -- ADD_CUSTOM_COMMAND(OUTPUT ${outfile} -- COMMAND ${QT4_UIC_EXECUTABLE} -- ARGS ${ui_options} -o ${outfile} ${infile} -- MAIN_DEPENDENCY ${infile}) -- SET(${outfiles} ${${outfiles}} ${outfile}) -- ENDFOREACH (it) -- -- ENDMACRO (QT4_WRAP_UI) -- -- -- # QT4_ADD_RESOURCES(outfiles inputfile ... ) -- # TODO perhaps consider adding support for compression and root options to rcc -- -- MACRO (QT4_ADD_RESOURCES outfiles ) -- QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN}) -- -- FOREACH (it ${rcc_files}) -- GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE) -- GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) -- GET_FILENAME_COMPONENT(rc_path ${infile} PATH) -- SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx) -- # parse file for dependencies -- # all files are absolute paths or relative to the location of the qrc file -- FILE(READ "${infile}" _RC_FILE_CONTENTS) -- STRING(REGEX MATCHALL "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}") -- SET(_RC_DEPENDS) -- FOREACH(_RC_FILE ${_RC_FILES}) -- STRING(REGEX REPLACE "^<file[^>]*>" "" _RC_FILE "${_RC_FILE}") -- STRING(REGEX MATCH "^/|([A-Za-z]:/)" _ABS_PATH_INDICATOR "${_RC_FILE}") -- IF(NOT _ABS_PATH_INDICATOR) -- SET(_RC_FILE "${rc_path}/${_RC_FILE}") -- ENDIF(NOT _ABS_PATH_INDICATOR) -- SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}") -- ENDFOREACH(_RC_FILE) -- ADD_CUSTOM_COMMAND(OUTPUT ${outfile} -- COMMAND ${QT_RCC_EXECUTABLE} -- ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile} -- MAIN_DEPENDENCY ${infile} -- DEPENDS ${_RC_DEPENDS}) -- SET(${outfiles} ${${outfiles}} ${outfile}) -- ENDFOREACH (it) -- -- ENDMACRO (QT4_ADD_RESOURCES) -- -- MACRO(QT4_ADD_DBUS_INTERFACE _sources _interface _basename) -- GET_FILENAME_COMPONENT(_infile ${_interface} ABSOLUTE) -- SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h) -- SET(_impl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp) -- SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc) -- -- GET_SOURCE_FILE_PROPERTY(_nonamespace ${_interface} NO_NAMESPACE) -- IF ( _nonamespace ) -- SET(_params -N -m) -- ELSE ( _nonamespace ) -- SET(_params -m) -- ENDIF ( _nonamespace ) -- -- GET_SOURCE_FILE_PROPERTY(_include ${_interface} INCLUDE) -- IF ( _include ) -- SET(_params ${_params} -i ${_include}) -- ENDIF ( _include ) -- -- ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} -- COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} ${_params} -p ${_basename} ${_infile} -- DEPENDS ${_infile}) -- -- SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE) -- -- QT4_GENERATE_MOC(${_header} ${_moc}) -- -- SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc}) -- MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc}) -- -- ENDMACRO(QT4_ADD_DBUS_INTERFACE) -- -- -- MACRO(QT4_ADD_DBUS_INTERFACES _sources) -- FOREACH (_current_FILE ${ARGN}) -- GET_FILENAME_COMPONENT(_infile ${_current_FILE} ABSOLUTE) -- # get the part before the ".xml" suffix -- STRING(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2" _basename ${_current_FILE}) -- STRING(TOLOWER ${_basename} _basename) -- QT4_ADD_DBUS_INTERFACE(${_sources} ${_infile} ${_basename}interface) -- ENDFOREACH (_current_FILE) -- ENDMACRO(QT4_ADD_DBUS_INTERFACES) -- -- -- MACRO(QT4_GENERATE_DBUS_INTERFACE _header) # _customName OPTIONS -some -options ) -- QT4_EXTRACT_OPTIONS(_customName _qt4_dbus_options ${ARGN}) -- -- GET_FILENAME_COMPONENT(_in_file ${_header} ABSOLUTE) -- GET_FILENAME_COMPONENT(_basename ${_header} NAME_WE) -- -- IF (_customName) -- SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_customName}) -- ELSE (_customName) -- SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.xml) -- ENDIF (_customName) -- -- ADD_CUSTOM_COMMAND(OUTPUT ${_target} -- COMMAND ${QT_DBUSCPP2XML_EXECUTABLE} ${_qt4_dbus_options} ${_in_file} > ${_target} -- DEPENDS ${_in_file} -- ) -- ENDMACRO(QT4_GENERATE_DBUS_INTERFACE) -- -- -- MACRO(QT4_ADD_DBUS_ADAPTOR _sources _xml_file _include _parentClass) # _optionalBasename _optionalClassName) -- GET_FILENAME_COMPONENT(_infile ${_xml_file} ABSOLUTE) -- -- SET(_optionalBasename "${ARGV4}") -- IF (_optionalBasename) -- SET(_basename ${_optionalBasename} ) -- ELSE (_optionalBasename) -- STRING(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2adaptor" _basename ${_infile}) -- STRING(TOLOWER ${_basename} _basename) -- ENDIF (_optionalBasename) -- -- SET(_optionalClassName "${ARGV5}") -- SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h) -- SET(_impl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp) -- SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc) -- -- IF(_optionalClassName) -- ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} -- COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -c ${_optionalClassName} -i ${_include} -l ${_parentClass} ${_infile} -- DEPENDS ${_infile} -- ) -- ELSE(_optionalClassName) -- ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} -- COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -i ${_include} -l ${_parentClass} ${_infile} -- DEPENDS ${_infile} -- ) -- ENDIF(_optionalClassName) -- -- QT4_GENERATE_MOC(${_header} ${_moc}) -- SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE) -- MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc}) -- -- SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc}) -- ENDMACRO(QT4_ADD_DBUS_ADAPTOR) -- -- MACRO(QT4_AUTOMOC) -- QT4_GET_MOC_INC_DIRS(_moc_INCS) -- -- SET(_matching_FILES ) -- FOREACH (_current_FILE ${ARGN}) -- -- GET_FILENAME_COMPONENT(_abs_FILE ${_current_FILE} ABSOLUTE) -- # if "SKIP_AUTOMOC" is set to true, we will not handle this file here. -- # here. this is required to make bouic work correctly: -- # we need to add generated .cpp files to the sources (to compile them), -- # but we cannot let automoc handle them, as the .cpp files don't exist yet when -- # cmake is run for the very first time on them -> however the .cpp files might -- # exist at a later run. at that time we need to skip them, so that we don't add two -- # different rules for the same moc file -- GET_SOURCE_FILE_PROPERTY(_skip ${_abs_FILE} SKIP_AUTOMOC) -- -- IF ( NOT _skip AND EXISTS ${_abs_FILE} ) -- -- FILE(READ ${_abs_FILE} _contents) -- -- GET_FILENAME_COMPONENT(_abs_PATH ${_abs_FILE} PATH) -- -- STRING(REGEX MATCHALL "#include +[^ ]+\\.moc[\">]" _match "${_contents}") -- IF(_match) -- FOREACH (_current_MOC_INC ${_match}) -- STRING(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}") -- -- GET_filename_component(_basename ${_current_MOC} NAME_WE) -- # SET(_header ${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.h) -- IF (EXISTS ${_abs_PATH}/${_basename}.h) -- SET(_header ${_abs_PATH}/${_basename}.h) -- ELSE (EXISTS ${_abs_PATH}/${_basename}.h) -- SET(_header ${_abs_FILE}) -- ENDIF (EXISTS ${_abs_PATH}/${_basename}.h) -- SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC}) -- ADD_CUSTOM_COMMAND(OUTPUT ${_moc} -- COMMAND ${QT4_MOC_EXECUTABLE} -- ARGS ${_moc_INCS} ${_header} -o ${_moc} -- DEPENDS ${_header} -- ) -- -- MACRO_ADD_FILE_DEPENDENCIES(${_abs_FILE} ${_moc}) -- ENDFOREACH (_current_MOC_INC) -- ENDIF(_match) -- ENDIF ( NOT _skip AND EXISTS ${_abs_FILE} ) -- ENDFOREACH (_current_FILE) -- ENDMACRO(QT4_AUTOMOC) -- -- -- -- ###################################### -- # -- # decide if Qt got found -- # -- ###################################### -- -- # if the includes,libraries,moc,uic and rcc are found then we have it -- IF( QT4_LIBRARY_DIR AND QT4_INCLUDE_DIR AND QT4_MOC_EXECUTABLE AND QT4_UIC_EXECUTABLE AND QT_RCC_EXECUTABLE) -- SET( QT4_FOUND "YES" ) -- IF( NOT Qt4_FIND_QUIETLY) -- MESSAGE(STATUS "Found Qt-Version ${QTVERSION} (using ${QT_QMAKE_EXECUTABLE})") -- ENDIF( NOT Qt4_FIND_QUIETLY) -- ELSE( QT4_LIBRARY_DIR AND QT4_INCLUDE_DIR AND QT4_MOC_EXECUTABLE AND QT4_UIC_EXECUTABLE AND QT_RCC_EXECUTABLE) -- SET( QT4_FOUND "NO") -- SET(QT_QMAKE_EXECUTABLE "${QT_QMAKE_EXECUTABLE}-NOTFOUND" CACHE FILEPATH "Invalid qmake found" FORCE) -- IF( Qt4_FIND_REQUIRED) -- IF ( NOT QT4_LIBRARY_DIR ) -- MESSAGE(STATUS "Qt libraries NOT found!") -- ENDIF(NOT QT4_LIBRARY_DIR ) -- IF ( NOT QT4_INCLUDE_DIR ) -- MESSAGE(STATUS "Qt includes NOT found!") -- ENDIF( NOT QT4_INCLUDE_DIR ) -- IF ( NOT QT4_MOC_EXECUTABLE ) -- MESSAGE(STATUS "Qt's moc NOT found!") -- ENDIF( NOT QT4_MOC_EXECUTABLE ) -- IF ( NOT QT4_UIC_EXECUTABLE ) -- MESSAGE(STATUS "Qt's uic NOT found!") -- ENDIF( NOT QT4_UIC_EXECUTABLE ) -- IF ( NOT QT_RCC_EXECUTABLE ) -- MESSAGE(STATUS "Qt's rcc NOT found!") -- ENDIF( NOT QT_RCC_EXECUTABLE ) -- MESSAGE( FATAL_ERROR "Qt libraries, includes, moc, uic or/and rcc NOT found!") -- ENDIF( Qt4_FIND_REQUIRED) -- ENDIF( QT4_LIBRARY_DIR AND QT4_INCLUDE_DIR AND QT4_MOC_EXECUTABLE AND QT4_UIC_EXECUTABLE AND QT_RCC_EXECUTABLE) -- SET(QT_FOUND ${QT4_FOUND}) -- -- -- ####################################### -- # -- # System dependent settings -- # -- ####################################### -- # for unix add X11 stuff -- IF(UNIX) -- # on OS X X11 may not be required -- IF (Q_WS_X11) -- FIND_PACKAGE(X11 REQUIRED) -- ENDIF (Q_WS_X11) -- FIND_PACKAGE(Threads) -- SET(QT4_QTCORE_LIBRARY ${QT4_QTCORE_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) -- ENDIF(UNIX) -- -- -- ####################################### -- # -- # compatibility settings -- # -- ####################################### -- # Backwards compatibility for CMake1.4 and 1.2 -- SET (QT_MOC_EXE ${QT4_MOC_EXECUTABLE} ) -- SET (QT_UIC_EXE ${QT4_UIC_EXECUTABLE} ) -- -- SET( QT4_QT_LIBRARY "") -- --ELSE(QT4_QMAKE_FOUND) -- -- SET(QT_QMAKE_EXECUTABLE "${QT_QMAKE_EXECUTABLE}-NOTFOUND" CACHE FILEPATH "Invalid qmake found" FORCE) -- IF(Qt4_FIND_REQUIRED) -- IF(QT4_INSTALLED_VERSION_TOO_OLD) -- MESSAGE(FATAL_ERROR "The installed Qt version ${QTVERSION} is too old, at least version ${QT4_MIN_VERSION} is required") -- ELSE(QT4_INSTALLED_VERSION_TOO_OLD) -- MESSAGE( FATAL_ERROR "Qt qmake not found!") -- ENDIF(QT4_INSTALLED_VERSION_TOO_OLD) -- ELSE(Qt4_FIND_REQUIRED) -- IF(QT4_INSTALLED_VERSION_TOO_OLD AND NOT Qt4_FIND_QUIETLY) -- MESSAGE(STATUS "The installed Qt version ${QTVERSION} is too old, at least version ${QT4_MIN_VERSION} is required") -- ENDIF(QT4_INSTALLED_VERSION_TOO_OLD AND NOT Qt4_FIND_QUIETLY) -- ENDIF(Qt4_FIND_REQUIRED) -- --ENDIF (QT4_QMAKE_FOUND) --ENDIF (QT4_QMAKE_FOUND) -- -diff --git a/poppler-qt4.pc.cmake b/poppler-qt4.pc.cmake -deleted file mode 100644 -index 46a37f6d..00000000 ---- a/poppler-qt4.pc.cmake -+++ /dev/null -@@ -1,12 +0,0 @@ --prefix=@CMAKE_INSTALL_PREFIX@ --libdir=@CMAKE_INSTALL_FULL_LIBDIR@ --includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ -- --Name: poppler-qt4 --Description: Qt4 bindings for poppler --Version: @POPPLER_VERSION@ --Requires: @PC_REQUIRES@ --@PC_REQUIRES_PRIVATE@ -- --Libs: -L${libdir} -lpoppler-qt4 --Cflags: -I${includedir}/poppler/qt4 -diff --git a/qt4/.gitignore b/qt4/.gitignore -deleted file mode 100644 -index 5540f35d..00000000 ---- a/qt4/.gitignore -+++ /dev/null -@@ -1,4 +0,0 @@ --Makefile --Makefile.in --*~ -- -diff --git a/qt4/CMakeLists.txt b/qt4/CMakeLists.txt -deleted file mode 100644 -index 4d345681..00000000 ---- a/qt4/CMakeLists.txt -+++ /dev/null -@@ -1,6 +0,0 @@ --# Qt4 headers are not override clean so disable suggest-override if it's there --string(REPLACE "-Wsuggest-override" " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) -- --add_subdirectory(src) --add_subdirectory(tests) --add_subdirectory(demos) -diff --git a/qt4/demos/.gitignore b/qt4/demos/.gitignore -deleted file mode 100644 -index 9639e685..00000000 ---- a/qt4/demos/.gitignore -+++ /dev/null -@@ -1,4 +0,0 @@ --.deps --.libs --*moc --poppler_qt4viewer -diff --git a/qt4/demos/CMakeLists.txt b/qt4/demos/CMakeLists.txt -deleted file mode 100644 -index 76accf81..00000000 ---- a/qt4/demos/CMakeLists.txt -+++ /dev/null -@@ -1,28 +0,0 @@ --add_definitions(${QT4_DEFINITIONS}) -- --include_directories( -- ${CMAKE_CURRENT_SOURCE_DIR} -- ${CMAKE_CURRENT_SOURCE_DIR}/../src -- ${CMAKE_CURRENT_BINARY_DIR} -- ${QT4_INCLUDE_DIR} --) -- --set(poppler_qt4viewer_SRCS -- abstractinfodock.cpp -- documentobserver.cpp -- embeddedfiles.cpp -- fonts.cpp -- info.cpp -- main_viewer.cpp -- metadata.cpp -- navigationtoolbar.cpp -- optcontent.cpp -- pageview.cpp -- permissions.cpp -- thumbnails.cpp -- toc.cpp -- viewer.cpp --) --qt4_automoc(${poppler_qt4viewer_SRCS}) --poppler_add_test(poppler_qt4viewer BUILD_QT4_TESTS ${poppler_qt4viewer_SRCS}) --target_link_libraries(poppler_qt4viewer poppler-qt4) -diff --git a/qt4/demos/abstractinfodock.cpp b/qt4/demos/abstractinfodock.cpp -deleted file mode 100644 -index 7b306d82..00000000 ---- a/qt4/demos/abstractinfodock.cpp -+++ /dev/null -@@ -1,57 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "fonts.h" -- --AbstractInfoDock::AbstractInfoDock(QWidget *parent) -- : QDockWidget(parent), m_filled(false) --{ -- connect(this, SIGNAL(visibilityChanged(bool)), SLOT(slotVisibilityChanged(bool))); --} -- --AbstractInfoDock::~AbstractInfoDock() --{ --} -- --void AbstractInfoDock::documentLoaded() --{ -- if (!isHidden()) { -- fillInfo(); -- m_filled = true; -- } --} -- --void AbstractInfoDock::documentClosed() --{ -- m_filled = false; --} -- --void AbstractInfoDock::pageChanged(int page) --{ -- Q_UNUSED(page) --} -- --void AbstractInfoDock::slotVisibilityChanged(bool visible) --{ -- if (visible && document() && !m_filled) { -- fillInfo(); -- m_filled = true; -- } --} -- --#include "abstractinfodock.moc" -diff --git a/qt4/demos/abstractinfodock.h b/qt4/demos/abstractinfodock.h -deleted file mode 100644 -index 2593325a..00000000 ---- a/qt4/demos/abstractinfodock.h -+++ /dev/null -@@ -1,48 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef ABSTRACTINFODOCK_H --#define ABSTRACTINFODOCK_H -- --#include <QtGui/QDockWidget> -- --#include "documentobserver.h" -- --class AbstractInfoDock : public QDockWidget, public DocumentObserver --{ -- Q_OBJECT -- --public: -- AbstractInfoDock(QWidget *parent = 0); -- ~AbstractInfoDock(); -- -- /*virtual*/ void documentLoaded(); -- /*virtual*/ void documentClosed(); -- /*virtual*/ void pageChanged(int page); -- --protected: -- virtual void fillInfo() = 0; -- --private Q_SLOTS: -- void slotVisibilityChanged(bool visible); -- --private: -- bool m_filled; --}; -- --#endif -diff --git a/qt4/demos/documentobserver.cpp b/qt4/demos/documentobserver.cpp -deleted file mode 100644 -index e5c283db..00000000 ---- a/qt4/demos/documentobserver.cpp -+++ /dev/null -@@ -1,50 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "documentobserver.h" -- --#include "viewer.h" -- --DocumentObserver::DocumentObserver() -- : m_viewer(0) --{ --} -- --DocumentObserver::~DocumentObserver() --{ --} -- --Poppler::Document* DocumentObserver::document() const --{ -- return m_viewer->m_doc; --} -- --void DocumentObserver::setPage(int page) --{ -- m_viewer->setPage(page); --} -- --int DocumentObserver::page() const --{ -- return m_viewer->page(); --} -- --void DocumentObserver::reloadPage() --{ -- m_viewer->setPage(m_viewer->page()); --} -diff --git a/qt4/demos/documentobserver.h b/qt4/demos/documentobserver.h -deleted file mode 100644 -index 38fe2043..00000000 ---- a/qt4/demos/documentobserver.h -+++ /dev/null -@@ -1,50 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef DOCUMENTOBSERVER_H --#define DOCUMENTOBSERVER_H -- --class PdfViewer; --namespace Poppler { --class Document; --} -- --class DocumentObserver --{ --friend class PdfViewer; -- --public: -- virtual ~DocumentObserver(); -- -- virtual void documentLoaded() = 0; -- virtual void documentClosed() = 0; -- virtual void pageChanged(int page) = 0; -- --protected: -- DocumentObserver(); -- -- Poppler::Document* document() const; -- void setPage(int page); -- int page() const; -- void reloadPage(); -- --private: -- PdfViewer *m_viewer; --}; -- --#endif -diff --git a/qt4/demos/embeddedfiles.cpp b/qt4/demos/embeddedfiles.cpp -deleted file mode 100644 -index 22f9da7a..00000000 ---- a/qt4/demos/embeddedfiles.cpp -+++ /dev/null -@@ -1,82 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "embeddedfiles.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QTableWidget> -- --EmbeddedFilesDock::EmbeddedFilesDock(QWidget *parent) -- : AbstractInfoDock(parent) --{ -- m_table = new QTableWidget(this); -- setWidget(m_table); -- setWindowTitle(tr("Embedded files")); -- m_table->setColumnCount(6); -- m_table->setHorizontalHeaderLabels( -- QStringList() << tr("Name") << tr("Description") << tr("Size") << tr("Creation date") -- << tr("Modification date") << tr("Checksum")); -- m_table->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); --} -- --EmbeddedFilesDock::~EmbeddedFilesDock() --{ --} -- --void EmbeddedFilesDock::fillInfo() --{ -- m_table->setHorizontalHeaderLabels( -- QStringList() << tr("Name") << tr("Description") << tr("Size") << tr("Creation date") -- << tr("Modification date") << tr("Checksum")); -- if (!document()->hasEmbeddedFiles()) { -- m_table->setItem(0, 0, new QTableWidgetItem(tr("No files"))); -- return; -- } -- -- const QList<Poppler::EmbeddedFile*> files = document()->embeddedFiles(); -- m_table->setRowCount(files.count()); -- int i = 0; -- Q_FOREACH(Poppler::EmbeddedFile *file, files) { -- m_table->setItem(i, 0, new QTableWidgetItem(file->name())); -- m_table->setItem(i, 1, new QTableWidgetItem(file->description())); -- m_table->setItem(i, 2, new QTableWidgetItem(QString::number(file->size()))); -- m_table->setItem(i, 3, new QTableWidgetItem(file->createDate().toString(Qt::SystemLocaleDate))); -- m_table->setItem(i, 4, new QTableWidgetItem(file->modDate().toString(Qt::SystemLocaleDate))); -- const QByteArray checksum = file->checksum(); -- const QString checksumString = !checksum.isEmpty() ? QString::fromAscii(checksum.toHex()) : QString::fromLatin1("n/a"); -- m_table->setItem(i, 5, new QTableWidgetItem(checksumString)); -- ++i; -- } --} -- --void EmbeddedFilesDock::documentLoaded() --{ -- if ( document()->pageMode() == Poppler::Document::UseAttach ) { -- show(); -- } --} -- --void EmbeddedFilesDock::documentClosed() --{ -- m_table->clear(); -- m_table->setRowCount(0); -- AbstractInfoDock::documentClosed(); --} -- --#include "embeddedfiles.moc" -diff --git a/qt4/demos/embeddedfiles.h b/qt4/demos/embeddedfiles.h -deleted file mode 100644 -index 7cd60397..00000000 ---- a/qt4/demos/embeddedfiles.h -+++ /dev/null -@@ -1,44 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef ATTACHMENTS_H --#define ATTACHMENTS_H -- --#include "abstractinfodock.h" -- --class QTableWidget; -- --class EmbeddedFilesDock : public AbstractInfoDock --{ -- Q_OBJECT -- --public: -- EmbeddedFilesDock(QWidget *parent = 0); -- ~EmbeddedFilesDock(); -- -- virtual void documentLoaded(); -- /*virtual*/ void documentClosed(); -- --protected: -- /*virtual*/ void fillInfo(); -- --private: -- QTableWidget *m_table; --}; -- --#endif -diff --git a/qt4/demos/fonts.cpp b/qt4/demos/fonts.cpp -deleted file mode 100644 -index bd342bd2..00000000 ---- a/qt4/demos/fonts.cpp -+++ /dev/null -@@ -1,72 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "fonts.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QTableWidget> -- --static QString yesNoStatement(bool value) --{ -- return value ? QString::fromLatin1("yes") : QString::fromLatin1("no"); --} -- --FontsDock::FontsDock(QWidget *parent) -- : AbstractInfoDock(parent) --{ -- m_table = new QTableWidget(this); -- setWidget(m_table); -- setWindowTitle(tr("Fonts")); -- m_table->setColumnCount(5); -- m_table->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("Type") << tr("Embedded") << tr("Subset") << tr("File")); -- m_table->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); --} -- --FontsDock::~FontsDock() --{ --} -- --void FontsDock::fillInfo() --{ -- const QList<Poppler::FontInfo> fonts = document()->fonts(); -- m_table->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("Type") << tr("Embedded") << tr("Subset") << tr("File")); -- m_table->setRowCount(fonts.count()); -- int i = 0; -- Q_FOREACH(const Poppler::FontInfo &font, fonts) { -- if (font.name().isNull()) { -- m_table->setItem(i, 0, new QTableWidgetItem(QString::fromLatin1("[none]"))); -- } else { -- m_table->setItem(i, 0, new QTableWidgetItem(font.name())); -- } -- m_table->setItem(i, 1, new QTableWidgetItem(font.typeName())); -- m_table->setItem(i, 2, new QTableWidgetItem(yesNoStatement(font.isEmbedded()))); -- m_table->setItem(i, 3, new QTableWidgetItem(yesNoStatement(font.isSubset()))); -- m_table->setItem(i, 4, new QTableWidgetItem(font.file())); -- ++i; -- } --} -- --void FontsDock::documentClosed() --{ -- m_table->clear(); -- m_table->setRowCount(0); -- AbstractInfoDock::documentClosed(); --} -- --#include "fonts.moc" -diff --git a/qt4/demos/fonts.h b/qt4/demos/fonts.h -deleted file mode 100644 -index 81afa579..00000000 ---- a/qt4/demos/fonts.h -+++ /dev/null -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef FONTS_H --#define FONTS_H -- --#include "abstractinfodock.h" -- --class QTableWidget; -- --class FontsDock : public AbstractInfoDock --{ -- Q_OBJECT -- --public: -- FontsDock(QWidget *parent = 0); -- ~FontsDock(); -- -- /*virtual*/ void documentClosed(); -- --protected: -- /*virtual*/ void fillInfo(); -- --private: -- QTableWidget *m_table; --}; -- --#endif -diff --git a/qt4/demos/info.cpp b/qt4/demos/info.cpp -deleted file mode 100644 -index 6491e0e4..00000000 ---- a/qt4/demos/info.cpp -+++ /dev/null -@@ -1,72 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "info.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QTableWidget> -- --InfoDock::InfoDock(QWidget *parent) -- : AbstractInfoDock(parent) --{ -- m_table = new QTableWidget(this); -- setWidget(m_table); -- setWindowTitle(tr("Information")); -- m_table->setColumnCount(2); -- m_table->setHorizontalHeaderLabels(QStringList() << tr("Key") << tr("Value")); -- m_table->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); --} -- --InfoDock::~InfoDock() --{ --} -- --void InfoDock::fillInfo() --{ -- QStringList keys = document()->infoKeys(); -- m_table->setHorizontalHeaderLabels(QStringList() << tr("Key") << tr("Value")); -- m_table->setRowCount(keys.count()); -- QStringList dateKeys; -- dateKeys << QString::fromLatin1("CreationDate"); -- dateKeys << QString::fromLatin1("ModDate"); -- int i = 0; -- Q_FOREACH(const QString &date, dateKeys) { -- const int id = keys.indexOf(date); -- if (id != -1) { -- m_table->setItem(i, 0, new QTableWidgetItem(date)); -- m_table->setItem(i, 1, new QTableWidgetItem(document()->date(date).toString(Qt::SystemLocaleDate))); -- ++i; -- keys.removeAt(id); -- } -- } -- Q_FOREACH(const QString &key, keys) { -- m_table->setItem(i, 0, new QTableWidgetItem(key)); -- m_table->setItem(i, 1, new QTableWidgetItem(document()->info(key))); -- ++i; -- } --} -- --void InfoDock::documentClosed() --{ -- m_table->clear(); -- m_table->setRowCount(0); -- AbstractInfoDock::documentClosed(); --} -- --#include "info.moc" -diff --git a/qt4/demos/info.h b/qt4/demos/info.h -deleted file mode 100644 -index d294b430..00000000 ---- a/qt4/demos/info.h -+++ /dev/null -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef INFO_H --#define INFO_H -- --#include "abstractinfodock.h" -- --class QTableWidget; -- --class InfoDock : public AbstractInfoDock --{ -- Q_OBJECT -- --public: -- InfoDock(QWidget *parent = 0); -- ~InfoDock(); -- -- /*virtual*/ void documentClosed(); -- --protected: -- /*virtual*/ void fillInfo(); -- --private: -- QTableWidget *m_table; --}; -- --#endif -diff --git a/qt4/demos/main_viewer.cpp b/qt4/demos/main_viewer.cpp -deleted file mode 100644 -index 3f7080f2..00000000 ---- a/qt4/demos/main_viewer.cpp -+++ /dev/null -@@ -1,33 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "viewer.h" -- --#include <QtGui/QApplication> -- --int main(int argc, char *argv[]) --{ -- QApplication app(argc, argv); -- const QStringList args = QCoreApplication::arguments(); -- PdfViewer *viewer = new PdfViewer(); -- viewer->show(); -- if (args.count() > 1) { -- viewer->loadDocument(args.at(1)); -- } -- return app.exec(); --} -diff --git a/qt4/demos/metadata.cpp b/qt4/demos/metadata.cpp -deleted file mode 100644 -index e5c7111d..00000000 ---- a/qt4/demos/metadata.cpp -+++ /dev/null -@@ -1,50 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "metadata.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QTextEdit> -- --MetadataDock::MetadataDock(QWidget *parent) -- : AbstractInfoDock(parent) --{ -- m_edit = new QTextEdit(this); -- setWidget(m_edit); -- setWindowTitle(tr("Metadata")); -- m_edit->setAcceptRichText(false); -- m_edit->setReadOnly(true); --} -- --MetadataDock::~MetadataDock() --{ --} -- --void MetadataDock::fillInfo() --{ -- m_edit->setPlainText(document()->metadata()); --} -- --void MetadataDock::documentClosed() --{ -- m_edit->clear(); -- AbstractInfoDock::documentClosed(); --} -- --#include "metadata.moc" -diff --git a/qt4/demos/metadata.h b/qt4/demos/metadata.h -deleted file mode 100644 -index 6f1507a6..00000000 ---- a/qt4/demos/metadata.h -+++ /dev/null -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef METADATA_H --#define METADATA_H -- --#include "abstractinfodock.h" -- --class QTextEdit; -- --class MetadataDock : public AbstractInfoDock --{ -- Q_OBJECT -- --public: -- MetadataDock(QWidget *parent = 0); -- ~MetadataDock(); -- -- /*virtual*/ void documentClosed(); -- --protected: -- /*virtual*/ void fillInfo(); -- --private: -- QTextEdit *m_edit; --}; -- --#endif -diff --git a/qt4/demos/navigationtoolbar.cpp b/qt4/demos/navigationtoolbar.cpp -deleted file mode 100644 -index 79dd418a..00000000 ---- a/qt4/demos/navigationtoolbar.cpp -+++ /dev/null -@@ -1,144 +0,0 @@ --/* -- * Copyright (C) 2008-2009, Pino Toscano <pino@kde.org> -- * Copyright (C) 2013, Fabio D'Urso <fabiodurso@hotmail.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "navigationtoolbar.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QAction> --#include <QtGui/QComboBox> -- --NavigationToolBar::NavigationToolBar(QWidget *parent) -- : QToolBar(parent) --{ -- m_firstAct = addAction(tr("First"), this, SLOT(slotGoFirst())); -- m_prevAct = addAction(tr("Previous"), this, SLOT(slotGoPrev())); -- m_pageCombo = new QComboBox(this); -- connect(m_pageCombo, SIGNAL(activated(int)), this, SLOT(slotComboActivated(int))); -- addWidget(m_pageCombo); -- m_nextAct = addAction(tr("Next"), this, SLOT(slotGoNext())); -- m_lastAct = addAction(tr("Last"), this, SLOT(slotGoLast())); -- -- addSeparator(); -- -- m_zoomCombo = new QComboBox(this); -- m_zoomCombo->setEditable(true); -- m_zoomCombo->addItem(tr("10%")); -- m_zoomCombo->addItem(tr("25%")); -- m_zoomCombo->addItem(tr("33%")); -- m_zoomCombo->addItem(tr("50%")); -- m_zoomCombo->addItem(tr("66%")); -- m_zoomCombo->addItem(tr("75%")); -- m_zoomCombo->addItem(tr("100%")); -- m_zoomCombo->addItem(tr("125%")); -- m_zoomCombo->addItem(tr("150%")); -- m_zoomCombo->addItem(tr("200%")); -- m_zoomCombo->addItem(tr("300%")); -- m_zoomCombo->addItem(tr("400%")); -- m_zoomCombo->setCurrentIndex(6); // "100%" -- connect(m_zoomCombo, SIGNAL(currentIndexChanged(QString)), this, SLOT(slotZoomComboChanged(QString))); -- addWidget(m_zoomCombo); -- -- m_rotationCombo = new QComboBox(this); -- // NOTE: \302\260 = degree symbol -- m_rotationCombo->addItem(trUtf8("0\302\260")); -- m_rotationCombo->addItem(trUtf8("90\302\260")); -- m_rotationCombo->addItem(trUtf8("180\302\260")); -- m_rotationCombo->addItem(trUtf8("270\302\260")); -- connect(m_rotationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(slotRotationComboChanged(int))); -- addWidget(m_rotationCombo); -- -- documentClosed(); --} -- --NavigationToolBar::~NavigationToolBar() --{ --} -- --void NavigationToolBar::documentLoaded() --{ -- const int pageCount = document()->numPages(); -- for (int i = 0; i < pageCount; ++i) { -- m_pageCombo->addItem(QString::number(i + 1)); -- } -- m_pageCombo->setEnabled(true); --} -- --void NavigationToolBar::documentClosed() --{ -- m_firstAct->setEnabled(false); -- m_prevAct->setEnabled(false); -- m_nextAct->setEnabled(false); -- m_lastAct->setEnabled(false); -- m_pageCombo->clear(); -- m_pageCombo->setEnabled(false); --} -- --void NavigationToolBar::pageChanged(int page) --{ -- const int pageCount = document()->numPages(); -- m_firstAct->setEnabled(page > 0); -- m_prevAct->setEnabled(page > 0); -- m_nextAct->setEnabled(page < (pageCount - 1)); -- m_lastAct->setEnabled(page < (pageCount - 1)); -- m_pageCombo->setCurrentIndex(page); --} -- --void NavigationToolBar::slotGoFirst() --{ -- setPage(0); --} -- --void NavigationToolBar::slotGoPrev() --{ -- setPage(page() - 1); --} -- --void NavigationToolBar::slotGoNext() --{ -- setPage(page() + 1); --} -- --void NavigationToolBar::slotGoLast() --{ -- setPage(document()->numPages() - 1); --} -- --void NavigationToolBar::slotComboActivated(int index) --{ -- setPage(index); --} -- --void NavigationToolBar::slotZoomComboChanged(const QString &_text) --{ -- QString text = _text; -- text.remove(QLatin1Char('%')); -- bool ok = false; -- int value = text.toInt(&ok); -- if (ok && value >= 10) { -- emit zoomChanged(qreal(value) / 100); -- } --} -- --void NavigationToolBar::slotRotationComboChanged(int idx) --{ -- emit rotationChanged(idx * 90); --} -- --#include "navigationtoolbar.moc" -diff --git a/qt4/demos/navigationtoolbar.h b/qt4/demos/navigationtoolbar.h -deleted file mode 100644 -index d7dbd5dd..00000000 ---- a/qt4/demos/navigationtoolbar.h -+++ /dev/null -@@ -1,65 +0,0 @@ --/* -- * Copyright (C) 2008-2009, Pino Toscano <pino@kde.org> -- * Copyright (C) 2013, Fabio D'Urso <fabiodurso@hotmail.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef NAVIGATIONTOOLBAR_H --#define NAVIGATIONTOOLBAR_H -- --#include <QtGui/QToolBar> -- --#include "documentobserver.h" -- --class QAction; --class QComboBox; -- --class NavigationToolBar : public QToolBar, public DocumentObserver --{ -- Q_OBJECT -- --public: -- NavigationToolBar(QWidget *parent = 0); -- ~NavigationToolBar(); -- -- /*virtual*/ void documentLoaded(); -- /*virtual*/ void documentClosed(); -- /*virtual*/ void pageChanged(int page); -- --Q_SIGNALS: -- void zoomChanged(qreal value); -- void rotationChanged(int rotation); -- --private Q_SLOTS: -- void slotGoFirst(); -- void slotGoPrev(); -- void slotGoNext(); -- void slotGoLast(); -- void slotComboActivated(int index); -- void slotZoomComboChanged(const QString &text); -- void slotRotationComboChanged(int idx); -- --private: -- QAction *m_firstAct; -- QAction *m_prevAct; -- QComboBox *m_pageCombo; -- QAction *m_nextAct; -- QAction *m_lastAct; -- QComboBox *m_zoomCombo; -- QComboBox *m_rotationCombo; --}; -- --#endif -diff --git a/qt4/demos/optcontent.cpp b/qt4/demos/optcontent.cpp -deleted file mode 100644 -index 0c1015b9..00000000 ---- a/qt4/demos/optcontent.cpp -+++ /dev/null -@@ -1,69 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "optcontent.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QTreeView> -- --OptContentDock::OptContentDock(QWidget *parent) -- : AbstractInfoDock(parent) --{ -- m_view = new QTreeView(this); -- setWidget(m_view); -- setWindowTitle(tr("Optional content")); -- m_view->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); --} -- --OptContentDock::~OptContentDock() --{ --} -- -- --void OptContentDock::documentLoaded() --{ -- AbstractInfoDock::documentLoaded(); -- if ( document()->pageMode() == Poppler::Document::UseOC ) { -- show(); -- } --} -- --void OptContentDock::fillInfo() --{ -- if (!document()->hasOptionalContent()) { -- return; -- } -- -- m_view->setModel(document()->optionalContentModel()); -- connect(m_view->model(), SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(reloadImage())); -- m_view->expandToDepth(1); --} -- --void OptContentDock::documentClosed() --{ -- m_view->setModel(0); -- AbstractInfoDock::documentClosed(); --} -- --void OptContentDock::reloadImage() --{ -- reloadPage(); --} -- --#include "optcontent.moc" -diff --git a/qt4/demos/optcontent.h b/qt4/demos/optcontent.h -deleted file mode 100644 -index b933f5cd..00000000 ---- a/qt4/demos/optcontent.h -+++ /dev/null -@@ -1,47 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef OPTCONTENT_H --#define OPTCONTENT_H -- --#include "abstractinfodock.h" -- --class QTreeView; -- --class OptContentDock : public AbstractInfoDock --{ -- Q_OBJECT -- --public: -- OptContentDock(QWidget *parent = 0); -- ~OptContentDock(); -- -- /*virtual*/ void documentLoaded(); -- /*virtual*/ void documentClosed(); -- --protected: -- /*virtual*/ void fillInfo(); -- --private Q_SLOTS: -- void reloadImage(); -- --private: -- QTreeView *m_view; --}; -- --#endif -diff --git a/qt4/demos/pageview.cpp b/qt4/demos/pageview.cpp -deleted file mode 100644 -index 0dfa5e9e..00000000 ---- a/qt4/demos/pageview.cpp -+++ /dev/null -@@ -1,101 +0,0 @@ --/* -- * Copyright (C) 2008-2009, Pino Toscano <pino@kde.org> -- * Copyright (C) 2013, Fabio D'Urso <fabiodurso@hotmail.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "pageview.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QApplication> --#include <QtGui/QDesktopWidget> --#include <QtGui/QImage> --#include <QtGui/QLabel> --#include <QtGui/QPixmap> -- --PageView::PageView(QWidget *parent) -- : QScrollArea(parent) -- , m_zoom(1.0) -- , m_rotation(0) -- , m_dpiX(QApplication::desktop()->physicalDpiX()) -- , m_dpiY(QApplication::desktop()->physicalDpiY()) --{ -- m_imageLabel = new QLabel(this); -- m_imageLabel->resize(0, 0); -- setWidget(m_imageLabel); --} -- --PageView::~PageView() --{ --} -- --void PageView::documentLoaded() --{ --} -- --void PageView::documentClosed() --{ -- m_imageLabel->clear(); -- m_imageLabel->resize(0, 0); --} -- --void PageView::pageChanged(int page) --{ -- Poppler::Page *popplerPage = document()->page(page); -- const double resX = m_dpiX * m_zoom; -- const double resY = m_dpiY * m_zoom; -- -- Poppler::Page::Rotation rot; -- if (m_rotation == 0) -- rot = Poppler::Page::Rotate0; -- else if (m_rotation == 90) -- rot = Poppler::Page::Rotate90; -- else if (m_rotation == 180) -- rot = Poppler::Page::Rotate180; -- else // m_rotation == 270 -- rot = Poppler::Page::Rotate270; -- -- QImage image = popplerPage->renderToImage(resX, resY, -1, -1, -1, -1, rot); -- if (!image.isNull()) { -- m_imageLabel->resize(image.size()); -- m_imageLabel->setPixmap(QPixmap::fromImage(image)); -- } else { -- m_imageLabel->resize(0, 0); -- m_imageLabel->setPixmap(QPixmap()); -- } -- delete popplerPage; --} -- --void PageView::slotZoomChanged(qreal value) --{ -- m_zoom = value; -- if (!document()) { -- return; -- } -- reloadPage(); --} -- --void PageView::slotRotationChanged(int value) --{ -- m_rotation = value; -- if (!document()) { -- return; -- } -- reloadPage(); --} -- --#include "pageview.moc" -diff --git a/qt4/demos/pageview.h b/qt4/demos/pageview.h -deleted file mode 100644 -index 24065028..00000000 ---- a/qt4/demos/pageview.h -+++ /dev/null -@@ -1,53 +0,0 @@ --/* -- * Copyright (C) 2008-2009, Pino Toscano <pino@kde.org> -- * Copyright (C) 2013, Fabio D'Urso <fabiodurso@hotmail.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef PAGEVIEW_H --#define PAGEVIEW_H -- --#include <QtGui/QScrollArea> -- --#include "documentobserver.h" -- --class QLabel; -- --class PageView : public QScrollArea, public DocumentObserver --{ -- Q_OBJECT -- --public: -- PageView(QWidget *parent = 0); -- ~PageView(); -- -- /*virtual*/ void documentLoaded(); -- /*virtual*/ void documentClosed(); -- /*virtual*/ void pageChanged(int page); -- --private Q_SLOTS: -- void slotZoomChanged(qreal value); -- void slotRotationChanged(int value); -- --private: -- QLabel *m_imageLabel; -- qreal m_zoom; -- int m_rotation; -- int m_dpiX; -- int m_dpiY; --}; -- --#endif -diff --git a/qt4/demos/permissions.cpp b/qt4/demos/permissions.cpp -deleted file mode 100644 -index 38205b2e..00000000 ---- a/qt4/demos/permissions.cpp -+++ /dev/null -@@ -1,66 +0,0 @@ --/* -- * Copyright (C) 2008-2009, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "permissions.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QListWidget> -- --PermissionsDock::PermissionsDock(QWidget *parent) -- : AbstractInfoDock(parent) --{ -- m_table = new QListWidget(this); -- setWidget(m_table); -- setWindowTitle(tr("Permissions")); -- m_table->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); --} -- --PermissionsDock::~PermissionsDock() --{ --} -- --void PermissionsDock::fillInfo() --{ --#define ADD_ROW(title, function) \ --do { \ -- QListWidgetItem *item = new QListWidgetItem(); \ -- item->setFlags(item->flags() & ~Qt::ItemIsEnabled); \ -- item->setText(title); \ -- item->setCheckState(document()->function() ? Qt::Checked : Qt::Unchecked); \ -- m_table->addItem(item); \ --} while (0) -- ADD_ROW("Print", okToPrint); -- ADD_ROW("PrintHiRes", okToPrintHighRes); -- ADD_ROW("Change", okToChange); -- ADD_ROW("Copy", okToCopy); -- ADD_ROW("Add Notes", okToAddNotes); -- ADD_ROW("Fill Forms", okToFillForm); -- ADD_ROW("Create Forms", okToCreateFormFields); -- ADD_ROW("Extract for accessibility", okToExtractForAccessibility); -- ADD_ROW("Assemble", okToAssemble); --#undef ADD_ROW --} -- --void PermissionsDock::documentClosed() --{ -- m_table->clear(); -- AbstractInfoDock::documentClosed(); --} -- --#include "permissions.moc" -diff --git a/qt4/demos/permissions.h b/qt4/demos/permissions.h -deleted file mode 100644 -index 13bcbbf0..00000000 ---- a/qt4/demos/permissions.h -+++ /dev/null -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2008-2009, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef PERMISSIONS_H --#define PERMISSIONS_H -- --#include "abstractinfodock.h" -- --class QListWidget; -- --class PermissionsDock : public AbstractInfoDock --{ -- Q_OBJECT -- --public: -- PermissionsDock(QWidget *parent = 0); -- ~PermissionsDock(); -- -- /*virtual*/ void documentClosed(); -- --protected: -- /*virtual*/ void fillInfo(); -- --private: -- QListWidget *m_table; --}; -- --#endif -diff --git a/qt4/demos/thumbnails.cpp b/qt4/demos/thumbnails.cpp -deleted file mode 100644 -index 07b19ca7..00000000 ---- a/qt4/demos/thumbnails.cpp -+++ /dev/null -@@ -1,84 +0,0 @@ --/* -- * Copyright (C) 2009, Shawn Rutledge <shawn.t.rutledge@gmail.com> -- * Copyright (C) 2009, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "thumbnails.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QListWidget> -- --static const int PageRole = Qt::UserRole + 1; -- --ThumbnailsDock::ThumbnailsDock(QWidget *parent) -- : AbstractInfoDock(parent) --{ -- m_list = new QListWidget(this); -- setWidget(m_list); -- setWindowTitle(tr("Thumbnails")); -- m_list->setViewMode(QListView::ListMode); -- m_list->setMovement(QListView::Static); -- m_list->setVerticalScrollMode(QListView::ScrollPerPixel); -- connect(m_list, SIGNAL(itemActivated(QListWidgetItem*)), -- this, SLOT(slotItemActivated(QListWidgetItem*))); --} -- --ThumbnailsDock::~ThumbnailsDock() --{ --} -- --void ThumbnailsDock::fillInfo() --{ -- const int num = document()->numPages(); -- QSize maxSize; -- for (int i = 0; i < num; ++i) { -- const Poppler::Page *page = document()->page(i); -- const QImage image = page->thumbnail(); -- if (!image.isNull()) { -- QListWidgetItem *item = new QListWidgetItem(); -- item->setText(QString::number(i + 1)); -- item->setData(Qt::DecorationRole, QPixmap::fromImage(image)); -- item->setData(PageRole, i); -- m_list->addItem(item); -- maxSize.setWidth(qMax(maxSize.width(), image.width())); -- maxSize.setHeight(qMax(maxSize.height(), image.height())); -- } -- delete page; -- } -- if (num > 0) { -- m_list->setGridSize(maxSize); -- m_list->setIconSize(maxSize); -- } --} -- --void ThumbnailsDock::documentClosed() --{ -- m_list->clear(); -- AbstractInfoDock::documentClosed(); --} -- --void ThumbnailsDock::slotItemActivated(QListWidgetItem *item) --{ -- if (!item) { -- return; -- } -- -- setPage(item->data(PageRole).toInt()); --} -- --#include "thumbnails.moc" -diff --git a/qt4/demos/thumbnails.h b/qt4/demos/thumbnails.h -deleted file mode 100644 -index 076d5aee..00000000 ---- a/qt4/demos/thumbnails.h -+++ /dev/null -@@ -1,48 +0,0 @@ --/* -- * Copyright (C) 2009, Shawn Rutledge <shawn.t.rutledge@gmail.com> -- * Copyright (C) 2009, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef THUMBNAILS_H --#define THUMBNAILS_H -- --#include "abstractinfodock.h" -- --class QListWidget; --class QListWidgetItem; -- --class ThumbnailsDock : public AbstractInfoDock --{ -- Q_OBJECT -- --public: -- ThumbnailsDock(QWidget *parent = 0); -- ~ThumbnailsDock(); -- -- /*virtual*/ void documentClosed(); -- --protected: -- /*virtual*/ void fillInfo(); -- --private Q_SLOTS: -- void slotItemActivated(QListWidgetItem *item); -- --private: -- QListWidget *m_list; --}; -- --#endif -diff --git a/qt4/demos/toc.cpp b/qt4/demos/toc.cpp -deleted file mode 100644 -index bf3e5cbb..00000000 ---- a/qt4/demos/toc.cpp -+++ /dev/null -@@ -1,88 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "toc.h" -- --#include <poppler-qt4.h> -- --#include <QtGui/QHeaderView> --#include <QtGui/QTreeWidget> -- --static void fillToc(const QDomNode &parent, QTreeWidget *tree, QTreeWidgetItem *parentItem) --{ -- QTreeWidgetItem *newitem = 0; -- for (QDomNode node = parent.firstChild(); !node.isNull(); node = node.nextSibling()) { -- QDomElement e = node.toElement(); -- -- if (!parentItem) { -- newitem = new QTreeWidgetItem(tree, newitem); -- } else { -- newitem = new QTreeWidgetItem(parentItem, newitem); -- } -- newitem->setText(0, e.tagName()); -- -- bool isOpen = false; -- if (e.hasAttribute(QString::fromLatin1("Open"))) { -- isOpen = QVariant(e.attribute(QString::fromLatin1("Open"))).toBool(); -- } -- if (isOpen) { -- tree->expandItem(newitem); -- } -- -- if (e.hasChildNodes()) { -- fillToc(node, tree, newitem); -- } -- } --} -- -- --TocDock::TocDock(QWidget *parent) -- : AbstractInfoDock(parent) --{ -- m_tree = new QTreeWidget(this); -- setWidget(m_tree); -- m_tree->setAlternatingRowColors(true); -- m_tree->header()->hide(); -- setWindowTitle(tr("TOC")); -- m_tree->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); --} -- --TocDock::~TocDock() --{ --} -- --void TocDock::fillInfo() --{ -- const QDomDocument *toc = document()->toc(); -- if (toc) { -- fillToc(*toc, m_tree, 0); -- } else { -- QTreeWidgetItem *item = new QTreeWidgetItem(); -- item->setText(0, tr("No TOC")); -- item->setFlags(item->flags() & ~Qt::ItemIsEnabled); -- m_tree->addTopLevelItem(item); -- } --} -- --void TocDock::documentClosed() --{ -- m_tree->clear(); -- AbstractInfoDock::documentClosed(); --} -- --#include "toc.moc" -diff --git a/qt4/demos/toc.h b/qt4/demos/toc.h -deleted file mode 100644 -index bbc90827..00000000 ---- a/qt4/demos/toc.h -+++ /dev/null -@@ -1,43 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef TOC_H --#define TOC_H -- --#include "abstractinfodock.h" -- --class QTreeWidget; -- --class TocDock : public AbstractInfoDock --{ -- Q_OBJECT -- --public: -- TocDock(QWidget *parent = 0); -- ~TocDock(); -- -- /*virtual*/ void documentClosed(); -- --protected: -- /*virtual*/ void fillInfo(); -- --private: -- QTreeWidget *m_tree; --}; -- --#endif -diff --git a/qt4/demos/viewer.cpp b/qt4/demos/viewer.cpp -deleted file mode 100644 -index c34af23f..00000000 ---- a/qt4/demos/viewer.cpp -+++ /dev/null -@@ -1,319 +0,0 @@ --/* -- * Copyright (C) 2008-2009, Pino Toscano <pino@kde.org> -- * Copyright (C) 2008, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2009, Shawn Rutledge <shawn.t.rutledge@gmail.com> -- * Copyright (C) 2013, Fabio D'Urso <fabiodurso@hotmail.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "viewer.h" -- --#include "embeddedfiles.h" --#include "fonts.h" --#include "info.h" --#include "metadata.h" --#include "navigationtoolbar.h" --#include "optcontent.h" --#include "pageview.h" --#include "permissions.h" --#include "thumbnails.h" --#include "toc.h" -- --#include <poppler-qt4.h> -- --#include <QtCore/QDir> --#include <QtGui/QAction> --#include <QtGui/QApplication> --#include <QtGui/QFileDialog> --#include <QtGui/QInputDialog> --#include <QtGui/QMenu> --#include <QtGui/QMenuBar> --#include <QtGui/QMessageBox> -- --PdfViewer::PdfViewer() -- : QMainWindow(), m_currentPage(0), m_doc(0) --{ -- setWindowTitle(tr("Poppler-Qt4 Demo")); -- -- // setup the menus -- QMenu *fileMenu = menuBar()->addMenu(tr("&File")); -- m_fileOpenAct = fileMenu->addAction(tr("&Open"), this, SLOT(slotOpenFile())); -- m_fileOpenAct->setShortcut(Qt::CTRL + Qt::Key_O); -- fileMenu->addSeparator(); -- m_fileSaveCopyAct = fileMenu->addAction(tr("&Save a Copy..."), this, SLOT(slotSaveCopy())); -- m_fileSaveCopyAct->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_S); -- m_fileSaveCopyAct->setEnabled(false); -- fileMenu->addSeparator(); -- QAction *act = fileMenu->addAction(tr("&Quit"), qApp, SLOT(closeAllWindows())); -- act->setShortcut(Qt::CTRL + Qt::Key_Q); -- -- QMenu *viewMenu = menuBar()->addMenu(tr("&View")); -- -- QMenu *settingsMenu = menuBar()->addMenu(tr("&Settings")); -- m_settingsTextAAAct = settingsMenu->addAction(tr("Text Antialias")); -- m_settingsTextAAAct->setCheckable(true); -- connect(m_settingsTextAAAct, SIGNAL(toggled(bool)), this, SLOT(slotToggleTextAA(bool))); -- m_settingsGfxAAAct = settingsMenu->addAction(tr("Graphics Antialias")); -- m_settingsGfxAAAct->setCheckable(true); -- connect(m_settingsGfxAAAct, SIGNAL(toggled(bool)), this, SLOT(slotToggleGfxAA(bool))); -- QMenu *settingsRenderMenu = settingsMenu->addMenu(tr("Render Backend")); -- m_settingsRenderBackendGrp = new QActionGroup(settingsRenderMenu); -- m_settingsRenderBackendGrp->setExclusive(true); -- act = settingsRenderMenu->addAction(tr("Splash")); -- act->setCheckable(true); -- act->setChecked(true); -- act->setData(qVariantFromValue(0)); -- m_settingsRenderBackendGrp->addAction(act); -- act = settingsRenderMenu->addAction(tr("Arthur")); -- act->setCheckable(true); -- act->setData(qVariantFromValue(1)); -- m_settingsRenderBackendGrp->addAction(act); -- connect(m_settingsRenderBackendGrp, SIGNAL(triggered(QAction*)), -- this, SLOT(slotRenderBackend(QAction*))); -- -- QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); -- act = helpMenu->addAction(tr("&About"), this, SLOT(slotAbout())); -- act = helpMenu->addAction(tr("About &Qt"), this, SLOT(slotAboutQt())); -- -- NavigationToolBar *navbar = new NavigationToolBar(this); -- addToolBar(navbar); -- m_observers.append(navbar); -- -- PageView *view = new PageView(this); -- setCentralWidget(view); -- m_observers.append(view); -- -- InfoDock *infoDock = new InfoDock(this); -- addDockWidget(Qt::LeftDockWidgetArea, infoDock); -- infoDock->hide(); -- viewMenu->addAction(infoDock->toggleViewAction()); -- m_observers.append(infoDock); -- -- TocDock *tocDock = new TocDock(this); -- addDockWidget(Qt::LeftDockWidgetArea, tocDock); -- tocDock->hide(); -- viewMenu->addAction(tocDock->toggleViewAction()); -- m_observers.append(tocDock); -- -- FontsDock *fontsDock = new FontsDock(this); -- addDockWidget(Qt::LeftDockWidgetArea, fontsDock); -- fontsDock->hide(); -- viewMenu->addAction(fontsDock->toggleViewAction()); -- m_observers.append(fontsDock); -- -- PermissionsDock *permissionsDock = new PermissionsDock(this); -- addDockWidget(Qt::LeftDockWidgetArea, permissionsDock); -- permissionsDock->hide(); -- viewMenu->addAction(permissionsDock->toggleViewAction()); -- m_observers.append(permissionsDock); -- -- ThumbnailsDock *thumbnailsDock = new ThumbnailsDock(this); -- addDockWidget(Qt::LeftDockWidgetArea, thumbnailsDock); -- thumbnailsDock->hide(); -- viewMenu->addAction(thumbnailsDock->toggleViewAction()); -- m_observers.append(thumbnailsDock); -- -- EmbeddedFilesDock *embfilesDock = new EmbeddedFilesDock(this); -- addDockWidget(Qt::BottomDockWidgetArea, embfilesDock); -- embfilesDock->hide(); -- viewMenu->addAction(embfilesDock->toggleViewAction()); -- m_observers.append(embfilesDock); -- -- MetadataDock *metadataDock = new MetadataDock(this); -- addDockWidget(Qt::BottomDockWidgetArea, metadataDock); -- metadataDock->hide(); -- viewMenu->addAction(metadataDock->toggleViewAction()); -- m_observers.append(metadataDock); -- -- OptContentDock *optContentDock = new OptContentDock(this); -- addDockWidget(Qt::LeftDockWidgetArea, optContentDock); -- optContentDock->hide(); -- viewMenu->addAction(optContentDock->toggleViewAction()); -- m_observers.append(optContentDock); -- -- Q_FOREACH(DocumentObserver *obs, m_observers) { -- obs->m_viewer = this; -- } -- -- connect(navbar, SIGNAL(zoomChanged(qreal)), view, SLOT(slotZoomChanged(qreal))); -- connect(navbar, SIGNAL(rotationChanged(int)), view, SLOT(slotRotationChanged(int))); -- -- // activate AA by default -- m_settingsTextAAAct->setChecked(true); -- m_settingsGfxAAAct->setChecked(true); --} -- --PdfViewer::~PdfViewer() --{ -- closeDocument(); --} -- --QSize PdfViewer::sizeHint() const --{ -- return QSize(500, 600); --} -- --void PdfViewer::loadDocument(const QString &file) --{ -- Poppler::Document *newdoc = Poppler::Document::load(file); -- if (!newdoc) { -- QMessageBox msgbox(QMessageBox::Critical, tr("Open Error"), tr("Cannot open:\n") + file, -- QMessageBox::Ok, this); -- msgbox.exec(); -- return; -- } -- -- while (newdoc->isLocked()) { -- bool ok = true; -- QString password = QInputDialog::getText(this, tr("Document Password"), -- tr("Please insert the password of the document:"), -- QLineEdit::Password, QString(), &ok); -- if (!ok) { -- delete newdoc; -- return; -- } -- newdoc->unlock(password.toLatin1(), password.toLatin1()); -- } -- -- closeDocument(); -- -- m_doc = newdoc; -- -- m_doc->setRenderHint(Poppler::Document::TextAntialiasing, m_settingsTextAAAct->isChecked()); -- m_doc->setRenderHint(Poppler::Document::Antialiasing, m_settingsGfxAAAct->isChecked()); -- m_doc->setRenderBackend((Poppler::Document::RenderBackend)m_settingsRenderBackendGrp->checkedAction()->data().toInt()); -- -- Q_FOREACH(DocumentObserver *obs, m_observers) { -- obs->documentLoaded(); -- obs->pageChanged(0); -- } -- -- m_fileSaveCopyAct->setEnabled(true); --} -- --void PdfViewer::closeDocument() --{ -- if (!m_doc) { -- return; -- } -- -- Q_FOREACH(DocumentObserver *obs, m_observers) { -- obs->documentClosed(); -- } -- -- m_currentPage = 0; -- delete m_doc; -- m_doc = 0; -- -- m_fileSaveCopyAct->setEnabled(false); --} -- --void PdfViewer::slotOpenFile() --{ -- QString fileName = QFileDialog::getOpenFileName(this, tr("Open PDF Document"), QDir::homePath(), tr("PDF Documents (*.pdf)")); -- if (fileName.isEmpty()) { -- return; -- } -- -- loadDocument(fileName); --} -- --void PdfViewer::slotSaveCopy() --{ -- if (!m_doc) { -- return; -- } -- -- QString fileName = QFileDialog::getSaveFileName(this, tr("Save Copy"), QDir::homePath(), tr("PDF Documents (*.pdf)")); -- if (fileName.isEmpty()) { -- return; -- } -- -- Poppler::PDFConverter *converter = m_doc->pdfConverter(); -- converter->setOutputFileName(fileName); -- converter->setPDFOptions(converter->pdfOptions() & ~Poppler::PDFConverter::WithChanges); -- if (!converter->convert()) { -- QMessageBox msgbox(QMessageBox::Critical, tr("Save Error"), tr("Cannot export to:\n%1").arg(fileName), -- QMessageBox::Ok, this); -- } -- delete converter; --} -- --void PdfViewer::slotAbout() --{ -- const QString text("This is a demo of the Poppler-Qt4 library."); -- QMessageBox::about(this, QString::fromLatin1("About Poppler-Qt4 Demo"), text); --} -- --void PdfViewer::slotAboutQt() --{ -- QMessageBox::aboutQt(this); --} -- --void PdfViewer::slotToggleTextAA(bool value) --{ -- if (!m_doc) { -- return; -- } -- -- m_doc->setRenderHint(Poppler::Document::TextAntialiasing, value); -- -- Q_FOREACH(DocumentObserver *obs, m_observers) { -- obs->pageChanged(m_currentPage); -- } --} -- --void PdfViewer::slotToggleGfxAA(bool value) --{ -- if (!m_doc) { -- return; -- } -- -- m_doc->setRenderHint(Poppler::Document::Antialiasing, value); -- -- Q_FOREACH(DocumentObserver *obs, m_observers) { -- obs->pageChanged(m_currentPage); -- } --} -- --void PdfViewer::slotRenderBackend(QAction *act) --{ -- if (!m_doc || !act) { -- return; -- } -- -- m_doc->setRenderBackend((Poppler::Document::RenderBackend)act->data().toInt()); -- -- Q_FOREACH(DocumentObserver *obs, m_observers) { -- obs->pageChanged(m_currentPage); -- } --} -- --void PdfViewer::setPage(int page) --{ -- Q_FOREACH(DocumentObserver *obs, m_observers) { -- obs->pageChanged(page); -- } -- -- m_currentPage = page; --} -- --int PdfViewer::page() const --{ -- return m_currentPage; --} -- --#include "viewer.moc" -diff --git a/qt4/demos/viewer.h b/qt4/demos/viewer.h -deleted file mode 100644 -index 5e0eaaff..00000000 ---- a/qt4/demos/viewer.h -+++ /dev/null -@@ -1,73 +0,0 @@ --/* -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef PDFVIEWER_H --#define PDFVIEWER_H -- --#include <QtGui/QMainWindow> -- --class QAction; --class QActionGroup; --class QLabel; --class DocumentObserver; --namespace Poppler { --class Document; --} -- --class PdfViewer : public QMainWindow --{ -- Q_OBJECT -- -- friend class DocumentObserver; -- --public: -- PdfViewer(); -- ~PdfViewer(); -- -- /*virtual*/ QSize sizeHint() const; -- -- void loadDocument(const QString &file); -- void closeDocument(); -- --private Q_SLOTS: -- void slotOpenFile(); -- void slotSaveCopy(); -- void slotAbout(); -- void slotAboutQt(); -- void slotToggleTextAA(bool value); -- void slotToggleGfxAA(bool value); -- void slotRenderBackend(QAction *act); -- --private: -- void setPage(int page); -- int page() const; -- -- int m_currentPage; -- -- QAction *m_fileOpenAct; -- QAction *m_fileSaveCopyAct; -- QAction *m_settingsTextAAAct; -- QAction *m_settingsGfxAAAct; -- QActionGroup *m_settingsRenderBackendGrp; -- -- QList<DocumentObserver *> m_observers; -- -- Poppler::Document *m_doc; --}; -- --#endif -diff --git a/qt4/src/.gitignore b/qt4/src/.gitignore -deleted file mode 100644 -index 3d124ddd..00000000 ---- a/qt4/src/.gitignore -+++ /dev/null -@@ -1,9 +0,0 @@ --.deps --.libs --*.la --*.lo --Makefile --Makefile.in --APIDOCS-html --APIDOCS-latex --*.moc -diff --git a/qt4/src/ArthurOutputDev.cc b/qt4/src/ArthurOutputDev.cc -deleted file mode 100644 -index f2fa6f17..00000000 ---- a/qt4/src/ArthurOutputDev.cc -+++ /dev/null -@@ -1,812 +0,0 @@ --//======================================================================== --// --// ArthurOutputDev.cc --// --// Copyright 2003 Glyph & Cog, LLC --// --//======================================================================== -- --//======================================================================== --// --// Modified under the Poppler project - http://poppler.freedesktop.org --// --// All changes made under the Poppler project to this file are licensed --// under GPL version 2 or later --// --// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> --// Copyright (C) 2005-2009, 2011, 2012, 2014, 2015 Albert Astals Cid <aacid@kde.org> --// Copyright (C) 2008, 2010 Pino Toscano <pino@kde.org> --// Copyright (C) 2009, 2011 Carlos Garcia Campos <carlosgc@gnome.org> --// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com> --// Copyright (C) 2010 Matthias Fauconneau <matthias.fauconneau@gmail.com> --// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> --// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> --// Copyright (C) 2013 Dominik Haumann <dhaumann@kde.org> --// Copyright (C) 2017 Adrian Johnson <ajohnson@redneon.com> --// --// To see a description of the changes please see the Changelog file that --// came with your tarball or type make ChangeLog if you are building from git --// --//======================================================================== -- --#include <config.h> -- --#ifdef USE_GCC_PRAGMAS --#pragma implementation --#endif -- --#include <string.h> --#include <math.h> -- --#include "goo/gfile.h" --#include "GlobalParams.h" --#include "Error.h" --#include "Object.h" --#include "GfxState.h" --#include "GfxFont.h" --#include "Link.h" --#include "FontEncodingTables.h" --#include <fofi/FoFiTrueType.h> --#include "ArthurOutputDev.h" -- --#include <QtCore/QtDebug> --#include <QtGui/QPainterPath> --//------------------------------------------------------------------------ -- --#ifdef HAVE_SPLASH --#include "splash/SplashFontFileID.h" --#include "splash/SplashFontFile.h" --#include "splash/SplashFontEngine.h" --#include "splash/SplashFont.h" --#include "splash/SplashMath.h" --#include "splash/SplashPath.h" --#include "splash/SplashGlyphBitmap.h" --//------------------------------------------------------------------------ --// SplashOutFontFileID --//------------------------------------------------------------------------ -- --class SplashOutFontFileID: public SplashFontFileID { --public: -- -- SplashOutFontFileID(Ref *rA) { r = *rA; } -- -- ~SplashOutFontFileID() {} -- -- GBool matches(SplashFontFileID *id) { -- return ((SplashOutFontFileID *)id)->r.num == r.num && -- ((SplashOutFontFileID *)id)->r.gen == r.gen; -- } -- --private: -- -- Ref r; --}; -- --#endif -- --//------------------------------------------------------------------------ --// ArthurOutputDev --//------------------------------------------------------------------------ -- --ArthurOutputDev::ArthurOutputDev(QPainter *painter): -- m_painter(painter), -- m_fontHinting(NoHinting) --{ -- m_currentBrush = QBrush(Qt::SolidPattern); -- m_fontEngine = 0; -- m_font = 0; --} -- --ArthurOutputDev::~ArthurOutputDev() --{ --#ifdef HAVE_SPLASH -- delete m_fontEngine; --#endif --} -- --void ArthurOutputDev::startDoc(XRef *xrefA) { -- xref = xrefA; --#ifdef HAVE_SPLASH -- delete m_fontEngine; -- -- const bool isHintingEnabled = m_fontHinting != NoHinting; -- const bool isSlightHinting = m_fontHinting == SlightHinting; -- -- m_fontEngine = new SplashFontEngine( -- globalParams->getEnableFreeType(), -- isHintingEnabled, -- isSlightHinting, -- m_painter->testRenderHint(QPainter::TextAntialiasing)); --#endif --} -- --void ArthurOutputDev::startPage(int pageNum, GfxState *state, XRef *xref) --{ -- // fill page with white background. -- int w = static_cast<int>(state->getPageWidth()); -- int h = static_cast<int>(state->getPageHeight()); -- QColor fillColour(Qt::white); -- QBrush fill(fillColour); -- m_painter->save(); -- m_painter->setPen(fillColour); -- m_painter->setBrush(fill); -- m_painter->drawRect(0, 0, w, h); -- m_painter->restore(); --} -- --void ArthurOutputDev::endPage() { --} -- --void ArthurOutputDev::saveState(GfxState *state) --{ -- m_painter->save(); --} -- --void ArthurOutputDev::restoreState(GfxState *state) --{ -- m_painter->restore(); --} -- --void ArthurOutputDev::updateAll(GfxState *state) --{ -- OutputDev::updateAll(state); -- m_needFontUpdate = gTrue; --} -- --// This looks wrong - why aren't adjusting the matrix? --void ArthurOutputDev::updateCTM(GfxState *state, double m11, double m12, -- double m21, double m22, -- double m31, double m32) --{ -- updateLineDash(state); -- updateLineJoin(state); -- updateLineCap(state); -- updateLineWidth(state); --} -- --void ArthurOutputDev::updateLineDash(GfxState *state) --{ -- double *dashPattern; -- int dashLength; -- double dashStart; -- state->getLineDash(&dashPattern, &dashLength, &dashStart); -- QVector<qreal> pattern(dashLength); -- for (int i = 0; i < dashLength; ++i) { -- pattern[i] = dashPattern[i]; -- } -- m_currentPen.setDashPattern(pattern); -- m_currentPen.setDashOffset(dashStart); -- m_painter->setPen(m_currentPen); --} -- --void ArthurOutputDev::updateFlatness(GfxState *state) --{ -- // qDebug() << "updateFlatness"; --} -- --void ArthurOutputDev::updateLineJoin(GfxState *state) --{ -- switch (state->getLineJoin()) { -- case 0: -- m_currentPen.setJoinStyle(Qt::MiterJoin); -- break; -- case 1: -- m_currentPen.setJoinStyle(Qt::RoundJoin); -- break; -- case 2: -- m_currentPen.setJoinStyle(Qt::BevelJoin); -- break; -- } -- m_painter->setPen(m_currentPen); --} -- --void ArthurOutputDev::updateLineCap(GfxState *state) --{ -- switch (state->getLineCap()) { -- case 0: -- m_currentPen.setCapStyle(Qt::FlatCap); -- break; -- case 1: -- m_currentPen.setCapStyle(Qt::RoundCap); -- break; -- case 2: -- m_currentPen.setCapStyle(Qt::SquareCap); -- break; -- } -- m_painter->setPen(m_currentPen); --} -- --void ArthurOutputDev::updateMiterLimit(GfxState *state) --{ -- m_currentPen.setMiterLimit(state->getMiterLimit()); -- m_painter->setPen(m_currentPen); --} -- --void ArthurOutputDev::updateLineWidth(GfxState *state) --{ -- m_currentPen.setWidthF(state->getLineWidth()); -- m_painter->setPen(m_currentPen); --} -- --void ArthurOutputDev::updateFillColor(GfxState *state) --{ -- GfxRGB rgb; -- QColor brushColour = m_currentBrush.color(); -- state->getFillRGB(&rgb); -- brushColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), brushColour.alphaF()); -- m_currentBrush.setColor(brushColour); --} -- --void ArthurOutputDev::updateStrokeColor(GfxState *state) --{ -- GfxRGB rgb; -- QColor penColour = m_currentPen.color(); -- state->getStrokeRGB(&rgb); -- penColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), penColour.alphaF()); -- m_currentPen.setColor(penColour); -- m_painter->setPen(m_currentPen); --} -- --void ArthurOutputDev::updateFillOpacity(GfxState *state) --{ -- QColor brushColour= m_currentBrush.color(); -- brushColour.setAlphaF(state->getFillOpacity()); -- m_currentBrush.setColor(brushColour); --} -- --void ArthurOutputDev::updateStrokeOpacity(GfxState *state) --{ -- QColor penColour= m_currentPen.color(); -- penColour.setAlphaF(state->getStrokeOpacity()); -- m_currentPen.setColor(penColour); -- m_painter->setPen(m_currentPen); --} -- --void ArthurOutputDev::updateFont(GfxState *state) --{ --#ifdef HAVE_SPLASH -- GfxFont *gfxFont; -- GfxFontLoc *fontLoc; -- GfxFontType fontType; -- SplashOutFontFileID *id; -- SplashFontFile *fontFile; -- SplashFontSrc *fontsrc = NULL; -- FoFiTrueType *ff; -- Object refObj, strObj; -- GooString *fileName; -- char *tmpBuf; -- int tmpBufLen = 0; -- int *codeToGID; -- double *textMat; -- double m11, m12, m21, m22, fontSize; -- SplashCoord mat[4]; -- int n; -- int faceIndex = 0; -- SplashCoord matrix[6]; -- -- m_needFontUpdate = false; -- m_font = NULL; -- fileName = NULL; -- tmpBuf = NULL; -- fontLoc = NULL; -- -- if (!(gfxFont = state->getFont())) { -- goto err1; -- } -- fontType = gfxFont->getType(); -- if (fontType == fontType3) { -- goto err1; -- } -- -- // check the font file cache -- id = new SplashOutFontFileID(gfxFont->getID()); -- if ((fontFile = m_fontEngine->getFontFile(id))) { -- delete id; -- -- } else { -- -- if (!(fontLoc = gfxFont->locateFont(xref, NULL))) { -- error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", -- gfxFont->getName() ? gfxFont->getName()->getCString() -- : "(unnamed)"); -- goto err2; -- } -- -- // embedded font -- if (fontLoc->locType == gfxFontLocEmbedded) { -- // if there is an embedded font, read it to memory -- tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen); -- if (! tmpBuf) -- goto err2; -- -- // external font -- } else { // gfxFontLocExternal -- fileName = fontLoc->path; -- fontType = fontLoc->fontType; -- } -- -- fontsrc = new SplashFontSrc; -- if (fileName) -- fontsrc->setFile(fileName, gFalse); -- else -- fontsrc->setBuf(tmpBuf, tmpBufLen, gTrue); -- -- // load the font file -- switch (fontType) { -- case fontType1: -- if (!(fontFile = m_fontEngine->loadType1Font( -- id, -- fontsrc, -- (const char **)((Gfx8BitFont *)gfxFont)->getEncoding()))) { -- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", -- gfxFont->getName() ? gfxFont->getName()->getCString() -- : "(unnamed)"); -- goto err2; -- } -- break; -- case fontType1C: -- if (!(fontFile = m_fontEngine->loadType1CFont( -- id, -- fontsrc, -- (const char **)((Gfx8BitFont *)gfxFont)->getEncoding()))) { -- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", -- gfxFont->getName() ? gfxFont->getName()->getCString() -- : "(unnamed)"); -- goto err2; -- } -- break; -- case fontType1COT: -- if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont( -- id, -- fontsrc, -- (const char **)((Gfx8BitFont *)gfxFont)->getEncoding()))) { -- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", -- gfxFont->getName() ? gfxFont->getName()->getCString() -- : "(unnamed)"); -- goto err2; -- } -- break; -- case fontTrueType: -- case fontTrueTypeOT: -- if (fileName) -- ff = FoFiTrueType::load(fileName->getCString()); -- else -- ff = FoFiTrueType::make(tmpBuf, tmpBufLen); -- if (ff) { -- codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); -- n = 256; -- delete ff; -- } else { -- codeToGID = NULL; -- n = 0; -- } -- if (!(fontFile = m_fontEngine->loadTrueTypeFont( -- id, -- fontsrc, -- codeToGID, n))) { -- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", -- gfxFont->getName() ? gfxFont->getName()->getCString() -- : "(unnamed)"); -- goto err2; -- } -- break; -- case fontCIDType0: -- case fontCIDType0C: -- if (!(fontFile = m_fontEngine->loadCIDFont( -- id, -- fontsrc))) { -- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", -- gfxFont->getName() ? gfxFont->getName()->getCString() -- : "(unnamed)"); -- goto err2; -- } -- break; -- case fontCIDType0COT: -- if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { -- n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); -- codeToGID = (int *)gmallocn(n, sizeof(int)); -- memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), -- n * sizeof(int)); -- } else { -- codeToGID = NULL; -- n = 0; -- } -- if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont( -- id, -- fontsrc, -- codeToGID, n))) { -- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", -- gfxFont->getName() ? gfxFont->getName()->getCString() -- : "(unnamed)"); -- goto err2; -- } -- break; -- case fontCIDType2: -- case fontCIDType2OT: -- codeToGID = NULL; -- n = 0; -- if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { -- n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); -- if (n) { -- codeToGID = (int *)gmallocn(n, sizeof(int)); -- memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), -- n * sizeof(Gushort)); -- } -- } else { -- if (fileName) -- ff = FoFiTrueType::load(fileName->getCString()); -- else -- ff = FoFiTrueType::make(tmpBuf, tmpBufLen); -- if (! ff) -- goto err2; -- codeToGID = ((GfxCIDFont *)gfxFont)->getCodeToGIDMap(ff, &n); -- delete ff; -- } -- if (!(fontFile = m_fontEngine->loadTrueTypeFont( -- id, -- fontsrc, -- codeToGID, n, faceIndex))) { -- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", -- gfxFont->getName() ? gfxFont->getName()->getCString() -- : "(unnamed)"); -- goto err2; -- } -- break; -- default: -- // this shouldn't happen -- goto err2; -- } -- } -- -- // get the font matrix -- textMat = state->getTextMat(); -- fontSize = state->getFontSize(); -- m11 = textMat[0] * fontSize * state->getHorizScaling(); -- m12 = textMat[1] * fontSize * state->getHorizScaling(); -- m21 = textMat[2] * fontSize; -- m22 = textMat[3] * fontSize; -- -- { -- QMatrix painterMatrix = m_painter->worldMatrix(); -- matrix[0] = painterMatrix.m11(); -- matrix[1] = painterMatrix.m12(); -- matrix[2] = painterMatrix.m21(); -- matrix[3] = painterMatrix.m22(); -- matrix[4] = painterMatrix.dx(); -- matrix[5] = painterMatrix.dy(); -- } -- -- // create the scaled font -- mat[0] = m11; mat[1] = -m12; -- mat[2] = m21; mat[3] = -m22; -- m_font = m_fontEngine->getFont(fontFile, mat, matrix); -- -- delete fontLoc; -- if (fontsrc && !fontsrc->isFile) -- fontsrc->unref(); -- return; -- -- err2: -- delete id; -- delete fontLoc; -- err1: -- if (fontsrc && !fontsrc->isFile) -- fontsrc->unref(); -- return; --#endif --} -- --static QPainterPath convertPath(GfxState *state, GfxPath *path, Qt::FillRule fillRule) --{ -- GfxSubpath *subpath; -- double x1, y1, x2, y2, x3, y3; -- int i, j; -- -- QPainterPath qPath; -- qPath.setFillRule(fillRule); -- for (i = 0; i < path->getNumSubpaths(); ++i) { -- subpath = path->getSubpath(i); -- if (subpath->getNumPoints() > 0) { -- state->transform(subpath->getX(0), subpath->getY(0), &x1, &y1); -- qPath.moveTo(x1, y1); -- j = 1; -- while (j < subpath->getNumPoints()) { -- if (subpath->getCurve(j)) { -- state->transform(subpath->getX(j), subpath->getY(j), &x1, &y1); -- state->transform(subpath->getX(j+1), subpath->getY(j+1), &x2, &y2); -- state->transform(subpath->getX(j+2), subpath->getY(j+2), &x3, &y3); -- qPath.cubicTo( x1, y1, x2, y2, x3, y3); -- j += 3; -- } else { -- state->transform(subpath->getX(j), subpath->getY(j), &x1, &y1); -- qPath.lineTo(x1, y1); -- ++j; -- } -- } -- if (subpath->isClosed()) { -- qPath.closeSubpath(); -- } -- } -- } -- return qPath; --} -- --void ArthurOutputDev::stroke(GfxState *state) --{ -- m_painter->strokePath( convertPath( state, state->getPath(), Qt::OddEvenFill ), m_currentPen ); --} -- --void ArthurOutputDev::fill(GfxState *state) --{ -- m_painter->fillPath( convertPath( state, state->getPath(), Qt::WindingFill ), m_currentBrush ); --} -- --void ArthurOutputDev::eoFill(GfxState *state) --{ -- m_painter->fillPath( convertPath( state, state->getPath(), Qt::OddEvenFill ), m_currentBrush ); --} -- --void ArthurOutputDev::clip(GfxState *state) --{ -- m_painter->setClipPath(convertPath( state, state->getPath(), Qt::WindingFill ) ); --} -- --void ArthurOutputDev::eoClip(GfxState *state) --{ -- m_painter->setClipPath(convertPath( state, state->getPath(), Qt::OddEvenFill ) ); --} -- --void ArthurOutputDev::drawChar(GfxState *state, double x, double y, -- double dx, double dy, -- double originX, double originY, -- CharCode code, int nBytes, Unicode *u, int uLen) { --#ifdef HAVE_SPLASH -- double x1, y1; -- double x2, y2; --// SplashPath *path; -- int render; -- -- if (m_needFontUpdate) { -- updateFont(state); -- } -- if (!m_font) { -- return; -- } -- -- // check for invisible text -- this is used by Acrobat Capture -- render = state->getRender(); -- if (render == 3) { -- return; -- } -- -- x -= originX; -- y -= originY; -- -- // fill -- if (!(render & 1)) { -- SplashPath * fontPath; -- fontPath = m_font->getGlyphPath(code); -- if (fontPath) { -- QPainterPath qPath; -- qPath.setFillRule(Qt::WindingFill); -- for (int i = 0; i < fontPath->length; ++i) { -- // SplashPath.flags: bitwise or allowed -- if (fontPath->flags[i] & splashPathLast || fontPath->flags[i] & splashPathClosed) { -- qPath.closeSubpath(); -- } -- if (fontPath->flags[i] & splashPathFirst) { -- state->transform(fontPath->pts[i].x+x, -fontPath->pts[i].y+y, &x1, &y1); -- qPath.moveTo(x1,y1); -- } -- if (fontPath->flags[i] & splashPathCurve) { -- state->transform(fontPath->pts[i].x+x, -fontPath->pts[i].y+y, &x1, &y1); -- state->transform(fontPath->pts[i+1].x+x, -fontPath->pts[i+1].y+y, &x2, &y2); -- qPath.quadTo(x1,y1,x2,y2); -- ++i; -- } -- // FIXME fix this -- // else if (fontPath->flags[i] & splashPathArcCW) { -- // qDebug() << "Need to implement arc"; -- // } -- else { -- state->transform(fontPath->pts[i].x+x, -fontPath->pts[i].y+y, &x1, &y1); -- qPath.lineTo(x1,y1); -- } -- } -- GfxRGB rgb; -- QColor brushColour = m_currentBrush.color(); -- state->getFillRGB(&rgb); -- brushColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), state->getFillOpacity()); -- m_painter->setBrush(brushColour); -- m_painter->setPen(Qt::NoPen); -- m_painter->drawPath(qPath); -- delete fontPath; -- } -- } -- -- // stroke -- if ((render & 3) == 1 || (render & 3) == 2) { -- qDebug() << "no stroke"; -- /* -- if ((path = m_font->getGlyphPath(code))) { -- path->offset((SplashCoord)x1, (SplashCoord)y1); -- splash->stroke(path); -- delete path; -- } -- */ -- } -- -- // clip -- if (render & 4) { -- qDebug() << "no clip"; -- /* -- path = m_font->getGlyphPath(code); -- path->offset((SplashCoord)x1, (SplashCoord)y1); -- if (textClipPath) { -- textClipPath->append(path); -- delete path; -- } else { -- textClipPath = path; -- } -- */ -- } --#endif --} -- --GBool ArthurOutputDev::beginType3Char(GfxState *state, double x, double y, -- double dx, double dy, -- CharCode code, Unicode *u, int uLen) --{ -- return gFalse; --} -- --void ArthurOutputDev::endType3Char(GfxState *state) --{ --} -- --void ArthurOutputDev::type3D0(GfxState *state, double wx, double wy) --{ --} -- --void ArthurOutputDev::type3D1(GfxState *state, double wx, double wy, -- double llx, double lly, double urx, double ury) --{ --} -- --void ArthurOutputDev::endTextObject(GfxState *state) --{ --} -- -- --void ArthurOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, -- int width, int height, GBool invert, -- GBool interpolate, GBool inlineImg) --{ -- qDebug() << "drawImageMask"; --#if 0 -- unsigned char *buffer; -- unsigned char *dest; -- cairo_surface_t *image; -- cairo_pattern_t *pattern; -- int x, y; -- ImageStream *imgStr; -- Guchar *pix; -- double *ctm; -- cairo_matrix_t matrix; -- int invert_bit; -- int row_stride; -- -- row_stride = (width + 3) & ~3; -- buffer = (unsigned char *) malloc (height * row_stride); -- if (buffer == NULL) { -- error(-1, "Unable to allocate memory for image."); -- return; -- } -- -- /* TODO: Do we want to cache these? */ -- imgStr = new ImageStream(str, width, 1, 1); -- imgStr->reset(); -- -- invert_bit = invert ? 1 : 0; -- -- for (y = 0; y < height; y++) { -- pix = imgStr->getLine(); -- dest = buffer + y * row_stride; -- for (x = 0; x < width; x++) { -- -- if (pix[x] ^ invert_bit) -- *dest++ = 0; -- else -- *dest++ = 255; -- } -- } -- -- image = cairo_image_surface_create_for_data (buffer, CAIRO_FORMAT_A8, -- width, height, row_stride); -- if (image == NULL) -- return; -- pattern = cairo_pattern_create_for_surface (image); -- if (pattern == NULL) -- return; -- -- ctm = state->getCTM(); -- LOG (printf ("drawImageMask %dx%d, matrix: %f, %f, %f, %f, %f, %f\n", -- width, height, ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5])); -- matrix.xx = ctm[0] / width; -- matrix.xy = -ctm[2] / height; -- matrix.yx = ctm[1] / width; -- matrix.yy = -ctm[3] / height; -- matrix.x0 = ctm[2] + ctm[4]; -- matrix.y0 = ctm[3] + ctm[5]; -- cairo_matrix_invert (&matrix); -- cairo_pattern_set_matrix (pattern, &matrix); -- -- cairo_pattern_set_filter (pattern, CAIRO_FILTER_BEST); -- /* FIXME: Doesn't the image mask support any colorspace? */ -- cairo_set_source_rgb (cairo, fill_color.r, fill_color.g, fill_color.b); -- cairo_mask (cairo, pattern); -- -- cairo_pattern_destroy (pattern); -- cairo_surface_destroy (image); -- free (buffer); -- imgStr->close (); -- delete imgStr; --#endif --} -- --//TODO: lots more work here. --void ArthurOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, -- int width, int height, -- GfxImageColorMap *colorMap, -- GBool interpolate, int *maskColors, GBool inlineImg) --{ -- unsigned int *data; -- unsigned int *line; -- int x, y; -- ImageStream *imgStr; -- Guchar *pix; -- int i; -- double *ctm; -- QMatrix matrix; -- QImage image; -- int stride; -- -- /* TODO: Do we want to cache these? */ -- imgStr = new ImageStream(str, width, -- colorMap->getNumPixelComps(), -- colorMap->getBits()); -- imgStr->reset(); -- -- image = QImage(width, height, QImage::Format_ARGB32); -- data = (unsigned int *)image.bits(); -- stride = image.bytesPerLine()/4; -- for (y = 0; y < height; y++) { -- pix = imgStr->getLine(); -- line = data+y*stride; -- colorMap->getRGBLine(pix, line, width); -- -- if (maskColors) { -- for (x = 0; x < width; x++) { -- for (i = 0; i < colorMap->getNumPixelComps(); ++i) { -- if (pix[i] < maskColors[2*i] * 255|| -- pix[i] > maskColors[2*i+1] * 255) { -- *line = *line | 0xff000000; -- break; -- } -- } -- pix += colorMap->getNumPixelComps(); -- line++; -- } -- } else { -- for (x = 0; x < width; x++) { *line = *line | 0xff000000; line++; } -- } -- } -- -- ctm = state->getCTM(); -- matrix.setMatrix(ctm[0] / width, ctm[1] / width, -ctm[2] / height, -ctm[3] / height, ctm[2] + ctm[4], ctm[3] + ctm[5]); -- -- m_painter->setMatrix(matrix, true); -- m_painter->drawImage( QPoint(0,0), image ); -- delete imgStr; -- --} -diff --git a/qt4/src/ArthurOutputDev.h b/qt4/src/ArthurOutputDev.h -deleted file mode 100644 -index 9d5e8679..00000000 ---- a/qt4/src/ArthurOutputDev.h -+++ /dev/null -@@ -1,170 +0,0 @@ --//======================================================================== --// --// ArthurOutputDev.h --// --// Copyright 2003 Glyph & Cog, LLC --// --//======================================================================== -- --//======================================================================== --// --// Modified under the Poppler project - http://poppler.freedesktop.org --// --// All changes made under the Poppler project to this file are licensed --// under GPL version 2 or later --// --// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> --// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> --// Copyright (C) 2009, 2011 Carlos Garcia Campos <carlosgc@gnome.org> --// Copyright (C) 2010 Pino Toscano <pino@kde.org> --// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> --// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> --// --// To see a description of the changes please see the Changelog file that --// came with your tarball or type make ChangeLog if you are building from git --// --//======================================================================== -- --#ifndef ARTHUROUTPUTDEV_H --#define ARTHUROUTPUTDEV_H -- --#ifdef USE_GCC_PRAGMAS --#pragma interface --#endif -- --#include "goo/gtypes.h" --#include "OutputDev.h" --#include "GfxState.h" -- --#include <QtGui/QPainter> -- --class GfxState; --class GfxPath; --class Gfx8BitFont; --struct GfxRGB; -- --class SplashFont; --class SplashFontEngine; --struct SplashGlyphBitmap; -- --//------------------------------------------------------------------------ --// ArthurOutputDev - Qt 4 QPainter renderer --//------------------------------------------------------------------------ -- --class ArthurOutputDev: public OutputDev { --public: -- /** -- * Describes how fonts are distorted (aka hinted) to fit the pixel grid. -- * More hinting means sharper edges and less adherence to the true letter shapes. -- */ -- enum FontHinting { -- NoHinting = 0, ///< Font shapes are left unchanged -- SlightHinting, ///< Font shapes are distorted vertically only -- FullHinting ///< Font shapes are distorted horizontally and vertically -- }; -- -- // Constructor. -- ArthurOutputDev(QPainter *painter ); -- -- // Destructor. -- virtual ~ArthurOutputDev(); -- -- void setFontHinting(FontHinting hinting) { m_fontHinting = hinting; } -- -- //----- get info about output device -- -- // Does this device use upside-down coordinates? -- // (Upside-down means (0,0) is the top left corner of the page.) -- virtual GBool upsideDown() { return gTrue; } -- -- // Does this device use drawChar() or drawString()? -- virtual GBool useDrawChar() { return gTrue; } -- -- // Does this device use beginType3Char/endType3Char? Otherwise, -- // text in Type 3 fonts will be drawn with drawChar/drawString. -- virtual GBool interpretType3Chars() { return gTrue; } -- -- //----- initialization and control -- -- // Start a page. -- virtual void startPage(int pageNum, GfxState *state, XRef *xref); -- -- // End a page. -- virtual void endPage(); -- -- //----- save/restore graphics state -- virtual void saveState(GfxState *state); -- virtual void restoreState(GfxState *state); -- -- //----- update graphics state -- virtual void updateAll(GfxState *state); -- virtual void updateCTM(GfxState *state, double m11, double m12, -- double m21, double m22, double m31, double m32); -- virtual void updateLineDash(GfxState *state); -- virtual void updateFlatness(GfxState *state); -- virtual void updateLineJoin(GfxState *state); -- virtual void updateLineCap(GfxState *state); -- virtual void updateMiterLimit(GfxState *state); -- virtual void updateLineWidth(GfxState *state); -- virtual void updateFillColor(GfxState *state); -- virtual void updateStrokeColor(GfxState *state); -- virtual void updateFillOpacity(GfxState *state); -- virtual void updateStrokeOpacity(GfxState *state); -- -- //----- update text state -- virtual void updateFont(GfxState *state); -- -- //----- path painting -- virtual void stroke(GfxState *state); -- virtual void fill(GfxState *state); -- virtual void eoFill(GfxState *state); -- -- //----- path clipping -- virtual void clip(GfxState *state); -- virtual void eoClip(GfxState *state); -- -- //----- text drawing -- // virtual void drawString(GfxState *state, GooString *s); -- virtual void drawChar(GfxState *state, double x, double y, -- double dx, double dy, -- double originX, double originY, -- CharCode code, int nBytes, Unicode *u, int uLen); -- virtual GBool beginType3Char(GfxState *state, double x, double y, -- double dx, double dy, -- CharCode code, Unicode *u, int uLen); -- virtual void endType3Char(GfxState *state); -- virtual void endTextObject(GfxState *state); -- -- //----- image drawing -- virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, -- int width, int height, GBool invert, -- GBool interpolate, GBool inlineImg); -- virtual void drawImage(GfxState *state, Object *ref, Stream *str, -- int width, int height, GfxImageColorMap *colorMap, -- GBool interpolate, int *maskColors, GBool inlineImg); -- -- //----- Type 3 font operators -- virtual void type3D0(GfxState *state, double wx, double wy); -- virtual void type3D1(GfxState *state, double wx, double wy, -- double llx, double lly, double urx, double ury); -- -- //----- special access -- -- // Called to indicate that a new PDF document has been loaded. -- void startDoc(XRef *xrefA); -- -- GBool isReverseVideo() { return gFalse; } -- --private: -- QPainter *m_painter; -- FontHinting m_fontHinting; -- QFont m_currentFont; -- QPen m_currentPen; -- QBrush m_currentBrush; -- GBool m_needFontUpdate; // set when the font needs to be updated -- SplashFontEngine *m_fontEngine; -- SplashFont *m_font; // current font -- XRef *xref; // xref table for current document --}; -- --#endif -diff --git a/qt4/src/CMakeLists.txt b/qt4/src/CMakeLists.txt -deleted file mode 100644 -index f6547726..00000000 ---- a/qt4/src/CMakeLists.txt -+++ /dev/null -@@ -1,54 +0,0 @@ --add_definitions(${QT4_DEFINITIONS}) -- --include_directories( -- ${CMAKE_CURRENT_SOURCE_DIR} -- ${QT4_INCLUDE_DIR} -- ${CMAKE_CURRENT_BINARY_DIR} --) -- --set(poppler_qt4_SRCS -- poppler-annotation.cc -- poppler-document.cc -- poppler-embeddedfile.cc -- poppler-fontinfo.cc -- poppler-form.cc -- poppler-link.cc -- poppler-link-extractor.cc -- poppler-movie.cc -- poppler-optcontent.cc -- poppler-page.cc -- poppler-base-converter.cc -- poppler-pdf-converter.cc -- poppler-private.cc -- poppler-ps-converter.cc -- poppler-qiodeviceoutstream.cc -- poppler-sound.cc -- poppler-textbox.cc -- poppler-page-transition.cc -- poppler-media.cc -- ArthurOutputDev.cc --) --qt4_automoc(${poppler_qt4_SRCS}) --add_library(poppler-qt4 SHARED ${poppler_qt4_SRCS}) --set_target_properties(poppler-qt4 PROPERTIES VERSION 4.11.0 SOVERSION 4) --if(MINGW) -- get_target_property(POPPLER_QT4_SOVERSION poppler-qt4 SOVERSION) -- set_target_properties(poppler-qt4 PROPERTIES SUFFIX "-${POPPLER_QT4_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}") --endif() --target_link_libraries(poppler-qt4 poppler ${QT4_QTCORE_LIBRARY} ${QT4_QTGUI_LIBRARY} ${QT4_QTXML_LIBRARY}) --if(MSVC) --target_link_libraries(poppler-qt4 poppler ${poppler_LIBS}) --endif() --install(TARGETS poppler-qt4 RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -- --install(FILES -- poppler-qt4.h -- poppler-link.h -- poppler-annotation.h -- poppler-form.h -- poppler-optcontent.h -- poppler-export.h -- poppler-page-transition.h -- poppler-media.h -- DESTINATION include/poppler/qt4) -- -diff --git a/qt4/src/Doxyfile b/qt4/src/Doxyfile -deleted file mode 100644 -index e68690ac..00000000 ---- a/qt4/src/Doxyfile -+++ /dev/null -@@ -1,1637 +0,0 @@ --# Doxyfile 1.7.1 -- --# 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 = "Poppler Qt4 " -- --# 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 = 0.61.1 -- --# 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, Esperanto, 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, Serbian-Cyrilic, Slovak, --# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. -- --OUTPUT_LANGUAGE = English -- --# 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 = NO -- --# 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 = YES -- --# 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 = NO -- --# 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 = 8 -- --# 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 = -- --# 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 -- --# Doxygen selects the parser to use depending on the extension of the files it --# parses. With this tag you can assign which parser to use for a given extension. --# Doxygen has a built-in mapping, but you can override or extend it using this --# tag. The format is ext=language, where ext is a file extension, and language --# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, --# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make --# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C --# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions --# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. -- --EXTENSION_MAPPING = -- --# 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 -- --# For Microsoft's IDL there are propget and propput attributes to indicate getter --# and setter methods for a property. Setting this option to YES (the default) --# will make doxygen to replace the get and set methods by a property in the --# documentation. This will only work if the methods are indeed getting or --# setting a simple type. If this is not the case, or you want to show the --# methods anyway, you should set this option to NO. -- --IDL_PROPERTY_SUPPORT = YES -- --# 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 = NO -- --# 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 -- --# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to --# determine which symbols to keep in memory and which to flush to disk. --# When the cache is full, less often used symbols will be written to disk. --# For small to medium size projects (<1000 input files) the default value is --# probably good enough. For larger projects a too small cache size can cause --# doxygen to be busy swapping symbols to and from disk most of the time --# causing a significant performance penality. --# If the system has enough physical memory increasing the cache will improve the --# performance by keeping more symbols in memory. Note that the value works on --# a logarithmic scale so increasing the size by one will rougly double the --# memory usage. The cache size is given by this formula: --# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, --# corresponding to a cache size of 2^16 = 65536 symbols -- --SYMBOL_CACHE_SIZE = 0 -- --#--------------------------------------------------------------------------- --# 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 = NO -- --# If the EXTRACT_PRIVATE tag is set to YES all private members of a class --# will be included in the documentation. -- --EXTRACT_PRIVATE = NO -- --# If the EXTRACT_STATIC tag is set to YES all static members of a file --# will be included in the documentation. -- --EXTRACT_STATIC = NO -- --# 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 = NO -- --# 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 = YES -- --# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen --# will list include files with double quotes in the documentation --# rather than with sharp brackets. -- --FORCE_LOCAL_INCLUDES = 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 = NO -- --# 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 = YES -- --# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen --# will sort the (brief and detailed) documentation of class members so that --# constructors and destructors are listed first. If set to NO (the default) --# the constructors will appear in the respective orders defined by --# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. --# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO --# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. -- --SORT_MEMBERS_CTORS_1ST = 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 = YES -- --# 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 -- --# Set the SHOW_FILES tag to NO to disable the generation of the Files page. --# This will remove the Files entry from the Quick Index and from the --# Folder Tree View (if specified). The default is YES. -- --SHOW_FILES = YES -- --# Set the SHOW_NAMESPACES tag to NO to disable the generation of the --# Namespaces page. --# This will remove the Namespaces entry from the Quick Index --# and from the Folder Tree View (if specified). The default is YES. -- --SHOW_NAMESPACES = YES -- --# 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 <command> <input-file>, where <command> is the value of --# the FILE_VERSION_FILTER tag, and <input-file> 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 = -- --# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed --# by doxygen. The layout file controls the global structure of the generated --# output files in an output format independent way. The create the layout file --# that represents doxygen's defaults, run doxygen with the -l option. --# You can optionally specify a file name after the option, if omitted --# DoxygenLayout.xml will be used as the name of the layout file. -- --LAYOUT_FILE = -- --#--------------------------------------------------------------------------- --# 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 = YES -- --# 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 = -- --#--------------------------------------------------------------------------- --# 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 = Mainpage.dox \ -- poppler-annotation.h \ -- poppler-form.h \ -- poppler-link.h \ -- poppler-qt4.h \ -- poppler-optcontent.h \ -- poppler-page-transition.h -- --# 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 = -- --# 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 = -- --# 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 <filter> <input-file>, where <filter> --# is the value of the INPUT_FILTER tag, and <input-file> 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 = NO -- --# Setting the INLINE_SOURCES tag to YES will include the body --# of functions and classes directly in the documentation. -- --INLINE_SOURCES = NO -- --# 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 --# 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 --# 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 documentation. -- --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 = APIDOCS-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 = -- --# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. --# Doxygen will adjust the colors in the stylesheet and background images --# according to this color. Hue is specified as an angle on a colorwheel, --# see http://en.wikipedia.org/wiki/Hue for more information. --# For instance the value 0 represents red, 60 is yellow, 120 is green, --# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. --# The allowed range is 0 to 359. -- --HTML_COLORSTYLE_HUE = 220 -- --# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of --# the colors in the HTML output. For a value of 0 the output will use --# grayscales only. A value of 255 will produce the most vivid colors. -- --HTML_COLORSTYLE_SAT = 100 -- --# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to --# the luminance component of the colors in the HTML output. Values below --# 100 gradually make the output lighter, whereas values above 100 make --# the output darker. The value divided by 100 is the actual gamma applied, --# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, --# and 100 does not change the gamma. -- --HTML_COLORSTYLE_GAMMA = 80 -- --# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML --# page will contain the date and time when the page was generated. Setting --# this to NO can help when comparing the output of multiple runs. -- --HTML_TIMESTAMP = YES -- --# 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 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_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. --# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html --# for more information. -- --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 -- --# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify --# the documentation publisher. This should be a reverse domain-name style --# string, e.g. com.mycompany.MyDocSet.documentation. -- --DOCSET_PUBLISHER_ID = org.doxygen.Publisher -- --# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. -- --DOCSET_PUBLISHER_NAME = Publisher -- --# 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_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 CHM_INDEX_ENCODING --# is used to encode HtmlHelp index (hhk), content (hhc) and project file --# content. -- --CHM_INDEX_ENCODING = -- --# 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 -- --# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and --# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated --# that can be used as input for Qt's qhelpgenerator to generate a --# Qt Compressed Help (.qch) of the generated HTML documentation. -- --GENERATE_QHP = YES -- --# If the QHG_LOCATION tag is specified, the QCH_FILE tag can --# be used to specify the file name of the resulting .qch file. --# The path specified is relative to the HTML output folder. -- --QCH_FILE = poppler-qt4.qch -- --# The QHP_NAMESPACE tag specifies the namespace to use when generating --# Qt Help Project output. For more information please see --# http://doc.trolltech.com/qthelpproject.html#namespace -- --QHP_NAMESPACE = org.freedesktop.poppler.qt4 -- --# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating --# Qt Help Project output. For more information please see --# http://doc.trolltech.com/qthelpproject.html#virtual-folders -- --QHP_VIRTUAL_FOLDER = doc -- --# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to --# add. For more information please see --# http://doc.trolltech.com/qthelpproject.html#custom-filters -- --QHP_CUST_FILTER_NAME = "Poppler 0.15.0" -- --# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the --# custom filter to add. For more information please see --# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> --# Qt Help Project / Custom Filters</a>. -- --QHP_CUST_FILTER_ATTRS = poppler -- --# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this --# project's --# filter section matches. --# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> --# Qt Help Project / Filter Attributes</a>. -- --QHP_SECT_FILTER_ATTRS = poppler -- --# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can --# be used to specify the location of Qt's qhelpgenerator. --# If non-empty doxygen will try to run qhelpgenerator on the generated --# .qhp file. -- --QHG_LOCATION = qhelpgenerator -- --# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files --# will be generated, which together with the HTML files, form an Eclipse help --# plugin. To install this plugin and make it available under the help contents --# menu in Eclipse, the contents of the directory containing the HTML and XML --# files needs to be copied into the plugins directory of eclipse. The name of --# the directory within the plugins directory should be the same as --# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before --# the help appears. -- --GENERATE_ECLIPSEHELP = NO -- --# A unique identifier for the eclipse help plugin. When installing the plugin --# the directory name containing the HTML and XML files should also have --# this name. -- --ECLIPSE_DOC_ID = org.doxygen.Project -- --# 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 -- --# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index --# structure should be generated to display hierarchical information. --# If the tag value 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 (i.e. any modern browser). --# Windows users are probably better off using the HTML help feature. -- --GENERATE_TREEVIEW = NO -- --# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, --# and Class Hierarchy pages using a tree view instead of an ordered list. -- --USE_INLINE_TREES = 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 -- --# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open --# links to external symbols imported via tag files in a separate window. -- --EXT_LINKS_IN_WINDOW = NO -- --# Use this tag to change the font size of Latex formulas included --# as images in the HTML documentation. The default is 10. Note that --# when you change the font size after a successful doxygen run you need --# to manually remove any form_*.png images from the HTML output directory --# to force them to be regenerated. -- --FORMULA_FONTSIZE = 10 -- --# Use the FORMULA_TRANPARENT tag to determine whether or not the images --# generated for formulas are transparent PNGs. Transparent PNGs are --# not supported properly for IE 6.0, but are supported on all modern browsers. --# Note that when changing this option you need to delete any form_*.png files --# in the HTML output before the changes have effect. -- --FORMULA_TRANSPARENT = YES -- --# When the SEARCHENGINE tag is enabled doxygen will generate a search box --# for the HTML output. The underlying search engine uses javascript --# and DHTML and should work on any modern browser. Note that when using --# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets --# (GENERATE_DOCSET) there is already a search function so this one should --# typically be disabled. For large projects the javascript based search engine --# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. -- --SEARCHENGINE = NO -- --# When the SERVER_BASED_SEARCH tag is enabled the search engine will be --# implemented using a PHP enabled web server instead of at the web client --# using Javascript. Doxygen will generate the search PHP script and index --# file to put on the web server. The advantage of the server --# based approach is that it scales better to large projects and allows --# full text search. The disadvances is that it is more difficult to setup --# and does not have live searching capabilities. -- --SERVER_BASED_SEARCH = NO -- --#--------------------------------------------------------------------------- --# 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 = APIDOCS-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. --# Note that when enabling USE_PDFLATEX this option is only used for --# generating bitmaps for formulas in the HTML output, but not in the --# Makefile that is written to the output directory. -- --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 = a4wide -- --# 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 = NO -- --# 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 = NO -- --# 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 = NO -- --# If LATEX_SOURCE_CODE is set to YES then doxygen will include --# source code with syntax highlighting in the LaTeX output. --# Note that which sources are shown also depends on other settings --# such as SOURCE_BROWSER. -- --LATEX_SOURCE_CODE = NO -- --#--------------------------------------------------------------------------- --# 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 = NO -- --# 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 = NO -- --# 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 = NO -- --#--------------------------------------------------------------------------- --# 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 = YES -- --# 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 = YES -- --# 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 = "Q_DECL_DEPRECATED=" \ -- "POPPLER_QT4_EXPORT=" -- --# 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 = -- --# 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 = YES -- --# 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 = YES -- --# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is --# allowed to run in parallel. When set to 0 (the default) doxygen will --# base this on the number of processors available in the system. You can set it --# explicitly to a value larger than 0 to get control over the balance --# between CPU load and processing speed. -- --DOT_NUM_THREADS = 0 -- --# By default doxygen will write a font called FreeSans.ttf to the output --# directory and reference it in all dot files that doxygen generates. This --# font does not include all possible unicode characters however, so when you need --# these (or just want a differently looking font) you can specify the font name --# using DOT_FONTNAME. You need need to make sure dot is able to find the font, --# which can be done by putting it in a standard location or by setting the --# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory --# containing the font. -- --DOT_FONTNAME = FreeSans.ttf -- --# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. --# The default size is 10pt. -- --DOT_FONTSIZE = 10 -- --# By default doxygen will tell dot to use the output directory to look for the --# FreeSans.ttf font (which doxygen will put there itself). If you specify a --# different font using DOT_FONTNAME you can set the path where dot --# can find it using this tag. -- --DOT_FONTPATH = -- --# 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 = YES -- --# 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 = NO -- --# 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 = YES -- --# 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 = YES -- --# 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 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 disabled by default, because dot on Windows does not --# seem to support this out of the box. 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 = NO -- --# 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 -diff --git a/qt4/src/Mainpage.dox b/qt4/src/Mainpage.dox -deleted file mode 100644 -index 30398c3d..00000000 ---- a/qt4/src/Mainpage.dox -+++ /dev/null -@@ -1,85 +0,0 @@ --/** --@mainpage The Poppler Qt4 interface library -- --The %Poppler Qt4 interface library, libpoppler-qt4, is a library that --allows Qt4 programmers to easily load and render PDF files. The --%Poppler Qt4 interface library uses poppler internally to do its job, --but the Qt4 programmer will never have to worry about poppler --internals. -- -- --@section help Current Status -- --The %Poppler Qt4 interface library is quite stable and working. -- --@section refimpl Example Programs -- --Examples programs can be found in the qt4/test directory. The %Poppler --Qt4 interface library is also used in the KDE's --document viewer <a href="http://okular.kde.org">Okular</a>. The source files --for Okular's PDF plugin (%Poppler-based) can be found on the git server --of the KDE project, under --<a --href="http://quickgit.kde.org/?p=okular.git&a=tree&f=generators/poppler">this --URL</a>. -- -- --@section req How to use the Poppler Qt4 interface library in three easy steps -- --Programmer who would like to use the %Poppler Qt4 interface library --simply need to add the following line to their C++ source files: -- --@code --#include <poppler-qt4.h> --@endcode -- --A PDF document can then be loaded as follows: --@code --QString filename; -- --Poppler::Document* document = Poppler::Document::load(filename); --if (!document || document->isLocked()) { -- -- // ... error message .... -- -- delete document; -- return; --} --@endcode -- --Pages can be rendered to QImages with the following commands: -- --@code --// Paranoid safety check --if (document == 0) { -- // ... error message ... -- return; --} -- --// Access page of the PDF file --Poppler::Page* pdfPage = document->page(pageNumber); // Document starts at page 0 --if (pdfPage == 0) { -- // ... error message ... -- return; --} -- --// Generate a QImage of the rendered page --QImage image = pdfPage->renderToImage(xres, yres, x, y, width, height); --if (image.isNull()) { -- // ... error message ... -- return; --} -- --// ... use image ... -- --// after the usage, the page must be deleted --delete pdfPage; --@endcode -- --Finally, don't forget to destroy the document: -- --@code --delete document; --@endcode -- */ -- -diff --git a/qt4/src/poppler-annotation-helper.h b/qt4/src/poppler-annotation-helper.h -deleted file mode 100644 -index 3150569c..00000000 ---- a/qt4/src/poppler-annotation-helper.h -+++ /dev/null -@@ -1,181 +0,0 @@ --/* poppler-annotation-helper.h: qt interface to poppler -- * Copyright (C) 2006, 2008, 2017, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2012, Fabio D'Urso <fabiodurso@hotmail.it> -- * Adapting code from -- * Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include <QtCore/QDebug> -- --#include <Object.h> -- --class QColor; -- --class AnnotColor; -- --namespace Poppler { -- --class XPDFReader --{ -- public: -- // find named symbol and parse it -- static inline void lookupName( Dict *, char *, QString & dest ); -- static inline void lookupString( Dict *, char *, QString & dest ); -- static inline void lookupBool( Dict *, char *, bool & dest ); -- static inline void lookupInt( Dict *, char *, int & dest ); -- static inline void lookupNum( Dict *, char *, double & dest ); -- static inline int lookupNumArray( Dict *, char *, double * dest, int len ); -- static inline void lookupColor( Dict *, char *, QColor & color ); -- static inline void lookupIntRef( Dict *, char *, int & dest ); -- static inline void lookupDate( Dict *, char *, QDateTime & dest ); -- // transform from user coords to normalized ones using the matrix M -- static inline void transform( double * M, double x, double y, QPointF &res ); -- static inline void invTransform( double * M, const QPointF &p, double &x, double &y ); --}; -- --void XPDFReader::lookupName( Dict * dict, char * type, QString & dest ) --{ -- Object nameObj = dict->lookup( type ); -- if ( nameObj.isNull() ) -- return; -- if ( nameObj.isName() ) -- dest = nameObj.getName(); -- else -- qDebug() << type << " is not Name." << endl; --} -- --void XPDFReader::lookupString( Dict * dict, char * type, QString & dest ) --{ -- Object stringObj = dict->lookup( type ); -- if ( stringObj.isNull() ) -- return; -- if ( stringObj.isString() ) -- dest = stringObj.getString()->getCString(); -- else -- qDebug() << type << " is not String." << endl; --} -- --void XPDFReader::lookupBool( Dict * dict, char * type, bool & dest ) --{ -- Object boolObj = dict->lookup( type ); -- if ( boolObj.isNull() ) -- return; -- if ( boolObj.isBool() ) -- dest = boolObj.getBool() == gTrue; -- else -- qDebug() << type << " is not Bool." << endl; --} -- --void XPDFReader::lookupInt( Dict * dict, char * type, int & dest ) --{ -- Object intObj = dict->lookup( type ); -- if ( intObj.isNull() ) -- return; -- if ( intObj.isInt() ) -- dest = intObj.getInt(); -- else -- qDebug() << type << " is not Int." << endl; --} -- --void XPDFReader::lookupNum( Dict * dict, char * type, double & dest ) --{ -- Object numObj = dict->lookup( type ); -- if ( numObj.isNull() ) -- return; -- if ( numObj.isNum() ) -- dest = numObj.getNum(); -- else -- qDebug() << type << " is not Num." << endl; --} -- --int XPDFReader::lookupNumArray( Dict * dict, char * type, double * dest, int len ) --{ -- Object arrObj = dict->lookup( type ); -- if ( arrObj.isNull() ) -- return 0; -- if ( arrObj.isArray() ) -- { -- len = qMin( len, arrObj.arrayGetLength() ); -- for ( int i = 0; i < len; i++ ) -- { -- Object numObj = arrObj.arrayGet( i ); -- dest[i] = numObj.getNum(); -- } -- } -- else -- { -- len = 0; -- qDebug() << type << "is not Array." << endl; -- } -- return len; --} -- --void XPDFReader::lookupColor( Dict * dict, char * type, QColor & dest ) --{ -- double c[3]; -- if ( XPDFReader::lookupNumArray( dict, type, c, 3 ) == 3 ) -- dest = QColor( (int)(c[0]*255.0), (int)(c[1]*255.0), (int)(c[2]*255.0)); --} -- --void XPDFReader::lookupIntRef( Dict * dict, char * type, int & dest ) --{ -- Object refObj = dict->lookupNF( type ); -- if ( refObj.isNull() ) -- return; -- if ( refObj.isRef() ) -- dest = refObj.getRefNum(); -- else -- qDebug() << type << " is not Ref." << endl; --} -- --void XPDFReader::lookupDate( Dict * dict, char * type, QDateTime & dest ) --{ -- Object dateObj = dict->lookup( type ); -- if ( dateObj.isNull() ) -- return; -- if ( dateObj.isString() ) -- { -- dest = convertDate( dateObj.getString()->getCString() ); -- } -- else -- qDebug() << type << " is not Date" << endl; --} -- --void XPDFReader::transform( double * M, double x, double y, QPointF &res ) --{ -- res.setX( M[0] * x + M[2] * y + M[4] ); -- res.setY( M[1] * x + M[3] * y + M[5] ); --} -- --void XPDFReader::invTransform( double * M, const QPointF &p, double &x, double &y ) --{ -- const double det = M[0]*M[3] - M[1]*M[2]; -- Q_ASSERT(det != 0); -- -- const double invM[4] = { M[3]/det, -M[1]/det, -M[2]/det, M[0]/det }; -- const double xt = p.x() - M[4]; -- const double yt = p.y() - M[5]; -- -- x = invM[0] * xt + invM[2] * yt; -- y = invM[1] * xt + invM[3] * yt; --} -- --QColor convertAnnotColor( AnnotColor *color ); --AnnotColor* convertQColor( const QColor &color ); -- --} -diff --git a/qt4/src/poppler-annotation-private.h b/qt4/src/poppler-annotation-private.h -deleted file mode 100644 -index b530e2f2..00000000 ---- a/qt4/src/poppler-annotation-private.h -+++ /dev/null -@@ -1,112 +0,0 @@ --/* poppler-annotation-private.h: qt interface to poppler -- * Copyright (C) 2007, Pino Toscano <pino@kde.org> -- * Copyright (C) 2012, Tobias Koenig <tokoe@kdab.com> -- * Copyright (C) 2012, 2013 Fabio D'Urso <fabiodurso@hotmail.it> -- * Copyright (C) 2012, 2014, Albert Astals Cid <aacid@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef _POPPLER_ANNOTATION_PRIVATE_H_ --#define _POPPLER_ANNOTATION_PRIVATE_H_ -- --#include <QtCore/QLinkedList> --#include <QtCore/QPointF> --#include <QtCore/QSharedDataPointer> -- --#include "poppler-annotation.h" -- --#include <Object.h> -- --class Annot; --class AnnotPath; --class Link; --class Page; --class PDFRectangle; -- --namespace Poppler --{ --class DocumentData; -- --class AnnotationPrivate : public QSharedData --{ -- public: -- AnnotationPrivate(); -- virtual ~AnnotationPrivate(); -- -- void addRevision(Annotation *ann, Annotation::RevScope scope, Annotation::RevType type); -- -- /* Returns an Annotation of the right subclass whose d_ptr points to -- * this AnnotationPrivate */ -- virtual Annotation * makeAlias() = 0; -- -- /* properties: contents related */ -- QString author; -- QString contents; -- QString uniqueName; -- QDateTime modDate; // before or equal to currentDateTime() -- QDateTime creationDate; // before or equal to modifyDate -- -- /* properties: look/interaction related */ -- int flags; -- QRectF boundary; -- -- /* style and popup */ -- Annotation::Style style; -- Annotation::Popup popup; -- -- /* revisions */ -- Annotation::RevScope revisionScope; -- Annotation::RevType revisionType; -- QList<Annotation*> revisions; -- -- /* After this call, the Annotation object will behave like a wrapper for -- * the specified Annot object. All cached values are discarded */ -- void tieToNativeAnnot(Annot *ann, ::Page *page, DocumentData *doc); -- -- /* Creates a new Annot object on the specified page, flushes current -- * values to that object and ties this Annotation to that object */ -- virtual Annot* createNativeAnnot(::Page *destPage, DocumentData *doc) = 0; -- -- /* Inited to 0 (i.e. untied annotation) */ -- Annot *pdfAnnot; -- ::Page *pdfPage; -- DocumentData * parentDoc; -- -- /* The following helpers only work if pdfPage is set */ -- void flushBaseAnnotationProperties(); -- void fillNormalizationMTX(double MTX[6], int pageRotation) const; -- void fillTransformationMTX(double MTX[6]) const; -- QRectF fromPdfRectangle(const PDFRectangle &r) const; -- PDFRectangle boundaryToPdfRectangle(const QRectF &r, int flags) const; -- AnnotPath * toAnnotPath(const QLinkedList<QPointF> &l) const; -- -- /* Scan page for annotations, parentId=0 searches for root annotations, subtypes empty means all subtypes */ -- static QList<Annotation*> findAnnotations(::Page *pdfPage, DocumentData *doc, const QSet<Annotation::SubType> &subtypes, int parentId = 0); -- -- /* Add given annotation to given page */ -- static void addAnnotationToPage(::Page *pdfPage, DocumentData *doc, const Annotation * ann); -- -- /* Remove annotation from page and destroy ann */ -- static void removeAnnotationFromPage(::Page *pdfPage, const Annotation * ann); -- -- Ref pdfObjectReference() const; -- -- Link* additionalAction( Annotation::AdditionalActionType type ) const; --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-annotation.cc b/qt4/src/poppler-annotation.cc -deleted file mode 100644 -index 8a7f60b1..00000000 ---- a/qt4/src/poppler-annotation.cc -+++ /dev/null -@@ -1,5089 +0,0 @@ --/* poppler-annotation.cc: qt interface to poppler -- * Copyright (C) 2006, 2009, 2012-2015 Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2006, 2008, 2010 Pino Toscano <pino@kde.org> -- * Copyright (C) 2012, Guillermo A. Amaral B. <gamaral@kde.org> -- * Copyright (C) 2012-2014 Fabio D'Urso <fabiodurso@hotmail.it> -- * Copyright (C) 2012, 2015, Tobias Koenig <tokoe@kdab.com> -- * Adapting code from -- * Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --// qt/kde includes --#include <QtCore/QRegExp> --#include <QtCore/QtAlgorithms> --#include <QtXml/QDomElement> --#include <QtGui/QColor> --#include <QtGui/QTransform> -- --// local includes --#include "poppler-annotation.h" --#include "poppler-link.h" --#include "poppler-qt4.h" --#include "poppler-annotation-helper.h" --#include "poppler-annotation-private.h" --#include "poppler-page-private.h" --#include "poppler-private.h" -- --// poppler includes --#include <Page.h> --#include <Annot.h> --#include <Gfx.h> --#include <Error.h> --#include <FileSpec.h> --#include <Link.h> -- --/* Almost all getters directly query the underlying poppler annotation, with -- * the exceptions of link, file attachment, sound, movie and screen annotations, -- * Whose data retrieval logic has not been moved yet. Their getters return -- * static data set at creation time by findAnnotations -- */ -- --namespace Poppler { -- --//BEGIN AnnotationUtils implementation --Annotation * AnnotationUtils::createAnnotation( const QDomElement & annElement ) --{ -- // safety check on annotation element -- if ( !annElement.hasAttribute( "type" ) ) -- return 0; -- -- // build annotation of given type -- Annotation * annotation = 0; -- int typeNumber = annElement.attribute( "type" ).toInt(); -- switch ( typeNumber ) -- { -- case Annotation::AText: -- annotation = new TextAnnotation( annElement ); -- break; -- case Annotation::ALine: -- annotation = new LineAnnotation( annElement ); -- break; -- case Annotation::AGeom: -- annotation = new GeomAnnotation( annElement ); -- break; -- case Annotation::AHighlight: -- annotation = new HighlightAnnotation( annElement ); -- break; -- case Annotation::AStamp: -- annotation = new StampAnnotation( annElement ); -- break; -- case Annotation::AInk: -- annotation = new InkAnnotation( annElement ); -- break; -- case Annotation::ACaret: -- annotation = new CaretAnnotation( annElement ); -- break; -- } -- -- // return created annotation -- return annotation; --} -- --void AnnotationUtils::storeAnnotation( const Annotation * ann, QDomElement & annElement, -- QDomDocument & document ) --{ -- // save annotation's type as element's attribute -- annElement.setAttribute( "type", (uint)ann->subType() ); -- -- // append all annotation data as children of this node -- ann->store( annElement, document ); --} -- --QDomElement AnnotationUtils::findChildElement( const QDomNode & parentNode, -- const QString & name ) --{ -- // loop through the whole children and return a 'name' named element -- QDomNode subNode = parentNode.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement element = subNode.toElement(); -- if ( element.tagName() == name ) -- return element; -- subNode = subNode.nextSibling(); -- } -- // if the name can't be found, return a dummy null element -- return QDomElement(); --} --//END AnnotationUtils implementation -- -- --//BEGIN Annotation implementation --AnnotationPrivate::AnnotationPrivate() -- : flags( 0 ), revisionScope ( Annotation::Root ), -- revisionType ( Annotation::None ), pdfAnnot ( 0 ), pdfPage ( 0 ), -- parentDoc ( 0 ) --{ --} -- --void AnnotationPrivate::addRevision( Annotation *ann, Annotation::RevScope scope, Annotation::RevType type ) --{ -- /* Since ownership stays with the caller, create an alias of ann */ -- revisions.append( ann->d_ptr->makeAlias() ); -- -- /* Set revision properties */ -- revisionScope = scope; -- revisionType = type; --} -- --AnnotationPrivate::~AnnotationPrivate() --{ -- // Delete all children revisions -- qDeleteAll( revisions ); -- -- // Release Annot object -- if (pdfAnnot) -- pdfAnnot->decRefCnt(); --} -- --void AnnotationPrivate::tieToNativeAnnot(Annot *ann, ::Page *page, Poppler::DocumentData * doc) --{ -- if (pdfAnnot) -- { -- error(errIO, -1, "Annotation is already tied"); -- return; -- } -- -- pdfAnnot = ann; -- pdfPage = page; -- parentDoc = doc; -- -- pdfAnnot->incRefCnt(); --} -- --/* This method is called when a new annotation is created, after pdfAnnot and -- * pdfPage have been set */ --void AnnotationPrivate::flushBaseAnnotationProperties() --{ -- Q_ASSERT ( pdfPage ); -- -- Annotation *q = makeAlias(); // Setters are defined in the public class -- -- // Since pdfAnnot has been set, this calls will write in the Annot object -- q->setAuthor(author); -- q->setContents(contents); -- q->setUniqueName(uniqueName); -- q->setModificationDate(modDate); -- q->setCreationDate(creationDate); -- q->setFlags(flags); -- //q->setBoundary(boundary); -- already set by subclass-specific code -- q->setStyle(style); -- q->setPopup(popup); -- -- // Flush revisions -- foreach (Annotation *r, revisions) -- { -- // TODO: Flush revision -- delete r; // Object is no longer needed -- } -- -- delete q; -- -- // Clear some members to save memory -- author.clear(); -- contents.clear(); -- uniqueName.clear(); -- revisions.clear(); --} -- --// Returns matrix to convert from user space coords (oriented according to the --// specified rotation) to normalized coords --void AnnotationPrivate::fillNormalizationMTX(double MTX[6], int pageRotation) const --{ -- Q_ASSERT ( pdfPage ); -- -- // build a normalized transform matrix for this page at 100% scale -- GfxState * gfxState = new GfxState( 72.0, 72.0, pdfPage->getCropBox(), pageRotation, gTrue ); -- double * gfxCTM = gfxState->getCTM(); -- -- double w = pdfPage->getCropWidth(); -- double h = pdfPage->getCropHeight(); -- -- // Swap width and height if the page is rotated landscape or seascape -- if ( pageRotation == 90 || pageRotation == 270 ) -- { -- double t = w; -- w = h; -- h = t; -- } -- -- for ( int i = 0; i < 6; i+=2 ) -- { -- MTX[i] = gfxCTM[i] / w; -- MTX[i+1] = gfxCTM[i+1] / h; -- } -- delete gfxState; --} -- --// Returns matrix to convert from user space coords (i.e. those that are stored --// in the PDF file) to normalized coords (i.e. those that we expose to clients). --// This method also applies a rotation around the top-left corner if the --// FixedRotation flag is set. --void AnnotationPrivate::fillTransformationMTX(double MTX[6]) const --{ -- Q_ASSERT ( pdfPage ); -- Q_ASSERT ( pdfAnnot ); -- -- const int pageRotate = pdfPage->getRotate(); -- -- if ( pageRotate == 0 || ( pdfAnnot->getFlags() & Annot::flagNoRotate ) == 0 ) -- { -- // Use the normalization matrix for this page's rotation -- fillNormalizationMTX( MTX, pageRotate ); -- } -- else -- { -- // Clients expect coordinates relative to this page's rotation, but -- // FixedRotation annotations internally use unrotated coordinates: -- // construct matrix to both normalize and rotate coordinates using the -- // top-left corner as rotation pivot -- -- double MTXnorm[6]; -- fillNormalizationMTX( MTXnorm, pageRotate ); -- -- QTransform transform( MTXnorm[0], MTXnorm[1], MTXnorm[2], -- MTXnorm[3], MTXnorm[4], MTXnorm[5] ); -- transform.translate( +pdfAnnot->getXMin(), +pdfAnnot->getYMax() ); -- transform.rotate( pageRotate ); -- transform.translate( -pdfAnnot->getXMin(), -pdfAnnot->getYMax() ); -- -- MTX[0] = transform.m11(); -- MTX[1] = transform.m12(); -- MTX[2] = transform.m21(); -- MTX[3] = transform.m22(); -- MTX[4] = transform.dx(); -- MTX[5] = transform.dy(); -- } --} -- --QRectF AnnotationPrivate::fromPdfRectangle(const PDFRectangle &r) const --{ -- double swp, MTX[6]; -- fillTransformationMTX(MTX); -- -- QPointF p1, p2; -- XPDFReader::transform( MTX, r.x1, r.y1, p1 ); -- XPDFReader::transform( MTX, r.x2, r.y2, p2 ); -- -- double tl_x = p1.x(); -- double tl_y = p1.y(); -- double br_x = p2.x(); -- double br_y = p2.y(); -- -- if (tl_x > br_x) -- { -- swp = tl_x; -- tl_x = br_x; -- br_x = swp; -- } -- -- if (tl_y > br_y) -- { -- swp = tl_y; -- tl_y = br_y; -- br_y = swp; -- } -- -- return QRectF( QPointF(tl_x,tl_y) , QPointF(br_x,br_y) ); --} -- --// This function converts a boundary QRectF in normalized coords to a --// PDFRectangle in user coords. If the FixedRotation flag is set, this function --// also applies a rotation around the top-left corner: it's the inverse of --// the transformation produced by fillTransformationMTX, but we can't use --// fillTransformationMTX here because it relies on the native annotation --// object's boundary rect to be already set up. --PDFRectangle AnnotationPrivate::boundaryToPdfRectangle(const QRectF &r, int flags) const --{ -- Q_ASSERT ( pdfPage ); -- -- const int pageRotate = pdfPage->getRotate(); -- -- double MTX[6]; -- fillNormalizationMTX( MTX, pageRotate ); -- -- double tl_x, tl_y, br_x, br_y, swp; -- XPDFReader::invTransform( MTX, r.topLeft(), tl_x, tl_y ); -- XPDFReader::invTransform( MTX, r.bottomRight(), br_x, br_y ); -- -- if (tl_x > br_x) -- { -- swp = tl_x; -- tl_x = br_x; -- br_x = swp; -- } -- -- if (tl_y > br_y) -- { -- swp = tl_y; -- tl_y = br_y; -- br_y = swp; -- } -- -- const int rotationFixUp = ( flags & Annotation::FixedRotation ) ? pageRotate : 0; -- const double width = br_x - tl_x; -- const double height = br_y - tl_y; -- -- if ( rotationFixUp == 0 ) -- return PDFRectangle(tl_x, tl_y, br_x, br_y); -- else if ( rotationFixUp == 90 ) -- return PDFRectangle(tl_x, tl_y - width, tl_x + height, tl_y); -- else if ( rotationFixUp == 180 ) -- return PDFRectangle(br_x, tl_y - height, br_x + width, tl_y); -- else // rotationFixUp == 270 -- return PDFRectangle(br_x, br_y - width, br_x + height, br_y); --} -- --AnnotPath * AnnotationPrivate::toAnnotPath(const QLinkedList<QPointF> &list) const --{ -- const int count = list.size(); -- AnnotCoord **ac = (AnnotCoord **) gmallocn(count, sizeof(AnnotCoord*)); -- -- double MTX[6]; -- fillTransformationMTX(MTX); -- -- int pos = 0; -- foreach (const QPointF &p, list) -- { -- double x, y; -- XPDFReader::invTransform( MTX, p, x, y ); -- ac[pos++] = new AnnotCoord(x, y); -- } -- -- return new AnnotPath(ac, count); --} -- --QList<Annotation*> AnnotationPrivate::findAnnotations(::Page *pdfPage, DocumentData *doc, const QSet<Annotation::SubType> &subtypes, int parentID) --{ -- Annots* annots = pdfPage->getAnnots(); -- const uint numAnnotations = annots->getNumAnnots(); -- if ( numAnnotations == 0 ) -- { -- return QList<Annotation*>(); -- } -- -- const bool wantTextAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::AText); -- const bool wantLineAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::ALine); -- const bool wantGeomAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::AGeom); -- const bool wantHighlightAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::AHighlight); -- const bool wantStampAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::AStamp); -- const bool wantInkAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::AInk); -- const bool wantLinkAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::ALink); -- const bool wantCaretAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::ACaret); -- const bool wantFileAttachmentAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::AFileAttachment); -- const bool wantSoundAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::ASound); -- const bool wantMovieAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::AMovie); -- const bool wantScreenAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::AScreen); -- const bool wantWidgetAnnotations = subtypes.isEmpty() || subtypes.contains(Annotation::AWidget); -- -- // Create Annotation objects and tie to their native Annot -- QList<Annotation*> res; -- for ( uint j = 0; j < numAnnotations; j++ ) -- { -- // get the j-th annotation -- Annot * ann = annots->getAnnot( j ); -- if ( !ann ) -- { -- error(errInternal, -1, "Annot {0:ud} is null", j); -- continue; -- } -- -- // Check parent annotation -- AnnotMarkup * markupann = dynamic_cast< AnnotMarkup * >( ann ); -- if (!markupann) -- { -- // Assume it's a root annotation, and skip if user didn't request it -- if (parentID != 0) -- continue; -- } -- else if (markupann->getInReplyToID() != parentID) -- continue; -- -- /* Create Annotation of the right subclass */ -- Annotation * annotation = 0; -- Annot::AnnotSubtype subType = ann->getType(); -- -- switch ( subType ) -- { -- case Annot::typeText: -- if (!wantTextAnnotations) -- continue; -- annotation = new TextAnnotation(TextAnnotation::Linked); -- break; -- case Annot::typeFreeText: -- if (!wantTextAnnotations) -- continue; -- annotation = new TextAnnotation(TextAnnotation::InPlace); -- break; -- case Annot::typeLine: -- if (!wantLineAnnotations) -- continue; -- annotation = new LineAnnotation(LineAnnotation::StraightLine); -- break; -- case Annot::typePolygon: -- case Annot::typePolyLine: -- if (!wantLineAnnotations) -- continue; -- annotation = new LineAnnotation(LineAnnotation::Polyline); -- break; -- case Annot::typeSquare: -- case Annot::typeCircle: -- if (!wantGeomAnnotations) -- continue; -- annotation = new GeomAnnotation(); -- break; -- case Annot::typeHighlight: -- case Annot::typeUnderline: -- case Annot::typeSquiggly: -- case Annot::typeStrikeOut: -- if (!wantHighlightAnnotations) -- continue; -- annotation = new HighlightAnnotation(); -- break; -- case Annot::typeStamp: -- if (!wantStampAnnotations) -- continue; -- annotation = new StampAnnotation(); -- break; -- case Annot::typeInk: -- if (!wantInkAnnotations) -- continue; -- annotation = new InkAnnotation(); -- break; -- case Annot::typeLink: /* TODO: Move logic to getters */ -- { -- if (!wantLinkAnnotations) -- continue; -- // parse Link params -- AnnotLink * linkann = static_cast< AnnotLink * >( ann ); -- LinkAnnotation * l = new LinkAnnotation(); -- annotation = l; -- -- // -> hlMode -- l->setLinkHighlightMode( (LinkAnnotation::HighlightMode)linkann->getLinkEffect() ); -- -- // -> link region -- // TODO -- -- // reading link action -- if ( linkann->getAction() ) -- { -- Link * popplerLink = PageData::convertLinkActionToLink( linkann->getAction(), doc, QRectF() ); -- if ( popplerLink ) -- { -- l->setLinkDestination( popplerLink ); -- } -- } -- break; -- } -- case Annot::typeCaret: -- if (!wantCaretAnnotations) -- continue; -- annotation = new CaretAnnotation(); -- break; -- case Annot::typeFileAttachment: /* TODO: Move logic to getters */ -- { -- if (!wantFileAttachmentAnnotations) -- continue; -- AnnotFileAttachment * attachann = static_cast< AnnotFileAttachment * >( ann ); -- FileAttachmentAnnotation * f = new FileAttachmentAnnotation(); -- annotation = f; -- // -> fileIcon -- f->setFileIconName( QString::fromLatin1( attachann->getName()->getCString() ) ); -- // -> embeddedFile -- FileSpec *filespec = new FileSpec( attachann->getFile() ); -- f->setEmbeddedFile( new EmbeddedFile( *new EmbeddedFileData( filespec ) ) ); -- break; -- } -- case Annot::typeSound: /* TODO: Move logic to getters */ -- { -- if (!wantSoundAnnotations) -- continue; -- AnnotSound * soundann = static_cast< AnnotSound * >( ann ); -- SoundAnnotation * s = new SoundAnnotation(); -- annotation = s; -- -- // -> soundIcon -- s->setSoundIconName( QString::fromLatin1( soundann->getName()->getCString() ) ); -- // -> sound -- s->setSound( new SoundObject( soundann->getSound() ) ); -- break; -- } -- case Annot::typeMovie: /* TODO: Move logic to getters */ -- { -- if (!wantMovieAnnotations) -- continue; -- AnnotMovie * movieann = static_cast< AnnotMovie * >( ann ); -- MovieAnnotation * m = new MovieAnnotation(); -- annotation = m; -- -- // -> movie -- MovieObject *movie = new MovieObject( movieann ); -- m->setMovie( movie ); -- // -> movieTitle -- GooString * movietitle = movieann->getTitle(); -- if ( movietitle ) -- m->setMovieTitle( QString::fromLatin1( movietitle->getCString() ) ); -- break; -- } -- case Annot::typeScreen: -- { -- if (!wantScreenAnnotations) -- continue; -- AnnotScreen * screenann = static_cast< AnnotScreen * >( ann ); -- if (!screenann->getAction()) -- continue; -- ScreenAnnotation * s = new ScreenAnnotation(); -- annotation = s; -- -- // -> screen -- Link * popplerLink = PageData::convertLinkActionToLink( screenann->getAction(), doc, QRectF() ); -- s->setAction( static_cast<Poppler::LinkRendition *>(popplerLink) ); -- -- // -> screenTitle -- GooString * screentitle = screenann->getTitle(); -- if ( screentitle ) -- s->setScreenTitle( UnicodeParsedString( screentitle ) ); -- break; -- } -- case Annot::typePopup: -- continue; // popups are parsed by Annotation's window() getter -- case Annot::typeUnknown: -- continue; // special case for ignoring unknown annotations -- case Annot::typeWidget: -- if (!wantWidgetAnnotations) -- continue; -- annotation = new WidgetAnnotation(); -- break; -- case Annot::typeRichMedia: -- { -- const AnnotRichMedia * annotRichMedia = static_cast< AnnotRichMedia * >( ann ); -- -- RichMediaAnnotation *richMediaAnnotation = new RichMediaAnnotation; -- -- const AnnotRichMedia::Settings *annotSettings = annotRichMedia->getSettings(); -- if ( annotSettings ) { -- RichMediaAnnotation::Settings *settings = new RichMediaAnnotation::Settings; -- -- if ( annotSettings->getActivation() ) { -- RichMediaAnnotation::Activation *activation = new RichMediaAnnotation::Activation; -- -- switch ( annotSettings->getActivation()->getCondition() ) -- { -- case AnnotRichMedia::Activation::conditionPageOpened: -- activation->setCondition( RichMediaAnnotation::Activation::PageOpened ); -- break; -- case AnnotRichMedia::Activation::conditionPageVisible: -- activation->setCondition( RichMediaAnnotation::Activation::PageVisible ); -- break; -- case AnnotRichMedia::Activation::conditionUserAction: -- activation->setCondition( RichMediaAnnotation::Activation::UserAction ); -- break; -- } -- -- settings->setActivation( activation ); -- } -- -- if ( annotSettings->getDeactivation() ) { -- RichMediaAnnotation::Deactivation *deactivation = new RichMediaAnnotation::Deactivation; -- -- switch ( annotSettings->getDeactivation()->getCondition() ) -- { -- case AnnotRichMedia::Deactivation::conditionPageClosed: -- deactivation->setCondition( RichMediaAnnotation::Deactivation::PageClosed ); -- break; -- case AnnotRichMedia::Deactivation::conditionPageInvisible: -- deactivation->setCondition( RichMediaAnnotation::Deactivation::PageInvisible ); -- break; -- case AnnotRichMedia::Deactivation::conditionUserAction: -- deactivation->setCondition( RichMediaAnnotation::Deactivation::UserAction ); -- break; -- } -- -- settings->setDeactivation( deactivation ); -- } -- -- richMediaAnnotation->setSettings( settings ); -- } -- -- const AnnotRichMedia::Content *annotContent = annotRichMedia->getContent(); -- if ( annotContent ) { -- RichMediaAnnotation::Content *content = new RichMediaAnnotation::Content; -- -- const int configurationsCount = annotContent->getConfigurationsCount(); -- if ( configurationsCount > 0 ) { -- QList< RichMediaAnnotation::Configuration* > configurations; -- -- for ( int i = 0; i < configurationsCount; ++i ) { -- const AnnotRichMedia::Configuration *annotConfiguration = annotContent->getConfiguration( i ); -- if ( !annotConfiguration ) -- continue; -- -- RichMediaAnnotation::Configuration *configuration = new RichMediaAnnotation::Configuration; -- -- if ( annotConfiguration->getName() ) -- configuration->setName( UnicodeParsedString( annotConfiguration->getName() ) ); -- -- switch ( annotConfiguration->getType() ) -- { -- case AnnotRichMedia::Configuration::type3D: -- configuration->setType( RichMediaAnnotation::Configuration::Type3D ); -- break; -- case AnnotRichMedia::Configuration::typeFlash: -- configuration->setType( RichMediaAnnotation::Configuration::TypeFlash ); -- break; -- case AnnotRichMedia::Configuration::typeSound: -- configuration->setType( RichMediaAnnotation::Configuration::TypeSound ); -- break; -- case AnnotRichMedia::Configuration::typeVideo: -- configuration->setType( RichMediaAnnotation::Configuration::TypeVideo ); -- break; -- } -- -- const int instancesCount = annotConfiguration->getInstancesCount(); -- if ( instancesCount > 0 ) { -- QList< RichMediaAnnotation::Instance* > instances; -- -- for ( int j = 0; j < instancesCount; ++j ) { -- const AnnotRichMedia::Instance *annotInstance = annotConfiguration->getInstance( j ); -- if ( !annotInstance ) -- continue; -- -- RichMediaAnnotation::Instance *instance = new RichMediaAnnotation::Instance; -- -- switch ( annotInstance->getType() ) -- { -- case AnnotRichMedia::Instance::type3D: -- instance->setType( RichMediaAnnotation::Instance::Type3D ); -- break; -- case AnnotRichMedia::Instance::typeFlash: -- instance->setType( RichMediaAnnotation::Instance::TypeFlash ); -- break; -- case AnnotRichMedia::Instance::typeSound: -- instance->setType( RichMediaAnnotation::Instance::TypeSound ); -- break; -- case AnnotRichMedia::Instance::typeVideo: -- instance->setType( RichMediaAnnotation::Instance::TypeVideo ); -- break; -- } -- -- const AnnotRichMedia::Params *annotParams = annotInstance->getParams(); -- if ( annotParams ) { -- RichMediaAnnotation::Params *params = new RichMediaAnnotation::Params; -- -- if ( annotParams->getFlashVars() ) -- params->setFlashVars( UnicodeParsedString( annotParams->getFlashVars() ) ); -- -- instance->setParams( params ); -- } -- -- instances.append( instance ); -- } -- -- configuration->setInstances( instances ); -- } -- -- configurations.append( configuration ); -- } -- -- content->setConfigurations( configurations ); -- } -- -- const int assetsCount = annotContent->getAssetsCount(); -- if ( assetsCount > 0 ) { -- QList< RichMediaAnnotation::Asset* > assets; -- -- for ( int i = 0; i < assetsCount; ++i ) { -- const AnnotRichMedia::Asset *annotAsset = annotContent->getAsset( i ); -- if ( !annotAsset ) -- continue; -- -- RichMediaAnnotation::Asset *asset = new RichMediaAnnotation::Asset; -- -- if ( annotAsset->getName() ) -- asset->setName( UnicodeParsedString( annotAsset->getName() ) ); -- -- FileSpec *fileSpec = new FileSpec( annotAsset->getFileSpec() ); -- asset->setEmbeddedFile( new EmbeddedFile( *new EmbeddedFileData( fileSpec ) ) ); -- -- assets.append( asset ); -- } -- -- content->setAssets( assets ); -- } -- -- richMediaAnnotation->setContent( content ); -- } -- -- annotation = richMediaAnnotation; -- -- break; -- } -- default: -- { --#define CASE_FOR_TYPE( thetype ) \ -- case Annot::type ## thetype: \ -- error(errUnimplemented, -1, "Annotation " #thetype " not supported"); \ -- break; -- switch ( subType ) -- { -- CASE_FOR_TYPE( PrinterMark ) -- CASE_FOR_TYPE( TrapNet ) -- CASE_FOR_TYPE( Watermark ) -- CASE_FOR_TYPE( 3D ) -- default: error(errUnimplemented, -1, "Annotation {0:d} not supported", subType); -- } -- continue; --#undef CASE_FOR_TYPE -- } -- } -- -- annotation->d_ptr->tieToNativeAnnot(ann, pdfPage, doc); -- res.append(annotation); -- } -- -- return res; --} -- --Ref AnnotationPrivate::pdfObjectReference() const --{ -- if (pdfAnnot == 0) -- { -- const Ref invalid_ref = { -1, -1 }; -- return invalid_ref; -- } -- -- return pdfAnnot->getRef(); --} -- --Link* AnnotationPrivate::additionalAction( Annotation::AdditionalActionType type ) const --{ -- if ( pdfAnnot->getType() != Annot::typeScreen && pdfAnnot->getType() != Annot::typeWidget ) -- return 0; -- -- Annot::AdditionalActionsType actionType = Annot::actionCursorEntering; -- switch ( type ) -- { -- case Annotation::CursorEnteringAction: actionType = Annot::actionCursorEntering; break; -- case Annotation::CursorLeavingAction: actionType = Annot::actionCursorLeaving; break; -- case Annotation::MousePressedAction: actionType = Annot::actionMousePressed; break; -- case Annotation::MouseReleasedAction: actionType = Annot::actionMouseReleased; break; -- case Annotation::FocusInAction: actionType = Annot::actionFocusIn; break; -- case Annotation::FocusOutAction: actionType = Annot::actionFocusOut; break; -- case Annotation::PageOpeningAction: actionType = Annot::actionPageOpening; break; -- case Annotation::PageClosingAction: actionType = Annot::actionPageClosing; break; -- case Annotation::PageVisibleAction: actionType = Annot::actionPageVisible; break; -- case Annotation::PageInvisibleAction: actionType = Annot::actionPageInvisible; break; -- } -- -- ::LinkAction *linkAction = 0; -- if ( pdfAnnot->getType() == Annot::typeScreen ) -- linkAction = static_cast<AnnotScreen*>( pdfAnnot )->getAdditionalAction( actionType ); -- else -- linkAction = static_cast<AnnotWidget*>( pdfAnnot )->getAdditionalAction( actionType ); -- -- Link *link = 0; -- -- if ( linkAction ) -- link = PageData::convertLinkActionToLink( linkAction, parentDoc, QRectF() ); -- -- return link; --} -- --void AnnotationPrivate::addAnnotationToPage(::Page *pdfPage, DocumentData *doc, const Annotation * ann) --{ -- if (ann->d_ptr->pdfAnnot != 0) -- { -- error(errIO, -1, "Annotation is already tied"); -- return; -- } -- -- // Unimplemented annotations can't be created by the user because their ctor -- // is private. Therefore, createNativeAnnot will never return 0 -- Annot *nativeAnnot = ann->d_ptr->createNativeAnnot(pdfPage, doc); -- Q_ASSERT(nativeAnnot); -- pdfPage->addAnnot(nativeAnnot); --} -- --void AnnotationPrivate::removeAnnotationFromPage(::Page *pdfPage, const Annotation * ann) --{ -- if (ann->d_ptr->pdfAnnot == 0) -- { -- error(errIO, -1, "Annotation is not tied"); -- return; -- } -- -- if (ann->d_ptr->pdfPage != pdfPage) -- { -- error(errIO, -1, "Annotation doesn't belong to the specified page"); -- return; -- } -- -- // Remove annotation -- pdfPage->removeAnnot(ann->d_ptr->pdfAnnot); -- -- // Destroy object -- delete ann; --} -- --class Annotation::Style::Private : public QSharedData --{ -- public: -- Private() -- : opacity( 1.0 ), width( 1.0 ), lineStyle( Solid ), xCorners( 0.0 ), -- yCorners( 0.0 ), lineEffect( NoEffect ), effectIntensity( 1.0 ) -- { -- dashArray.resize(1); -- dashArray[0] = 3; -- } -- -- QColor color; -- double opacity; -- double width; -- Annotation::LineStyle lineStyle; -- double xCorners; -- double yCorners; -- QVector<double> dashArray; -- Annotation::LineEffect lineEffect; -- double effectIntensity; --}; -- --Annotation::Style::Style() -- : d ( new Private ) --{ --} -- --Annotation::Style::Style( const Style &other ) -- : d( other.d ) --{ --} -- --Annotation::Style& Annotation::Style::operator=( const Style &other ) --{ -- if ( this != &other ) -- d = other.d; -- -- return *this; --} -- --Annotation::Style::~Style() --{ --} -- --QColor Annotation::Style::color() const --{ -- return d->color; --} -- --void Annotation::Style::setColor(const QColor &color) --{ -- d->color = color; --} -- --double Annotation::Style::opacity() const --{ -- return d->opacity; --} -- --void Annotation::Style::setOpacity(double opacity) --{ -- d->opacity = opacity; --} -- --double Annotation::Style::width() const --{ -- return d->width; --} -- --void Annotation::Style::setWidth(double width) --{ -- d->width = width; --} -- --Annotation::LineStyle Annotation::Style::lineStyle() const --{ -- return d->lineStyle; --} -- --void Annotation::Style::setLineStyle(Annotation::LineStyle style) --{ -- d->lineStyle = style; --} -- --double Annotation::Style::xCorners() const --{ -- return d->xCorners; --} -- --void Annotation::Style::setXCorners(double radius) --{ -- d->xCorners = radius; --} -- --double Annotation::Style::yCorners() const --{ -- return d->yCorners; --} -- --void Annotation::Style::setYCorners(double radius) --{ -- d->yCorners = radius; --} -- --const QVector<double>& Annotation::Style::dashArray() const --{ -- return d->dashArray; --} -- --void Annotation::Style::setDashArray(const QVector<double> &array) --{ -- d->dashArray = array; --} -- --Annotation::LineEffect Annotation::Style::lineEffect() const --{ -- return d->lineEffect; --} -- --void Annotation::Style::setLineEffect(Annotation::LineEffect effect) --{ -- d->lineEffect = effect; --} -- --double Annotation::Style::effectIntensity() const --{ -- return d->effectIntensity; --} -- --void Annotation::Style::setEffectIntensity(double intens) --{ -- d->effectIntensity = intens; --} -- --class Annotation::Popup::Private : public QSharedData --{ -- public: -- Private() -- : flags( -1 ) {} -- -- int flags; -- QRectF geometry; -- QString title; -- QString summary; -- QString text; --}; -- --Annotation::Popup::Popup() -- : d ( new Private ) --{ --} -- --Annotation::Popup::Popup( const Popup &other ) -- : d( other.d ) --{ --} -- --Annotation::Popup& Annotation::Popup::operator=( const Popup &other ) --{ -- if ( this != &other ) -- d = other.d; -- -- return *this; --} -- --Annotation::Popup::~Popup() --{ --} -- --int Annotation::Popup::flags() const --{ -- return d->flags; --} -- --void Annotation::Popup::setFlags( int flags ) --{ -- d->flags = flags; --} -- --QRectF Annotation::Popup::geometry() const --{ -- return d->geometry; --} -- --void Annotation::Popup::setGeometry( const QRectF &geom ) --{ -- d->geometry = geom; --} -- --QString Annotation::Popup::title() const --{ -- return d->title; --} -- --void Annotation::Popup::setTitle( const QString &title ) --{ -- d->title = title; --} -- --QString Annotation::Popup::summary() const --{ -- return d->summary; --} -- --void Annotation::Popup::setSummary( const QString &summary ) --{ -- d->summary = summary; --} -- --QString Annotation::Popup::text() const --{ -- return d->text; --} -- --void Annotation::Popup::setText( const QString &text ) --{ -- d->text = text; --} -- --Annotation::Annotation( AnnotationPrivate &dd ) -- : d_ptr( &dd ) --{ -- window.width = window.height = 0; --} -- --Annotation::~Annotation() --{ --} -- --Annotation::Annotation( AnnotationPrivate &dd, const QDomNode &annNode ) -- : d_ptr( &dd ) --{ -- Q_D( Annotation ); -- -- window.width = window.height = 0; -- -- // get the [base] element of the annotation node -- QDomElement e = AnnotationUtils::findChildElement( annNode, "base" ); -- if ( e.isNull() ) -- return; -- -- Style s; -- Popup w; -- -- // parse -contents- attributes -- if ( e.hasAttribute( "author" ) ) -- setAuthor(e.attribute( "author" )); -- if ( e.hasAttribute( "contents" ) ) -- setContents(e.attribute( "contents" )); -- if ( e.hasAttribute( "uniqueName" ) ) -- setUniqueName(e.attribute( "uniqueName" )); -- if ( e.hasAttribute( "modifyDate" ) ) -- setModificationDate(QDateTime::fromString( e.attribute( "modifyDate" ) )); -- if ( e.hasAttribute( "creationDate" ) ) -- setCreationDate(QDateTime::fromString( e.attribute( "creationDate" ) )); -- -- // parse -other- attributes -- if ( e.hasAttribute( "flags" ) ) -- setFlags(e.attribute( "flags" ).toInt()); -- if ( e.hasAttribute( "color" ) ) -- s.setColor(QColor( e.attribute( "color" ) )); -- if ( e.hasAttribute( "opacity" ) ) -- s.setOpacity(e.attribute( "opacity" ).toDouble()); -- -- // parse -the-subnodes- (describing Style, Window, Revision(s) structures) -- // Note: all subnodes if present must be 'attributes complete' -- QDomNode eSubNode = e.firstChild(); -- while ( eSubNode.isElement() ) -- { -- QDomElement ee = eSubNode.toElement(); -- eSubNode = eSubNode.nextSibling(); -- -- // parse boundary -- if ( ee.tagName() == "boundary" ) -- { -- QRectF brect; -- brect.setLeft(ee.attribute( "l" ).toDouble()); -- brect.setTop(ee.attribute( "t" ).toDouble()); -- brect.setRight(ee.attribute( "r" ).toDouble()); -- brect.setBottom(ee.attribute( "b" ).toDouble()); -- setBoundary(brect); -- } -- // parse penStyle if not default -- else if ( ee.tagName() == "penStyle" ) -- { -- s.setWidth(ee.attribute( "width" ).toDouble()); -- s.setLineStyle((LineStyle)ee.attribute( "style" ).toInt()); -- s.setXCorners(ee.attribute( "xcr" ).toDouble()); -- s.setYCorners(ee.attribute( "ycr" ).toDouble()); -- -- // Try to parse dash array (new format) -- QVector<double> dashArray; -- -- QDomNode eeSubNode = ee.firstChild(); -- while ( eeSubNode.isElement() ) -- { -- QDomElement eee = eeSubNode.toElement(); -- eeSubNode = eeSubNode.nextSibling(); -- -- if ( eee.tagName() != "dashsegm" ) -- continue; -- -- dashArray.append(eee.attribute( "len" ).toDouble()); -- } -- -- // If no segments were found use marks/spaces (old format) -- if ( dashArray.size() == 0 ) -- { -- dashArray.append(ee.attribute( "marks" ).toDouble()); -- dashArray.append(ee.attribute( "spaces" ).toDouble()); -- } -- -- s.setDashArray(dashArray); -- } -- // parse effectStyle if not default -- else if ( ee.tagName() == "penEffect" ) -- { -- s.setLineEffect((LineEffect)ee.attribute( "effect" ).toInt()); -- s.setEffectIntensity(ee.attribute( "intensity" ).toDouble()); -- } -- // parse window if present -- else if ( ee.tagName() == "window" ) -- { -- QRectF geom; -- geom.setX(ee.attribute( "top" ).toDouble()); -- geom.setY(ee.attribute( "left" ).toDouble()); -- -- if (ee.hasAttribute("widthDouble")) -- geom.setWidth(ee.attribute( "widthDouble" ).toDouble()); -- else -- geom.setWidth(ee.attribute( "width" ).toDouble()); -- -- if (ee.hasAttribute("widthDouble")) -- geom.setHeight(ee.attribute( "heightDouble" ).toDouble()); -- else -- geom.setHeight(ee.attribute( "height" ).toDouble()); -- -- w.setGeometry(geom); -- -- w.setFlags(ee.attribute( "flags" ).toInt()); -- w.setTitle(ee.attribute( "title" )); -- w.setSummary(ee.attribute( "summary" )); -- // parse window subnodes -- QDomNode winNode = ee.firstChild(); -- for ( ; winNode.isElement(); winNode = winNode.nextSibling() ) -- { -- QDomElement winElement = winNode.toElement(); -- if ( winElement.tagName() == "text" ) -- w.setText(winElement.firstChild().toCDATASection().data()); -- } -- } -- } -- -- setStyle(s); // assign parsed style -- setPopup(w); // assign parsed window -- -- // get the [revisions] element of the annotation node -- QDomNode revNode = annNode.firstChild(); -- for ( ; revNode.isElement(); revNode = revNode.nextSibling() ) -- { -- QDomElement revElement = revNode.toElement(); -- if ( revElement.tagName() != "revision" ) -- continue; -- -- Annotation *reply = AnnotationUtils::createAnnotation( revElement ); -- -- if (reply) // if annotation is valid, add as a revision of this annotation -- { -- RevScope scope = (RevScope)revElement.attribute( "revScope" ).toInt(); -- RevType type = (RevType)revElement.attribute( "revType" ).toInt(); -- d->addRevision(reply, scope, type); -- delete reply; -- } -- } --} -- --void Annotation::storeBaseAnnotationProperties( QDomNode & annNode, QDomDocument & document ) const --{ -- // create [base] element of the annotation node -- QDomElement e = document.createElement( "base" ); -- annNode.appendChild( e ); -- -- const Style s = style(); -- const Popup w = popup(); -- -- // store -contents- attributes -- if ( !author().isEmpty() ) -- e.setAttribute( "author", author() ); -- if ( !contents().isEmpty() ) -- e.setAttribute( "contents", contents() ); -- if ( !uniqueName().isEmpty() ) -- e.setAttribute( "uniqueName", uniqueName() ); -- if ( modificationDate().isValid() ) -- e.setAttribute( "modifyDate", modificationDate().toString() ); -- if ( creationDate().isValid() ) -- e.setAttribute( "creationDate", creationDate().toString() ); -- -- // store -other- attributes -- if ( flags() ) -- e.setAttribute( "flags", flags() ); -- if ( s.color().isValid() ) -- e.setAttribute( "color", s.color().name() ); -- if ( s.opacity() != 1.0 ) -- e.setAttribute( "opacity", QString::number( s.opacity() ) ); -- -- // Sub-Node-1 - boundary -- const QRectF brect = boundary(); -- QDomElement bE = document.createElement( "boundary" ); -- e.appendChild( bE ); -- bE.setAttribute( "l", QString::number( (double)brect.left() ) ); -- bE.setAttribute( "t", QString::number( (double)brect.top() ) ); -- bE.setAttribute( "r", QString::number( (double)brect.right() ) ); -- bE.setAttribute( "b", QString::number( (double)brect.bottom() ) ); -- -- // Sub-Node-2 - penStyle -- const QVector<double> dashArray = s.dashArray(); -- if ( s.width() != 1 || s.lineStyle() != Solid || s.xCorners() != 0 || -- s.yCorners() != 0.0 || dashArray.size() != 1 || dashArray[0] != 3 ) -- { -- QDomElement psE = document.createElement( "penStyle" ); -- e.appendChild( psE ); -- psE.setAttribute( "width", QString::number( s.width() ) ); -- psE.setAttribute( "style", (int)s.lineStyle() ); -- psE.setAttribute( "xcr", QString::number( s.xCorners() ) ); -- psE.setAttribute( "ycr", QString::number( s.yCorners() ) ); -- -- int marks = 3, spaces = 0; // Do not break code relying on marks/spaces -- if (dashArray.size() != 0) -- marks = (int)dashArray[0]; -- if (dashArray.size() > 1) -- spaces = (int)dashArray[1]; -- -- psE.setAttribute( "marks", marks ); -- psE.setAttribute( "spaces", spaces ); -- -- foreach (double segm, dashArray) -- { -- QDomElement pattE = document.createElement( "dashsegm" ); -- pattE.setAttribute( "len", QString::number( segm ) ); -- psE.appendChild(pattE); -- } -- } -- -- // Sub-Node-3 - penEffect -- if ( s.lineEffect() != NoEffect || s.effectIntensity() != 1.0 ) -- { -- QDomElement peE = document.createElement( "penEffect" ); -- e.appendChild( peE ); -- peE.setAttribute( "effect", (int)s.lineEffect() ); -- peE.setAttribute( "intensity", QString::number( s.effectIntensity() ) ); -- } -- -- // Sub-Node-4 - window -- if ( w.flags() != -1 || !w.title().isEmpty() || !w.summary().isEmpty() || -- !w.text().isEmpty() ) -- { -- QDomElement wE = document.createElement( "window" ); -- const QRectF geom = w.geometry(); -- e.appendChild( wE ); -- wE.setAttribute( "flags", w.flags() ); -- wE.setAttribute( "top", QString::number( geom.x() ) ); -- wE.setAttribute( "left", QString::number( geom.y() ) ); -- wE.setAttribute( "width", (int)geom.width() ); -- wE.setAttribute( "height", (int)geom.height() ); -- wE.setAttribute( "widthDouble", QString::number( geom.width() ) ); -- wE.setAttribute( "heightDouble", QString::number( geom.height() ) ); -- wE.setAttribute( "title", w.title() ); -- wE.setAttribute( "summary", w.summary() ); -- // store window.text as a subnode, because we need escaped data -- if ( !w.text().isEmpty() ) -- { -- QDomElement escapedText = document.createElement( "text" ); -- wE.appendChild( escapedText ); -- QDomCDATASection textCData = document.createCDATASection( w.text() ); -- escapedText.appendChild( textCData ); -- } -- } -- -- const QList<Annotation*> revs = revisions(); -- -- // create [revision] element of the annotation node (if any) -- if ( revs.isEmpty() ) -- return; -- -- // add all revisions as children of revisions element -- foreach (const Annotation *rev, revs) -- { -- QDomElement r = document.createElement( "revision" ); -- annNode.appendChild( r ); -- // set element attributes -- r.setAttribute( "revScope", (int)rev->revisionScope() ); -- r.setAttribute( "revType", (int)rev->revisionType() ); -- // use revision as the annotation element, so fill it up -- AnnotationUtils::storeAnnotation( rev, r, document ); -- delete rev; -- } --} -- --QString Annotation::author() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->author; -- -- const AnnotMarkup *markupann = dynamic_cast<const AnnotMarkup*>(d->pdfAnnot); -- return markupann ? UnicodeParsedString( markupann->getLabel() ) : QString(); --} -- --void Annotation::setAuthor( const QString &author ) --{ -- Q_D( Annotation ); -- -- if (!d->pdfAnnot) -- { -- d->author = author; -- return; -- } -- -- AnnotMarkup *markupann = dynamic_cast<AnnotMarkup*>(d->pdfAnnot); -- if (markupann) -- { -- GooString *s = QStringToUnicodeGooString(author); -- markupann->setLabel(s); -- delete s; -- } --} -- --QString Annotation::contents() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->contents; -- -- return UnicodeParsedString( d->pdfAnnot->getContents() ); --} -- --void Annotation::setContents( const QString &contents ) --{ -- Q_D( Annotation ); -- -- if (!d->pdfAnnot) -- { -- d->contents = contents; -- return; -- } -- -- GooString *s = QStringToUnicodeGooString(contents); -- d->pdfAnnot->setContents(s); -- delete s; --} -- --QString Annotation::uniqueName() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->uniqueName; -- -- return UnicodeParsedString( d->pdfAnnot->getName() ); --} -- --void Annotation::setUniqueName( const QString &uniqueName ) --{ -- Q_D( Annotation ); -- -- if (!d->pdfAnnot) -- { -- d->uniqueName = uniqueName; -- return; -- } -- -- QByteArray ascii = uniqueName.toAscii(); -- GooString s(ascii.constData()); -- d->pdfAnnot->setName(&s); --} -- --QDateTime Annotation::modificationDate() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->modDate; -- -- if ( d->pdfAnnot->getModified() ) -- return convertDate( d->pdfAnnot->getModified()->getCString() ); -- else -- return QDateTime(); --} -- --void Annotation::setModificationDate( const QDateTime &date ) --{ -- Q_D( Annotation ); -- -- if (!d->pdfAnnot) -- { -- d->modDate = date; -- return; -- } -- --#if 0 // TODO: Conversion routine is broken -- if (d->pdfAnnot) -- { -- time_t t = date.toTime_t(); -- GooString *s = timeToDateString(&t); -- d->pdfAnnot->setModified(s); -- delete s; -- } --#endif --} -- --QDateTime Annotation::creationDate() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->creationDate; -- -- const AnnotMarkup *markupann = dynamic_cast<const AnnotMarkup*>(d->pdfAnnot); -- -- if (markupann && markupann->getDate()) -- return convertDate( markupann->getDate()->getCString() ); -- -- return modificationDate(); --} -- --void Annotation::setCreationDate( const QDateTime &date ) --{ -- Q_D( Annotation ); -- -- if (!d->pdfAnnot) -- { -- d->creationDate = date; -- return; -- } -- --#if 0 // TODO: Conversion routine is broken -- AnnotMarkup *markupann = dynamic_cast<AnnotMarkup*>(d->pdfAnnot); -- if (markupann) -- { -- time_t t = date.toTime_t(); -- GooString *s = timeToDateString(&t); -- markupann->setDate(s); -- delete s; -- } --#endif --} -- --static int fromPdfFlags(int flags) --{ -- int qtflags = 0; -- -- if ( flags & Annot::flagHidden ) -- qtflags |= Annotation::Hidden; -- if ( flags & Annot::flagNoZoom ) -- qtflags |= Annotation::FixedSize; -- if ( flags & Annot::flagNoRotate ) -- qtflags |= Annotation::FixedRotation; -- if ( !( flags & Annot::flagPrint ) ) -- qtflags |= Annotation::DenyPrint; -- if ( flags & Annot::flagReadOnly ) -- qtflags |= (Annotation::DenyWrite | Annotation::DenyDelete); -- if ( flags & Annot::flagLocked ) -- qtflags |= Annotation::DenyDelete; -- if ( flags & Annot::flagToggleNoView ) -- qtflags |= Annotation::ToggleHidingOnMouse; -- -- return qtflags; --} -- --static int toPdfFlags(int qtflags) --{ -- int flags = 0; -- -- if ( qtflags & Annotation::Hidden ) -- flags |= Annot::flagHidden; -- if ( qtflags & Annotation::FixedSize ) -- flags |= Annot::flagNoZoom; -- if ( qtflags & Annotation::FixedRotation ) -- flags |= Annot::flagNoRotate; -- if ( !( qtflags & Annotation::DenyPrint ) ) -- flags |= Annot::flagPrint; -- if ( qtflags & Annotation::DenyWrite ) -- flags |= Annot::flagReadOnly; -- if ( qtflags & Annotation::DenyDelete ) -- flags |= Annot::flagLocked; -- if ( qtflags & Annotation::ToggleHidingOnMouse ) -- flags |= Annot::flagToggleNoView; -- -- return flags; --} -- --int Annotation::flags() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->flags; -- -- return fromPdfFlags( d->pdfAnnot->getFlags() ); --} -- --void Annotation::setFlags( int flags ) --{ -- Q_D( Annotation ); -- -- if (!d->pdfAnnot) -- { -- d->flags = flags; -- return; -- } -- -- d->pdfAnnot->setFlags(toPdfFlags( flags )); --} -- --QRectF Annotation::boundary() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->boundary; -- -- const PDFRectangle * rect = d->pdfAnnot->getRect(); -- return d->fromPdfRectangle( *rect ); --} -- --void Annotation::setBoundary( const QRectF &boundary ) --{ -- Q_D( Annotation ); -- -- if (!d->pdfAnnot) -- { -- d->boundary = boundary; -- return; -- } -- -- PDFRectangle rect = d->boundaryToPdfRectangle( boundary, flags() ); -- d->pdfAnnot->setRect(&rect); --} -- --Annotation::Style Annotation::style() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->style; -- -- Style s; -- s.setColor(convertAnnotColor( d->pdfAnnot->getColor() )); -- -- const AnnotMarkup *markupann = dynamic_cast<const AnnotMarkup*>(d->pdfAnnot); -- if (markupann) -- s.setOpacity( markupann->getOpacity() ); -- -- const AnnotBorder *border = d->pdfAnnot->getBorder(); -- if (border) -- { -- if ( border->getType() == AnnotBorder::typeArray ) -- { -- const AnnotBorderArray *border_array = static_cast<const AnnotBorderArray*>(border); -- s.setXCorners( border_array->getHorizontalCorner() ); -- s.setYCorners( border_array->getVerticalCorner() ); -- } -- -- s.setWidth( border->getWidth() ); -- s.setLineStyle((Annotation::LineStyle)( 1 << border->getStyle() )); -- -- const int dashArrLen = border->getDashLength(); -- const double* dashArrData = border->getDash(); -- QVector<double> dashArrVect( dashArrLen ); -- for (int i = 0; i < dashArrLen; ++i) -- dashArrVect[i] = dashArrData[i]; -- s.setDashArray(dashArrVect); -- } -- -- AnnotBorderEffect *border_effect; -- switch (d->pdfAnnot->getType()) -- { -- case Annot::typeFreeText: -- border_effect = static_cast<AnnotFreeText*>(d->pdfAnnot)->getBorderEffect(); -- break; -- case Annot::typeSquare: -- case Annot::typeCircle: -- border_effect = static_cast<AnnotGeometry*>(d->pdfAnnot)->getBorderEffect(); -- break; -- default: -- border_effect = 0; -- } -- if (border_effect) -- { -- s.setLineEffect( (Annotation::LineEffect)border_effect->getEffectType() ); -- s.setEffectIntensity( border_effect->getIntensity() ); -- } -- -- return s; --} -- --void Annotation::setStyle( const Annotation::Style& style ) --{ -- Q_D( Annotation ); -- -- if (!d->pdfAnnot) -- { -- d->style = style; -- return; -- } -- -- d->pdfAnnot->setColor(convertQColor( style.color() )); -- -- AnnotMarkup *markupann = dynamic_cast<AnnotMarkup*>(d->pdfAnnot); -- if (markupann) -- markupann->setOpacity( style.opacity() ); -- -- AnnotBorderArray * border = new AnnotBorderArray(); -- border->setWidth( style.width() ); -- border->setHorizontalCorner( style.xCorners() ); -- border->setVerticalCorner( style.yCorners() ); -- d->pdfAnnot->setBorder(border); --} -- --Annotation::Popup Annotation::popup() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->popup; -- -- Popup w; -- AnnotPopup *popup = 0; -- int flags = -1; // Not initialized -- -- const AnnotMarkup *markupann = dynamic_cast<const AnnotMarkup*>(d->pdfAnnot); -- if (markupann) -- { -- popup = markupann->getPopup(); -- w.setSummary(UnicodeParsedString( markupann->getSubject() )); -- } -- -- if (popup) -- { -- flags = fromPdfFlags( popup->getFlags() ) & ( Annotation::Hidden | -- Annotation::FixedSize | Annotation::FixedRotation ); -- -- if (!popup->getOpen()) -- flags |= Annotation::Hidden; -- -- const PDFRectangle * rect = popup->getRect(); -- w.setGeometry( d->fromPdfRectangle( *rect ) ); -- } -- -- if (d->pdfAnnot->getType() == Annot::typeText) -- { -- const AnnotText * textann = static_cast<const AnnotText*>(d->pdfAnnot); -- -- // Text annotations default to same rect as annotation -- if (flags == -1) -- { -- flags = 0; -- w.setGeometry( boundary() ); -- } -- -- // If text is not 'opened', force window hiding. if the window -- // was parsed from popup, the flag should already be set -- if ( !textann->getOpen() && flags != -1 ) -- flags |= Annotation::Hidden; -- } -- -- w.setFlags(flags); -- -- return w; --} -- --void Annotation::setPopup( const Annotation::Popup& popup ) --{ -- Q_D( Annotation ); -- -- if (!d->pdfAnnot) -- { -- d->popup = popup; -- return; -- } -- --#if 0 /* TODO: Remove old popup and add AnnotPopup to page */ -- AnnotMarkup *markupann = dynamic_cast<AnnotMarkup*>(d->pdfAnnot); -- if (!markupann) -- return; -- -- // Create a new AnnotPopup and assign it to pdfAnnot -- PDFRectangle rect = d->toPdfRectangle( popup.geometry() ); -- AnnotPopup * p = new AnnotPopup( d->pdfPage->getDoc(), &rect ); -- p->setOpen( !(popup.flags() & Annotation::Hidden) ); -- if (!popup.summary().isEmpty()) -- { -- GooString *s = QStringToUnicodeGooString(popup.summary()); -- markupann->setLabel(s); -- delete s; -- } -- markupann->setPopup(p); --#endif --} -- --Annotation::RevScope Annotation::revisionScope() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->revisionScope; -- -- const AnnotMarkup *markupann = dynamic_cast<const AnnotMarkup*>(d->pdfAnnot); -- -- if (markupann && markupann->getInReplyToID() != 0) -- { -- switch (markupann->getReplyTo()) -- { -- case AnnotMarkup::replyTypeR: -- return Annotation::Reply; -- case AnnotMarkup::replyTypeGroup: -- return Annotation::Group; -- } -- } -- -- return Annotation::Root; // It's not a revision --} -- --Annotation::RevType Annotation::revisionType() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- return d->revisionType; -- -- const AnnotText *textann = dynamic_cast<const AnnotText*>(d->pdfAnnot); -- -- if (textann && textann->getInReplyToID() != 0) -- { -- switch (textann->getState()) -- { -- case AnnotText::stateMarked: -- return Annotation::Marked; -- case AnnotText::stateUnmarked: -- return Annotation::Unmarked; -- case AnnotText::stateAccepted: -- return Annotation::Accepted; -- case AnnotText::stateRejected: -- return Annotation::Rejected; -- case AnnotText::stateCancelled: -- return Annotation::Cancelled; -- case AnnotText::stateCompleted: -- return Annotation::Completed; -- default: -- break; -- } -- } -- -- return Annotation::None; --} -- --QList<Annotation*> Annotation::revisions() const --{ -- Q_D( const Annotation ); -- -- if (!d->pdfAnnot) -- { -- /* Return aliases, whose ownership goes to the caller */ -- QList<Annotation*> res; -- foreach (Annotation *rev, d->revisions) -- res.append( rev->d_ptr->makeAlias() ); -- return res; -- } -- -- /* If the annotation doesn't live in a object on its own (eg bug51361), it -- * has no ref, therefore it can't have revisions */ -- if ( !d->pdfAnnot->getHasRef() ) -- return QList<Annotation*>(); -- -- return AnnotationPrivate::findAnnotations( d->pdfPage, d->parentDoc, QSet<Annotation::SubType>(), d->pdfAnnot->getId() ); --} -- --//END Annotation implementation -- -- --/** TextAnnotation [Annotation] */ --class TextAnnotationPrivate : public AnnotationPrivate --{ -- public: -- TextAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- TextAnnotation::TextType textType; -- QString textIcon; -- QFont textFont; -- int inplaceAlign; // 0:left, 1:center, 2:right -- QVector<QPointF> inplaceCallout; -- TextAnnotation::InplaceIntent inplaceIntent; -- -- // Helper -- static GooString * toAppearanceString(const QFont &font); --}; -- --TextAnnotationPrivate::TextAnnotationPrivate() -- : AnnotationPrivate(), textType( TextAnnotation::Linked ), -- textIcon( "Note" ), inplaceAlign( 0 ), -- inplaceIntent( TextAnnotation::Unknown ) --{ --} -- --Annotation * TextAnnotationPrivate::makeAlias() --{ -- return new TextAnnotation(*this); --} -- --GooString * TextAnnotationPrivate::toAppearanceString(const QFont &font) --{ -- GooString * s = GooString::format("/Invalid_font {0:d} Tf", font.pointSize()); -- // TODO: Font family, style (bold, italic, ...) and pointSize as float -- return s; --} -- --Annot* TextAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- // Setters are defined in the public class -- TextAnnotation *q = static_cast<TextAnnotation*>( makeAlias() ); -- -- // Set page and contents -- pdfPage = destPage; -- parentDoc = doc; -- -- // Set pdfAnnot -- PDFRectangle rect = boundaryToPdfRectangle(boundary, flags); -- if (textType == TextAnnotation::Linked) -- { -- pdfAnnot = new AnnotText(destPage->getDoc(), &rect); -- } -- else -- { -- GooString * da = toAppearanceString(textFont); -- pdfAnnot = new AnnotFreeText(destPage->getDoc(), &rect, da); -- delete da; -- } -- -- // Set properties -- flushBaseAnnotationProperties(); -- q->setTextIcon(textIcon); -- q->setInplaceAlign(inplaceAlign); -- q->setCalloutPoints(inplaceCallout); -- q->setInplaceIntent(inplaceIntent); -- -- delete q; -- -- inplaceCallout.clear(); // Free up memory -- -- return pdfAnnot; --} -- --TextAnnotation::TextAnnotation( TextAnnotation::TextType type ) -- : Annotation( *new TextAnnotationPrivate() ) --{ -- setTextType( type ); --} -- --TextAnnotation::TextAnnotation(TextAnnotationPrivate &dd) -- : Annotation( dd ) --{} -- --TextAnnotation::TextAnnotation( const QDomNode & node ) -- : Annotation( *new TextAnnotationPrivate, node ) --{ -- // loop through the whole children looking for a 'text' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "text" ) -- continue; -- -- // parse the attributes -- if ( e.hasAttribute( "type" ) ) -- setTextType((TextAnnotation::TextType)e.attribute( "type" ).toInt()); -- if ( e.hasAttribute( "icon" ) ) -- setTextIcon(e.attribute( "icon" )); -- if ( e.hasAttribute( "font" ) ) -- { -- QFont font; -- font.fromString( e.attribute( "font" ) ); -- setTextFont(font); -- } -- if ( e.hasAttribute( "align" ) ) -- setInplaceAlign(e.attribute( "align" ).toInt()); -- if ( e.hasAttribute( "intent" ) ) -- setInplaceIntent((TextAnnotation::InplaceIntent)e.attribute( "intent" ).toInt()); -- -- // parse the subnodes -- QDomNode eSubNode = e.firstChild(); -- while ( eSubNode.isElement() ) -- { -- QDomElement ee = eSubNode.toElement(); -- eSubNode = eSubNode.nextSibling(); -- -- if ( ee.tagName() == "escapedText" ) -- { -- setInplaceText(ee.firstChild().toCDATASection().data()); -- } -- else if ( ee.tagName() == "callout" ) -- { -- QVector<QPointF> points(3); -- points[0] = QPointF(ee.attribute( "ax" ).toDouble(), -- ee.attribute( "ay" ).toDouble()); -- points[1] = QPointF(ee.attribute( "bx" ).toDouble(), -- ee.attribute( "by" ).toDouble()); -- points[2] = QPointF(ee.attribute( "cx" ).toDouble(), -- ee.attribute( "cy" ).toDouble()); -- setCalloutPoints(points); -- } -- } -- -- // loading complete -- break; -- } --} -- --TextAnnotation::~TextAnnotation() --{ --} -- --void TextAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [text] element -- QDomElement textElement = document.createElement( "text" ); -- node.appendChild( textElement ); -- -- // store the optional attributes -- if ( textType() != Linked ) -- textElement.setAttribute( "type", (int)textType() ); -- if ( textIcon() != "Note" ) -- textElement.setAttribute( "icon", textIcon() ); -- if ( inplaceAlign() ) -- textElement.setAttribute( "align", inplaceAlign() ); -- if ( inplaceIntent() != Unknown ) -- textElement.setAttribute( "intent", (int)inplaceIntent() ); -- -- textElement.setAttribute( "font", textFont().toString() ); -- -- // Sub-Node-1 - escapedText -- if ( !inplaceText().isEmpty() ) -- { -- QDomElement escapedText = document.createElement( "escapedText" ); -- textElement.appendChild( escapedText ); -- QDomCDATASection textCData = document.createCDATASection( inplaceText() ); -- escapedText.appendChild( textCData ); -- } -- -- // Sub-Node-2 - callout -- if ( calloutPoint(0).x() != 0.0 ) -- { -- QDomElement calloutElement = document.createElement( "callout" ); -- textElement.appendChild( calloutElement ); -- calloutElement.setAttribute( "ax", QString::number( calloutPoint(0).x() ) ); -- calloutElement.setAttribute( "ay", QString::number( calloutPoint(0).y() ) ); -- calloutElement.setAttribute( "bx", QString::number( calloutPoint(1).x() ) ); -- calloutElement.setAttribute( "by", QString::number( calloutPoint(1).y() ) ); -- calloutElement.setAttribute( "cx", QString::number( calloutPoint(2).x() ) ); -- calloutElement.setAttribute( "cy", QString::number( calloutPoint(2).y() ) ); -- } --} -- --Annotation::SubType TextAnnotation::subType() const --{ -- return AText; --} -- --TextAnnotation::TextType TextAnnotation::textType() const --{ -- Q_D( const TextAnnotation ); -- -- if (!d->pdfAnnot) -- return d->textType; -- -- return d->pdfAnnot->getType() == Annot::typeText ? -- TextAnnotation::Linked : TextAnnotation::InPlace; --} -- --void TextAnnotation::setTextType( TextAnnotation::TextType type ) --{ -- Q_D( TextAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->textType = type; -- return; -- } -- -- // Type cannot be changed if annotation is already tied --} -- --QString TextAnnotation::textIcon() const --{ -- Q_D( const TextAnnotation ); -- -- if (!d->pdfAnnot) -- return d->textIcon; -- -- if (d->pdfAnnot->getType() == Annot::typeText) -- { -- const AnnotText * textann = static_cast<const AnnotText*>(d->pdfAnnot); -- return QString::fromLatin1( textann->getIcon()->getCString() ); -- } -- -- return QString(); --} -- --void TextAnnotation::setTextIcon( const QString &icon ) --{ -- Q_D( TextAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->textIcon = icon; -- return; -- } -- -- if (d->pdfAnnot->getType() == Annot::typeText) -- { -- AnnotText * textann = static_cast<AnnotText*>(d->pdfAnnot); -- QByteArray encoded = icon.toLatin1(); -- GooString s(encoded.constData()); -- textann->setIcon(&s); -- } --} -- --QFont TextAnnotation::textFont() const --{ -- Q_D( const TextAnnotation ); -- -- if (!d->pdfAnnot) -- return d->textFont; -- -- QFont font; -- -- if (d->pdfAnnot->getType() == Annot::typeFreeText) -- { -- const AnnotFreeText * ftextann = static_cast<const AnnotFreeText*>(d->pdfAnnot); -- const GooString * da = ftextann->getAppearanceString(); -- if (da) -- { -- // At the moment, only font size is parsed -- QString style = QString::fromLatin1( da->getCString() ); -- QRegExp rx("(\\d+)(\\.\\d*)? Tf"); -- if (rx.indexIn(style) != -1) -- font.setPointSize( rx.cap(1).toInt() ); -- // TODO: Other properties -- } -- } -- -- return font; --} -- --void TextAnnotation::setTextFont( const QFont &font ) --{ -- Q_D( TextAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->textFont = font; -- return; -- } -- -- if (d->pdfAnnot->getType() != Annot::typeFreeText) -- return; -- -- AnnotFreeText * ftextann = static_cast<AnnotFreeText*>(d->pdfAnnot); -- GooString * da = TextAnnotationPrivate::toAppearanceString(font); -- ftextann->setAppearanceString(da); -- delete da; --} -- --int TextAnnotation::inplaceAlign() const --{ -- Q_D( const TextAnnotation ); -- -- if (!d->pdfAnnot) -- return d->inplaceAlign; -- -- if (d->pdfAnnot->getType() == Annot::typeFreeText) -- { -- const AnnotFreeText * ftextann = static_cast<const AnnotFreeText*>(d->pdfAnnot); -- return ftextann->getQuadding(); -- } -- -- return 0; --} -- --void TextAnnotation::setInplaceAlign( int align ) --{ -- Q_D( TextAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->inplaceAlign = align; -- return; -- } -- -- if (d->pdfAnnot->getType() == Annot::typeFreeText) -- { -- AnnotFreeText * ftextann = static_cast<AnnotFreeText*>(d->pdfAnnot); -- ftextann->setQuadding((AnnotFreeText::AnnotFreeTextQuadding)align); -- } --} -- --QString TextAnnotation::inplaceText() const --{ -- return contents(); --} -- --void TextAnnotation::setInplaceText( const QString &text ) --{ -- setContents(text); --} -- --QPointF TextAnnotation::calloutPoint( int id ) const --{ -- const QVector<QPointF> points = calloutPoints(); -- if ( id < 0 || id >= points.size() ) -- return QPointF(); -- else -- return points[id]; --} -- --QVector<QPointF> TextAnnotation::calloutPoints() const --{ -- Q_D( const TextAnnotation ); -- -- if (!d->pdfAnnot) -- return d->inplaceCallout; -- -- if (d->pdfAnnot->getType() == Annot::typeText) -- return QVector<QPointF>(); -- -- const AnnotFreeText * ftextann = static_cast<const AnnotFreeText*>(d->pdfAnnot); -- const AnnotCalloutLine *callout = ftextann->getCalloutLine(); -- -- if (!callout) -- return QVector<QPointF>(); -- -- double MTX[6]; -- d->fillTransformationMTX(MTX); -- -- const AnnotCalloutMultiLine * callout_v6 = dynamic_cast<const AnnotCalloutMultiLine*>(callout); -- QVector<QPointF> res(callout_v6 ? 3 : 2); -- XPDFReader::transform(MTX, callout->getX1(), callout->getY1(), res[0]); -- XPDFReader::transform(MTX, callout->getX2(), callout->getY2(), res[1]); -- if (callout_v6) -- XPDFReader::transform(MTX, callout_v6->getX3(), callout_v6->getY3(), res[2]); -- return res; --} -- --void TextAnnotation::setCalloutPoints( const QVector<QPointF> &points ) --{ -- Q_D( TextAnnotation ); -- if (!d->pdfAnnot) -- { -- d->inplaceCallout = points; -- return; -- } -- -- if (d->pdfAnnot->getType() != Annot::typeFreeText) -- return; -- -- AnnotFreeText * ftextann = static_cast<AnnotFreeText*>(d->pdfAnnot); -- const int count = points.size(); -- -- if (count == 0) -- { -- ftextann->setCalloutLine(0); -- return; -- } -- -- if (count != 2 && count != 3) -- { -- error(errSyntaxError, -1, "Expected zero, two or three points for callout"); -- return; -- } -- -- AnnotCalloutLine *callout; -- double x1, y1, x2, y2; -- double MTX[6]; -- d->fillTransformationMTX(MTX); -- -- XPDFReader::invTransform( MTX, points[0], x1, y1 ); -- XPDFReader::invTransform( MTX, points[1], x2, y2 ); -- if (count == 3) -- { -- double x3, y3; -- XPDFReader::invTransform( MTX, points[2], x3, y3 ); -- callout = new AnnotCalloutMultiLine(x1, y1, x2, y2, x3, y3); -- } -- else -- { -- callout = new AnnotCalloutLine(x1, y1, x2, y2); -- } -- -- ftextann->setCalloutLine(callout); -- delete callout; --} -- --TextAnnotation::InplaceIntent TextAnnotation::inplaceIntent() const --{ -- Q_D( const TextAnnotation ); -- -- if (!d->pdfAnnot) -- return d->inplaceIntent; -- -- if (d->pdfAnnot->getType() == Annot::typeFreeText) -- { -- const AnnotFreeText * ftextann = static_cast<const AnnotFreeText*>(d->pdfAnnot); -- return (TextAnnotation::InplaceIntent)ftextann->getIntent(); -- } -- -- return TextAnnotation::Unknown; --} -- --void TextAnnotation::setInplaceIntent( TextAnnotation::InplaceIntent intent ) --{ -- Q_D( TextAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->inplaceIntent = intent; -- return; -- } -- -- if (d->pdfAnnot->getType() == Annot::typeFreeText) -- { -- AnnotFreeText * ftextann = static_cast<AnnotFreeText*>(d->pdfAnnot); -- ftextann->setIntent((AnnotFreeText::AnnotFreeTextIntent)intent); -- } --} -- -- --/** LineAnnotation [Annotation] */ --class LineAnnotationPrivate : public AnnotationPrivate --{ -- public: -- LineAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields (note uses border for rendering style) -- QLinkedList<QPointF> linePoints; -- LineAnnotation::TermStyle lineStartStyle; -- LineAnnotation::TermStyle lineEndStyle; -- bool lineClosed : 1; // (if true draw close shape) -- bool lineShowCaption : 1; -- LineAnnotation::LineType lineType; -- QColor lineInnerColor; -- double lineLeadingFwdPt; -- double lineLeadingBackPt; -- LineAnnotation::LineIntent lineIntent; --}; -- --LineAnnotationPrivate::LineAnnotationPrivate() -- : AnnotationPrivate(), lineStartStyle( LineAnnotation::None ), -- lineEndStyle( LineAnnotation::None ), lineClosed( false ), -- lineShowCaption( false ), lineLeadingFwdPt( 0 ), -- lineLeadingBackPt( 0 ), lineIntent( LineAnnotation::Unknown ) --{ --} -- --Annotation * LineAnnotationPrivate::makeAlias() --{ -- return new LineAnnotation(*this); --} -- --Annot* LineAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- // Setters are defined in the public class -- LineAnnotation *q = static_cast<LineAnnotation*>( makeAlias() ); -- -- // Set page and document -- pdfPage = destPage; -- parentDoc = doc; -- -- // Set pdfAnnot -- PDFRectangle rect = boundaryToPdfRectangle(boundary, flags); -- if (lineType == LineAnnotation::StraightLine) -- { -- pdfAnnot = new AnnotLine(doc->doc, &rect); -- } -- else -- { -- pdfAnnot = new AnnotPolygon(doc->doc, &rect, -- lineClosed ? Annot::typePolygon : Annot::typePolyLine ); -- } -- -- // Set properties -- flushBaseAnnotationProperties(); -- q->setLinePoints(linePoints); -- q->setLineStartStyle(lineStartStyle); -- q->setLineEndStyle(lineEndStyle); -- q->setLineInnerColor(lineInnerColor); -- q->setLineLeadingForwardPoint(lineLeadingFwdPt); -- q->setLineLeadingBackPoint(lineLeadingBackPt); -- q->setLineShowCaption(lineShowCaption); -- q->setLineIntent(lineIntent); -- -- delete q; -- -- linePoints.clear(); // Free up memory -- -- return pdfAnnot; --} -- --LineAnnotation::LineAnnotation( LineAnnotation::LineType type ) -- : Annotation( *new LineAnnotationPrivate() ) --{ -- setLineType(type); --} -- --LineAnnotation::LineAnnotation(LineAnnotationPrivate &dd) -- : Annotation( dd ) --{} -- --LineAnnotation::LineAnnotation( const QDomNode & node ) -- : Annotation( *new LineAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'line' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "line" ) -- continue; -- -- // parse the attributes -- if ( e.hasAttribute( "startStyle" ) ) -- setLineStartStyle((LineAnnotation::TermStyle)e.attribute( "startStyle" ).toInt()); -- if ( e.hasAttribute( "endStyle" ) ) -- setLineEndStyle((LineAnnotation::TermStyle)e.attribute( "endStyle" ).toInt()); -- if ( e.hasAttribute( "closed" ) ) -- setLineClosed(e.attribute( "closed" ).toInt()); -- if ( e.hasAttribute( "innerColor" ) ) -- setLineInnerColor(QColor( e.attribute( "innerColor" ) )); -- if ( e.hasAttribute( "leadFwd" ) ) -- setLineLeadingForwardPoint(e.attribute( "leadFwd" ).toDouble()); -- if ( e.hasAttribute( "leadBack" ) ) -- setLineLeadingBackPoint(e.attribute( "leadBack" ).toDouble()); -- if ( e.hasAttribute( "showCaption" ) ) -- setLineShowCaption(e.attribute( "showCaption" ).toInt()); -- if ( e.hasAttribute( "intent" ) ) -- setLineIntent((LineAnnotation::LineIntent)e.attribute( "intent" ).toInt()); -- -- // parse all 'point' subnodes -- QLinkedList<QPointF> points; -- QDomNode pointNode = e.firstChild(); -- while ( pointNode.isElement() ) -- { -- QDomElement pe = pointNode.toElement(); -- pointNode = pointNode.nextSibling(); -- -- if ( pe.tagName() != "point" ) -- continue; -- -- QPointF p(pe.attribute( "x", "0.0" ).toDouble(), pe.attribute( "y", "0.0" ).toDouble()); -- points.append( p ); -- } -- setLinePoints(points); -- setLineType(points.size() == 2 ? StraightLine : Polyline); -- -- // loading complete -- break; -- } --} -- --LineAnnotation::~LineAnnotation() --{ --} -- --void LineAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [line] element -- QDomElement lineElement = document.createElement( "line" ); -- node.appendChild( lineElement ); -- -- // store the attributes -- if ( lineStartStyle() != None ) -- lineElement.setAttribute( "startStyle", (int)lineStartStyle() ); -- if ( lineEndStyle() != None ) -- lineElement.setAttribute( "endStyle", (int)lineEndStyle() ); -- if ( isLineClosed() ) -- lineElement.setAttribute( "closed", isLineClosed() ); -- if ( lineInnerColor().isValid() ) -- lineElement.setAttribute( "innerColor", lineInnerColor().name() ); -- if ( lineLeadingForwardPoint() != 0.0 ) -- lineElement.setAttribute( "leadFwd", QString::number( lineLeadingForwardPoint() ) ); -- if ( lineLeadingBackPoint() != 0.0 ) -- lineElement.setAttribute( "leadBack", QString::number( lineLeadingBackPoint() ) ); -- if ( lineShowCaption() ) -- lineElement.setAttribute( "showCaption", lineShowCaption() ); -- if ( lineIntent() != Unknown ) -- lineElement.setAttribute( "intent", lineIntent() ); -- -- // append the list of points -- const QLinkedList<QPointF> points = linePoints(); -- if ( points.count() > 1 ) -- { -- QLinkedList<QPointF>::const_iterator it = points.begin(), end = points.end(); -- while ( it != end ) -- { -- const QPointF & p = *it; -- QDomElement pElement = document.createElement( "point" ); -- lineElement.appendChild( pElement ); -- pElement.setAttribute( "x", QString::number( p.x() ) ); -- pElement.setAttribute( "y", QString::number( p.y() ) ); -- ++it; -- } -- } --} -- --Annotation::SubType LineAnnotation::subType() const --{ -- return ALine; --} -- --LineAnnotation::LineType LineAnnotation::lineType() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->lineType; -- -- return (d->pdfAnnot->getType() == Annot::typeLine) ? -- LineAnnotation::StraightLine : LineAnnotation::Polyline; --} -- --void LineAnnotation::setLineType( LineAnnotation::LineType type ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->lineType = type; -- return; -- } -- -- // Type cannot be changed if annotation is already tied --} -- --QLinkedList<QPointF> LineAnnotation::linePoints() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->linePoints; -- -- double MTX[6]; -- d->fillTransformationMTX(MTX); -- -- QLinkedList<QPointF> res; -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- const AnnotLine * lineann = static_cast<const AnnotLine*>(d->pdfAnnot); -- QPointF p; -- XPDFReader::transform(MTX, lineann->getX1(), lineann->getY1(), p); -- res.append(p); -- XPDFReader::transform(MTX, lineann->getX2(), lineann->getY2(), p); -- res.append(p); -- } -- else -- { -- const AnnotPolygon * polyann = static_cast<const AnnotPolygon*>(d->pdfAnnot); -- const AnnotPath * vertices = polyann->getVertices(); -- -- for (int i = 0; i < vertices->getCoordsLength(); ++i) -- { -- QPointF p; -- XPDFReader::transform(MTX, vertices->getX(i), vertices->getY(i), p); -- res.append(p); -- } -- } -- -- return res; --} -- --void LineAnnotation::setLinePoints( const QLinkedList<QPointF> &points ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->linePoints = points; -- return; -- } -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- AnnotLine *lineann = static_cast<AnnotLine*>(d->pdfAnnot); -- if (points.size() != 2) -- { -- error(errSyntaxError, -1, "Expected two points for a straight line"); -- return; -- } -- double x1, y1, x2, y2; -- double MTX[6]; -- d->fillTransformationMTX(MTX); -- XPDFReader::invTransform( MTX, points.first(), x1, y1 ); -- XPDFReader::invTransform( MTX, points.last(), x2, y2 ); -- lineann->setVertices(x1, y1, x2, y2); -- } -- else -- { -- AnnotPolygon *polyann = static_cast<AnnotPolygon*>(d->pdfAnnot); -- AnnotPath * p = d->toAnnotPath(points); -- polyann->setVertices(p); -- delete p; -- } --} -- --LineAnnotation::TermStyle LineAnnotation::lineStartStyle() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->lineStartStyle; -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- const AnnotLine * lineann = static_cast<const AnnotLine*>(d->pdfAnnot); -- return (LineAnnotation::TermStyle)lineann->getStartStyle(); -- } -- else -- { -- const AnnotPolygon * polyann = static_cast<const AnnotPolygon*>(d->pdfAnnot); -- return (LineAnnotation::TermStyle)polyann->getStartStyle(); -- } --} -- --void LineAnnotation::setLineStartStyle( LineAnnotation::TermStyle style ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->lineStartStyle = style; -- return; -- } -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- AnnotLine *lineann = static_cast<AnnotLine*>(d->pdfAnnot); -- lineann->setStartEndStyle((AnnotLineEndingStyle)style, lineann->getEndStyle()); -- } -- else -- { -- AnnotPolygon *polyann = static_cast<AnnotPolygon*>(d->pdfAnnot); -- polyann->setStartEndStyle((AnnotLineEndingStyle)style, polyann->getEndStyle()); -- } --} -- --LineAnnotation::TermStyle LineAnnotation::lineEndStyle() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->lineEndStyle; -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- const AnnotLine * lineann = static_cast<const AnnotLine*>(d->pdfAnnot); -- return (LineAnnotation::TermStyle)lineann->getEndStyle(); -- } -- else -- { -- const AnnotPolygon * polyann = static_cast<const AnnotPolygon*>(d->pdfAnnot); -- return (LineAnnotation::TermStyle)polyann->getEndStyle(); -- } --} -- --void LineAnnotation::setLineEndStyle( LineAnnotation::TermStyle style ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->lineEndStyle = style; -- return; -- } -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- AnnotLine *lineann = static_cast<AnnotLine*>(d->pdfAnnot); -- lineann->setStartEndStyle(lineann->getStartStyle(), (AnnotLineEndingStyle)style); -- } -- else -- { -- AnnotPolygon *polyann = static_cast<AnnotPolygon*>(d->pdfAnnot); -- polyann->setStartEndStyle(polyann->getStartStyle(), (AnnotLineEndingStyle)style); -- } --} -- --bool LineAnnotation::isLineClosed() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->lineClosed; -- -- return d->pdfAnnot->getType() == Annot::typePolygon; --} -- --void LineAnnotation::setLineClosed( bool closed ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->lineClosed = closed; -- return; -- } -- -- if (d->pdfAnnot->getType() != Annot::typeLine) -- { -- AnnotPolygon *polyann = static_cast<AnnotPolygon*>(d->pdfAnnot); -- -- // Set new subtype and switch intent if necessary -- if (closed) -- { -- polyann->setType(Annot::typePolygon); -- if (polyann->getIntent() == AnnotPolygon::polylineDimension) -- polyann->setIntent( AnnotPolygon::polygonDimension ); -- } -- else -- { -- polyann->setType(Annot::typePolyLine); -- if (polyann->getIntent() == AnnotPolygon::polygonDimension) -- polyann->setIntent( AnnotPolygon::polylineDimension ); -- } -- } --} -- --QColor LineAnnotation::lineInnerColor() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->lineInnerColor; -- -- AnnotColor * c; -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- const AnnotLine * lineann = static_cast<const AnnotLine*>(d->pdfAnnot); -- c = lineann->getInteriorColor(); -- } -- else -- { -- const AnnotPolygon * polyann = static_cast<const AnnotPolygon*>(d->pdfAnnot); -- c = polyann->getInteriorColor(); -- } -- -- return convertAnnotColor(c); --} -- --void LineAnnotation::setLineInnerColor( const QColor &color ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->lineInnerColor = color; -- return; -- } -- -- AnnotColor * c = convertQColor(color); -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- AnnotLine *lineann = static_cast<AnnotLine*>(d->pdfAnnot); -- lineann->setInteriorColor(c); -- } -- else -- { -- AnnotPolygon *polyann = static_cast<AnnotPolygon*>(d->pdfAnnot); -- polyann->setInteriorColor(c); -- } --} -- --double LineAnnotation::lineLeadingForwardPoint() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->lineLeadingFwdPt; -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- const AnnotLine * lineann = static_cast<const AnnotLine*>(d->pdfAnnot); -- return lineann->getLeaderLineLength(); -- } -- -- return 0; --} -- --void LineAnnotation::setLineLeadingForwardPoint( double point ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->lineLeadingFwdPt = point; -- return; -- } -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- AnnotLine *lineann = static_cast<AnnotLine*>(d->pdfAnnot); -- lineann->setLeaderLineLength(point); -- } --} -- --double LineAnnotation::lineLeadingBackPoint() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->lineLeadingBackPt; -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- const AnnotLine * lineann = static_cast<const AnnotLine*>(d->pdfAnnot); -- return lineann->getLeaderLineExtension(); -- } -- -- return 0; --} -- --void LineAnnotation::setLineLeadingBackPoint( double point ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->lineLeadingBackPt = point; -- return; -- } -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- AnnotLine *lineann = static_cast<AnnotLine*>(d->pdfAnnot); -- lineann->setLeaderLineExtension(point); -- } --} -- --bool LineAnnotation::lineShowCaption() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->lineShowCaption; -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- const AnnotLine * lineann = static_cast<const AnnotLine*>(d->pdfAnnot); -- return lineann->getCaption(); -- } -- -- return false; --} -- --void LineAnnotation::setLineShowCaption( bool show ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->lineShowCaption = show; -- return; -- } -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- AnnotLine *lineann = static_cast<AnnotLine*>(d->pdfAnnot); -- lineann->setCaption(show); -- } --} -- --LineAnnotation::LineIntent LineAnnotation::lineIntent() const --{ -- Q_D( const LineAnnotation ); -- -- if (!d->pdfAnnot) -- return d->lineIntent; -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- const AnnotLine * lineann = static_cast<const AnnotLine*>(d->pdfAnnot); -- return (LineAnnotation::LineIntent)( lineann->getIntent() + 1 ); -- } -- else -- { -- const AnnotPolygon * polyann = static_cast<const AnnotPolygon*>(d->pdfAnnot); -- if ( polyann->getIntent() == AnnotPolygon::polygonCloud ) -- return LineAnnotation::PolygonCloud; -- else // AnnotPolygon::polylineDimension, AnnotPolygon::polygonDimension -- return LineAnnotation::Dimension; -- } --} -- --void LineAnnotation::setLineIntent( LineAnnotation::LineIntent intent ) --{ -- Q_D( LineAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->lineIntent = intent; -- return; -- } -- -- if ( intent == LineAnnotation::Unknown ) -- return; // Do not set (actually, it should clear the property) -- -- if (d->pdfAnnot->getType() == Annot::typeLine) -- { -- AnnotLine * lineann = static_cast<AnnotLine*>(d->pdfAnnot); -- lineann->setIntent((AnnotLine::AnnotLineIntent)( intent - 1 )); -- } -- else -- { -- AnnotPolygon * polyann = static_cast<AnnotPolygon*>(d->pdfAnnot); -- if ( intent == LineAnnotation::PolygonCloud) -- polyann->setIntent( AnnotPolygon::polygonCloud ); -- else // LineAnnotation::Dimension -- { -- if ( d->pdfAnnot->getType() == Annot::typePolygon ) -- polyann->setIntent( AnnotPolygon::polygonDimension ); -- else // Annot::typePolyLine -- polyann->setIntent( AnnotPolygon::polylineDimension ); -- } -- } --} -- -- --/** GeomAnnotation [Annotation] */ --class GeomAnnotationPrivate : public AnnotationPrivate --{ -- public: -- GeomAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields (note uses border for rendering style) -- GeomAnnotation::GeomType geomType; -- QColor geomInnerColor; --}; -- --GeomAnnotationPrivate::GeomAnnotationPrivate() -- : AnnotationPrivate(), geomType( GeomAnnotation::InscribedSquare ) --{ --} -- --Annotation * GeomAnnotationPrivate::makeAlias() --{ -- return new GeomAnnotation(*this); --} -- --Annot* GeomAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- // Setters are defined in the public class -- GeomAnnotation *q = static_cast<GeomAnnotation*>( makeAlias() ); -- -- // Set page and document -- pdfPage = destPage; -- parentDoc = doc; -- -- Annot::AnnotSubtype type; -- if (geomType == GeomAnnotation::InscribedSquare) -- type = Annot::typeSquare; -- else // GeomAnnotation::InscribedCircle -- type = Annot::typeCircle; -- -- // Set pdfAnnot -- PDFRectangle rect = boundaryToPdfRectangle(boundary, flags); -- pdfAnnot = new AnnotGeometry(destPage->getDoc(), &rect, type); -- -- // Set properties -- flushBaseAnnotationProperties(); -- q->setGeomInnerColor(geomInnerColor); -- -- delete q; -- return pdfAnnot; --} -- --GeomAnnotation::GeomAnnotation() -- : Annotation( *new GeomAnnotationPrivate() ) --{} -- --GeomAnnotation::GeomAnnotation(GeomAnnotationPrivate &dd) -- : Annotation( dd ) --{} -- --GeomAnnotation::GeomAnnotation( const QDomNode & node ) -- : Annotation( *new GeomAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'geom' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "geom" ) -- continue; -- -- // parse the attributes -- if ( e.hasAttribute( "type" ) ) -- setGeomType((GeomAnnotation::GeomType)e.attribute( "type" ).toInt()); -- if ( e.hasAttribute( "color" ) ) -- setGeomInnerColor(QColor( e.attribute( "color" ) )); -- -- // loading complete -- break; -- } --} -- --GeomAnnotation::~GeomAnnotation() --{ --} -- --void GeomAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [geom] element -- QDomElement geomElement = document.createElement( "geom" ); -- node.appendChild( geomElement ); -- -- // append the optional attributes -- if ( geomType() != InscribedSquare ) -- geomElement.setAttribute( "type", (int)geomType() ); -- if ( geomInnerColor().isValid() ) -- geomElement.setAttribute( "color", geomInnerColor().name() ); --} -- --Annotation::SubType GeomAnnotation::subType() const --{ -- return AGeom; --} -- --GeomAnnotation::GeomType GeomAnnotation::geomType() const --{ -- Q_D( const GeomAnnotation ); -- -- if (!d->pdfAnnot) -- return d->geomType; -- -- if (d->pdfAnnot->getType() == Annot::typeSquare) -- return GeomAnnotation::InscribedSquare; -- else // Annot::typeCircle -- return GeomAnnotation::InscribedCircle; --} -- --void GeomAnnotation::setGeomType( GeomAnnotation::GeomType type ) --{ -- Q_D( GeomAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->geomType = type; -- return; -- } -- -- AnnotGeometry * geomann = static_cast<AnnotGeometry*>(d->pdfAnnot); -- if (type == GeomAnnotation::InscribedSquare) -- geomann->setType(Annot::typeSquare); -- else // GeomAnnotation::InscribedCircle -- geomann->setType(Annot::typeCircle); --} -- --QColor GeomAnnotation::geomInnerColor() const --{ -- Q_D( const GeomAnnotation ); -- -- if (!d->pdfAnnot) -- return d->geomInnerColor; -- -- const AnnotGeometry * geomann = static_cast<const AnnotGeometry*>(d->pdfAnnot); -- return convertAnnotColor( geomann->getInteriorColor() ); --} -- --void GeomAnnotation::setGeomInnerColor( const QColor &color ) --{ -- Q_D( GeomAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->geomInnerColor = color; -- return; -- } -- -- AnnotGeometry * geomann = static_cast<AnnotGeometry*>(d->pdfAnnot); -- geomann->setInteriorColor(convertQColor( color )); --} -- -- --/** HighlightAnnotation [Annotation] */ --class HighlightAnnotationPrivate : public AnnotationPrivate --{ -- public: -- HighlightAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- HighlightAnnotation::HighlightType highlightType; -- QList< HighlightAnnotation::Quad > highlightQuads; // not empty -- -- // helpers -- static Annot::AnnotSubtype toAnnotSubType( HighlightAnnotation::HighlightType type ); -- QList< HighlightAnnotation::Quad > fromQuadrilaterals(AnnotQuadrilaterals *quads) const; -- AnnotQuadrilaterals * toQuadrilaterals(const QList< HighlightAnnotation::Quad > &quads) const; --}; -- --HighlightAnnotationPrivate::HighlightAnnotationPrivate() -- : AnnotationPrivate(), highlightType( HighlightAnnotation::Highlight ) --{ --} -- --Annotation * HighlightAnnotationPrivate::makeAlias() --{ -- return new HighlightAnnotation(*this); --} -- --Annot::AnnotSubtype HighlightAnnotationPrivate::toAnnotSubType( HighlightAnnotation::HighlightType type ) --{ -- switch (type) -- { -- default: // HighlightAnnotation::Highlight: -- return Annot::typeHighlight; -- case HighlightAnnotation::Underline: -- return Annot::typeUnderline; -- case HighlightAnnotation::Squiggly: -- return Annot::typeSquiggly; -- case HighlightAnnotation::StrikeOut: -- return Annot::typeStrikeOut; -- } --} -- --QList< HighlightAnnotation::Quad > HighlightAnnotationPrivate::fromQuadrilaterals(AnnotQuadrilaterals *hlquads) const --{ -- QList< HighlightAnnotation::Quad > quads; -- -- if ( !hlquads || !hlquads->getQuadrilateralsLength() ) -- return quads; -- const int quadsCount = hlquads->getQuadrilateralsLength(); -- -- double MTX[6]; -- fillTransformationMTX(MTX); -- -- quads.reserve(quadsCount); -- for (int q = 0; q < quadsCount; ++q) -- { -- HighlightAnnotation::Quad quad; -- XPDFReader::transform( MTX, hlquads->getX1( q ), hlquads->getY1( q ), quad.points[ 0 ] ); -- XPDFReader::transform( MTX, hlquads->getX2( q ), hlquads->getY2( q ), quad.points[ 1 ] ); -- XPDFReader::transform( MTX, hlquads->getX3( q ), hlquads->getY3( q ), quad.points[ 2 ] ); -- XPDFReader::transform( MTX, hlquads->getX4( q ), hlquads->getY4( q ), quad.points[ 3 ] ); -- // ### PDF1.6 specs says that point are in ccw order, but in fact -- // points 3 and 4 are swapped in every PDF around! -- QPointF tmpPoint = quad.points[ 2 ]; -- quad.points[ 2 ] = quad.points[ 3 ]; -- quad.points[ 3 ] = tmpPoint; -- // initialize other properties and append quad -- quad.capStart = true; // unlinked quads are always capped -- quad.capEnd = true; // unlinked quads are always capped -- quad.feather = 0.1; // default feather -- quads.append( quad ); -- } -- -- return quads; --} -- --AnnotQuadrilaterals * HighlightAnnotationPrivate::toQuadrilaterals(const QList< HighlightAnnotation::Quad > &quads) const --{ -- const int count = quads.size(); -- AnnotQuadrilaterals::AnnotQuadrilateral **ac = -- (AnnotQuadrilaterals::AnnotQuadrilateral**) -- gmallocn( count, sizeof(AnnotQuadrilaterals::AnnotQuadrilateral*) ); -- -- double MTX[6]; -- fillTransformationMTX(MTX); -- -- int pos = 0; -- foreach (const HighlightAnnotation::Quad &q, quads) -- { -- double x1, y1, x2, y2, x3, y3, x4, y4; -- XPDFReader::invTransform( MTX, q.points[0], x1, y1 ); -- XPDFReader::invTransform( MTX, q.points[1], x2, y2 ); -- // Swap points 3 and 4 (see HighlightAnnotationPrivate::fromQuadrilaterals) -- XPDFReader::invTransform( MTX, q.points[3], x3, y3 ); -- XPDFReader::invTransform( MTX, q.points[2], x4, y4 ); -- ac[pos++] = new AnnotQuadrilaterals::AnnotQuadrilateral(x1, y1, x2, y2, x3, y3, x4, y4); -- } -- -- return new AnnotQuadrilaterals(ac, count); --} -- --Annot* HighlightAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- // Setters are defined in the public class -- HighlightAnnotation *q = static_cast<HighlightAnnotation*>( makeAlias() ); -- -- // Set page and document -- pdfPage = destPage; -- parentDoc = doc; -- -- // Set pdfAnnot -- PDFRectangle rect = boundaryToPdfRectangle(boundary, flags); -- pdfAnnot = new AnnotTextMarkup(destPage->getDoc(), &rect, toAnnotSubType(highlightType)); -- -- // Set properties -- flushBaseAnnotationProperties(); -- q->setHighlightQuads(highlightQuads); -- -- highlightQuads.clear(); // Free up memory -- -- delete q; -- -- return pdfAnnot; --} -- --HighlightAnnotation::HighlightAnnotation() -- : Annotation( *new HighlightAnnotationPrivate() ) --{} -- --HighlightAnnotation::HighlightAnnotation(HighlightAnnotationPrivate &dd) -- : Annotation( dd ) --{} -- --HighlightAnnotation::HighlightAnnotation( const QDomNode & node ) -- : Annotation( *new HighlightAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'hl' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "hl" ) -- continue; -- -- // parse the attributes -- if ( e.hasAttribute( "type" ) ) -- setHighlightType((HighlightAnnotation::HighlightType)e.attribute( "type" ).toInt()); -- -- // parse all 'quad' subnodes -- QList<HighlightAnnotation::Quad> quads; -- QDomNode quadNode = e.firstChild(); -- for ( ; quadNode.isElement(); quadNode = quadNode.nextSibling() ) -- { -- QDomElement qe = quadNode.toElement(); -- if ( qe.tagName() != "quad" ) -- continue; -- -- Quad q; -- q.points[0].setX(qe.attribute( "ax", "0.0" ).toDouble()); -- q.points[0].setY(qe.attribute( "ay", "0.0" ).toDouble()); -- q.points[1].setX(qe.attribute( "bx", "0.0" ).toDouble()); -- q.points[1].setY(qe.attribute( "by", "0.0" ).toDouble()); -- q.points[2].setX(qe.attribute( "cx", "0.0" ).toDouble()); -- q.points[2].setY(qe.attribute( "cy", "0.0" ).toDouble()); -- q.points[3].setX(qe.attribute( "dx", "0.0" ).toDouble()); -- q.points[3].setY(qe.attribute( "dy", "0.0" ).toDouble()); -- q.capStart = qe.hasAttribute( "start" ); -- q.capEnd = qe.hasAttribute( "end" ); -- q.feather = qe.attribute( "feather", "0.1" ).toDouble(); -- quads.append( q ); -- } -- setHighlightQuads(quads); -- -- // loading complete -- break; -- } --} -- --HighlightAnnotation::~HighlightAnnotation() --{ --} -- --void HighlightAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [hl] element -- QDomElement hlElement = document.createElement( "hl" ); -- node.appendChild( hlElement ); -- -- // append the optional attributes -- if ( highlightType() != Highlight ) -- hlElement.setAttribute( "type", (int)highlightType() ); -- -- const QList<HighlightAnnotation::Quad> quads = highlightQuads(); -- if ( quads.count() < 1 ) -- return; -- // append highlight quads, all children describe quads -- QList< HighlightAnnotation::Quad >::const_iterator it = quads.begin(), end = quads.end(); -- for ( ; it != end; ++it ) -- { -- QDomElement quadElement = document.createElement( "quad" ); -- hlElement.appendChild( quadElement ); -- const Quad & q = *it; -- quadElement.setAttribute( "ax", QString::number( q.points[0].x() ) ); -- quadElement.setAttribute( "ay", QString::number( q.points[0].y() ) ); -- quadElement.setAttribute( "bx", QString::number( q.points[1].x() ) ); -- quadElement.setAttribute( "by", QString::number( q.points[1].y() ) ); -- quadElement.setAttribute( "cx", QString::number( q.points[2].x() ) ); -- quadElement.setAttribute( "cy", QString::number( q.points[2].y() ) ); -- quadElement.setAttribute( "dx", QString::number( q.points[3].x() ) ); -- quadElement.setAttribute( "dy", QString::number( q.points[3].y() ) ); -- if ( q.capStart ) -- quadElement.setAttribute( "start", 1 ); -- if ( q.capEnd ) -- quadElement.setAttribute( "end", 1 ); -- quadElement.setAttribute( "feather", QString::number( q.feather ) ); -- } --} -- --Annotation::SubType HighlightAnnotation::subType() const --{ -- return AHighlight; --} -- --HighlightAnnotation::HighlightType HighlightAnnotation::highlightType() const --{ -- Q_D( const HighlightAnnotation ); -- -- if (!d->pdfAnnot) -- return d->highlightType; -- -- Annot::AnnotSubtype subType = d->pdfAnnot->getType(); -- -- if ( subType == Annot::typeHighlight ) -- return HighlightAnnotation::Highlight; -- else if ( subType == Annot::typeUnderline ) -- return HighlightAnnotation::Underline; -- else if ( subType == Annot::typeSquiggly ) -- return HighlightAnnotation::Squiggly; -- else // Annot::typeStrikeOut -- return HighlightAnnotation::StrikeOut; --} -- --void HighlightAnnotation::setHighlightType( HighlightAnnotation::HighlightType type ) --{ -- Q_D( HighlightAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->highlightType = type; -- return; -- } -- -- AnnotTextMarkup * hlann = static_cast<AnnotTextMarkup*>(d->pdfAnnot); -- hlann->setType(HighlightAnnotationPrivate::toAnnotSubType( type )); --} -- --QList< HighlightAnnotation::Quad > HighlightAnnotation::highlightQuads() const --{ -- Q_D( const HighlightAnnotation ); -- -- if (!d->pdfAnnot) -- return d->highlightQuads; -- -- const AnnotTextMarkup * hlann = static_cast<AnnotTextMarkup*>(d->pdfAnnot); -- return d->fromQuadrilaterals( hlann->getQuadrilaterals() ); --} -- --void HighlightAnnotation::setHighlightQuads( const QList< HighlightAnnotation::Quad > &quads ) --{ -- Q_D( HighlightAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->highlightQuads = quads; -- return; -- } -- -- AnnotTextMarkup * hlann = static_cast<AnnotTextMarkup*>(d->pdfAnnot); -- AnnotQuadrilaterals * quadrilaterals = d->toQuadrilaterals(quads); -- hlann->setQuadrilaterals(quadrilaterals); -- delete quadrilaterals; --} -- -- --/** StampAnnotation [Annotation] */ --class StampAnnotationPrivate : public AnnotationPrivate --{ -- public: -- StampAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- QString stampIconName; --}; -- --StampAnnotationPrivate::StampAnnotationPrivate() -- : AnnotationPrivate(), stampIconName( "Draft" ) --{ --} -- --Annotation * StampAnnotationPrivate::makeAlias() --{ -- return new StampAnnotation(*this); --} -- --Annot* StampAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- StampAnnotation *q = static_cast<StampAnnotation*>( makeAlias() ); -- -- // Set page and document -- pdfPage = destPage; -- parentDoc = doc; -- -- // Set pdfAnnot -- PDFRectangle rect = boundaryToPdfRectangle(boundary, flags); -- pdfAnnot = new AnnotStamp(destPage->getDoc(), &rect); -- -- // Set properties -- flushBaseAnnotationProperties(); -- q->setStampIconName(stampIconName); -- -- delete q; -- -- stampIconName.clear(); // Free up memory -- -- return pdfAnnot; --} -- --StampAnnotation::StampAnnotation() -- : Annotation( *new StampAnnotationPrivate() ) --{} -- --StampAnnotation::StampAnnotation(StampAnnotationPrivate &dd) -- : Annotation( dd ) --{} -- --StampAnnotation::StampAnnotation( const QDomNode & node ) -- : Annotation( *new StampAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'stamp' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "stamp" ) -- continue; -- -- // parse the attributes -- if ( e.hasAttribute( "icon" ) ) -- setStampIconName(e.attribute( "icon" )); -- -- // loading complete -- break; -- } --} -- --StampAnnotation::~StampAnnotation() --{ --} -- --void StampAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [stamp] element -- QDomElement stampElement = document.createElement( "stamp" ); -- node.appendChild( stampElement ); -- -- // append the optional attributes -- if ( stampIconName() != "Draft" ) -- stampElement.setAttribute( "icon", stampIconName() ); --} -- --Annotation::SubType StampAnnotation::subType() const --{ -- return AStamp; --} -- --QString StampAnnotation::stampIconName() const --{ -- Q_D( const StampAnnotation ); -- -- if (!d->pdfAnnot) -- return d->stampIconName; -- -- const AnnotStamp * stampann = static_cast<const AnnotStamp*>(d->pdfAnnot); -- return QString::fromLatin1( stampann->getIcon()->getCString() ); --} -- --void StampAnnotation::setStampIconName( const QString &name ) --{ -- Q_D( StampAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->stampIconName = name; -- return; -- } -- -- AnnotStamp * stampann = static_cast<AnnotStamp*>(d->pdfAnnot); -- QByteArray encoded = name.toLatin1(); -- GooString s(encoded.constData()); -- stampann->setIcon(&s); --} -- --/** InkAnnotation [Annotation] */ --class InkAnnotationPrivate : public AnnotationPrivate --{ -- public: -- InkAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- QList< QLinkedList<QPointF> > inkPaths; -- -- // helper -- AnnotPath **toAnnotPaths(const QList< QLinkedList<QPointF> > &inkPaths); --}; -- --InkAnnotationPrivate::InkAnnotationPrivate() -- : AnnotationPrivate() --{ --} -- --Annotation * InkAnnotationPrivate::makeAlias() --{ -- return new InkAnnotation(*this); --} -- --// Note: Caller is required to delete array elements and the array itself after use --AnnotPath **InkAnnotationPrivate::toAnnotPaths(const QList< QLinkedList<QPointF> > &inkPaths) --{ -- const int pathsNumber = inkPaths.size(); -- AnnotPath **res = new AnnotPath*[pathsNumber]; -- for (int i = 0; i < pathsNumber; ++i) -- res[i] = toAnnotPath( inkPaths[i] ); -- return res; --} -- --Annot* InkAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- // Setters are defined in the public class -- InkAnnotation *q = static_cast<InkAnnotation*>( makeAlias() ); -- -- // Set page and document -- pdfPage = destPage; -- parentDoc = doc; -- -- // Set pdfAnnot -- PDFRectangle rect = boundaryToPdfRectangle(boundary, flags); -- pdfAnnot = new AnnotInk(destPage->getDoc(), &rect); -- -- // Set properties -- flushBaseAnnotationProperties(); -- q->setInkPaths(inkPaths); -- -- inkPaths.clear(); // Free up memory -- -- delete q; -- -- return pdfAnnot; --} -- --InkAnnotation::InkAnnotation() -- : Annotation( *new InkAnnotationPrivate() ) --{} -- --InkAnnotation::InkAnnotation(InkAnnotationPrivate &dd) -- : Annotation( dd ) --{} -- --InkAnnotation::InkAnnotation( const QDomNode & node ) -- : Annotation( *new InkAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'ink' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "ink" ) -- continue; -- -- // parse the 'path' subnodes -- QList< QLinkedList<QPointF> > paths; -- QDomNode pathNode = e.firstChild(); -- while ( pathNode.isElement() ) -- { -- QDomElement pathElement = pathNode.toElement(); -- pathNode = pathNode.nextSibling(); -- -- if ( pathElement.tagName() != "path" ) -- continue; -- -- // build each path parsing 'point' subnodes -- QLinkedList<QPointF> path; -- QDomNode pointNode = pathElement.firstChild(); -- while ( pointNode.isElement() ) -- { -- QDomElement pointElement = pointNode.toElement(); -- pointNode = pointNode.nextSibling(); -- -- if ( pointElement.tagName() != "point" ) -- continue; -- -- QPointF p(pointElement.attribute( "x", "0.0" ).toDouble(), pointElement.attribute( "y", "0.0" ).toDouble()); -- path.append( p ); -- } -- -- // add the path to the path list if it contains at least 2 nodes -- if ( path.count() >= 2 ) -- paths.append( path ); -- } -- setInkPaths(paths); -- -- // loading complete -- break; -- } --} -- --InkAnnotation::~InkAnnotation() --{ --} -- --void InkAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [ink] element -- QDomElement inkElement = document.createElement( "ink" ); -- node.appendChild( inkElement ); -- -- // append the optional attributes -- const QList< QLinkedList<QPointF> > paths = inkPaths(); -- if ( paths.count() < 1 ) -- return; -- QList< QLinkedList<QPointF> >::const_iterator pIt = paths.begin(), pEnd = paths.end(); -- for ( ; pIt != pEnd; ++pIt ) -- { -- QDomElement pathElement = document.createElement( "path" ); -- inkElement.appendChild( pathElement ); -- const QLinkedList<QPointF> & path = *pIt; -- QLinkedList<QPointF>::const_iterator iIt = path.begin(), iEnd = path.end(); -- for ( ; iIt != iEnd; ++iIt ) -- { -- const QPointF & point = *iIt; -- QDomElement pointElement = document.createElement( "point" ); -- pathElement.appendChild( pointElement ); -- pointElement.setAttribute( "x", QString::number( point.x() ) ); -- pointElement.setAttribute( "y", QString::number( point.y() ) ); -- } -- } --} -- --Annotation::SubType InkAnnotation::subType() const --{ -- return AInk; --} -- --QList< QLinkedList<QPointF> > InkAnnotation::inkPaths() const --{ -- Q_D( const InkAnnotation ); -- -- if (!d->pdfAnnot) -- return d->inkPaths; -- -- const AnnotInk * inkann = static_cast<const AnnotInk *>(d->pdfAnnot); -- -- const AnnotPath * const* paths = inkann->getInkList(); -- if ( !paths || !inkann->getInkListLength() ) -- return QList< QLinkedList<QPointF> >(); -- -- double MTX[6]; -- d->fillTransformationMTX(MTX); -- -- const int pathsNumber = inkann->getInkListLength(); -- QList< QLinkedList<QPointF> > inkPaths; -- inkPaths.reserve(pathsNumber); -- for (int m = 0; m < pathsNumber; ++m) -- { -- // transform each path in a list of normalized points .. -- QLinkedList<QPointF> localList; -- const AnnotPath * path = paths[ m ]; -- const int pointsNumber = path ? path->getCoordsLength() : 0; -- for (int n = 0; n < pointsNumber; ++n) -- { -- QPointF point; -- XPDFReader::transform(MTX, path->getX(n), path->getY(n), point); -- localList.append(point); -- } -- // ..and add it to the annotation -- inkPaths.append( localList ); -- } -- return inkPaths; --} -- --void InkAnnotation::setInkPaths( const QList< QLinkedList<QPointF> > &paths ) --{ -- Q_D( InkAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->inkPaths = paths; -- return; -- } -- -- AnnotInk * inkann = static_cast<AnnotInk*>(d->pdfAnnot); -- AnnotPath **annotpaths = d->toAnnotPaths(paths); -- const int pathsNumber = paths.size(); -- inkann->setInkList(annotpaths, pathsNumber); -- -- for (int i = 0; i < pathsNumber; ++i) -- delete annotpaths[i]; -- delete[] annotpaths; --} -- -- --/** LinkAnnotation [Annotation] */ --class LinkAnnotationPrivate : public AnnotationPrivate --{ -- public: -- LinkAnnotationPrivate(); -- ~LinkAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- Link * linkDestination; -- LinkAnnotation::HighlightMode linkHLMode; -- QPointF linkRegion[4]; --}; -- --LinkAnnotationPrivate::LinkAnnotationPrivate() -- : AnnotationPrivate(), linkDestination( 0 ), linkHLMode( LinkAnnotation::Invert ) --{ --} -- --LinkAnnotationPrivate::~LinkAnnotationPrivate() --{ -- delete linkDestination; --} -- --Annotation * LinkAnnotationPrivate::makeAlias() --{ -- return new LinkAnnotation(*this); --} -- --Annot* LinkAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- return 0; // Not implemented --} -- --LinkAnnotation::LinkAnnotation() -- : Annotation( *new LinkAnnotationPrivate() ) --{} -- --LinkAnnotation::LinkAnnotation(LinkAnnotationPrivate &dd) -- : Annotation( dd ) --{} -- --LinkAnnotation::LinkAnnotation( const QDomNode & node ) -- : Annotation( *new LinkAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'link' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "link" ) -- continue; -- -- // parse the attributes -- if ( e.hasAttribute( "hlmode" ) ) -- setLinkHighlightMode((LinkAnnotation::HighlightMode)e.attribute( "hlmode" ).toInt()); -- -- // parse all 'quad' subnodes -- QDomNode quadNode = e.firstChild(); -- for ( ; quadNode.isElement(); quadNode = quadNode.nextSibling() ) -- { -- QDomElement qe = quadNode.toElement(); -- if ( qe.tagName() == "quad" ) -- { -- setLinkRegionPoint(0, QPointF(qe.attribute( "ax", "0.0" ).toDouble(), -- qe.attribute( "ay", "0.0" ).toDouble())); -- setLinkRegionPoint(1, QPointF(qe.attribute( "bx", "0.0" ).toDouble(), -- qe.attribute( "by", "0.0" ).toDouble())); -- setLinkRegionPoint(2, QPointF(qe.attribute( "cx", "0.0" ).toDouble(), -- qe.attribute( "cy", "0.0" ).toDouble())); -- setLinkRegionPoint(3, QPointF(qe.attribute( "dx", "0.0" ).toDouble(), -- qe.attribute( "dy", "0.0" ).toDouble())); -- } -- else if ( qe.tagName() == "link" ) -- { -- QString type = qe.attribute( "type" ); -- if ( type == "GoTo" ) -- { -- Poppler::LinkGoto * go = new Poppler::LinkGoto( QRect(), qe.attribute( "filename" ), LinkDestination( qe.attribute( "destination" ) ) ); -- setLinkDestination(go); -- } -- else if ( type == "Exec" ) -- { -- Poppler::LinkExecute * exec = new Poppler::LinkExecute( QRect(), qe.attribute( "filename" ), qe.attribute( "parameters" ) ); -- setLinkDestination(exec); -- } -- else if ( type == "Browse" ) -- { -- Poppler::LinkBrowse * browse = new Poppler::LinkBrowse( QRect(), qe.attribute( "url" ) ); -- setLinkDestination(browse); -- } -- else if ( type == "Action" ) -- { -- Poppler::LinkAction::ActionType act; -- QString actString = qe.attribute( "action" ); -- bool found = true; -- if ( actString == "PageFirst" ) -- act = Poppler::LinkAction::PageFirst; -- else if ( actString == "PagePrev" ) -- act = Poppler::LinkAction::PagePrev; -- else if ( actString == "PageNext" ) -- act = Poppler::LinkAction::PageNext; -- else if ( actString == "PageLast" ) -- act = Poppler::LinkAction::PageLast; -- else if ( actString == "HistoryBack" ) -- act = Poppler::LinkAction::HistoryBack; -- else if ( actString == "HistoryForward" ) -- act = Poppler::LinkAction::HistoryForward; -- else if ( actString == "Quit" ) -- act = Poppler::LinkAction::Quit; -- else if ( actString == "Presentation" ) -- act = Poppler::LinkAction::Presentation; -- else if ( actString == "EndPresentation" ) -- act = Poppler::LinkAction::EndPresentation; -- else if ( actString == "Find" ) -- act = Poppler::LinkAction::Find; -- else if ( actString == "GoToPage" ) -- act = Poppler::LinkAction::GoToPage; -- else if ( actString == "Close" ) -- act = Poppler::LinkAction::Close; -- else if ( actString == "Print" ) -- act = Poppler::LinkAction::Print; -- else -- found = false; -- if (found) -- { -- Poppler::LinkAction * action = new Poppler::LinkAction( QRect(), act ); -- setLinkDestination(action); -- } -- } --#if 0 -- else if ( type == "Movie" ) -- { -- Poppler::LinkMovie * movie = new Poppler::LinkMovie( QRect() ); -- setLinkDestination(movie); -- } --#endif -- } -- } -- -- // loading complete -- break; -- } --} -- --LinkAnnotation::~LinkAnnotation() --{ --} -- --void LinkAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [hl] element -- QDomElement linkElement = document.createElement( "link" ); -- node.appendChild( linkElement ); -- -- // append the optional attributes -- if ( linkHighlightMode() != Invert ) -- linkElement.setAttribute( "hlmode", (int)linkHighlightMode() ); -- -- // saving region -- QDomElement quadElement = document.createElement( "quad" ); -- linkElement.appendChild( quadElement ); -- quadElement.setAttribute( "ax", QString::number( linkRegionPoint(0).x() ) ); -- quadElement.setAttribute( "ay", QString::number( linkRegionPoint(0).y() ) ); -- quadElement.setAttribute( "bx", QString::number( linkRegionPoint(1).x() ) ); -- quadElement.setAttribute( "by", QString::number( linkRegionPoint(1).y() ) ); -- quadElement.setAttribute( "cx", QString::number( linkRegionPoint(2).x() ) ); -- quadElement.setAttribute( "cy", QString::number( linkRegionPoint(2).y() ) ); -- quadElement.setAttribute( "dx", QString::number( linkRegionPoint(3).x() ) ); -- quadElement.setAttribute( "dy", QString::number( linkRegionPoint(3).y() ) ); -- -- // saving link -- QDomElement hyperlinkElement = document.createElement( "link" ); -- linkElement.appendChild( hyperlinkElement ); -- if ( linkDestination() ) -- { -- switch( linkDestination()->linkType() ) -- { -- case Poppler::Link::Goto: -- { -- Poppler::LinkGoto * go = static_cast< Poppler::LinkGoto * >( linkDestination() ); -- hyperlinkElement.setAttribute( "type", "GoTo" ); -- hyperlinkElement.setAttribute( "filename", go->fileName() ); -- hyperlinkElement.setAttribute( "destionation", go->destination().toString() ); // TODO Remove for poppler 0.28 -- hyperlinkElement.setAttribute( "destination", go->destination().toString() ); -- break; -- } -- case Poppler::Link::Execute: -- { -- Poppler::LinkExecute * exec = static_cast< Poppler::LinkExecute * >( linkDestination() ); -- hyperlinkElement.setAttribute( "type", "Exec" ); -- hyperlinkElement.setAttribute( "filename", exec->fileName() ); -- hyperlinkElement.setAttribute( "parameters", exec->parameters() ); -- break; -- } -- case Poppler::Link::Browse: -- { -- Poppler::LinkBrowse * browse = static_cast< Poppler::LinkBrowse * >( linkDestination() ); -- hyperlinkElement.setAttribute( "type", "Browse" ); -- hyperlinkElement.setAttribute( "url", browse->url() ); -- break; -- } -- case Poppler::Link::Action: -- { -- Poppler::LinkAction * action = static_cast< Poppler::LinkAction * >( linkDestination() ); -- hyperlinkElement.setAttribute( "type", "Action" ); -- switch ( action->actionType() ) -- { -- case Poppler::LinkAction::PageFirst: -- hyperlinkElement.setAttribute( "action", "PageFirst" ); -- break; -- case Poppler::LinkAction::PagePrev: -- hyperlinkElement.setAttribute( "action", "PagePrev" ); -- break; -- case Poppler::LinkAction::PageNext: -- hyperlinkElement.setAttribute( "action", "PageNext" ); -- break; -- case Poppler::LinkAction::PageLast: -- hyperlinkElement.setAttribute( "action", "PageLast" ); -- break; -- case Poppler::LinkAction::HistoryBack: -- hyperlinkElement.setAttribute( "action", "HistoryBack" ); -- break; -- case Poppler::LinkAction::HistoryForward: -- hyperlinkElement.setAttribute( "action", "HistoryForward" ); -- break; -- case Poppler::LinkAction::Quit: -- hyperlinkElement.setAttribute( "action", "Quit" ); -- break; -- case Poppler::LinkAction::Presentation: -- hyperlinkElement.setAttribute( "action", "Presentation" ); -- break; -- case Poppler::LinkAction::EndPresentation: -- hyperlinkElement.setAttribute( "action", "EndPresentation" ); -- break; -- case Poppler::LinkAction::Find: -- hyperlinkElement.setAttribute( "action", "Find" ); -- break; -- case Poppler::LinkAction::GoToPage: -- hyperlinkElement.setAttribute( "action", "GoToPage" ); -- break; -- case Poppler::LinkAction::Close: -- hyperlinkElement.setAttribute( "action", "Close" ); -- break; -- case Poppler::LinkAction::Print: -- hyperlinkElement.setAttribute( "action", "Print" ); -- break; -- } -- break; -- } -- case Poppler::Link::Movie: -- { -- hyperlinkElement.setAttribute( "type", "Movie" ); -- break; -- } -- case Poppler::Link::Rendition: -- { -- hyperlinkElement.setAttribute( "type", "Rendition" ); -- break; -- } -- case Poppler::Link::Sound: -- { -- // FIXME: implement me -- break; -- } -- case Poppler::Link::None: -- break; -- } -- } --} -- --Annotation::SubType LinkAnnotation::subType() const --{ -- return ALink; --} -- --Link* LinkAnnotation::linkDestination() const --{ -- Q_D( const LinkAnnotation ); -- return d->linkDestination; --} -- --void LinkAnnotation::setLinkDestination( Link *link ) --{ -- Q_D( LinkAnnotation ); -- delete d->linkDestination; -- d->linkDestination = link; --} -- --LinkAnnotation::HighlightMode LinkAnnotation::linkHighlightMode() const --{ -- Q_D( const LinkAnnotation ); -- return d->linkHLMode; --} -- --void LinkAnnotation::setLinkHighlightMode( LinkAnnotation::HighlightMode mode ) --{ -- Q_D( LinkAnnotation ); -- d->linkHLMode = mode; --} -- --QPointF LinkAnnotation::linkRegionPoint( int id ) const --{ -- if ( id < 0 || id >= 4 ) -- return QPointF(); -- -- Q_D( const LinkAnnotation ); -- return d->linkRegion[id]; --} -- --void LinkAnnotation::setLinkRegionPoint( int id, const QPointF &point ) --{ -- if ( id < 0 || id >= 4 ) -- return; -- -- Q_D( LinkAnnotation ); -- d->linkRegion[id] = point; --} -- --/** CaretAnnotation [Annotation] */ --class CaretAnnotationPrivate : public AnnotationPrivate --{ -- public: -- CaretAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- CaretAnnotation::CaretSymbol symbol; --}; -- --static QString caretSymbolToString( CaretAnnotation::CaretSymbol symbol ) --{ -- switch ( symbol ) -- { -- case CaretAnnotation::None: -- return QString::fromLatin1( "None" ); -- case CaretAnnotation::P: -- return QString::fromLatin1( "P" ); -- } -- return QString(); --} -- --static CaretAnnotation::CaretSymbol caretSymbolFromString( const QString &symbol ) --{ -- if ( symbol == QLatin1String( "None" ) ) -- return CaretAnnotation::None; -- else if ( symbol == QLatin1String( "P" ) ) -- return CaretAnnotation::P; -- return CaretAnnotation::None; --} -- --CaretAnnotationPrivate::CaretAnnotationPrivate() -- : AnnotationPrivate(), symbol( CaretAnnotation::None ) --{ --} -- --Annotation * CaretAnnotationPrivate::makeAlias() --{ -- return new CaretAnnotation(*this); --} -- --Annot* CaretAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- // Setters are defined in the public class -- CaretAnnotation *q = static_cast<CaretAnnotation*>( makeAlias() ); -- -- // Set page and document -- pdfPage = destPage; -- parentDoc = doc; -- -- // Set pdfAnnot -- PDFRectangle rect = boundaryToPdfRectangle(boundary, flags); -- pdfAnnot = new AnnotCaret(destPage->getDoc(), &rect); -- -- // Set properties -- flushBaseAnnotationProperties(); -- q->setCaretSymbol(symbol); -- -- delete q; -- return pdfAnnot; --} -- --CaretAnnotation::CaretAnnotation() -- : Annotation( *new CaretAnnotationPrivate() ) --{ --} -- --CaretAnnotation::CaretAnnotation(CaretAnnotationPrivate &dd) -- : Annotation( dd ) --{ --} -- --CaretAnnotation::CaretAnnotation( const QDomNode & node ) -- : Annotation( *new CaretAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'caret' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "caret" ) -- continue; -- -- // parse the attributes -- if ( e.hasAttribute( "symbol" ) ) -- setCaretSymbol(caretSymbolFromString( e.attribute( "symbol" ) )); -- -- // loading complete -- break; -- } --} -- --CaretAnnotation::~CaretAnnotation() --{ --} -- --void CaretAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [caret] element -- QDomElement caretElement = document.createElement( "caret" ); -- node.appendChild( caretElement ); -- -- // append the optional attributes -- if ( caretSymbol() != CaretAnnotation::None ) -- caretElement.setAttribute( "symbol", caretSymbolToString( caretSymbol() ) ); --} -- --Annotation::SubType CaretAnnotation::subType() const --{ -- return ACaret; --} -- --CaretAnnotation::CaretSymbol CaretAnnotation::caretSymbol() const --{ -- Q_D( const CaretAnnotation ); -- -- if (!d->pdfAnnot) -- return d->symbol; -- -- const AnnotCaret * caretann = static_cast<const AnnotCaret *>(d->pdfAnnot); -- return (CaretAnnotation::CaretSymbol)caretann->getSymbol(); --} -- --void CaretAnnotation::setCaretSymbol( CaretAnnotation::CaretSymbol symbol ) --{ -- Q_D( CaretAnnotation ); -- -- if (!d->pdfAnnot) -- { -- d->symbol = symbol; -- return; -- } -- -- AnnotCaret * caretann = static_cast<AnnotCaret *>(d->pdfAnnot); -- caretann->setSymbol((AnnotCaret::AnnotCaretSymbol)symbol); --} -- --/** FileAttachmentAnnotation [Annotation] */ --class FileAttachmentAnnotationPrivate : public AnnotationPrivate --{ -- public: -- FileAttachmentAnnotationPrivate(); -- ~FileAttachmentAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- QString icon; -- EmbeddedFile *embfile; --}; -- --FileAttachmentAnnotationPrivate::FileAttachmentAnnotationPrivate() -- : AnnotationPrivate(), icon( "PushPin" ), embfile( 0 ) --{ --} -- --FileAttachmentAnnotationPrivate::~FileAttachmentAnnotationPrivate() --{ -- delete embfile; --} -- --Annotation * FileAttachmentAnnotationPrivate::makeAlias() --{ -- return new FileAttachmentAnnotation(*this); --} -- --Annot* FileAttachmentAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- return 0; // Not implemented --} -- --FileAttachmentAnnotation::FileAttachmentAnnotation() -- : Annotation( *new FileAttachmentAnnotationPrivate() ) --{ --} -- --FileAttachmentAnnotation::FileAttachmentAnnotation(FileAttachmentAnnotationPrivate &dd) -- : Annotation( dd ) --{ --} -- --FileAttachmentAnnotation::FileAttachmentAnnotation( const QDomNode & node ) -- : Annotation( *new FileAttachmentAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'fileattachment' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "fileattachment" ) -- continue; -- -- // loading complete -- break; -- } --} -- --FileAttachmentAnnotation::~FileAttachmentAnnotation() --{ --} -- --void FileAttachmentAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [fileattachment] element -- QDomElement fileAttachmentElement = document.createElement( "fileattachment" ); -- node.appendChild( fileAttachmentElement ); --} -- --Annotation::SubType FileAttachmentAnnotation::subType() const --{ -- return AFileAttachment; --} -- --QString FileAttachmentAnnotation::fileIconName() const --{ -- Q_D( const FileAttachmentAnnotation ); -- return d->icon; --} -- --void FileAttachmentAnnotation::setFileIconName( const QString &icon ) --{ -- Q_D( FileAttachmentAnnotation ); -- d->icon = icon; --} -- --EmbeddedFile* FileAttachmentAnnotation::embeddedFile() const --{ -- Q_D( const FileAttachmentAnnotation ); -- return d->embfile; --} -- --void FileAttachmentAnnotation::setEmbeddedFile( EmbeddedFile *ef ) --{ -- Q_D( FileAttachmentAnnotation ); -- d->embfile = ef; --} -- --/** SoundAnnotation [Annotation] */ --class SoundAnnotationPrivate : public AnnotationPrivate --{ -- public: -- SoundAnnotationPrivate(); -- ~SoundAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- QString icon; -- SoundObject *sound; --}; -- --SoundAnnotationPrivate::SoundAnnotationPrivate() -- : AnnotationPrivate(), icon( "Speaker" ), sound( 0 ) --{ --} -- --SoundAnnotationPrivate::~SoundAnnotationPrivate() --{ -- delete sound; --} -- --Annotation * SoundAnnotationPrivate::makeAlias() --{ -- return new SoundAnnotation(*this); --} -- --Annot* SoundAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- return 0; // Not implemented --} -- --SoundAnnotation::SoundAnnotation() -- : Annotation( *new SoundAnnotationPrivate() ) --{ --} -- --SoundAnnotation::SoundAnnotation(SoundAnnotationPrivate &dd) -- : Annotation( dd ) --{ --} -- --SoundAnnotation::SoundAnnotation( const QDomNode & node ) -- : Annotation( *new SoundAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'sound' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "sound" ) -- continue; -- -- // loading complete -- break; -- } --} -- --SoundAnnotation::~SoundAnnotation() --{ --} -- --void SoundAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [sound] element -- QDomElement soundElement = document.createElement( "sound" ); -- node.appendChild( soundElement ); --} -- --Annotation::SubType SoundAnnotation::subType() const --{ -- return ASound; --} -- --QString SoundAnnotation::soundIconName() const --{ -- Q_D( const SoundAnnotation ); -- return d->icon; --} -- --void SoundAnnotation::setSoundIconName( const QString &icon ) --{ -- Q_D( SoundAnnotation ); -- d->icon = icon; --} -- --SoundObject* SoundAnnotation::sound() const --{ -- Q_D( const SoundAnnotation ); -- return d->sound; --} -- --void SoundAnnotation::setSound( SoundObject *s ) --{ -- Q_D( SoundAnnotation ); -- d->sound = s; --} -- --/** MovieAnnotation [Annotation] */ --class MovieAnnotationPrivate : public AnnotationPrivate --{ -- public: -- MovieAnnotationPrivate(); -- ~MovieAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- MovieObject *movie; -- QString title; --}; -- --MovieAnnotationPrivate::MovieAnnotationPrivate() -- : AnnotationPrivate(), movie( 0 ) --{ --} -- --MovieAnnotationPrivate::~MovieAnnotationPrivate() --{ -- delete movie; --} -- --Annotation * MovieAnnotationPrivate::makeAlias() --{ -- return new MovieAnnotation(*this); --} -- --Annot* MovieAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- return 0; // Not implemented --} -- --MovieAnnotation::MovieAnnotation() -- : Annotation( *new MovieAnnotationPrivate() ) --{ --} -- --MovieAnnotation::MovieAnnotation(MovieAnnotationPrivate &dd) -- : Annotation( dd ) --{ --} -- --MovieAnnotation::MovieAnnotation( const QDomNode & node ) -- : Annotation( *new MovieAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'movie' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "movie" ) -- continue; -- -- // loading complete -- break; -- } --} -- --MovieAnnotation::~MovieAnnotation() --{ --} -- --void MovieAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [movie] element -- QDomElement movieElement = document.createElement( "movie" ); -- node.appendChild( movieElement ); --} -- --Annotation::SubType MovieAnnotation::subType() const --{ -- return AMovie; --} -- --MovieObject* MovieAnnotation::movie() const --{ -- Q_D( const MovieAnnotation ); -- return d->movie; --} -- --void MovieAnnotation::setMovie( MovieObject *movie ) --{ -- Q_D( MovieAnnotation ); -- d->movie = movie; --} -- --QString MovieAnnotation::movieTitle() const --{ -- Q_D( const MovieAnnotation ); -- return d->title; --} -- --void MovieAnnotation::setMovieTitle( const QString &title ) --{ -- Q_D( MovieAnnotation ); -- d->title = title; --} -- --/** ScreenAnnotation [Annotation] */ --class ScreenAnnotationPrivate : public AnnotationPrivate --{ -- public: -- ScreenAnnotationPrivate(); -- ~ScreenAnnotationPrivate(); -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); -- -- // data fields -- LinkRendition *action; -- QString title; --}; -- --ScreenAnnotationPrivate::ScreenAnnotationPrivate() -- : AnnotationPrivate(), action( 0 ) --{ --} -- --ScreenAnnotationPrivate::~ScreenAnnotationPrivate() --{ -- delete action; --} -- --ScreenAnnotation::ScreenAnnotation(ScreenAnnotationPrivate &dd) -- : Annotation( dd ) --{} -- --Annotation * ScreenAnnotationPrivate::makeAlias() --{ -- return new ScreenAnnotation(*this); --} -- --Annot* ScreenAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- return 0; // Not implemented --} -- --ScreenAnnotation::ScreenAnnotation() -- : Annotation( *new ScreenAnnotationPrivate() ) --{ --} -- --ScreenAnnotation::~ScreenAnnotation() --{ --} -- --void ScreenAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [screen] element -- QDomElement screenElement = document.createElement( "screen" ); -- node.appendChild( screenElement ); --} -- --Annotation::SubType ScreenAnnotation::subType() const --{ -- return AScreen; --} -- --LinkRendition* ScreenAnnotation::action() const --{ -- Q_D( const ScreenAnnotation ); -- return d->action; --} -- --void ScreenAnnotation::setAction( LinkRendition *action ) --{ -- Q_D( ScreenAnnotation ); -- d->action = action; --} -- --QString ScreenAnnotation::screenTitle() const --{ -- Q_D( const ScreenAnnotation ); -- return d->title; --} -- --void ScreenAnnotation::setScreenTitle( const QString &title ) --{ -- Q_D( ScreenAnnotation ); -- d->title = title; --} -- --Link* ScreenAnnotation::additionalAction( AdditionalActionType type ) const --{ -- Q_D( const ScreenAnnotation ); -- return d->additionalAction( type ); --} -- --/** WidgetAnnotation [Annotation] */ --class WidgetAnnotationPrivate : public AnnotationPrivate --{ -- public: -- Annotation * makeAlias(); -- Annot* createNativeAnnot(::Page *destPage, DocumentData *doc); --}; -- --Annotation * WidgetAnnotationPrivate::makeAlias() --{ -- return new WidgetAnnotation(*this); --} -- --Annot* WidgetAnnotationPrivate::createNativeAnnot(::Page *destPage, DocumentData *doc) --{ -- return 0; // Not implemented --} -- --WidgetAnnotation::WidgetAnnotation(WidgetAnnotationPrivate &dd) -- : Annotation( dd ) --{} -- --WidgetAnnotation::WidgetAnnotation() -- : Annotation( *new WidgetAnnotationPrivate() ) --{ --} -- --WidgetAnnotation::~WidgetAnnotation() --{ --} -- --void WidgetAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [widget] element -- QDomElement widgetElement = document.createElement( "widget" ); -- node.appendChild( widgetElement ); --} -- --Annotation::SubType WidgetAnnotation::subType() const --{ -- return AWidget; --} -- --Link* WidgetAnnotation::additionalAction( AdditionalActionType type ) const --{ -- Q_D( const WidgetAnnotation ); -- return d->additionalAction( type ); --} -- --/** RichMediaAnnotation [Annotation] */ --class RichMediaAnnotation::Params::Private --{ -- public: -- Private() {} -- -- QString flashVars; --}; -- --RichMediaAnnotation::Params::Params() -- : d( new Private ) --{ --} -- --RichMediaAnnotation::Params::~Params() --{ --} -- --void RichMediaAnnotation::Params::setFlashVars( const QString &flashVars ) --{ -- d->flashVars = flashVars; --} -- --QString RichMediaAnnotation::Params::flashVars() const --{ -- return d->flashVars; --} -- -- --class RichMediaAnnotation::Instance::Private --{ -- public: -- Private() -- : params( 0 ) -- { -- } -- -- ~Private() -- { -- delete params; -- } -- -- RichMediaAnnotation::Instance::Type type; -- RichMediaAnnotation::Params *params; --}; -- --RichMediaAnnotation::Instance::Instance() -- : d( new Private ) --{ --} -- --RichMediaAnnotation::Instance::~Instance() --{ --} -- --void RichMediaAnnotation::Instance::setType( Type type ) --{ -- d->type = type; --} -- --RichMediaAnnotation::Instance::Type RichMediaAnnotation::Instance::type() const --{ -- return d->type; --} -- --void RichMediaAnnotation::Instance::setParams( RichMediaAnnotation::Params *params ) --{ -- delete d->params; -- d->params = params; --} -- --RichMediaAnnotation::Params* RichMediaAnnotation::Instance::params() const --{ -- return d->params; --} -- -- --class RichMediaAnnotation::Configuration::Private --{ -- public: -- Private() {} -- ~Private() -- { -- qDeleteAll( instances ); -- instances.clear(); -- } -- -- RichMediaAnnotation::Configuration::Type type; -- QString name; -- QList< RichMediaAnnotation::Instance* > instances; --}; -- --RichMediaAnnotation::Configuration::Configuration() -- : d( new Private ) --{ --} -- --RichMediaAnnotation::Configuration::~Configuration() --{ --} -- --void RichMediaAnnotation::Configuration::setType( Type type ) --{ -- d->type = type; --} -- --RichMediaAnnotation::Configuration::Type RichMediaAnnotation::Configuration::type() const --{ -- return d->type; --} -- --void RichMediaAnnotation::Configuration::setName( const QString &name ) --{ -- d->name = name; --} -- --QString RichMediaAnnotation::Configuration::name() const --{ -- return d->name; --} -- --void RichMediaAnnotation::Configuration::setInstances( const QList< RichMediaAnnotation::Instance* > &instances ) --{ -- qDeleteAll( d->instances ); -- d->instances.clear(); -- -- d->instances = instances; --} -- --QList< RichMediaAnnotation::Instance* > RichMediaAnnotation::Configuration::instances() const --{ -- return d->instances; --} -- -- --class RichMediaAnnotation::Asset::Private --{ -- public: -- Private() -- : embeddedFile( 0 ) -- { -- } -- -- ~Private() -- { -- delete embeddedFile; -- } -- -- QString name; -- EmbeddedFile *embeddedFile; --}; -- --RichMediaAnnotation::Asset::Asset() -- : d( new Private ) --{ --} -- --RichMediaAnnotation::Asset::~Asset() --{ --} -- --void RichMediaAnnotation::Asset::setName( const QString &name ) --{ -- d->name = name; --} -- --QString RichMediaAnnotation::Asset::name() const --{ -- return d->name; --} -- --void RichMediaAnnotation::Asset::setEmbeddedFile( EmbeddedFile * embeddedFile ) --{ -- delete d->embeddedFile; -- d->embeddedFile = embeddedFile; --} -- --EmbeddedFile* RichMediaAnnotation::Asset::embeddedFile() const --{ -- return d->embeddedFile; --} -- -- --class RichMediaAnnotation::Content::Private --{ -- public: -- Private() {} -- ~Private() -- { -- qDeleteAll( configurations ); -- configurations.clear(); -- -- qDeleteAll( assets ); -- assets.clear(); -- } -- -- QList< RichMediaAnnotation::Configuration* > configurations; -- QList< RichMediaAnnotation::Asset* > assets; --}; -- --RichMediaAnnotation::Content::Content() -- : d( new Private ) --{ --} -- --RichMediaAnnotation::Content::~Content() --{ --} -- --void RichMediaAnnotation::Content::setConfigurations( const QList< RichMediaAnnotation::Configuration* > &configurations ) --{ -- qDeleteAll( d->configurations ); -- d->configurations.clear(); -- -- d->configurations = configurations; --} -- --QList< RichMediaAnnotation::Configuration* > RichMediaAnnotation::Content::configurations() const --{ -- return d->configurations; --} -- --void RichMediaAnnotation::Content::setAssets( const QList< RichMediaAnnotation::Asset* > &assets ) --{ -- qDeleteAll( d->assets ); -- d->assets.clear(); -- -- d->assets = assets; --} -- --QList< RichMediaAnnotation::Asset* > RichMediaAnnotation::Content::assets() const --{ -- return d->assets; --} -- -- --class RichMediaAnnotation::Activation::Private --{ -- public: -- Private() -- : condition( RichMediaAnnotation::Activation::UserAction ) -- { -- } -- -- RichMediaAnnotation::Activation::Condition condition; --}; -- --RichMediaAnnotation::Activation::Activation() -- : d( new Private ) --{ --} -- --RichMediaAnnotation::Activation::~Activation() --{ --} -- --void RichMediaAnnotation::Activation::setCondition( Condition condition ) --{ -- d->condition = condition; --} -- --RichMediaAnnotation::Activation::Condition RichMediaAnnotation::Activation::condition() const --{ -- return d->condition; --} -- -- --class RichMediaAnnotation::Deactivation::Private : public QSharedData --{ -- public: -- Private() -- : condition( RichMediaAnnotation::Deactivation::UserAction ) -- { -- } -- -- RichMediaAnnotation::Deactivation::Condition condition; --}; -- --RichMediaAnnotation::Deactivation::Deactivation() -- : d( new Private ) --{ --} -- --RichMediaAnnotation::Deactivation::~Deactivation() --{ --} -- --void RichMediaAnnotation::Deactivation::setCondition( Condition condition ) --{ -- d->condition = condition; --} -- --RichMediaAnnotation::Deactivation::Condition RichMediaAnnotation::Deactivation::condition() const --{ -- return d->condition; --} -- -- --class RichMediaAnnotation::Settings::Private : public QSharedData --{ -- public: -- Private() -- : activation( 0 ), deactivation( 0 ) -- { -- } -- -- RichMediaAnnotation::Activation *activation; -- RichMediaAnnotation::Deactivation *deactivation; --}; -- --RichMediaAnnotation::Settings::Settings() -- : d( new Private ) --{ --} -- --RichMediaAnnotation::Settings::~Settings() --{ --} -- --void RichMediaAnnotation::Settings::setActivation( RichMediaAnnotation::Activation *activation ) --{ -- delete d->activation; -- d->activation = activation; --} -- --RichMediaAnnotation::Activation* RichMediaAnnotation::Settings::activation() const --{ -- return d->activation; --} -- --void RichMediaAnnotation::Settings::setDeactivation( RichMediaAnnotation::Deactivation *deactivation ) --{ -- delete d->deactivation; -- d->deactivation = deactivation; --} -- --RichMediaAnnotation::Deactivation* RichMediaAnnotation::Settings::deactivation() const --{ -- return d->deactivation; --} -- -- --class RichMediaAnnotationPrivate : public AnnotationPrivate --{ -- public: -- RichMediaAnnotationPrivate() -- : settings( 0 ), content( 0 ) -- { -- } -- -- ~RichMediaAnnotationPrivate() -- { -- delete settings; -- delete content; -- } -- -- Annotation * makeAlias() -- { -- return new RichMediaAnnotation( *this ); -- } -- -- Annot* createNativeAnnot( ::Page *destPage, DocumentData *doc ) -- { -- Q_UNUSED( destPage ); -- Q_UNUSED( doc ); -- -- return 0; -- } -- -- RichMediaAnnotation::Settings *settings; -- RichMediaAnnotation::Content *content; --}; -- --RichMediaAnnotation::RichMediaAnnotation() -- : Annotation( *new RichMediaAnnotationPrivate() ) --{ --} -- --RichMediaAnnotation::RichMediaAnnotation( RichMediaAnnotationPrivate &dd ) -- : Annotation( dd ) --{ --} -- --RichMediaAnnotation::RichMediaAnnotation( const QDomNode & node ) -- : Annotation( *new RichMediaAnnotationPrivate(), node ) --{ -- // loop through the whole children looking for a 'richMedia' element -- QDomNode subNode = node.firstChild(); -- while( subNode.isElement() ) -- { -- QDomElement e = subNode.toElement(); -- subNode = subNode.nextSibling(); -- if ( e.tagName() != "richMedia" ) -- continue; -- -- // loading complete -- break; -- } --} -- --RichMediaAnnotation::~RichMediaAnnotation() --{ --} -- --void RichMediaAnnotation::store( QDomNode & node, QDomDocument & document ) const --{ -- // store base annotation properties -- storeBaseAnnotationProperties( node, document ); -- -- // create [richMedia] element -- QDomElement richMediaElement = document.createElement( "richMedia" ); -- node.appendChild( richMediaElement ); --} -- --Annotation::SubType RichMediaAnnotation::subType() const --{ -- return ARichMedia; --} -- --void RichMediaAnnotation::setSettings( RichMediaAnnotation::Settings *settings ) --{ -- Q_D( RichMediaAnnotation ); -- -- delete d->settings; -- d->settings = settings; --} -- --RichMediaAnnotation::Settings* RichMediaAnnotation::settings() const --{ -- Q_D( const RichMediaAnnotation ); -- -- return d->settings; --} -- --void RichMediaAnnotation::setContent( RichMediaAnnotation::Content *content ) --{ -- Q_D( RichMediaAnnotation ); -- -- delete d->content; -- d->content = content; --} -- --RichMediaAnnotation::Content* RichMediaAnnotation::content() const --{ -- Q_D( const RichMediaAnnotation ); -- -- return d->content; --} -- --//BEGIN utility annotation functions --QColor convertAnnotColor( AnnotColor *color ) --{ -- if ( !color ) -- return QColor(); -- -- QColor newcolor; -- const double *color_data = color->getValues(); -- switch ( color->getSpace() ) -- { -- case AnnotColor::colorTransparent: // = 0, -- newcolor = Qt::transparent; -- break; -- case AnnotColor::colorGray: // = 1, -- newcolor.setRgbF( color_data[0], color_data[0], color_data[0] ); -- break; -- case AnnotColor::colorRGB: // = 3, -- newcolor.setRgbF( color_data[0], color_data[1], color_data[2] ); -- break; -- case AnnotColor::colorCMYK: // = 4 -- newcolor.setCmykF( color_data[0], color_data[1], color_data[2], color_data[3] ); -- break; -- } -- return newcolor; --} -- --AnnotColor* convertQColor( const QColor &c ) --{ -- if (!c.isValid() || c.alpha() == 0) -- return new AnnotColor(); // Transparent -- else -- return new AnnotColor(c.redF(), c.greenF(), c.blueF()); --} --//END utility annotation functions -- --} -diff --git a/qt4/src/poppler-annotation.h b/qt4/src/poppler-annotation.h -deleted file mode 100644 -index ac77c421..00000000 ---- a/qt4/src/poppler-annotation.h -+++ /dev/null -@@ -1,1375 +0,0 @@ --/* poppler-annotation.h: qt interface to poppler -- * Copyright (C) 2006-2008, 2012 Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2006, 2008 Pino Toscano <pino@kde.org> -- * Copyright (C) 2007, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2010, Philip Lorenz <lorenzph+freedesktop@gmail.com> -- * Copyright (C) 2012, 2015, Tobias Koenig <tobias.koenig@kdab.com> -- * Copyright (C) 2012, Guillermo A. Amaral B. <gamaral@kde.org> -- * Copyright (C) 2012, 2013 Fabio D'Urso <fabiodurso@hotmail.it> -- * Adapting code from -- * Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef _POPPLER_ANNOTATION_H_ --#define _POPPLER_ANNOTATION_H_ -- --#include <QtCore/QDateTime> --#include <QtCore/QSharedDataPointer> --#include <QtCore/QLinkedList> --#include <QtCore/QList> --#include <QtCore/QPointF> --#include <QtCore/QRectF> --#include <QtCore/QVector> --#include <QtGui/QColor> --#include <QtGui/QFont> --#include <QtXml/QDomDocument> --#include "poppler-export.h" -- --namespace Poppler { -- --class Annotation; --class AnnotationPrivate; --class TextAnnotationPrivate; --class LineAnnotationPrivate; --class GeomAnnotationPrivate; --class HighlightAnnotationPrivate; --class StampAnnotationPrivate; --class InkAnnotationPrivate; --class LinkAnnotationPrivate; --class CaretAnnotationPrivate; --class FileAttachmentAnnotationPrivate; --class SoundAnnotationPrivate; --class MovieAnnotationPrivate; --class ScreenAnnotationPrivate; --class WidgetAnnotationPrivate; --class RichMediaAnnotationPrivate; --class EmbeddedFile; --class Link; --class SoundObject; --class MovieObject; --class LinkRendition; --class Page; -- --/** -- * \short Helper class for (recursive) Annotation retrieval/storage. -- * -- */ --class POPPLER_QT4_EXPORT AnnotationUtils --{ -- public: -- /** -- * Restore an Annotation (with revisions if needed) from the DOM -- * element \p annElement. -- * \returns a pointer to the complete Annotation or 0 if element is -- * invalid. -- */ -- static Annotation * createAnnotation( const QDomElement & annElement ); -- -- /** -- * Save the Annotation \p ann as a child of \p annElement taking -- * care of saving all revisions if \p ann has any. -- */ -- static void storeAnnotation( const Annotation * ann, -- QDomElement & annElement, QDomDocument & document ); -- -- /** -- * Returns an element called \p name from the direct children of -- * \p parentNode or a null element if not found. -- */ -- static QDomElement findChildElement( const QDomNode & parentNode, -- const QString & name ); --}; -- -- --/** -- * \short Annotation class holding properties shared by all annotations. -- * -- * An Annotation is an object (text note, highlight, sound, popup window, ..) -- * contained by a Page in the document. -- * -- * \warning Different Annotation objects might point to the same annotation. -- * -- * \section annotCreation How to add annotations -- * -- * Create an Annotation object of the desired subclass (for example -- * TextAnnotation) and set its properties: -- * @code -- * Poppler::TextAnnotation* myann = new Poppler::TextAnnotation(Poppler::TextAnnotation::InPlace); -- * myann->setBoundary(QRectF(0.1, 0.1, 0.2, 0.2)); // normalized coordinates: (0,0) is top-left, (1,1) is bottom-right -- * myann->setContents("Hello, world!"); -- * @endcode -- * \note Always set a boundary rectangle, or nothing will be shown! -- * -- * Obtain a pointer to the Page where you want to add the annotation (refer to -- * \ref req for instructions) and add the annotation: -- * @code -- * Poppler::Page* mypage = ...; -- * mypage->addAnnotation(myann); -- * @endcode -- * -- * You can keep on editing the annotation after it has been added to the page: -- * @code -- * myann->setContents("World, hello!"); // Let's change text... -- * myann->setAuthor("Your name here"); // ...and set an author too -- * @endcode -- * -- * When you're done with editing the annotation, you must destroy the Annotation -- * object: -- * @code -- * delete myann; -- * @endcode -- * -- * Use the PDFConverter class to save the modified document. -- * -- * \section annotFixedRotation FixedRotation flag specifics -- * -- * According to the PDF specification, annotations whose -- * Annotation::FixedRotation flag is set must always be shown in their original -- * orientation, no matter what the current rendering rotation or the page's -- * Page::orientation() values are. In comparison with regular annotations, such -- * annotations should therefore be transformed by an extra rotation at rendering -- * time to "undo" such context-related rotations, which is equal to -- * <code>-(rendering_rotation + page_orientation)</code>. The rotation pivot -- * is the top-left corner of the boundary rectangle. -- * -- * In practice, %Poppler's \ref Page::renderToImage only "unrotates" the -- * page orientation, and does <b>not</b> unrotate the rendering rotation. -- * This ensures consistent renderings at different Page::Rotation values: -- * annotations are always positioned as if they were being positioned at the -- * default page orientation. -- * -- * Just like regular annotations, %Poppler Qt4 exposes normalized coordinates -- * relative to the page's default orientation. However, behind the scenes, the -- * coordinate system is different and %Poppler transparently transforms each -- * shape. If you never call either Annotation::setFlags or -- * Annotation::setBoundary, you don't need to worry about this; but if you do -- * call them, then you need to adhere to the following rules: -- * - Whenever you toggle the Annotation::FixedRotation flag, you <b>must</b> -- * set again the boundary rectangle first, and then you <b>must</b> set -- * again any other geometry-related property. -- * - Whenever you modify the boundary rectangle of an annotation whose -- * Annotation::FixedRotation flag is set, you <b>must</b> set again any other -- * geometry-related property. -- * -- * These two rules are necessary to make %Poppler's transparent coordinate -- * conversion work properly. -- */ --class POPPLER_QT4_EXPORT Annotation --{ -- friend class AnnotationUtils; -- friend class LinkMovie; -- friend class LinkRendition; -- -- public: -- // enum definitions -- /** -- * Annotation subclasses -- * -- * \sa subType() -- */ -- // WARNING!!! oKular uses that very same values so if you change them notify the author! -- enum SubType -- { -- AText = 1, ///< TextAnnotation -- ALine = 2, ///< LineAnnotation -- AGeom = 3, ///< GeomAnnotation -- AHighlight = 4, ///< HighlightAnnotation -- AStamp = 5, ///< StampAnnotation -- AInk = 6, ///< InkAnnotation -- ALink = 7, ///< LinkAnnotation -- ACaret = 8, ///< CaretAnnotation -- AFileAttachment = 9, ///< FileAttachmentAnnotation -- ASound = 10, ///< SoundAnnotation -- AMovie = 11, ///< MovieAnnotation -- AScreen = 12, ///< ScreenAnnotation \since 0.20 -- AWidget = 13, ///< WidgetAnnotation \since 0.22 -- ARichMedia = 14, ///< RichMediaAnnotation \since 0.36 -- A_BASE = 0 -- }; -- -- /** -- * Annotation flags -- * -- * They can be OR'd together (e.g. Annotation::FixedRotation | Annotation::DenyPrint). -- * -- * \sa flags(), setFlags(int) -- */ -- // NOTE: Only flags that are known to work are documented -- enum Flag -- { -- Hidden = 1, ///< Do not display or print the annotation -- FixedSize = 2, -- FixedRotation = 4, ///< Do not rotate the annotation according to page orientation and rendering rotation \warning Extra care is needed with this flag: see \ref annotFixedRotation -- DenyPrint = 8, ///< Do not print the annotation -- DenyWrite = 16, -- DenyDelete = 32, -- ToggleHidingOnMouse = 64, -- External = 128 -- }; -- -- enum LineStyle { Solid = 1, Dashed = 2, Beveled = 4, Inset = 8, Underline = 16 }; -- enum LineEffect { NoEffect = 1, Cloudy = 2}; -- enum RevScope { Root = 0 /** \since 0.20 */, Reply = 1, Group = 2, Delete = 4 }; -- enum RevType { None = 1, Marked = 2, Unmarked = 4, Accepted = 8, Rejected = 16, Cancelled = 32, Completed = 64 }; -- -- /** -- * Returns the author of the annotation. -- */ -- QString author() const; -- /** -- * Sets a new author for the annotation. -- */ -- void setAuthor( const QString &author ); -- -- QString contents() const; -- void setContents( const QString &contents ); -- -- /** -- * Returns the unique name (ID) of the annotation. -- */ -- QString uniqueName() const; -- /** -- * Sets a new unique name for the annotation. -- * -- * \note no check of the new uniqueName is done -- */ -- void setUniqueName( const QString &uniqueName ); -- -- QDateTime modificationDate() const; -- void setModificationDate( const QDateTime &date ); -- -- QDateTime creationDate() const; -- void setCreationDate( const QDateTime &date ); -- -- /** -- * Returns this annotation's flags -- * -- * \sa Flag, setFlags(int) -- */ -- int flags() const; -- /** -- * Sets this annotation's flags -- * -- * \sa Flag, flags(), \ref annotFixedRotation -- */ -- void setFlags( int flags ); -- -- /** -- * Returns this annotation's boundary rectangle in normalized coordinates -- * -- * \sa setBoundary(const QRectF&) -- */ -- QRectF boundary() const; -- /** -- * Sets this annotation's boundary rectangle -- * -- * The boundary rectangle is the smallest rectangle that contains the -- * annotation. -- * -- * \warning This property is mandatory: you must always set this. -- * -- * \sa boundary(), \ref annotFixedRotation -- */ -- void setBoundary( const QRectF &boundary ); -- -- /** -- * \short Container class for Annotation style information -- * -- * \since 0.20 -- */ -- class POPPLER_QT4_EXPORT Style -- { -- public: -- Style(); -- Style( const Style &other ); -- Style& operator=( const Style &other ); -- ~Style(); -- -- // appearance properties -- QColor color() const; // black -- void setColor(const QColor &color); -- double opacity() const; // 1.0 -- void setOpacity(double opacity); -- -- // pen properties -- double width() const; // 1.0 -- void setWidth(double width); -- LineStyle lineStyle() const; // LineStyle::Solid -- void setLineStyle(LineStyle style); -- double xCorners() const; // 0.0 -- void setXCorners(double radius); -- double yCorners() const; // 0.0 -- void setYCorners(double radius); -- const QVector<double>& dashArray() const; // [ 3 ] -- void setDashArray(const QVector<double> &array); -- -- // pen effects -- LineEffect lineEffect() const; // LineEffect::NoEffect -- void setLineEffect(LineEffect effect); -- double effectIntensity() const; // 1.0 -- void setEffectIntensity(double intens); -- -- private: -- class Private; -- QSharedDataPointer<Private> d; -- }; -- -- /// \since 0.20 -- Style style() const; -- /// \since 0.20 -- void setStyle( const Style& style ); -- -- /** -- * \short Container class for Annotation pop-up window information -- * -- * \since 0.20 -- */ -- class POPPLER_QT4_EXPORT Popup -- { -- public: -- Popup(); -- Popup( const Popup &other ); -- Popup& operator=( const Popup &other ); -- ~Popup(); -- -- // window state (Hidden, FixedRotation, Deny* flags allowed) -- int flags() const; // -1 (never initialized) -> 0 (if inited and shown) -- void setFlags( int flags ); -- -- // geometric properties -- QRectF geometry() const; // no default -- void setGeometry( const QRectF &geom ); -- -- // window contens/override properties -- QString title() const; // '' text in the titlebar (overrides author) -- void setTitle( const QString &title ); -- QString summary() const; // '' short description (displayed if not empty) -- void setSummary( const QString &summary ); -- QString text() const; // '' text for the window (overrides annot->contents) -- void setText( const QString &text ); -- -- private: -- class Private; -- QSharedDataPointer<Private> d; -- }; -- -- /// \since 0.20 -- Popup popup() const; -- /// \warning Currently does nothing \since 0.20 -- void setPopup( const Popup& popup ); -- -- /// \cond PRIVATE -- // This field is deprecated and not used any more. Use popup -- Q_DECL_DEPRECATED struct { int width, height; } window; // Always set to zero -- /// \endcond -- -- /// \since 0.20 -- RevScope revisionScope() const; // Root -- -- /// \since 0.20 -- RevType revisionType() const; // None -- -- /** -- * Returns the revisions of this annotation -- * -- * \note The caller owns the returned annotations and they should -- * be deleted when no longer required. -- * -- * \since 0.20 -- */ -- QList<Annotation*> revisions() const; -- -- /** -- * The type of the annotation. -- */ -- virtual SubType subType() const = 0; -- -- /** -- * Destructor. -- */ -- virtual ~Annotation(); -- -- /** -- * Describes the flags from an annotations 'AA' dictionary. -- * -- * This flag is used by the additionalAction() method for ScreenAnnotation -- * and WidgetAnnotation. -- * -- * \since 0.22 -- */ -- enum AdditionalActionType -- { -- CursorEnteringAction, ///< Performed when the cursor enters the annotation's active area -- CursorLeavingAction, ///< Performed when the cursor exists the annotation's active area -- MousePressedAction, ///< Performed when the mouse button is pressed inside the annotation's active area -- MouseReleasedAction, ///< Performed when the mouse button is released inside the annotation's active area -- FocusInAction, ///< Performed when the annotation receives the input focus -- FocusOutAction, ///< Performed when the annotation loses the input focus -- PageOpeningAction, ///< Performed when the page containing the annotation is opened -- PageClosingAction, ///< Performed when the page containing the annotation is closed -- PageVisibleAction, ///< Performed when the page containing the annotation becomes visible -- PageInvisibleAction ///< Performed when the page containing the annotation becomes invisible -- }; -- -- protected: -- /// \cond PRIVATE -- Annotation( AnnotationPrivate &dd ); -- Annotation( AnnotationPrivate &dd, const QDomNode &description ); -- void storeBaseAnnotationProperties( QDomNode & parentNode, QDomDocument & document ) const; -- Q_DECLARE_PRIVATE( Annotation ) -- QExplicitlySharedDataPointer<AnnotationPrivate> d_ptr; -- /// \endcond -- -- private: -- virtual void store( QDomNode & parentNode, QDomDocument & document ) const = 0; -- Q_DISABLE_COPY( Annotation ) --}; -- --/** -- * \short Annotation containing text. -- * -- * A text annotation is an object showing some text directly on the page, or -- * linked to the contents using an icon shown on a page. -- */ --class POPPLER_QT4_EXPORT TextAnnotation : public Annotation --{ -- friend class AnnotationUtils; -- friend class AnnotationPrivate; -- -- public: -- // local enums -- enum TextType { Linked, InPlace }; -- enum InplaceIntent { Unknown, Callout, TypeWriter }; -- -- TextAnnotation( TextType type ); -- ~TextAnnotation(); -- SubType subType() const override; -- -- /** -- The type of text annotation represented by this object -- */ -- TextType textType() const; -- -- /** -- The name of the icon for this text annotation. -- -- Standard names for text annotation icons are: -- - Comment -- - Help -- - Insert -- - Key -- - NewParagraph -- - Note (this is the default icon to use) -- - Paragraph -- */ -- QString textIcon() const; -- -- /** -- Set the name of the icon to use for this text annotation. -- -- \sa textIcon for the list of standard names -- */ -- void setTextIcon( const QString &icon ); -- -- QFont textFont() const; -- void setTextFont( const QFont &font ); -- -- int inplaceAlign() const; -- void setInplaceAlign( int align ); -- -- /** -- Synonym for contents() -- -- \deprecated Use contents() instead -- */ -- QString inplaceText() const; -- /** -- Synonym for setContents() -- -- \deprecated Use setContents() instead -- */ -- void setInplaceText( const QString &text ); -- -- QPointF calloutPoint( int id ) const; -- /// \since 0.20 -- QVector<QPointF> calloutPoints() const; -- /// \since 0.20 -- void setCalloutPoints( const QVector<QPointF> &points ); -- -- InplaceIntent inplaceIntent() const; -- void setInplaceIntent( InplaceIntent intent ); -- -- private: -- TextAnnotation( const QDomNode &node ); -- TextAnnotation( TextAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- void setTextType( TextType type ); -- Q_DECLARE_PRIVATE( TextAnnotation ) -- Q_DISABLE_COPY( TextAnnotation ) --}; -- --/** -- * \short Polygon/polyline annotation. -- * -- * This annotation represents a polygon (or polyline) to be drawn on a page. -- */ --class POPPLER_QT4_EXPORT LineAnnotation : public Annotation --{ -- friend class AnnotationUtils; -- friend class AnnotationPrivate; -- -- public: -- // local enums -- /// \since 0.20 -- enum LineType { StraightLine, Polyline }; -- enum TermStyle { Square, Circle, Diamond, OpenArrow, ClosedArrow, None, -- Butt, ROpenArrow, RClosedArrow, Slash }; -- enum LineIntent { Unknown, Arrow, Dimension, PolygonCloud }; -- -- /// \since 0.20 -- LineAnnotation( LineType type ); -- ~LineAnnotation(); -- SubType subType() const override; -- -- /// \since 0.20 -- LineType lineType() const; -- -- QLinkedList<QPointF> linePoints() const; -- void setLinePoints( const QLinkedList<QPointF> &points ); -- -- TermStyle lineStartStyle() const; -- void setLineStartStyle( TermStyle style ); -- -- TermStyle lineEndStyle() const; -- void setLineEndStyle( TermStyle style ); -- -- bool isLineClosed() const; -- void setLineClosed( bool closed ); -- -- QColor lineInnerColor() const; -- void setLineInnerColor( const QColor &color ); -- -- double lineLeadingForwardPoint() const; -- void setLineLeadingForwardPoint( double point ); -- -- double lineLeadingBackPoint() const; -- void setLineLeadingBackPoint( double point ); -- -- bool lineShowCaption() const; -- void setLineShowCaption( bool show ); -- -- LineIntent lineIntent() const; -- void setLineIntent( LineIntent intent ); -- -- private: -- LineAnnotation( const QDomNode &node ); -- LineAnnotation( LineAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- void setLineType( LineType type ); -- Q_DECLARE_PRIVATE( LineAnnotation ) -- Q_DISABLE_COPY( LineAnnotation ) --}; -- --/** -- * \short Geometric annotation. -- * -- * The geometric annotation represents a geometric figure, like a rectangle or -- * an ellipse. -- */ --class POPPLER_QT4_EXPORT GeomAnnotation : public Annotation --{ -- friend class AnnotationUtils; -- friend class AnnotationPrivate; -- -- public: -- GeomAnnotation(); -- virtual ~GeomAnnotation(); -- virtual SubType subType() const; -- -- // common enums -- enum GeomType { InscribedSquare, InscribedCircle }; -- -- GeomType geomType() const; -- void setGeomType( GeomType style ); -- -- QColor geomInnerColor() const; -- void setGeomInnerColor( const QColor &color ); -- -- private: -- GeomAnnotation( const QDomNode &node ); -- GeomAnnotation( GeomAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- Q_DECLARE_PRIVATE( GeomAnnotation ) -- Q_DISABLE_COPY( GeomAnnotation ) --}; -- --/** -- * \short Text highlight annotation. -- * -- * The higlight annotation represents some areas of text being "highlighted". -- */ --class POPPLER_QT4_EXPORT HighlightAnnotation : public Annotation --{ -- friend class AnnotationUtils; -- friend class AnnotationPrivate; -- -- public: -- HighlightAnnotation(); -- virtual ~HighlightAnnotation(); -- virtual SubType subType() const; -- -- /** -- The type of highlight -- */ -- enum HighlightType { Highlight, ///< highlighter pen style annotation -- Squiggly, ///< jagged or squiggly underline -- Underline, ///< straight line underline -- StrikeOut ///< straight line through-line -- }; -- -- /** -- Structure corresponding to a QuadPoints array. This matches a -- quadrilateral that describes the area around a word (or set of -- words) that are to be highlighted. -- */ -- struct Quad -- { -- QPointF points[4]; // 8 valid coords -- bool capStart; // false (vtx 1-4) [K] -- bool capEnd; // false (vtx 2-3) [K] -- double feather; // 0.1 (in range 0..1) [K] -- }; -- -- /** -- The type (style) of highlighting to use for this area -- or these areas. -- */ -- HighlightType highlightType() const; -- -- /** -- Set the type of highlighting to use for the given area -- or areas. -- */ -- void setHighlightType( HighlightType type ); -- -- /** -- The list of areas to highlight. -- */ -- QList< Quad > highlightQuads() const; -- -- /** -- Set the areas to highlight. -- */ -- void setHighlightQuads( const QList< Quad > &quads ); -- -- private: -- HighlightAnnotation( const QDomNode &node ); -- HighlightAnnotation( HighlightAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- Q_DECLARE_PRIVATE( HighlightAnnotation ) -- Q_DISABLE_COPY( HighlightAnnotation ) --}; -- --/** -- * \short Stamp annotation. -- * -- * A simple annotation drawing a stamp on a page. -- */ --class POPPLER_QT4_EXPORT StampAnnotation : public Annotation --{ -- friend class AnnotationUtils; -- friend class AnnotationPrivate; -- -- public: -- StampAnnotation(); -- virtual ~StampAnnotation(); -- virtual SubType subType() const; -- -- /** -- The name of the icon for this stamp annotation. -- -- Standard names for stamp annotation icons are: -- - Approved -- - AsIs -- - Confidential -- - Departmental -- - Draft (this is the default icon type) -- - Experimental -- - Expired -- - Final -- - ForComment -- - ForPublicRelease -- - NotApproved -- - NotForPublicRelease -- - Sold -- - TopSecret -- */ -- QString stampIconName() const; -- -- /** -- Set the icon type for this stamp annotation. -- -- \sa stampIconName for the list of standard icon names -- */ -- void setStampIconName( const QString &name ); -- -- private: -- StampAnnotation( const QDomNode &node ); -- StampAnnotation( StampAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- Q_DECLARE_PRIVATE( StampAnnotation ) -- Q_DISABLE_COPY( StampAnnotation ) --}; -- --/** -- * \short Ink Annotation. -- * -- * Annotation representing an ink path on a page. -- */ --class POPPLER_QT4_EXPORT InkAnnotation : public Annotation --{ -- friend class AnnotationUtils; -- friend class AnnotationPrivate; -- -- public: -- InkAnnotation(); -- virtual ~InkAnnotation(); -- virtual SubType subType() const; -- -- QList< QLinkedList<QPointF> > inkPaths() const; -- void setInkPaths( const QList< QLinkedList<QPointF> > &paths ); -- -- private: -- InkAnnotation( const QDomNode &node ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- InkAnnotation(InkAnnotationPrivate &dd); -- Q_DECLARE_PRIVATE( InkAnnotation ) -- Q_DISABLE_COPY( InkAnnotation ) --}; -- --class POPPLER_QT4_EXPORT LinkAnnotation : public Annotation --{ -- friend class AnnotationUtils; -- friend class AnnotationPrivate; -- -- public: -- virtual ~LinkAnnotation(); -- virtual SubType subType() const; -- -- // local enums -- enum HighlightMode { None, Invert, Outline, Push }; -- -- /** \since 0.20 */ -- Link* linkDestination() const; -- void setLinkDestination( Link *link ); -- -- HighlightMode linkHighlightMode() const; -- void setLinkHighlightMode( HighlightMode mode ); -- -- QPointF linkRegionPoint( int id ) const; -- void setLinkRegionPoint( int id, const QPointF &point ); -- -- private: -- LinkAnnotation(); -- LinkAnnotation( const QDomNode &node ); -- LinkAnnotation( LinkAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- Q_DECLARE_PRIVATE( LinkAnnotation ) -- Q_DISABLE_COPY( LinkAnnotation ) --}; -- --/** -- * \short Caret annotation. -- * -- * The caret annotation represents a symbol to indicate the presence of text. -- */ --class POPPLER_QT4_EXPORT CaretAnnotation : public Annotation --{ -- friend class AnnotationUtils; -- friend class AnnotationPrivate; -- -- public: -- CaretAnnotation(); -- virtual ~CaretAnnotation(); -- virtual SubType subType() const; -- -- /** -- * The symbols for the caret annotation. -- */ -- enum CaretSymbol { None, P }; -- -- CaretSymbol caretSymbol() const; -- void setCaretSymbol( CaretSymbol symbol ); -- -- private: -- CaretAnnotation( const QDomNode &node ); -- CaretAnnotation( CaretAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- Q_DECLARE_PRIVATE( CaretAnnotation ) -- Q_DISABLE_COPY( CaretAnnotation ) --}; -- --/** -- * \short File attachment annotation. -- * -- * The file attachment annotation represents a file embedded in the document. -- * -- * \since 0.10 -- */ --class POPPLER_QT4_EXPORT FileAttachmentAnnotation : public Annotation --{ -- friend class AnnotationPrivate; -- -- public: -- virtual ~FileAttachmentAnnotation(); -- virtual SubType subType() const; -- -- /** -- * Returns the name of the icon of this annotation. -- */ -- QString fileIconName() const; -- /** -- * Sets a new name for the icon of this annotation. -- */ -- void setFileIconName( const QString &icon ); -- -- /** -- * Returns the EmbeddedFile of this annotation. -- */ -- EmbeddedFile* embeddedFile() const; -- /** -- * Sets a new EmbeddedFile for this annotation. -- * -- * \note FileAttachmentAnnotation takes ownership of the object -- */ -- void setEmbeddedFile( EmbeddedFile *ef ); -- -- private: -- FileAttachmentAnnotation(); -- FileAttachmentAnnotation( const QDomNode &node ); -- FileAttachmentAnnotation( FileAttachmentAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- Q_DECLARE_PRIVATE( FileAttachmentAnnotation ) -- Q_DISABLE_COPY( FileAttachmentAnnotation ) --}; -- --/** -- * \short Sound annotation. -- * -- * The sound annotation represents a sound to be played when activated. -- * -- * \since 0.10 -- */ --class POPPLER_QT4_EXPORT SoundAnnotation : public Annotation --{ -- friend class AnnotationPrivate; -- -- public: -- virtual ~SoundAnnotation(); -- virtual SubType subType() const; -- -- /** -- * Returns the name of the icon of this annotation. -- */ -- QString soundIconName() const; -- /** -- * Sets a new name for the icon of this annotation. -- */ -- void setSoundIconName( const QString &icon ); -- -- /** -- * Returns the SoundObject of this annotation. -- */ -- SoundObject* sound() const; -- /** -- * Sets a new SoundObject for this annotation. -- * -- * \note SoundAnnotation takes ownership of the object -- */ -- void setSound( SoundObject *ef ); -- -- private: -- SoundAnnotation(); -- SoundAnnotation( const QDomNode &node ); -- SoundAnnotation( SoundAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- Q_DECLARE_PRIVATE( SoundAnnotation ) -- Q_DISABLE_COPY( SoundAnnotation ) --}; -- --/** -- * \short Movie annotation. -- * -- * The movie annotation represents a movie to be played when activated. -- * -- * \since 0.10 -- */ --class POPPLER_QT4_EXPORT MovieAnnotation : public Annotation --{ -- friend class AnnotationPrivate; -- -- public: -- virtual ~MovieAnnotation(); -- virtual SubType subType() const; -- -- /** -- * Returns the MovieObject of this annotation. -- */ -- MovieObject* movie() const; -- /** -- * Sets a new MovieObject for this annotation. -- * -- * \note MovieAnnotation takes ownership of the object -- */ -- void setMovie( MovieObject *movie ); -- -- /** -- * Returns the title of the movie of this annotation. -- */ -- QString movieTitle() const; -- /** -- * Sets a new title for the movie of this annotation. -- */ -- void setMovieTitle( const QString &title ); -- -- private: -- MovieAnnotation(); -- MovieAnnotation( const QDomNode &node ); -- MovieAnnotation( MovieAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- Q_DECLARE_PRIVATE( MovieAnnotation ) -- Q_DISABLE_COPY( MovieAnnotation ) --}; -- --/** -- * \short Screen annotation. -- * -- * The screen annotation represents a screen to be played when activated. -- * -- * \since 0.20 -- */ --class POPPLER_QT4_EXPORT ScreenAnnotation : public Annotation --{ -- friend class AnnotationPrivate; -- -- public: -- virtual ~ScreenAnnotation(); -- -- virtual SubType subType() const; -- -- /** -- * Returns the LinkRendition of this annotation. -- */ -- LinkRendition* action() const; -- -- /** -- * Sets a new LinkRendition for this annotation. -- * -- * \note ScreenAnnotation takes ownership of the object -- */ -- void setAction( LinkRendition *action ); -- -- /** -- * Returns the title of the screen of this annotation. -- */ -- QString screenTitle() const; -- -- /** -- * Sets a new title for the screen of this annotation. -- */ -- void setScreenTitle( const QString &title ); -- -- /** -- * Returns the additional action of the given @p type fo the annotation or -- * @c 0 if no action has been defined. -- * -- * \since 0.22 -- */ -- Link* additionalAction( AdditionalActionType type ) const; -- -- private: -- ScreenAnnotation(); -- ScreenAnnotation( ScreenAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; // stub -- Q_DECLARE_PRIVATE( ScreenAnnotation ) -- Q_DISABLE_COPY( ScreenAnnotation ) --}; -- --/** -- * \short Widget annotation. -- * -- * The widget annotation represents a widget (form field) on a page. -- * -- * \note This class is just provided for consistency of the annotation API, -- * use the FormField classes to get all the form-related information. -- * -- * \since 0.22 -- */ --class POPPLER_QT4_EXPORT WidgetAnnotation : public Annotation --{ -- friend class AnnotationPrivate; -- -- public: -- virtual ~WidgetAnnotation(); -- -- virtual SubType subType() const; -- -- /** -- * Returns the additional action of the given @p type fo the annotation or -- * @c 0 if no action has been defined. -- * -- * \since 0.22 -- */ -- Link* additionalAction( AdditionalActionType type ) const; -- -- private: -- WidgetAnnotation(); -- WidgetAnnotation( WidgetAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; // stub -- Q_DECLARE_PRIVATE( WidgetAnnotation ) -- Q_DISABLE_COPY( WidgetAnnotation ) --}; -- --/** -- * \short RichMedia annotation. -- * -- * The RichMedia annotation represents a video or sound on a page. -- * -- * \since 0.36 -- */ --class POPPLER_QT4_EXPORT RichMediaAnnotation : public Annotation --{ -- friend class AnnotationPrivate; -- -- public: -- virtual ~RichMediaAnnotation(); -- -- virtual SubType subType() const; -- -- /** -- * The params object of a RichMediaAnnotation::Instance object. -- * -- * The params object provides media specific parameters, to play -- * back the media inside the PDF viewer. -- * -- * At the moment only parameters for flash player are supported. -- */ -- class POPPLER_QT4_EXPORT Params -- { -- friend class AnnotationPrivate; -- -- public: -- Params(); -- ~Params(); -- -- /** -- * Returns the parameters for the flash player. -- */ -- QString flashVars() const; -- -- private: -- void setFlashVars( const QString &flashVars ); -- -- class Private; -- QScopedPointer<Private> d; -- }; -- -- /** -- * The instance object of a RichMediaAnnotation::Configuration object. -- * -- * The instance object represents one media object, that should be shown -- * on the page. It has a media type and a Params object, to define the -- * media specific parameters. -- */ -- class POPPLER_QT4_EXPORT Instance -- { -- friend class AnnotationPrivate; -- -- public: -- /** -- * Describes the media type of the instance. -- */ -- enum Type -- { -- Type3D, ///< A 3D media file. -- TypeFlash, ///< A Flash media file. -- TypeSound, ///< A sound media file. -- TypeVideo ///< A video media file. -- }; -- -- Instance(); -- ~Instance(); -- -- /** -- * Returns the media type of the instance. -- */ -- Type type() const; -- -- /** -- * Returns the params object of the instance or @c 0 if it doesn't exist. -- */ -- RichMediaAnnotation::Params* params() const; -- -- private: -- void setType( Type type ); -- void setParams( RichMediaAnnotation::Params *params ); -- -- class Private; -- QScopedPointer<Private> d; -- }; -- -- /** -- * The configuration object of a RichMediaAnnotation::Content object. -- * -- * The configuration object provides access to the various Instance objects -- * of the rich media annotation. -- */ -- class POPPLER_QT4_EXPORT Configuration -- { -- friend class AnnotationPrivate; -- -- public: -- /** -- * Describes the media type of the configuration. -- */ -- enum Type -- { -- Type3D, ///< A 3D media file. -- TypeFlash, ///< A Flash media file. -- TypeSound, ///< A sound media file. -- TypeVideo ///< A video media file. -- }; -- -- Configuration(); -- ~Configuration(); -- -- /** -- * Returns the media type of the configuration. -- */ -- Type type() const; -- -- /** -- * Returns the name of the configuration. -- */ -- QString name() const; -- -- /** -- * Returns the list of Instance objects of the configuration. -- */ -- QList< RichMediaAnnotation::Instance* > instances() const; -- -- private: -- void setType( Type type ); -- void setName( const QString &name ); -- void setInstances( const QList< RichMediaAnnotation::Instance* > &instances ); -- -- class Private; -- QScopedPointer<Private> d; -- }; -- -- /** -- * The asset object of a RichMediaAnnotation::Content object. -- * -- * The asset object provides a mapping between identifier name, as -- * used in the flash vars string of RichMediaAnnotation::Params, and the -- * associated file spec object. -- */ -- class POPPLER_QT4_EXPORT Asset -- { -- friend class AnnotationPrivate; -- -- public: -- Asset(); -- ~Asset(); -- -- /** -- * Returns the identifier name of the asset. -- */ -- QString name() const; -- -- /** -- * Returns the embedded file the asset points to. -- */ -- EmbeddedFile* embeddedFile() const; -- -- private: -- void setName( const QString &name ); -- void setEmbeddedFile( EmbeddedFile *embeddedFile ); -- -- class Private; -- QScopedPointer<Private> d; -- }; -- -- /** -- * The content object of a RichMediaAnnotation. -- * -- * The content object provides access to the list of configurations -- * and assets of the rich media annotation. -- */ -- class POPPLER_QT4_EXPORT Content -- { -- friend class AnnotationPrivate; -- -- public: -- Content(); -- ~Content(); -- -- /** -- * Returns the list of configuration objects of the content object. -- */ -- QList< RichMediaAnnotation::Configuration* > configurations() const; -- -- /** -- * Returns the list of asset objects of the content object. -- */ -- QList< RichMediaAnnotation::Asset* > assets() const; -- -- private: -- void setConfigurations( const QList< RichMediaAnnotation::Configuration* > &configurations ); -- void setAssets( const QList< RichMediaAnnotation::Asset* > &assets ); -- -- class Private; -- QScopedPointer<Private> d; -- }; -- -- /** -- * The activation object of the RichMediaAnnotation::Settings object. -- * -- * The activation object is a wrapper around the settings for the activation -- * state. At the moment it provides only the activation condition. -- */ -- class POPPLER_QT4_EXPORT Activation -- { -- friend class AnnotationPrivate; -- -- public: -- /** -- * Describes the condition for activating the rich media. -- */ -- enum Condition { -- PageOpened, ///< Activate when page is opened. -- PageVisible, ///< Activate when page becomes visible. -- UserAction ///< Activate when user interacts with the annotation. -- }; -- -- Activation(); -- ~Activation(); -- -- /** -- * Returns the activation condition. -- */ -- Condition condition() const; -- -- private: -- void setCondition( Condition condition ); -- -- class Private; -- QScopedPointer<Private> d; -- }; -- -- /** -- * The deactivation object of the RichMediaAnnotation::Settings object. -- * -- * The deactivation object is a wrapper around the settings for the deactivation -- * state. At the moment it provides only the deactivation condition. -- */ -- class POPPLER_QT4_EXPORT Deactivation -- { -- friend class AnnotationPrivate; -- -- public: -- /** -- * Describes the condition for deactivating the rich media. -- */ -- enum Condition { -- PageClosed, ///< Deactivate when page is closed. -- PageInvisible, ///< Deactivate when page becomes invisible. -- UserAction ///< Deactivate when user interacts with the annotation. -- }; -- -- Deactivation(); -- ~Deactivation(); -- -- /** -- * Returns the deactivation condition. -- */ -- Condition condition() const; -- -- private: -- void setCondition( Condition condition ); -- -- class Private; -- QScopedPointer<Private> d; -- }; -- -- /** -- * The settings object of a RichMediaAnnotation. -- * -- * The settings object provides access to the configuration objects -- * for annotation activation and deactivation. -- */ -- class POPPLER_QT4_EXPORT Settings -- { -- friend class AnnotationPrivate; -- -- public: -- Settings(); -- ~Settings(); -- -- /** -- * Returns the Activation object of the settings object or @c 0 if it doesn't exist. -- */ -- RichMediaAnnotation::Activation* activation() const; -- -- /** -- * Returns the Deactivation object of the settings object or @c 0 if it doesn't exist. -- */ -- RichMediaAnnotation::Deactivation* deactivation() const; -- -- private: -- void setActivation( RichMediaAnnotation::Activation *activation ); -- void setDeactivation( RichMediaAnnotation::Deactivation *deactivation ); -- -- class Private; -- QScopedPointer<Private> d; -- }; -- -- /** -- * Returns the Settings object of the rich media annotation or @c 0 if it doesn't exist. -- */ -- RichMediaAnnotation::Settings* settings() const; -- -- /** -- * Returns the Content object of the rich media annotation or @c 0 if it doesn't exist. -- */ -- RichMediaAnnotation::Content* content() const; -- -- private: -- void setSettings( RichMediaAnnotation::Settings *settings ); -- void setContent( RichMediaAnnotation::Content *content ); -- -- RichMediaAnnotation(); -- RichMediaAnnotation( const QDomNode &node ); -- RichMediaAnnotation( RichMediaAnnotationPrivate &dd ); -- virtual void store( QDomNode &parentNode, QDomDocument &document ) const; -- Q_DECLARE_PRIVATE( RichMediaAnnotation ) -- Q_DISABLE_COPY( RichMediaAnnotation ) --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-base-converter.cc b/qt4/src/poppler-base-converter.cc -deleted file mode 100644 -index 11ff17ca..00000000 ---- a/qt4/src/poppler-base-converter.cc -+++ /dev/null -@@ -1,105 +0,0 @@ --/* poppler-base-converter.cc: qt interface to poppler -- * Copyright (C) 2007, 2009, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" -- --#include "poppler-converter-private.h" -- --#include <QtCore/QFile> -- --namespace Poppler { -- --BaseConverterPrivate::BaseConverterPrivate() -- : document(0), iodev(0), ownIodev(true) --{ --} -- --BaseConverterPrivate::~BaseConverterPrivate() --{ --} -- --QIODevice* BaseConverterPrivate::openDevice() --{ -- if (!iodev) -- { -- Q_ASSERT(!outputFileName.isEmpty()); -- QFile *f = new QFile(outputFileName); -- iodev = f; -- ownIodev = true; -- } -- Q_ASSERT(iodev); -- if (!iodev->isOpen()) -- { -- if (!iodev->open(QIODevice::WriteOnly)) -- { -- if (ownIodev) -- { -- delete iodev; -- iodev = 0; -- } -- else -- { -- return 0; -- } -- } -- } -- return iodev; --} -- --void BaseConverterPrivate::closeDevice() --{ -- if (ownIodev) -- { -- iodev->close(); -- delete iodev; -- iodev = 0; -- } --} -- -- --BaseConverter::BaseConverter(BaseConverterPrivate &dd) -- : d_ptr(&dd) --{ --} -- --BaseConverter::~BaseConverter() --{ -- delete d_ptr; --} -- --void BaseConverter::setOutputFileName(const QString &outputFileName) --{ -- Q_D(BaseConverter); -- d->outputFileName = outputFileName; --} -- --void BaseConverter::setOutputDevice(QIODevice *device) --{ -- Q_D(BaseConverter); -- d->iodev = device; -- d->ownIodev = false; --} -- --BaseConverter::Error BaseConverter::lastError() const --{ -- Q_D(const BaseConverter); -- return d->lastError; --} -- --} -diff --git a/qt4/src/poppler-converter-private.h b/qt4/src/poppler-converter-private.h -deleted file mode 100644 -index dc3e9437..00000000 ---- a/qt4/src/poppler-converter-private.h -+++ /dev/null -@@ -1,49 +0,0 @@ --/* poppler-converter-private.h: Qt4 interface to poppler -- * Copyright (C) 2007, 2009, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef POPPLER_QT4_CONVERTER_PRIVATE_H --#define POPPLER_QT4_CONVERTER_PRIVATE_H -- --#include <QtCore/QString> -- --class QIODevice; -- --namespace Poppler { -- --class DocumentData; -- --class BaseConverterPrivate --{ -- public: -- BaseConverterPrivate(); -- virtual ~BaseConverterPrivate(); -- -- QIODevice* openDevice(); -- void closeDevice(); -- -- DocumentData *document; -- QString outputFileName; -- QIODevice *iodev; -- bool ownIodev : 1; -- BaseConverter::Error lastError; --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-document.cc b/qt4/src/poppler-document.cc -deleted file mode 100644 -index d6e2fbf7..00000000 ---- a/qt4/src/poppler-document.cc -+++ /dev/null -@@ -1,850 +0,0 @@ --/* poppler-document.cc: qt interface to poppler -- * Copyright (C) 2005, Net Integration Technologies, Inc. -- * Copyright (C) 2005, 2008, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2005-2010, 2012, 2013, 2015-2017, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2006-2010, Pino Toscano <pino@kde.org> -- * Copyright (C) 2010, 2011 Hib Eris <hib@hiberis.nl> -- * Copyright (C) 2012 Koji Otani <sho@bbr.jp> -- * Copyright (C) 2012, 2013 Thomas Freitag <Thomas.Freitag@alfa.de> -- * Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> -- * Copyright (C) 2014 Adam Reichold <adamreichold@myopera.com> -- * Copyright (C) 2015 William Bader <williambader@hotmail.com> -- * Copyright (C) 2016 Jakub Alba <jakubalba@gmail.com> -- * Copyright (C) 2017 Adrian Johnson <ajohnson@redneon.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" -- --#include <config.h> --#include <ErrorCodes.h> --#include <GlobalParams.h> --#include <Outline.h> --#include <PDFDoc.h> --#include <Stream.h> --#include <Catalog.h> --#include <ViewerPreferences.h> --#include <DateInfo.h> --#include <GfxState.h> -- --#include <QtCore/QDebug> --#include <QtCore/QFile> --#include <QtCore/QByteArray> -- --#include "poppler-private.h" --#include "poppler-page-private.h" -- --#if defined(USE_CMS) --#if defined(USE_LCMS1) --#include <lcms.h> --#else --#include <lcms2.h> --#endif --#endif -- --namespace Poppler { -- -- int DocumentData::count = 0; -- -- Document *Document::load(const QString &filePath, const QByteArray &ownerPassword, -- const QByteArray &userPassword) -- { -- DocumentData *doc = new DocumentData(filePath, -- new GooString(ownerPassword.data()), -- new GooString(userPassword.data())); -- return DocumentData::checkDocument(doc); -- } -- -- Document *Document::loadFromData(const QByteArray &fileContents, -- const QByteArray &ownerPassword, -- const QByteArray &userPassword) -- { -- // create stream -- DocumentData *doc = new DocumentData(fileContents, -- new GooString(ownerPassword.data()), -- new GooString(userPassword.data())); -- return DocumentData::checkDocument(doc); -- } -- -- Document *DocumentData::checkDocument(DocumentData *doc) -- { -- Document *pdoc; -- if (doc->doc->isOk() || doc->doc->getErrorCode() == errEncrypted) { -- pdoc = new Document(doc); -- if (doc->doc->getErrorCode() == errEncrypted) -- pdoc->m_doc->locked = true; -- else -- { -- pdoc->m_doc->locked = false; -- pdoc->m_doc->fillMembers(); -- } -- return pdoc; -- } -- else -- { -- delete doc; -- } -- return NULL; -- } -- -- Document::Document(DocumentData *dataA) -- { -- m_doc = dataA; -- } -- -- Document::~Document() -- { -- delete m_doc; -- } -- -- Page *Document::page(int index) const -- { -- Page *page = new Page(m_doc, index); -- if (page->m_page->page == NULL) { -- delete page; -- return NULL; -- } -- -- return page; -- } -- -- bool Document::isLocked() const -- { -- return m_doc->locked; -- } -- -- bool Document::unlock(const QByteArray &ownerPassword, -- const QByteArray &userPassword) -- { -- if (m_doc->locked) { -- /* racier then it needs to be */ -- DocumentData *doc2; -- if (!m_doc->fileContents.isEmpty()) -- { -- doc2 = new DocumentData(m_doc->fileContents, -- new GooString(ownerPassword.data()), -- new GooString(userPassword.data())); -- } -- else -- { -- doc2 = new DocumentData(m_doc->m_filePath, -- new GooString(ownerPassword.data()), -- new GooString(userPassword.data())); -- } -- if (!doc2->doc->isOk()) { -- delete doc2; -- } else { -- delete m_doc; -- m_doc = doc2; -- m_doc->locked = false; -- m_doc->fillMembers(); -- } -- } -- return m_doc->locked; -- } -- -- Document::PageMode Document::pageMode() const -- { -- switch (m_doc->doc->getCatalog()->getPageMode()) { -- case Catalog::pageModeNone: -- return UseNone; -- case Catalog::pageModeOutlines: -- return UseOutlines; -- case Catalog::pageModeThumbs: -- return UseThumbs; -- case Catalog::pageModeFullScreen: -- return FullScreen; -- case Catalog::pageModeOC: -- return UseOC; -- case Catalog::pageModeAttach: -- return UseAttach; -- default: -- return UseNone; -- } -- } -- -- Document::PageLayout Document::pageLayout() const -- { -- switch (m_doc->doc->getCatalog()->getPageLayout()) { -- case Catalog::pageLayoutNone: -- return NoLayout; -- case Catalog::pageLayoutSinglePage: -- return SinglePage; -- case Catalog::pageLayoutOneColumn: -- return OneColumn; -- case Catalog::pageLayoutTwoColumnLeft: -- return TwoColumnLeft; -- case Catalog::pageLayoutTwoColumnRight: -- return TwoColumnRight; -- case Catalog::pageLayoutTwoPageLeft: -- return TwoPageLeft; -- case Catalog::pageLayoutTwoPageRight: -- return TwoPageRight; -- default: -- return NoLayout; -- } -- } -- -- Qt::LayoutDirection Document::textDirection() const -- { -- if (!m_doc->doc->getCatalog()->getViewerPreferences()) -- return Qt::LayoutDirectionAuto; -- -- switch (m_doc->doc->getCatalog()->getViewerPreferences()->getDirection()) { -- case ViewerPreferences::directionL2R: -- return Qt::LeftToRight; -- case ViewerPreferences::directionR2L: -- return Qt::RightToLeft; -- default: -- return Qt::LayoutDirectionAuto; -- } -- } -- -- int Document::numPages() const -- { -- return m_doc->doc->getNumPages(); -- } -- -- QList<FontInfo> Document::fonts() const -- { -- QList<FontInfo> ourList; -- FontIterator it( 0, m_doc ); -- while ( it.hasNext() ) -- { -- ourList += it.next(); -- } -- return ourList; -- } -- -- QList<EmbeddedFile*> Document::embeddedFiles() const -- { -- return m_doc->m_embeddedFiles; -- } -- -- bool Document::scanForFonts( int numPages, QList<FontInfo> *fontList ) const -- { -- if ( !m_doc->m_fontInfoIterator ) -- return false; -- if ( !m_doc->m_fontInfoIterator->hasNext() ) -- return false; -- while ( m_doc->m_fontInfoIterator->hasNext() && numPages ) -- { -- (*fontList) += m_doc->m_fontInfoIterator->next(); -- --numPages; -- } -- return true; -- } -- -- FontIterator* Document::newFontIterator( int startPage ) const -- { -- return new FontIterator( startPage, m_doc ); -- } -- -- QByteArray Document::fontData(const FontInfo &fi) const -- { -- QByteArray result; -- if (fi.isEmbedded()) -- { -- XRef *xref = m_doc->doc->getXRef()->copy(); -- -- Object refObj(fi.m_data->embRef.num, fi.m_data->embRef.gen); -- Object strObj = refObj.fetch(xref); -- if (strObj.isStream()) -- { -- int c; -- strObj.streamReset(); -- while ((c = strObj.streamGetChar()) != EOF) -- { -- result.append((char)c); -- } -- strObj.streamClose(); -- } -- delete xref; -- } -- return result; -- } -- -- QString Document::info( const QString & type ) const -- { -- if (m_doc->locked) { -- return QString(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoStringEntry(type.toLatin1().constData())); -- return UnicodeParsedString(goo.data()); -- } -- -- bool Document::setInfo( const QString & key, const QString & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- GooString *goo = QStringToUnicodeGooString(val); -- m_doc->doc->setDocInfoStringEntry(key.toLatin1().constData(), goo); -- return true; -- } -- -- QString Document::title() const -- { -- if (m_doc->locked) { -- return QString(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoTitle()); -- return UnicodeParsedString(goo.data()); -- } -- -- bool Document::setTitle( const QString & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->setDocInfoTitle(QStringToUnicodeGooString(val)); -- return true; -- } -- -- QString Document::author() const -- { -- if (m_doc->locked) { -- return QString(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoAuthor()); -- return UnicodeParsedString(goo.data()); -- } -- -- bool Document::setAuthor( const QString & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->setDocInfoAuthor(QStringToUnicodeGooString(val)); -- return true; -- } -- -- QString Document::subject() const -- { -- if (m_doc->locked) { -- return QString(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoSubject()); -- return UnicodeParsedString(goo.data()); -- } -- -- bool Document::setSubject( const QString & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->setDocInfoSubject(QStringToUnicodeGooString(val)); -- return true; -- } -- -- QString Document::keywords() const -- { -- if (m_doc->locked) { -- return QString(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoKeywords()); -- return UnicodeParsedString(goo.data()); -- } -- -- bool Document::setKeywords( const QString & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->setDocInfoKeywords(QStringToUnicodeGooString(val)); -- return true; -- } -- -- QString Document::creator() const -- { -- if (m_doc->locked) { -- return QString(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoCreator()); -- return UnicodeParsedString(goo.data()); -- } -- -- bool Document::setCreator( const QString & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->setDocInfoCreator(QStringToUnicodeGooString(val)); -- return true; -- } -- -- QString Document::producer() const -- { -- if (m_doc->locked) { -- return QString(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoProducer()); -- return UnicodeParsedString(goo.data()); -- } -- -- bool Document::setProducer( const QString & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->setDocInfoProducer(QStringToUnicodeGooString(val)); -- return true; -- } -- -- bool Document::removeInfo() -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->removeDocInfo(); -- return true; -- } -- -- QStringList Document::infoKeys() const -- { -- QStringList keys; -- -- if ( m_doc->locked ) -- return QStringList(); -- -- QScopedPointer<XRef> xref(m_doc->doc->getXRef()->copy()); -- if (!xref) -- return QStringList(); -- Object info = xref->getDocInfo(); -- if ( !info.isDict() ) -- return QStringList(); -- -- Dict *infoDict = info.getDict(); -- // somehow iterate over keys in infoDict -- keys.reserve( infoDict->getLength() ); -- for( int i=0; i < infoDict->getLength(); ++i ) { -- keys.append( QString::fromAscii(infoDict->getKey(i)) ); -- } -- -- return keys; -- } -- -- QDateTime Document::date( const QString & type ) const -- { -- if (m_doc->locked) { -- return QDateTime(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoStringEntry(type.toLatin1().constData())); -- QString str = UnicodeParsedString(goo.data()); -- return Poppler::convertDate(str.toLatin1().data()); -- } -- -- bool Document::setDate( const QString & key, const QDateTime & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->setDocInfoStringEntry(key.toLatin1().constData(), QDateTimeToUnicodeGooString(val)); -- return true; -- } -- -- QDateTime Document::creationDate() const -- { -- if (m_doc->locked) { -- return QDateTime(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoCreatDate()); -- QString str = UnicodeParsedString(goo.data()); -- return Poppler::convertDate(str.toLatin1().data()); -- } -- -- bool Document::setCreationDate( const QDateTime & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->setDocInfoCreatDate(QDateTimeToUnicodeGooString(val)); -- return true; -- } -- -- QDateTime Document::modificationDate() const -- { -- if (m_doc->locked) { -- return QDateTime(); -- } -- -- QScopedPointer<GooString> goo(m_doc->doc->getDocInfoModDate()); -- QString str = UnicodeParsedString(goo.data()); -- return Poppler::convertDate(str.toLatin1().data()); -- } -- -- bool Document::setModificationDate( const QDateTime & val ) -- { -- if (m_doc->locked) { -- return false; -- } -- -- m_doc->doc->setDocInfoModDate(QDateTimeToUnicodeGooString(val)); -- return true; -- } -- -- bool Document::isEncrypted() const -- { -- return m_doc->doc->isEncrypted(); -- } -- -- bool Document::isLinearized() const -- { -- return m_doc->doc->isLinearized(); -- } -- -- bool Document::okToPrint() const -- { -- return m_doc->doc->okToPrint(); -- } -- -- bool Document::okToPrintHighRes() const -- { -- return m_doc->doc->okToPrintHighRes(); -- } -- -- bool Document::okToChange() const -- { -- return m_doc->doc->okToChange(); -- } -- -- bool Document::okToCopy() const -- { -- return m_doc->doc->okToCopy(); -- } -- -- bool Document::okToAddNotes() const -- { -- return m_doc->doc->okToAddNotes(); -- } -- -- bool Document::okToFillForm() const -- { -- return m_doc->doc->okToFillForm(); -- } -- -- bool Document::okToCreateFormFields() const -- { -- return ( okToFillForm() && okToChange() ); -- } -- -- bool Document::okToExtractForAccessibility() const -- { -- return m_doc->doc->okToAccessibility(); -- } -- -- bool Document::okToAssemble() const -- { -- return m_doc->doc->okToAssemble(); -- } -- -- double Document::pdfVersion() const -- { -- return m_doc->doc->getPDFMajorVersion () + m_doc->doc->getPDFMinorVersion() / 10.0; -- } -- -- void Document::getPdfVersion(int *major, int *minor) const -- { -- if (major) -- *major = m_doc->doc->getPDFMajorVersion(); -- if (minor) -- *minor = m_doc->doc->getPDFMinorVersion(); -- } -- -- Page *Document::page(const QString &label) const -- { -- GooString label_g(label.toAscii().data()); -- int index; -- -- if (!m_doc->doc->getCatalog()->labelToIndex (&label_g, &index)) -- return NULL; -- -- return page(index); -- } -- -- bool Document::hasEmbeddedFiles() const -- { -- return (!(0 == m_doc->doc->getCatalog()->numEmbeddedFiles())); -- } -- -- QDomDocument *Document::toc() const -- { -- Outline * outline = m_doc->doc->getOutline(); -- if ( !outline ) -- return NULL; -- -- GooList * items = outline->getItems(); -- if ( !items || items->getLength() < 1 ) -- return NULL; -- -- QDomDocument *toc = new QDomDocument(); -- if ( items->getLength() > 0 ) -- m_doc->addTocChildren( toc, toc, items ); -- -- return toc; -- } -- -- LinkDestination *Document::linkDestination( const QString &name ) -- { -- GooString * namedDest = QStringToGooString( name ); -- LinkDestinationData ldd(NULL, namedDest, m_doc, false); -- LinkDestination *ld = new LinkDestination(ldd); -- delete namedDest; -- return ld; -- } -- -- void Document::setPaperColor(const QColor &color) -- { -- m_doc->setPaperColor(color); -- } -- -- void Document::setColorDisplayProfile(void* outputProfileA) -- { --#if defined(USE_CMS) -- GfxColorSpace::setDisplayProfile((cmsHPROFILE)outputProfileA); --#else -- Q_UNUSED(outputProfileA); --#endif -- } -- -- void Document::setColorDisplayProfileName(const QString &name) -- { --#if defined(USE_CMS) -- GooString *profileName = QStringToGooString( name ); -- GfxColorSpace::setDisplayProfileName(profileName); -- delete profileName; --#else -- Q_UNUSED(name); --#endif -- } -- -- void* Document::colorRgbProfile() const -- { --#if defined(USE_CMS) -- return (void*)GfxColorSpace::getRGBProfile(); --#else -- return NULL; --#endif -- } -- -- void* Document::colorDisplayProfile() const -- { --#if defined(USE_CMS) -- return (void*)GfxColorSpace::getDisplayProfile(); --#else -- return NULL; --#endif -- } -- -- QColor Document::paperColor() const -- { -- return m_doc->paperColor; -- } -- -- void Document::setRenderBackend( Document::RenderBackend backend ) -- { -- // no need to delete the outputdev as for the moment we always create a splash one -- // as the arthur one does not allow "precaching" due to it's signature -- // delete m_doc->m_outputDev; -- // m_doc->m_outputDev = NULL; -- m_doc->m_backend = backend; -- } -- -- Document::RenderBackend Document::renderBackend() const -- { -- return m_doc->m_backend; -- } -- -- QSet<Document::RenderBackend> Document::availableRenderBackends() -- { -- QSet<Document::RenderBackend> ret; --#if defined(HAVE_SPLASH) -- ret << Document::SplashBackend; --#endif -- ret << Document::ArthurBackend; -- return ret; -- } -- -- void Document::setRenderHint( Document::RenderHint hint, bool on ) -- { -- const bool touchesOverprinting = hint & Document::OverprintPreview; -- -- int hintForOperation = hint; -- if (touchesOverprinting && !isOverprintPreviewAvailable()) -- hintForOperation = hintForOperation & ~(int)Document::OverprintPreview; -- -- if ( on ) -- m_doc->m_hints |= hintForOperation; -- else -- m_doc->m_hints &= ~hintForOperation; -- -- } -- -- Document::RenderHints Document::renderHints() const -- { -- return Document::RenderHints( m_doc->m_hints ); -- } -- -- PSConverter *Document::psConverter() const -- { -- return new PSConverter(m_doc); -- } -- -- PDFConverter *Document::pdfConverter() const -- { -- return new PDFConverter(m_doc); -- } -- -- QString Document::metadata() const -- { -- QString result; -- Catalog *catalog = m_doc->doc->getCatalog(); -- if (catalog && catalog->isOk()) -- { -- GooString *s = catalog->readMetadata(); -- if (s) result = UnicodeParsedString(s); -- delete s; -- } -- return result; -- } -- -- bool Document::hasOptionalContent() const -- { -- return ( m_doc->doc->getOptContentConfig() && m_doc->doc->getOptContentConfig()->hasOCGs() ); -- } -- -- OptContentModel *Document::optionalContentModel() -- { -- if (m_doc->m_optContentModel.isNull()) { -- m_doc->m_optContentModel = new OptContentModel(m_doc->doc->getOptContentConfig(), 0); -- } -- return (OptContentModel *)m_doc->m_optContentModel; -- } -- -- QStringList Document::scripts() const -- { -- Catalog *catalog = m_doc->doc->getCatalog(); -- const int numScripts = catalog->numJS(); -- QStringList scripts; -- for (int i = 0; i < numScripts; ++i) { -- GooString *s = catalog->getJS(i); -- if (s) { -- scripts.append(UnicodeParsedString(s)); -- delete s; -- } -- } -- return scripts; -- } -- -- bool Document::getPdfId(QByteArray *permanentId, QByteArray *updateId) const -- { -- GooString gooPermanentId; -- GooString gooUpdateId; -- -- if (!m_doc->doc->getID(permanentId ? &gooPermanentId : 0, updateId ? &gooUpdateId : 0)) -- return false; -- -- if (permanentId) -- *permanentId = gooPermanentId.getCString(); -- if (updateId) -- *updateId = gooUpdateId.getCString(); -- -- return true; -- } -- -- Document::FormType Document::formType() const -- { -- switch ( m_doc->doc->getCatalog()->getFormType() ) -- { -- case Catalog::NoForm: -- return Document::NoForm; -- case Catalog::AcroForm: -- return Document::AcroForm; -- case Catalog::XfaForm: -- return Document::XfaForm; -- } -- -- return Document::NoForm; // make gcc happy -- } -- -- QDateTime convertDate( char *dateString ) -- { -- int year, mon, day, hour, min, sec, tzHours, tzMins; -- char tz; -- -- if ( parseDateString( dateString, &year, &mon, &day, &hour, &min, &sec, &tz, &tzHours, &tzMins ) ) -- { -- QDate d( year, mon, day ); -- QTime t( hour, min, sec ); -- if ( d.isValid() && t.isValid() ) { -- QDateTime dt( d, t, Qt::UTC ); -- if ( tz ) { -- // then we have some form of timezone -- if ( 'Z' == tz ) { -- // We are already at UTC -- } else if ( '+' == tz ) { -- // local time is ahead of UTC -- dt = dt.addSecs(-1*((tzHours*60)+tzMins)*60); -- } else if ( '-' == tz ) { -- // local time is behind UTC -- dt = dt.addSecs(((tzHours*60)+tzMins)*60); -- } else { -- qWarning("unexpected tz val"); -- } -- } -- return dt; -- } -- } -- return QDateTime(); -- } -- -- bool isCmsAvailable() -- { --#if defined(USE_CMS) -- return true; --#else -- return false; --#endif -- } -- -- bool isOverprintPreviewAvailable() { --#ifdef SPLASH_CMYK -- return true; --#else -- return false; --#endif -- } -- --} -diff --git a/qt4/src/poppler-embeddedfile-private.h b/qt4/src/poppler-embeddedfile-private.h -deleted file mode 100644 -index 83549dad..00000000 ---- a/qt4/src/poppler-embeddedfile-private.h -+++ /dev/null -@@ -1,42 +0,0 @@ --/* poppler-embeddedfile-private.h: Qt4 interface to poppler -- * Copyright (C) 2005, 2008, 2009, 2012, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2005, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2008, 2011, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef POPPLER_EMBEDDEDFILE_PRIVATE_H --#define POPPLER_EMBEDDEDFILE_PRIVATE_H -- --class FileSpec; -- --namespace Poppler --{ -- --class EmbeddedFileData --{ --public: -- EmbeddedFileData(FileSpec *fs); -- ~EmbeddedFileData(); -- -- EmbFile *embFile() const; -- -- FileSpec *filespec; --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-embeddedfile.cc b/qt4/src/poppler-embeddedfile.cc -deleted file mode 100644 -index f70573ac..00000000 ---- a/qt4/src/poppler-embeddedfile.cc -+++ /dev/null -@@ -1,135 +0,0 @@ --/* poppler-document.cc: qt interface to poppler -- * Copyright (C) 2005, 2008, 2009, 2012, 2013, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2005, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2008, 2011, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" -- --#include <QtCore/QString> --#include <QtCore/QDateTime> -- --#include "Object.h" --#include "Stream.h" --#include "Catalog.h" --#include "FileSpec.h" -- --#include "poppler-private.h" --#include "poppler-embeddedfile-private.h" -- --namespace Poppler --{ -- --EmbeddedFileData::EmbeddedFileData(FileSpec *fs) -- : filespec(fs) --{ --} -- --EmbeddedFileData::~EmbeddedFileData() --{ -- delete filespec; --} -- --EmbFile *EmbeddedFileData::embFile() const --{ -- return filespec->isOk() ? filespec->getEmbeddedFile() : NULL; --} -- -- --EmbeddedFile::EmbeddedFile(EmbFile *embfile) -- : m_embeddedFile(0) --{ -- assert(!"You must not use this private constructor!"); --} -- --EmbeddedFile::EmbeddedFile(EmbeddedFileData &dd) -- : m_embeddedFile(&dd) --{ --} -- --EmbeddedFile::~EmbeddedFile() --{ -- delete m_embeddedFile; --} -- --QString EmbeddedFile::name() const --{ -- GooString *goo = m_embeddedFile->filespec->getFileName(); -- return goo ? UnicodeParsedString(goo) : QString(); --} -- --QString EmbeddedFile::description() const --{ -- GooString *goo = m_embeddedFile->filespec->getDescription(); -- return goo ? UnicodeParsedString(goo) : QString(); --} -- --int EmbeddedFile::size() const --{ -- return m_embeddedFile->embFile() ? m_embeddedFile->embFile()->size() : -1; --} -- --QDateTime EmbeddedFile::modDate() const --{ -- GooString *goo = m_embeddedFile->embFile() ? m_embeddedFile->embFile()->modDate() : NULL; -- return goo ? convertDate(goo->getCString()) : QDateTime(); --} -- --QDateTime EmbeddedFile::createDate() const --{ -- GooString *goo = m_embeddedFile->embFile() ? m_embeddedFile->embFile()->createDate() : NULL; -- return goo ? convertDate(goo->getCString()) : QDateTime(); --} -- --QByteArray EmbeddedFile::checksum() const --{ -- GooString *goo = m_embeddedFile->embFile() ? m_embeddedFile->embFile()->checksum() : NULL; -- return goo ? QByteArray::fromRawData(goo->getCString(), goo->getLength()) : QByteArray(); --} -- --QString EmbeddedFile::mimeType() const --{ -- GooString *goo = m_embeddedFile->embFile() ? m_embeddedFile->embFile()->mimeType() : NULL; -- return goo ? QString(goo->getCString()) : QString(); --} -- --QByteArray EmbeddedFile::data() --{ -- if (!isValid()) -- return QByteArray(); -- Stream *stream = m_embeddedFile->embFile() ? m_embeddedFile->embFile()->stream() : NULL; -- if (!stream) -- return QByteArray(); -- -- stream->reset(); -- int dataLen = 0; -- QByteArray fileArray; -- int i; -- while ( (i = stream->getChar()) != EOF) { -- fileArray[dataLen] = (char)i; -- ++dataLen; -- } -- fileArray.resize(dataLen); -- return fileArray; --} -- --bool EmbeddedFile::isValid() const --{ -- return m_embeddedFile->filespec->isOk(); --} -- --} -diff --git a/qt4/src/poppler-export.h b/qt4/src/poppler-export.h -deleted file mode 100644 -index 2e2f6ff8..00000000 ---- a/qt4/src/poppler-export.h -+++ /dev/null -@@ -1,20 +0,0 @@ --/* --* This file is used to set the poppler_qt4_EXPORT macros right. --* This is needed for setting the visibility on windows, it will have no effect on other platforms. --*/ --#if defined(_WIN32) --# define _POPPLER_QT4_LIB_EXPORT __declspec(dllexport) --# define _POPPLER_QT4_LIB_IMPORT __declspec(dllimport) --#elif defined(__GNUC__) --# define _POPPLER_QT4_LIB_EXPORT __attribute__((visibility("default"))) --# define _POPPLER_QT4_LIB_IMPORT --#else --# define _POPPLER_QT4_LIB_EXPORT --# define _POPPLER_QT4_LIB_IMPORT --#endif -- --#ifdef poppler_qt4_EXPORTS --# define POPPLER_QT4_EXPORT _POPPLER_QT4_LIB_EXPORT --#else --# define POPPLER_QT4_EXPORT _POPPLER_QT4_LIB_IMPORT --#endif -diff --git a/qt4/src/poppler-fontinfo.cc b/qt4/src/poppler-fontinfo.cc -deleted file mode 100644 -index 5bb9e3a8..00000000 ---- a/qt4/src/poppler-fontinfo.cc -+++ /dev/null -@@ -1,150 +0,0 @@ --/* poppler-qt.h: qt interface to poppler -- * Copyright (C) 2005, Net Integration Technologies, Inc. -- * Copyright (C) 2005, Tobias Koening <tokoe@kde.org> -- * Copyright (C) 2005, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2005-2008, 2015, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2008, 2009, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" --#include "poppler-private.h" -- --namespace Poppler { -- --FontInfo::FontInfo() --{ -- m_data = new FontInfoData(); --} -- --FontInfo::FontInfo( const FontInfoData &fid ) --{ -- m_data = new FontInfoData(fid); --} -- --FontInfo::FontInfo( const FontInfo &fi ) --{ -- m_data = new FontInfoData(*fi.m_data); --} -- --FontInfo::~FontInfo() --{ -- delete m_data; --} -- --QString FontInfo::name() const --{ -- return m_data->fontName; --} -- --QString FontInfo::file() const --{ -- return m_data->fontFile; --} -- --bool FontInfo::isEmbedded() const --{ -- return m_data->isEmbedded; --} -- --bool FontInfo::isSubset() const --{ -- return m_data->isSubset; --} -- --FontInfo::Type FontInfo::type() const --{ -- return m_data->type; --} -- --QString FontInfo::typeName() const --{ -- switch (type()) { -- case unknown: -- return QObject::tr("unknown"); -- case Type1: -- return QObject::tr("Type 1"); -- case Type1C: -- return QObject::tr("Type 1C"); -- case Type3: -- return QObject::tr("Type 3"); -- case TrueType: -- return QObject::tr("TrueType"); -- case CIDType0: -- return QObject::tr("CID Type 0"); -- case CIDType0C: -- return QObject::tr("CID Type 0C"); -- case CIDTrueType: -- return QObject::tr("CID TrueType"); -- case Type1COT: -- return QObject::tr("Type 1C (OpenType)"); -- case TrueTypeOT: -- return QObject::tr("TrueType (OpenType)"); -- case CIDType0COT: -- return QObject::tr("CID Type 0C (OpenType)"); -- case CIDTrueTypeOT: -- return QObject::tr("CID TrueType (OpenType)"); -- } -- return QObject::tr("Bug: unexpected font type. Notify poppler mailing list!"); --} -- --FontInfo& FontInfo::operator=( const FontInfo &fi ) --{ -- if (this == &fi) -- return *this; -- -- *m_data = *fi.m_data; -- return *this; --} -- -- --FontIterator::FontIterator( int startPage, DocumentData *dd ) -- : d( new FontIteratorData( startPage, dd ) ) --{ --} -- --FontIterator::~FontIterator() --{ -- delete d; --} -- --QList<FontInfo> FontIterator::next() --{ -- ++d->currentPage; -- -- QList<FontInfo> fonts; -- GooList *items = d->fontInfoScanner.scan( 1 ); -- if ( !items ) -- return fonts; -- fonts.reserve( items->getLength() ); -- for ( int i = 0; i < items->getLength(); ++i ) { -- fonts.append( FontInfo( FontInfoData( ( ::FontInfo* )items->get( i ) ) ) ); -- } -- deleteGooList( items, ::FontInfo ); -- return fonts; --} -- --bool FontIterator::hasNext() const --{ -- return ( d->currentPage + 1 ) < d->totalPages; --} -- --int FontIterator::currentPage() const --{ -- return d->currentPage; --} -- --} -diff --git a/qt4/src/poppler-form.cc b/qt4/src/poppler-form.cc -deleted file mode 100644 -index 57cde574..00000000 ---- a/qt4/src/poppler-form.cc -+++ /dev/null -@@ -1,416 +0,0 @@ --/* poppler-form.h: qt4 interface to poppler -- * Copyright (C) 2007-2008, 2011, Pino Toscano <pino@kde.org> -- * Copyright (C) 2008, 2011, 2012, 2015, 2017, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2011 Carlos Garcia Campos <carlosgc@gnome.org> -- * Copyright (C) 2012, Adam Reichold <adamreichold@myopera.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" -- --#include <QtCore/QSizeF> -- --#include <Form.h> --#include <Object.h> --#include <Link.h> -- --#include "poppler-form.h" --#include "poppler-page-private.h" --#include "poppler-private.h" --#include "poppler-annotation-helper.h" -- --#include <math.h> -- --namespace { -- --Qt::Alignment formTextAlignment(::FormWidget *fm) --{ -- Qt::Alignment qtalign = Qt::AlignLeft; -- switch (fm->getField()->getTextQuadding()) -- { -- case quaddingCentered: -- qtalign = Qt::AlignHCenter; -- break; -- case quaddingRightJustified: -- qtalign = Qt::AlignRight; -- break; -- case quaddingLeftJustified: -- qtalign = Qt::AlignLeft; -- } -- return qtalign; --} -- --} -- --namespace Poppler { -- --FormField::FormField(FormFieldData &dd) -- : m_formData(&dd) --{ -- const int rotation = m_formData->page->getRotate(); -- // reading the coords -- double left, top, right, bottom; -- m_formData->fm->getRect(&left, &bottom, &right, &top); -- // build a normalized transform matrix for this page at 100% scale -- GfxState gfxState( 72.0, 72.0, m_formData->page->getCropBox(), rotation, gTrue ); -- double * gfxCTM = gfxState.getCTM(); -- double MTX[6]; -- double pageWidth = m_formData->page->getCropWidth(); -- double pageHeight = m_formData->page->getCropHeight(); -- // landscape and seascape page rotation: be sure to use the correct (== rotated) page size -- if (((rotation / 90) % 2) == 1) -- qSwap(pageWidth, pageHeight); -- for ( int i = 0; i < 6; i+=2 ) -- { -- MTX[i] = gfxCTM[i] / pageWidth; -- MTX[i+1] = gfxCTM[i+1] / pageHeight; -- } -- QPointF topLeft; -- XPDFReader::transform( MTX, qMin( left, right ), qMax( top, bottom ), topLeft ); -- QPointF bottomRight; -- XPDFReader::transform( MTX, qMax( left, right ), qMin( top, bottom ), bottomRight ); -- m_formData->box = QRectF(topLeft, QSizeF(bottomRight.x() - topLeft.x(), bottomRight.y() - topLeft.y())); --} -- --FormField::~FormField() --{ -- delete m_formData; -- m_formData = 0; --} -- --QRectF FormField::rect() const --{ -- return m_formData->box; --} -- --int FormField::id() const --{ -- return m_formData->fm->getID(); --} -- --QString FormField::name() const --{ -- QString name; -- if (GooString *goo = m_formData->fm->getPartialName()) -- { -- name = QString::fromLatin1(goo->getCString()); -- } -- return name; --} -- --QString FormField::fullyQualifiedName() const --{ -- QString name; -- if (GooString *goo = m_formData->fm->getFullyQualifiedName()) -- { -- name = UnicodeParsedString(goo); -- } -- return name; --} -- --QString FormField::uiName() const --{ -- QString name; -- if (GooString *goo = m_formData->fm->getAlternateUiName()) -- { -- name = QString::fromLatin1(goo->getCString()); -- } -- return name; --} -- --bool FormField::isReadOnly() const --{ -- return m_formData->fm->isReadOnly(); --} -- --bool FormField::isVisible() const --{ -- return !(m_formData->fm->getWidgetAnnotation()->getFlags() & Annot::flagHidden); --} -- --Link* FormField::activationAction() const --{ -- Link* action = 0; -- if (::LinkAction *act = m_formData->fm->getActivationAction()) -- { -- action = PageData::convertLinkActionToLink(act, m_formData->doc, QRectF()); -- } -- return action; --} -- -- --FormFieldButton::FormFieldButton(DocumentData *doc, ::Page *p, ::FormWidgetButton *w) -- : FormField(*new FormFieldData(doc, p, w)) --{ --} -- --FormFieldButton::~FormFieldButton() --{ --} -- --FormFieldButton::FormType FormFieldButton::type() const --{ -- return FormField::FormButton; --} -- --FormFieldButton::ButtonType FormFieldButton::buttonType() const --{ -- FormWidgetButton* fwb = static_cast<FormWidgetButton*>(m_formData->fm); -- switch (fwb->getButtonType()) -- { -- case formButtonCheck: -- return FormFieldButton::CheckBox; -- break; -- case formButtonPush: -- return FormFieldButton::Push; -- break; -- case formButtonRadio: -- return FormFieldButton::Radio; -- break; -- } -- return FormFieldButton::CheckBox; --} -- --QString FormFieldButton::caption() const --{ -- FormWidgetButton* fwb = static_cast<FormWidgetButton*>(m_formData->fm); -- QString ret; -- if (fwb->getButtonType() == formButtonPush) -- { -- Dict *dict = m_formData->fm->getObj()->getDict(); -- Object obj1 = dict->lookup("MK"); -- if (obj1.isDict()) -- { -- AnnotAppearanceCharacs appearCharacs(obj1.getDict()); -- if (appearCharacs.getNormalCaption()) -- { -- ret = UnicodeParsedString(appearCharacs.getNormalCaption()); -- } -- } -- } -- else -- { -- if (const char *goo = fwb->getOnStr()) -- { -- ret = QString::fromUtf8(goo); -- } -- } -- return ret; --} -- --bool FormFieldButton::state() const --{ -- FormWidgetButton* fwb = static_cast<FormWidgetButton*>(m_formData->fm); -- return fwb->getState(); --} -- --void FormFieldButton::setState( bool state ) --{ -- FormWidgetButton* fwb = static_cast<FormWidgetButton*>(m_formData->fm); -- fwb->setState((GBool)state); --} -- --QList<int> FormFieldButton::siblings() const --{ -- FormWidgetButton* fwb = static_cast<FormWidgetButton*>(m_formData->fm); -- ::FormFieldButton* ffb = static_cast< ::FormFieldButton* >(fwb->getField()); -- if (fwb->getButtonType() == formButtonPush) -- return QList<int>(); -- -- QList<int> ret; -- for (int i = 0; i < ffb->getNumSiblings(); ++i) -- { -- ::FormFieldButton* sibling = static_cast< ::FormFieldButton* >(ffb->getSibling(i)); -- for (int j = 0; j < sibling->getNumWidgets(); ++j) -- { -- FormWidget *w = sibling->getWidget(j); -- if (w) ret.append(w->getID()); -- } -- } -- -- return ret; --} -- -- --FormFieldText::FormFieldText(DocumentData *doc, ::Page *p, ::FormWidgetText *w) -- : FormField(*new FormFieldData(doc, p, w)) --{ --} -- --FormFieldText::~FormFieldText() --{ --} -- --FormField::FormType FormFieldText::type() const --{ -- return FormField::FormText; --} -- --FormFieldText::TextType FormFieldText::textType() const --{ -- FormWidgetText* fwt = static_cast<FormWidgetText*>(m_formData->fm); -- if (fwt->isFileSelect()) -- return FormFieldText::FileSelect; -- else if (fwt->isMultiline()) -- return FormFieldText::Multiline; -- return FormFieldText::Normal; --} -- --QString FormFieldText::text() const --{ -- GooString *goo = static_cast<FormWidgetText*>(m_formData->fm)->getContent(); -- return UnicodeParsedString(goo); --} -- --void FormFieldText::setText( const QString& text ) --{ -- FormWidgetText* fwt = static_cast<FormWidgetText*>(m_formData->fm); -- GooString * goo = QStringToUnicodeGooString( text ); -- fwt->setContent( goo ); -- delete goo; --} -- --bool FormFieldText::isPassword() const --{ -- FormWidgetText* fwt = static_cast<FormWidgetText*>(m_formData->fm); -- return fwt->isPassword(); --} -- --bool FormFieldText::isRichText() const --{ -- FormWidgetText* fwt = static_cast<FormWidgetText*>(m_formData->fm); -- return fwt->isRichText(); --} -- --int FormFieldText::maximumLength() const --{ -- FormWidgetText* fwt = static_cast<FormWidgetText*>(m_formData->fm); -- const int maxlen = fwt->getMaxLen(); -- return maxlen > 0 ? maxlen : -1; --} -- --Qt::Alignment FormFieldText::textAlignment() const --{ -- return formTextAlignment(m_formData->fm); --} -- --bool FormFieldText::canBeSpellChecked() const --{ -- FormWidgetText* fwt = static_cast<FormWidgetText*>(m_formData->fm); -- return !fwt->noSpellCheck(); --} -- -- --FormFieldChoice::FormFieldChoice(DocumentData *doc, ::Page *p, ::FormWidgetChoice *w) -- : FormField(*new FormFieldData(doc, p, w)) --{ --} -- --FormFieldChoice::~FormFieldChoice() --{ --} -- --FormFieldChoice::FormType FormFieldChoice::type() const --{ -- return FormField::FormChoice; --} -- --FormFieldChoice::ChoiceType FormFieldChoice::choiceType() const --{ -- FormWidgetChoice* fwc = static_cast<FormWidgetChoice*>(m_formData->fm); -- if (fwc->isCombo()) -- return FormFieldChoice::ComboBox; -- return FormFieldChoice::ListBox; --} -- --QStringList FormFieldChoice::choices() const --{ -- FormWidgetChoice* fwc = static_cast<FormWidgetChoice*>(m_formData->fm); -- QStringList ret; -- int num = fwc->getNumChoices(); -- ret.reserve(num); -- for (int i = 0; i < num; ++i) -- { -- ret.append(UnicodeParsedString(fwc->getChoice(i))); -- } -- return ret; --} -- --bool FormFieldChoice::isEditable() const --{ -- FormWidgetChoice* fwc = static_cast<FormWidgetChoice*>(m_formData->fm); -- return fwc->isCombo() ? fwc->hasEdit() : false; --} -- --bool FormFieldChoice::multiSelect() const --{ -- FormWidgetChoice* fwc = static_cast<FormWidgetChoice*>(m_formData->fm); -- return !fwc->isCombo() ? fwc->isMultiSelect() : false; --} -- --QList<int> FormFieldChoice::currentChoices() const --{ -- FormWidgetChoice* fwc = static_cast<FormWidgetChoice*>(m_formData->fm); -- int num = fwc->getNumChoices(); -- QList<int> choices; -- for ( int i = 0; i < num; ++i ) -- if ( fwc->isSelected( i ) ) -- choices.append( i ); -- return choices; --} -- --void FormFieldChoice::setCurrentChoices( const QList<int> &choice ) --{ -- FormWidgetChoice* fwc = static_cast<FormWidgetChoice*>(m_formData->fm); -- fwc->deselectAll(); -- for ( int i = 0; i < choice.count(); ++i ) -- fwc->select( choice.at( i ) ); --} -- --QString FormFieldChoice::editChoice() const --{ -- FormWidgetChoice* fwc = static_cast<FormWidgetChoice*>(m_formData->fm); -- -- if ( fwc->isCombo() && fwc->hasEdit() ) -- return UnicodeParsedString(fwc->getEditChoice()); -- else -- return QString(); --} -- --void FormFieldChoice::setEditChoice(const QString& text) --{ -- FormWidgetChoice* fwc = static_cast<FormWidgetChoice*>(m_formData->fm); -- -- if ( fwc->isCombo() && fwc->hasEdit() ) -- { -- GooString* goo = QStringToUnicodeGooString( text ); -- fwc->setEditChoice( goo ); -- delete goo; -- } --} -- --Qt::Alignment FormFieldChoice::textAlignment() const --{ -- return formTextAlignment(m_formData->fm); --} -- --bool FormFieldChoice::canBeSpellChecked() const --{ -- FormWidgetChoice* fwc = static_cast<FormWidgetChoice*>(m_formData->fm); -- return !fwc->noSpellCheck(); --} -- --} -diff --git a/qt4/src/poppler-form.h b/qt4/src/poppler-form.h -deleted file mode 100644 -index 79ed3932..00000000 ---- a/qt4/src/poppler-form.h -+++ /dev/null -@@ -1,343 +0,0 @@ --/* poppler-form.h: qt4 interface to poppler -- * Copyright (C) 2007-2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2008, 2011, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2012, Adam Reichold <adamreichold@myopera.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef _POPPLER_QT4_FORM_H_ --#define _POPPLER_QT4_FORM_H_ -- --#include <QtCore/QRectF> --#include <QtCore/QStringList> --#include "poppler-export.h" -- --class Page; --class FormWidget; --class FormWidgetButton; --class FormWidgetText; --class FormWidgetChoice; -- --namespace Poppler { -- -- class DocumentData; -- class Link; -- -- class FormFieldData; -- /** -- The base class representing a form field. -- -- \since 0.6 -- */ -- class POPPLER_QT4_EXPORT FormField { -- public: -- -- /** -- The different types of form field. -- */ -- enum FormType { -- FormButton, ///< A button field. See \ref Poppler::FormFieldButton::ButtonType "ButtonType" -- FormText, ///< A text field. See \ref Poppler::FormFieldText::TextType "TextType" -- FormChoice, ///< A single choice field. See \ref Poppler::FormFieldChoice::ChoiceType "ChoiceType" -- FormSignature ///< A signature field. -- }; -- -- virtual ~FormField(); -- -- /** -- The type of the field. -- */ -- virtual FormType type() const = 0; -- -- /** -- \return The size of the field, in normalized coordinates, i.e. -- [0..1] with regard to the dimensions (cropbox) of the page -- */ -- QRectF rect() const; -- -- /** -- The ID of the field. -- */ -- int id() const; -- -- /** -- The internal name of the field. -- */ -- QString name() const; -- -- /** -- The internal fully qualified name of the field. -- \since 0.18 -- */ -- QString fullyQualifiedName() const; -- -- /** -- The name of the field to be used in user interface (eg messages to -- the user). -- */ -- QString uiName() const; -- -- /** -- Whether this form field is read-only. -- */ -- bool isReadOnly() const; -- -- /** -- Whether this form field is visible. -- */ -- bool isVisible() const; -- -- /** -- The activation action of this form field. -- -- \note It may be null. -- */ -- Link* activationAction() const; -- -- protected: -- /// \cond PRIVATE -- FormField(FormFieldData &dd); -- -- FormFieldData *m_formData; -- /// \endcond -- -- private: -- Q_DISABLE_COPY(FormField) -- }; -- -- /** -- A form field that represents a "button". -- -- \since 0.8 -- */ -- class POPPLER_QT4_EXPORT FormFieldButton : public FormField { -- public: -- -- /** -- * The types of button field. -- */ -- enum ButtonType -- { -- Push, ///< A simple push button. -- CheckBox, ///< A check box. -- Radio ///< A radio button. -- }; -- -- /// \cond PRIVATE -- FormFieldButton(DocumentData *doc, ::Page *p, ::FormWidgetButton *w); -- /// \endcond -- virtual ~FormFieldButton(); -- -- virtual FormType type() const; -- -- /** -- The particular type of the button field. -- */ -- ButtonType buttonType() const; -- -- /** -- * The caption to be used for the button. -- */ -- QString caption() const; -- -- /** -- The state of the button. -- */ -- bool state() const; -- -- /** -- Sets the state of the button to the new \p state . -- */ -- void setState( bool state ); -- -- /** -- The list with the IDs of siblings (ie, buttons belonging to the same -- group as the current one. -- -- Valid only for \ref Radio buttons, an empty list otherwise. -- */ -- QList<int> siblings() const; -- -- private: -- Q_DISABLE_COPY(FormFieldButton) -- }; -- -- /** -- A form field that represents a text input. -- -- \since 0.6 -- */ -- class POPPLER_QT4_EXPORT FormFieldText : public FormField { -- public: -- -- /** -- The particular type of this text field. -- */ -- enum TextType { -- Normal, ///< A simple singleline text field. -- Multiline, ///< A multiline text field. -- FileSelect ///< An input field to select the path of a file on disk. -- }; -- -- /// \cond PRIVATE -- FormFieldText(DocumentData *doc, ::Page *p, ::FormWidgetText *w); -- /// \endcond -- virtual ~FormFieldText(); -- -- virtual FormType type() const; -- -- /** -- The text type of the text field. -- */ -- TextType textType() const; -- -- /** -- The text associated with the text field. -- */ -- QString text() const; -- -- /** -- Sets the text associated with the text field to the specified -- \p text. -- */ -- void setText( const QString& text ); -- -- /** -- Whether this text field is a password input, eg its text \b must be -- replaced with asterisks. -- -- Always false for \ref FileSelect text fields. -- */ -- bool isPassword() const; -- -- /** -- Whether this text field should allow rich text. -- */ -- bool isRichText() const; -- -- /** -- The maximum length for the text of this field, or -1 if not set. -- */ -- int maximumLength() const; -- -- /** -- The horizontal alignment for the text of this text field. -- */ -- Qt::Alignment textAlignment() const; -- -- /** -- Whether the text inserted manually in the field (where possible) -- can be spell-checked. -- */ -- bool canBeSpellChecked() const; -- -- private: -- Q_DISABLE_COPY(FormFieldText) -- }; -- -- /** -- A form field that represents a choice field. -- -- \since 0.6 -- */ -- class POPPLER_QT4_EXPORT FormFieldChoice : public FormField { -- public: -- -- /** -- The particular type of this choice field. -- */ -- enum ChoiceType { -- ComboBox, ///< A simple singleline text field. -- ListBox ///< A multiline text field. -- }; -- -- /// \cond PRIVATE -- FormFieldChoice(DocumentData *doc, ::Page *p, ::FormWidgetChoice *w); -- /// \endcond -- virtual ~FormFieldChoice(); -- -- virtual FormType type() const; -- -- /** -- The choice type of the choice field. -- */ -- ChoiceType choiceType() const; -- -- /** -- The possible choices of the choice field. -- */ -- QStringList choices() const; -- -- /** -- Whether this FormFieldChoice::ComboBox is editable, i.e. the user -- can type in a custom value. -- -- Always false for the other types of choices. -- */ -- bool isEditable() const; -- -- /** -- Whether more than one choice of this FormFieldChoice::ListBox -- can be selected at the same time. -- -- Always false for the other types of choices. -- */ -- bool multiSelect() const; -- -- /** -- The currently selected choices. -- */ -- QList<int> currentChoices() const; -- -- /** -- Sets the selected choices to \p choice. -- */ -- void setCurrentChoices( const QList<int> &choice ); -- -- /** -- The text entered into an editable combo box choice field. Otherwise a null string. -- -- \since 0.22 -- */ -- QString editChoice() const; -- -- /** -- Sets the text entered into an editable combo box choice field. Otherwise does nothing. -- -- \since 0.22 -- */ -- void setEditChoice(const QString& text); -- -- /** -- The horizontal alignment for the text of this text field. -- */ -- Qt::Alignment textAlignment() const; -- -- /** -- Whether the text inserted manually in the field (where possible) -- can be spell-checked. -- -- Returns false if the field is not an editable text field. -- */ -- bool canBeSpellChecked() const; -- -- private: -- Q_DISABLE_COPY(FormFieldChoice) -- }; -- --} -- --#endif -diff --git a/qt4/src/poppler-link-extractor-private.h b/qt4/src/poppler-link-extractor-private.h -deleted file mode 100644 -index 32ddd038..00000000 ---- a/qt4/src/poppler-link-extractor-private.h -+++ /dev/null -@@ -1,57 +0,0 @@ --/* poppler-link-extractor_p.h: qt interface to poppler -- * Copyright (C) 2007, 2008, 2011, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef _POPPLER_LINK_EXTRACTOR_H_ --#define _POPPLER_LINK_EXTRACTOR_H_ -- --#include <Object.h> --#include <OutputDev.h> -- --#include <QtCore/QList> -- --namespace Poppler --{ -- --class Link; --class PageData; -- --class LinkExtractorOutputDev : public OutputDev --{ -- public: -- LinkExtractorOutputDev(PageData *data); -- virtual ~LinkExtractorOutputDev(); -- -- // inherited from OutputDev -- virtual GBool upsideDown() { return gFalse; } -- virtual GBool useDrawChar() { return gFalse; } -- virtual GBool interpretType3Chars() { return gFalse; } -- virtual void processLink(::AnnotLink *link); -- -- // our stuff -- QList< Link* > links(); -- -- private: -- PageData *m_data; -- double m_pageCropWidth; -- double m_pageCropHeight; -- QList< Link* > m_links; --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-link-extractor.cc b/qt4/src/poppler-link-extractor.cc -deleted file mode 100644 -index 0b1563b6..00000000 ---- a/qt4/src/poppler-link-extractor.cc -+++ /dev/null -@@ -1,84 +0,0 @@ --/* poppler-link-extractor_p.h: qt interface to poppler -- * Copyright (C) 2007, 2008, 2011, Pino Toscano <pino@kde.org> -- * Copyright (C) 2008, Albert Astals Cid <aacid@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-link-extractor-private.h" -- --#include <GfxState.h> --#include <Link.h> --#include <Object.h> --#include <Page.h> --#include <Annot.h> -- --#include "poppler-qt4.h" --#include "poppler-page-private.h" -- --namespace Poppler --{ -- --LinkExtractorOutputDev::LinkExtractorOutputDev(PageData *data) -- : m_data(data) --{ -- Q_ASSERT(m_data); -- ::Page *popplerPage = m_data->page; -- m_pageCropWidth = popplerPage->getCropWidth(); -- m_pageCropHeight = popplerPage->getCropHeight(); -- if (popplerPage->getRotate() == 90 || popplerPage->getRotate() == 270) -- qSwap(m_pageCropWidth, m_pageCropHeight); -- GfxState gfxState(72.0, 72.0, popplerPage->getCropBox(), popplerPage->getRotate(), gTrue); -- setDefaultCTM(gfxState.getCTM()); --} -- --LinkExtractorOutputDev::~LinkExtractorOutputDev() --{ -- qDeleteAll(m_links); --} -- --void LinkExtractorOutputDev::processLink(::AnnotLink *link) --{ -- if (!link->isOk()) -- return; -- -- double left, top, right, bottom; -- int leftAux, topAux, rightAux, bottomAux; -- link->getRect(&left, &top, &right, &bottom); -- QRectF linkArea; -- -- cvtUserToDev(left, top, &leftAux, &topAux); -- cvtUserToDev(right, bottom, &rightAux, &bottomAux); -- linkArea.setLeft((double)leftAux / m_pageCropWidth); -- linkArea.setTop((double)topAux / m_pageCropHeight); -- linkArea.setRight((double)rightAux / m_pageCropWidth); -- linkArea.setBottom((double)bottomAux / m_pageCropHeight); -- -- Link *popplerLink = m_data->convertLinkActionToLink(link->getAction(), linkArea); -- if (popplerLink) -- { -- m_links.append(popplerLink); -- } -- OutputDev::processLink(link); --} -- --QList< Link* > LinkExtractorOutputDev::links() --{ -- QList< Link* > ret = m_links; -- m_links.clear(); -- return ret; --} -- --} -diff --git a/qt4/src/poppler-link-private.h b/qt4/src/poppler-link-private.h -deleted file mode 100644 -index 7b03c1c3..00000000 ---- a/qt4/src/poppler-link-private.h -+++ /dev/null -@@ -1,57 +0,0 @@ --/* poppler-link-private.h: qt interface to poppler -- * Copyright (C) 2016, Albert Astals Cid <aacid@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef _POPPLER_LINK_PRIVATE_H_ --#define _POPPLER_LINK_PRIVATE_H_ -- --class LinkOCGState; -- --namespace Poppler { -- --class LinkPrivate --{ --public: -- LinkPrivate( const QRectF &area ) -- : linkArea( area ) -- { -- } -- -- virtual ~LinkPrivate() -- { -- } -- -- QRectF linkArea; --}; -- -- -- --class LinkOCGStatePrivate : public LinkPrivate --{ --public: -- LinkOCGStatePrivate( const QRectF &area, ::LinkOCGState *plocg ) -- : LinkPrivate( area ) -- , popplerLinkOCGState( plocg ) -- { -- } -- -- ::LinkOCGState *popplerLinkOCGState; --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-link.cc b/qt4/src/poppler-link.cc -deleted file mode 100644 -index 1e37f5bd..00000000 ---- a/qt4/src/poppler-link.cc -+++ /dev/null -@@ -1,710 +0,0 @@ --/* poppler-link.cc: qt interface to poppler -- * Copyright (C) 2006-2007, 2016, 2017, Albert Astals Cid -- * Copyright (C) 2007-2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -- * Copyright (C) 2012, Tobias Koenig <tokoe@kdab.com> -- * Copyright (C) 2012, Guillermo A. Amaral B. <gamaral@kde.org> -- * Adapting code from -- * Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include <poppler-qt4.h> --#include <poppler-link-private.h> --#include <poppler-private.h> --#include <poppler-media.h> -- --#include <QtCore/QStringList> -- --#include "poppler-annotation-private.h" -- --#include "Link.h" --#include "Rendition.h" -- --static bool operator==( const Ref &r1, const Ref &r2 ) --{ -- return r1.num == r2.num && r1.gen == r2.gen; --} -- --namespace Poppler { -- --class LinkDestinationPrivate : public QSharedData --{ -- public: -- LinkDestinationPrivate(); -- -- LinkDestination::Kind kind; // destination type -- QString name; -- int pageNum; // page number -- double left, bottom; // position -- double right, top; -- double zoom; // zoom factor -- bool changeLeft : 1, changeTop : 1; // for destXYZ links, which position -- bool changeZoom : 1; // components to change --}; -- -- LinkDestinationPrivate::LinkDestinationPrivate() -- { -- // sane defaults -- kind = LinkDestination::destXYZ; -- pageNum = 0; -- left = 0; -- bottom = 0; -- right = 0; -- top = 0; -- zoom = 1; -- changeLeft = true; -- changeTop = true; -- changeZoom = false; -- } -- --class LinkGotoPrivate : public LinkPrivate --{ -- public: -- LinkGotoPrivate( const QRectF &area, const LinkDestination &dest ); -- -- QString extFileName; -- LinkDestination destination; --}; -- -- LinkGotoPrivate::LinkGotoPrivate( const QRectF &area, const LinkDestination &dest ) -- : LinkPrivate( area ), destination( dest ) -- { -- } -- --class LinkExecutePrivate : public LinkPrivate --{ -- public: -- LinkExecutePrivate( const QRectF &area ); -- -- QString fileName; -- QString parameters; --}; -- -- LinkExecutePrivate::LinkExecutePrivate( const QRectF &area ) -- : LinkPrivate( area ) -- { -- } -- --class LinkBrowsePrivate : public LinkPrivate --{ -- public: -- LinkBrowsePrivate( const QRectF &area ); -- -- QString url; --}; -- -- LinkBrowsePrivate::LinkBrowsePrivate( const QRectF &area ) -- : LinkPrivate( area ) -- { -- } -- --class LinkActionPrivate : public LinkPrivate --{ -- public: -- LinkActionPrivate( const QRectF &area ); -- -- LinkAction::ActionType type; --}; -- -- LinkActionPrivate::LinkActionPrivate( const QRectF &area ) -- : LinkPrivate( area ) -- { -- } -- --class LinkSoundPrivate : public LinkPrivate --{ -- public: -- LinkSoundPrivate( const QRectF &area ); -- ~LinkSoundPrivate(); -- -- double volume; -- bool sync : 1; -- bool repeat : 1; -- bool mix : 1; -- SoundObject *sound; --}; -- -- LinkSoundPrivate::LinkSoundPrivate( const QRectF &area ) -- : LinkPrivate( area ), sound( 0 ) -- { -- } -- -- LinkSoundPrivate::~LinkSoundPrivate() -- { -- delete sound; -- } -- --class LinkRenditionPrivate : public LinkPrivate --{ -- public: -- LinkRenditionPrivate( const QRectF &area, ::MediaRendition *rendition, ::LinkRendition::RenditionOperation operation, const QString &script, const Ref &annotationReference ); -- ~LinkRenditionPrivate(); -- -- MediaRendition *rendition; -- LinkRendition::RenditionAction action; -- QString script; -- Ref annotationReference; --}; -- -- LinkRenditionPrivate::LinkRenditionPrivate( const QRectF &area, ::MediaRendition *r, ::LinkRendition::RenditionOperation operation, const QString &javaScript, const Ref &ref ) -- : LinkPrivate( area ) -- , rendition( r ? new MediaRendition( r ) : 0 ) -- , action( LinkRendition::PlayRendition ) -- , script( javaScript ) -- , annotationReference( ref ) -- { -- switch ( operation ) -- { -- case ::LinkRendition::NoRendition: -- action = LinkRendition::NoRendition; -- break; -- case ::LinkRendition::PlayRendition: -- action = LinkRendition::PlayRendition; -- break; -- case ::LinkRendition::StopRendition: -- action = LinkRendition::StopRendition; -- break; -- case ::LinkRendition::PauseRendition: -- action = LinkRendition::PauseRendition; -- break; -- case ::LinkRendition::ResumeRendition: -- action = LinkRendition::ResumeRendition; -- break; -- } -- } -- -- LinkRenditionPrivate::~LinkRenditionPrivate() -- { -- delete rendition; -- } -- --class LinkJavaScriptPrivate : public LinkPrivate --{ -- public: -- LinkJavaScriptPrivate( const QRectF &area ); -- -- QString js; --}; -- -- LinkJavaScriptPrivate::LinkJavaScriptPrivate( const QRectF &area ) -- : LinkPrivate( area ) -- { -- } -- --class LinkMoviePrivate : public LinkPrivate --{ -- public: -- LinkMoviePrivate( const QRectF &area, LinkMovie::Operation operation, const QString &title, const Ref &reference ); -- -- LinkMovie::Operation operation; -- QString annotationTitle; -- Ref annotationReference; --}; -- -- LinkMoviePrivate::LinkMoviePrivate( const QRectF &area, LinkMovie::Operation _operation, const QString &title, const Ref &reference ) -- : LinkPrivate( area ), operation( _operation ), annotationTitle( title ), annotationReference( reference ) -- { -- } -- -- static void cvtUserToDev(::Page *page, double xu, double yu, int *xd, int *yd) { -- double ctm[6]; -- -- page->getDefaultCTM(ctm, 72.0, 72.0, 0, false, true); -- *xd = (int)(ctm[0] * xu + ctm[2] * yu + ctm[4] + 0.5); -- *yd = (int)(ctm[1] * xu + ctm[3] * yu + ctm[5] + 0.5); -- } -- -- LinkDestination::LinkDestination(const LinkDestinationData &data) -- : d( new LinkDestinationPrivate ) -- { -- bool deleteDest = false; -- LinkDest *ld = data.ld; -- -- if ( data.namedDest && !ld && !data.externalDest ) -- { -- deleteDest = true; -- ld = data.doc->doc->findDest( data.namedDest ); -- } -- // in case this destination was named one, and it was not resolved -- if ( data.namedDest && !ld ) -- { -- d->name = QString::fromLatin1( data.namedDest->getCString() ); -- } -- -- if (!ld) return; -- -- if (ld->getKind() == ::destXYZ) d->kind = destXYZ; -- else if (ld->getKind() == ::destFit) d->kind = destFit; -- else if (ld->getKind() == ::destFitH) d->kind = destFitH; -- else if (ld->getKind() == ::destFitV) d->kind = destFitV; -- else if (ld->getKind() == ::destFitR) d->kind = destFitR; -- else if (ld->getKind() == ::destFitB) d->kind = destFitB; -- else if (ld->getKind() == ::destFitBH) d->kind = destFitBH; -- else if (ld->getKind() == ::destFitBV) d->kind = destFitBV; -- -- if ( !ld->isPageRef() ) d->pageNum = ld->getPageNum(); -- else -- { -- Ref ref = ld->getPageRef(); -- d->pageNum = data.doc->doc->findPage( ref.num, ref.gen ); -- } -- double left = ld->getLeft(); -- double bottom = ld->getBottom(); -- double right = ld->getRight(); -- double top = ld->getTop(); -- d->zoom = ld->getZoom(); -- d->changeLeft = ld->getChangeLeft(); -- d->changeTop = ld->getChangeTop(); -- d->changeZoom = ld->getChangeZoom(); -- -- int leftAux = 0, topAux = 0, rightAux = 0, bottomAux = 0; -- -- if (!data.externalDest) { -- ::Page *page; -- if (d->pageNum > 0 && -- d->pageNum <= data.doc->doc->getNumPages() && -- (page = data.doc->doc->getPage( d->pageNum ))) -- { -- cvtUserToDev( page, left, top, &leftAux, &topAux ); -- cvtUserToDev( page, right, bottom, &rightAux, &bottomAux ); -- -- d->left = leftAux / (double)page->getCropWidth(); -- d->top = topAux / (double)page->getCropHeight(); -- d->right = rightAux/ (double)page->getCropWidth(); -- d->bottom = bottomAux / (double)page->getCropHeight(); -- } -- else d->pageNum = 0; -- } -- -- if (deleteDest) delete ld; -- } -- -- LinkDestination::LinkDestination(const QString &description) -- : d( new LinkDestinationPrivate ) -- { -- QStringList tokens = description.split( ';' ); -- d->kind = static_cast<Kind>(tokens.at(0).toInt()); -- d->pageNum = tokens.at(1).toInt(); -- d->left = tokens.at(2).toDouble(); -- d->bottom = tokens.at(3).toDouble(); -- d->right = tokens.at(4).toDouble(); -- d->top = tokens.at(5).toDouble(); -- d->zoom = tokens.at(6).toDouble(); -- d->changeLeft = static_cast<bool>(tokens.at(7).toInt()); -- d->changeTop = static_cast<bool>(tokens.at(8).toInt()); -- d->changeZoom = static_cast<bool>(tokens.at(9).toInt()); -- } -- -- LinkDestination::LinkDestination(const LinkDestination &other) -- : d( other.d ) -- { -- } -- -- LinkDestination::~LinkDestination() -- { -- } -- -- LinkDestination::Kind LinkDestination::kind() const -- { -- return d->kind; -- } -- -- int LinkDestination::pageNumber() const -- { -- return d->pageNum; -- } -- -- double LinkDestination::left() const -- { -- return d->left; -- } -- -- double LinkDestination::bottom() const -- { -- return d->bottom; -- } -- -- double LinkDestination::right() const -- { -- return d->right; -- } -- -- double LinkDestination::top() const -- { -- return d->top; -- } -- -- double LinkDestination::zoom() const -- { -- return d->zoom; -- } -- -- bool LinkDestination::isChangeLeft() const -- { -- return d->changeLeft; -- } -- -- bool LinkDestination::isChangeTop() const -- { -- return d->changeTop; -- } -- -- bool LinkDestination::isChangeZoom() const -- { -- return d->changeZoom; -- } -- -- QString LinkDestination::toString() const -- { -- QString s = QString::number( (qint8)d->kind ); -- s += ";" + QString::number( d->pageNum ); -- s += ";" + QString::number( d->left ); -- s += ";" + QString::number( d->bottom ); -- s += ";" + QString::number( d->right ); -- s += ";" + QString::number( d->top ); -- s += ";" + QString::number( d->zoom ); -- s += ";" + QString::number( (qint8)d->changeLeft ); -- s += ";" + QString::number( (qint8)d->changeTop ); -- s += ";" + QString::number( (qint8)d->changeZoom ); -- return s; -- } -- -- QString LinkDestination::destinationName() const -- { -- return d->name; -- } -- -- LinkDestination& LinkDestination::operator=(const LinkDestination &other) -- { -- if ( this == &other ) -- return *this; -- -- d = other.d; -- return *this; -- } -- -- -- // Link -- Link::~Link() -- { -- delete d_ptr; -- } -- -- Link::Link(const QRectF &linkArea) -- : d_ptr( new LinkPrivate( linkArea ) ) -- { -- } -- -- Link::Link( LinkPrivate &dd ) -- : d_ptr( &dd ) -- { -- } -- -- Link::LinkType Link::linkType() const -- { -- return None; -- } -- -- QRectF Link::linkArea() const -- { -- Q_D( const Link ); -- return d->linkArea; -- } -- -- // LinkGoto -- LinkGoto::LinkGoto( const QRectF &linkArea, QString extFileName, const LinkDestination & destination ) -- : Link( *new LinkGotoPrivate( linkArea, destination ) ) -- { -- Q_D( LinkGoto ); -- d->extFileName = extFileName; -- } -- -- LinkGoto::~LinkGoto() -- { -- } -- -- bool LinkGoto::isExternal() const -- { -- Q_D( const LinkGoto ); -- return !d->extFileName.isEmpty(); -- } -- -- QString LinkGoto::fileName() const -- { -- Q_D( const LinkGoto ); -- return d->extFileName; -- } -- -- LinkDestination LinkGoto::destination() const -- { -- Q_D( const LinkGoto ); -- return d->destination; -- } -- -- Link::LinkType LinkGoto::linkType() const -- { -- return Goto; -- } -- -- // LinkExecute -- LinkExecute::LinkExecute( const QRectF &linkArea, const QString & file, const QString & params ) -- : Link( *new LinkExecutePrivate( linkArea ) ) -- { -- Q_D( LinkExecute ); -- d->fileName = file; -- d->parameters = params; -- } -- -- LinkExecute::~LinkExecute() -- { -- } -- -- QString LinkExecute::fileName() const -- { -- Q_D( const LinkExecute ); -- return d->fileName; -- } -- QString LinkExecute::parameters() const -- { -- Q_D( const LinkExecute ); -- return d->parameters; -- } -- -- Link::LinkType LinkExecute::linkType() const -- { -- return Execute; -- } -- -- // LinkBrowse -- LinkBrowse::LinkBrowse( const QRectF &linkArea, const QString &url ) -- : Link( *new LinkBrowsePrivate( linkArea ) ) -- { -- Q_D( LinkBrowse ); -- d->url = url; -- } -- -- LinkBrowse::~LinkBrowse() -- { -- } -- -- QString LinkBrowse::url() const -- { -- Q_D( const LinkBrowse ); -- return d->url; -- } -- -- Link::LinkType LinkBrowse::linkType() const -- { -- return Browse; -- } -- -- // LinkAction -- LinkAction::LinkAction( const QRectF &linkArea, ActionType actionType ) -- : Link( *new LinkActionPrivate( linkArea ) ) -- { -- Q_D( LinkAction ); -- d->type = actionType; -- } -- -- LinkAction::~LinkAction() -- { -- } -- -- LinkAction::ActionType LinkAction::actionType() const -- { -- Q_D( const LinkAction ); -- return d->type; -- } -- -- Link::LinkType LinkAction::linkType() const -- { -- return Action; -- } -- -- // LinkSound -- LinkSound::LinkSound( const QRectF &linkArea, double volume, bool sync, bool repeat, bool mix, SoundObject *sound ) -- : Link( *new LinkSoundPrivate( linkArea ) ) -- { -- Q_D( LinkSound ); -- d->volume = volume; -- d->sync = sync; -- d->repeat = repeat; -- d->mix = mix; -- d->sound = sound; -- } -- -- LinkSound::~LinkSound() -- { -- } -- -- Link::LinkType LinkSound::linkType() const -- { -- return Sound; -- } -- -- double LinkSound::volume() const -- { -- Q_D( const LinkSound ); -- return d->volume; -- } -- -- bool LinkSound::synchronous() const -- { -- Q_D( const LinkSound ); -- return d->sync; -- } -- -- bool LinkSound::repeat() const -- { -- Q_D( const LinkSound ); -- return d->repeat; -- } -- -- bool LinkSound::mix() const -- { -- Q_D( const LinkSound ); -- return d->mix; -- } -- -- SoundObject *LinkSound::sound() const -- { -- Q_D( const LinkSound ); -- return d->sound; -- } -- -- // LinkRendition -- LinkRendition::LinkRendition( const QRectF &linkArea, ::MediaRendition *rendition ) -- : Link( *new LinkRenditionPrivate( linkArea, rendition, ::LinkRendition::NoRendition, QString(), Ref() ) ) -- { -- } -- -- LinkRendition::LinkRendition( const QRectF &linkArea, ::MediaRendition *rendition, int operation, const QString &script, const Ref &annotationReference ) -- : Link( *new LinkRenditionPrivate( linkArea, rendition, static_cast<enum ::LinkRendition::RenditionOperation>(operation), script, annotationReference ) ) -- { -- } -- -- LinkRendition::~LinkRendition() -- { -- } -- -- Link::LinkType LinkRendition::linkType() const -- { -- return Rendition; -- } -- -- MediaRendition * LinkRendition::rendition() const -- { -- Q_D( const LinkRendition ); -- return d->rendition; -- } -- -- LinkRendition::RenditionAction LinkRendition::action() const -- { -- Q_D( const LinkRendition ); -- return d->action; -- } -- -- QString LinkRendition::script() const -- { -- Q_D( const LinkRendition ); -- return d->script; -- } -- -- bool LinkRendition::isReferencedAnnotation( const ScreenAnnotation *annotation ) const -- { -- Q_D( const LinkRendition ); -- if ( d->annotationReference.num != -1 && d->annotationReference == annotation->d_ptr->pdfObjectReference() ) -- { -- return true; -- } -- -- return false; -- } -- -- // LinkJavaScript -- LinkJavaScript::LinkJavaScript( const QRectF &linkArea, const QString &js ) -- : Link( *new LinkJavaScriptPrivate( linkArea ) ) -- { -- Q_D( LinkJavaScript ); -- d->js = js; -- } -- -- LinkJavaScript::~LinkJavaScript() -- { -- } -- -- Link::LinkType LinkJavaScript::linkType() const -- { -- return JavaScript; -- } -- -- QString LinkJavaScript::script() const -- { -- Q_D( const LinkJavaScript ); -- return d->js; -- } -- -- // LinkMovie -- LinkMovie::LinkMovie( const QRectF &linkArea, Operation operation, const QString &annotationTitle, const Ref &annotationReference ) -- : Link( *new LinkMoviePrivate( linkArea, operation, annotationTitle, annotationReference ) ) -- { -- } -- -- LinkMovie::~LinkMovie() -- { -- } -- -- Link::LinkType LinkMovie::linkType() const -- { -- return Movie; -- } -- -- LinkMovie::Operation LinkMovie::operation() const -- { -- Q_D( const LinkMovie ); -- return d->operation; -- } -- -- bool LinkMovie::isReferencedAnnotation( const MovieAnnotation *annotation ) const -- { -- Q_D( const LinkMovie ); -- if ( d->annotationReference.num != -1 && d->annotationReference == annotation->d_ptr->pdfObjectReference() ) -- { -- return true; -- } -- else if ( !d->annotationTitle.isNull() ) -- { -- return ( annotation->movieTitle() == d->annotationTitle ); -- } -- -- return false; -- } -- -- LinkOCGState::LinkOCGState( LinkOCGStatePrivate *ocgp ) -- : Link ( *ocgp ) -- { -- } -- -- LinkOCGState::~LinkOCGState() -- { -- } -- -- Link::LinkType LinkOCGState::linkType() const -- { -- return OCGState; -- } --} -diff --git a/qt4/src/poppler-link.h b/qt4/src/poppler-link.h -deleted file mode 100644 -index 42a8c1fc..00000000 ---- a/qt4/src/poppler-link.h -+++ /dev/null -@@ -1,641 +0,0 @@ --/* poppler-link.h: qt interface to poppler -- * Copyright (C) 2006, 2013, 2016, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2007-2008, 2010, Pino Toscano <pino@kde.org> -- * Copyright (C) 2010, 2012, Guillermo Amaral <gamaral@kdab.com> -- * Copyright (C) 2012, Tobias Koenig <tokoe@kdab.com> -- * Adapting code from -- * Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef _POPPLER_LINK_H_ --#define _POPPLER_LINK_H_ -- --#include <QtCore/QString> --#include <QtCore/QRectF> --#include <QtCore/QSharedDataPointer> --#include "poppler-export.h" -- --struct Ref; --class MediaRendition; --class MovieAnnotation; --class ScreenAnnotation; -- --namespace Poppler { -- --class LinkPrivate; --class LinkGotoPrivate; --class LinkExecutePrivate; --class LinkBrowsePrivate; --class LinkActionPrivate; --class LinkSoundPrivate; --class LinkJavaScriptPrivate; --class LinkMoviePrivate; --class LinkDestinationData; --class LinkDestinationPrivate; --class LinkRenditionPrivate; --class LinkOCGStatePrivate; --class MediaRendition; --class SoundObject; -- --/** -- * \short A destination. -- * -- * The LinkDestination class represent a "destination" (in terms of visual -- * viewport to be displayed) for \link Poppler::LinkGoto GoTo\endlink links, -- * and items in the table of contents (TOC) of a document. -- * -- * Coordinates are in 0..1 range -- */ --class POPPLER_QT4_EXPORT LinkDestination --{ -- public: -- /** -- * The possible kind of "viewport destination". -- */ -- enum Kind -- { -- /** -- * The new viewport is specified in terms of: -- * - possibile new left coordinate (see isChangeLeft() ) -- * - possibile new top coordinate (see isChangeTop() ) -- * - possibile new zoom level (see isChangeZoom() ) -- */ -- destXYZ = 1, -- destFit = 2, -- destFitH = 3, -- destFitV = 4, -- destFitR = 5, -- destFitB = 6, -- destFitBH = 7, -- destFitBV = 8 -- }; -- -- /// \cond PRIVATE -- LinkDestination(const LinkDestinationData &data); -- LinkDestination(const QString &description); -- /// \endcond -- /** -- * Copy constructor. -- */ -- LinkDestination(const LinkDestination &other); -- /** -- * Destructor. -- */ -- ~LinkDestination(); -- -- // Accessors. -- /** -- * The kind of destination. -- */ -- Kind kind() const; -- /** -- * Which page is the target of this destination. -- * -- * \note this number is 1-based, so for a 5 pages document the -- * valid page numbers go from 1 to 5 (both included). -- */ -- int pageNumber() const; -- /** -- * The new left for the viewport of the target page, in case -- * it is specified to be changed (see isChangeLeft() ) -- */ -- double left() const; -- double bottom() const; -- double right() const; -- /** -- * The new top for the viewport of the target page, in case -- * it is specified to be changed (see isChangeTop() ) -- */ -- double top() const; -- double zoom() const; -- /** -- * Whether the left of the viewport on the target page should -- * be changed. -- * -- * \see left() -- */ -- bool isChangeLeft() const; -- /** -- * Whether the top of the viewport on the target page should -- * be changed. -- * -- * \see top() -- */ -- bool isChangeTop() const; -- /** -- * Whether the zoom level should be changed. -- * -- * \see zoom() -- */ -- bool isChangeZoom() const; -- -- /** -- * Return a string repesentation of this destination. -- */ -- QString toString() const; -- -- /** -- * Return the name of this destination. -- * -- * \since 0.12 -- */ -- QString destinationName() const; -- -- /** -- * Assignment operator. -- */ -- LinkDestination& operator=(const LinkDestination &other); -- -- private: -- QSharedDataPointer< LinkDestinationPrivate > d; --}; -- --/** -- * \short Encapsulates data that describes a link. -- * -- * This is the base class for links. It makes mandatory for inherited -- * kind of links to reimplement the linkType() method and return the type of -- * the link described by the reimplemented class. -- */ --class POPPLER_QT4_EXPORT Link --{ -- friend class OptContentModel; -- -- public: -- /// \cond PRIVATE -- Link( const QRectF &linkArea ); -- /// \endcond -- -- /** -- * The possible kinds of link. -- * -- * Inherited classes must return an unique identifier -- */ -- enum LinkType -- { -- None, ///< Unknown link -- Goto, ///< A "Go To" link -- Execute, ///< A command to be executed -- Browse, ///< An URL to be browsed (eg "http://poppler.freedesktop.org") -- Action, ///< A "standard" action to be executed in the viewer -- Sound, ///< A link representing a sound to be played -- Movie, ///< An action to be executed on a movie -- Rendition, ///< A rendition link \since 0.20 -- JavaScript, ///< A JavaScript code to be interpreted \since 0.10 -- OCGState ///< An Optional Content Group state change \since 0.50 -- }; -- -- /** -- * The type of this link. -- */ -- virtual LinkType linkType() const; -- -- /** -- * Destructor. -- */ -- virtual ~Link(); -- -- /** -- * The area of a Page where the link should be active. -- * -- * \note this can be a null rect, in this case the link represents -- * a general action. The area is given in 0..1 range -- */ -- QRectF linkArea() const; -- -- protected: -- /// \cond PRIVATE -- Link( LinkPrivate &dd ); -- Q_DECLARE_PRIVATE( Link ) -- LinkPrivate *d_ptr; -- /// \endcond -- -- private: -- Q_DISABLE_COPY( Link ) --}; -- -- --/** -- * \brief Viewport reaching request. -- * -- * With a LinkGoto link, the document requests the specified viewport to be -- * reached (aka, displayed in a viewer). Furthermore, if a file name is specified, -- * then the destination refers to that document (and not to the document the -- * current LinkGoto belongs to). -- */ --class POPPLER_QT4_EXPORT LinkGoto : public Link --{ -- public: -- /** -- * Create a new Goto link. -- * -- * \param linkArea the active area of the link -- * \param extFileName if not empty, the file name to be open -- * \param destination the destination to be reached -- */ -- LinkGoto( const QRectF &linkArea, QString extFileName, const LinkDestination & destination ); -- /** -- * Destructor. -- */ -- ~LinkGoto(); -- -- /** -- * Whether the destination is in an external document -- * (i.e. not the current document) -- */ -- bool isExternal() const; -- // query for goto parameters -- /** -- * The file name of the document the destination() refers to, -- * or an empty string in case it refers to the current document. -- */ -- QString fileName() const; -- /** -- * The destination to reach. -- */ -- LinkDestination destination() const; -- LinkType linkType() const override; -- -- private: -- Q_DECLARE_PRIVATE( LinkGoto ) -- Q_DISABLE_COPY( LinkGoto ) --}; -- --/** -- * \brief Generic execution request. -- * -- * The LinkExecute link represent a "file name" execution request. The result -- * depends on the \link fileName() file name\endlink: -- * - if it is a document, then it is requested to be open -- * - otherwise, it represents an executable to be run with the specified parameters -- */ --class POPPLER_QT4_EXPORT LinkExecute : public Link --{ -- public: -- /** -- * The file name to be executed -- */ -- QString fileName() const; -- /** -- * The parameters for the command. -- */ -- QString parameters() const; -- -- /** -- * Create a new Execute link. -- * -- * \param linkArea the active area of the link -- * \param file the file name to be open, or the program to be execute -- * \param params the parameters for the program to execute -- */ -- LinkExecute( const QRectF &linkArea, const QString & file, const QString & params ); -- /** -- * Destructor. -- */ -- ~LinkExecute(); -- LinkType linkType() const; -- -- private: -- Q_DECLARE_PRIVATE( LinkExecute ) -- Q_DISABLE_COPY( LinkExecute ) --}; -- --/** -- * \brief An URL to browse. -- * -- * The LinkBrowse link holds a URL (eg 'http://poppler.freedesktop.org', -- * 'mailto:john@some.org', etc) to be open. -- * -- * The format of the URL is specified by RFC 2396 (http://www.ietf.org/rfc/rfc2396.txt) -- */ --class POPPLER_QT4_EXPORT LinkBrowse : public Link --{ -- public: -- /** -- * The URL to open -- */ -- QString url() const; -- -- /** -- * Create a new browse link. -- * -- * \param linkArea the active area of the link -- * \param url the URL to be open -- */ -- LinkBrowse( const QRectF &linkArea, const QString &url ); -- /** -- * Destructor. -- */ -- ~LinkBrowse(); -- LinkType linkType() const; -- -- private: -- Q_DECLARE_PRIVATE( LinkBrowse ) -- Q_DISABLE_COPY( LinkBrowse ) --}; -- --/** -- * \brief "Standard" action request. -- * -- * The LinkAction class represents a link that request a "standard" action -- * to be performed by the viewer on the displayed document. -- */ --class POPPLER_QT4_EXPORT LinkAction : public Link --{ -- public: -- /** -- * The possible types of actions -- */ -- enum ActionType { PageFirst = 1, -- PagePrev = 2, -- PageNext = 3, -- PageLast = 4, -- HistoryBack = 5, -- HistoryForward = 6, -- Quit = 7, -- Presentation = 8, -- EndPresentation = 9, -- Find = 10, -- GoToPage = 11, -- Close = 12, -- Print = 13 ///< \since 0.16 -- }; -- -- /** -- * The action of the current LinkAction -- */ -- ActionType actionType() const; -- -- /** -- * Create a new Action link, that executes a specified action -- * on the document. -- * -- * \param linkArea the active area of the link -- * \param actionType which action should be executed -- */ -- LinkAction( const QRectF &linkArea, ActionType actionType ); -- /** -- * Destructor. -- */ -- ~LinkAction(); -- LinkType linkType() const; -- -- private: -- Q_DECLARE_PRIVATE( LinkAction ) -- Q_DISABLE_COPY( LinkAction ) --}; -- --/** -- * Sound: a sound to be played. -- * -- * \since 0.6 -- */ --class POPPLER_QT4_EXPORT LinkSound : public Link --{ -- public: -- // create a Link_Sound -- LinkSound( const QRectF &linkArea, double volume, bool sync, bool repeat, bool mix, SoundObject *sound ); -- /** -- * Destructor. -- */ -- virtual ~LinkSound(); -- -- LinkType linkType() const; -- -- /** -- * The volume to be used when playing the sound. -- * -- * The volume is in the range [ -1, 1 ], where: -- * - a negative number: no volume (mute) -- * - 1: full volume -- */ -- double volume() const; -- /** -- * Whether the playback of the sound should be synchronous -- * (thus blocking, waiting for the end of the sound playback). -- */ -- bool synchronous() const; -- /** -- * Whether the sound should be played continuously (that is, -- * started again when it ends) -- */ -- bool repeat() const; -- /** -- * Whether the playback of this sound can be mixed with -- * playbacks with other sounds of the same document. -- * -- * \note When false, any other playback must be stopped before -- * playing the sound. -- */ -- bool mix() const; -- /** -- * The sound object to be played -- */ -- SoundObject *sound() const; -- -- private: -- Q_DECLARE_PRIVATE( LinkSound ) -- Q_DISABLE_COPY( LinkSound ) --}; -- --/** -- * Rendition: Rendition link. -- * -- * \since 0.20 -- */ --class POPPLER_QT4_EXPORT LinkRendition : public Link --{ -- public: -- /** -- * Describes the possible rendition actions. -- * -- * \since 0.22 -- */ -- enum RenditionAction { -- NoRendition, -- PlayRendition, -- StopRendition, -- PauseRendition, -- ResumeRendition -- }; -- -- /** -- * Create a new rendition link. -- * -- * \param linkArea the active area of the link -- * \param rendition the media rendition object. Ownership is taken -- * -- * \deprecated Use the constructor that takes all parameter instead -- */ -- Q_DECL_DEPRECATED LinkRendition( const QRectF &linkArea, ::MediaRendition *rendition ); -- -- /** -- * Create a new rendition link. -- * -- * \param linkArea the active area of the link -- * \param rendition the media rendition object. Ownership is taken -- * \param operation the numeric operation (action) (@see ::LinkRendition::RenditionOperation) -- * \param script the java script code -- * \param annotationReference the object reference of the screen annotation associated with this rendition action -- * \since 0.22 -- */ -- LinkRendition( const QRectF &linkArea, ::MediaRendition *rendition, int operation, const QString &script, const Ref &annotationReference ); -- -- /** -- * Destructor. -- */ -- virtual ~LinkRendition(); -- -- LinkType linkType() const; -- -- /** -- * Returns the media rendition object if the redition provides one, @c 0 otherwise -- */ -- MediaRendition *rendition() const; -- -- /** -- * Returns the action that should be executed if a rendition object is provided. -- * -- * \since 0.22 -- */ -- RenditionAction action() const; -- -- /** -- * The JS code that shall be executed or an empty string. -- * -- * \since 0.22 -- */ -- QString script() const; -- -- /** -- * Returns whether the given @p annotation is the referenced screen annotation for this rendition @p link. -- * -- * \since 0.22 -- */ -- bool isReferencedAnnotation( const ScreenAnnotation *annotation ) const; -- -- private: -- Q_DECLARE_PRIVATE( LinkRendition ) -- Q_DISABLE_COPY( LinkRendition ) --}; -- --/** -- * JavaScript: a JavaScript code to be interpreted. -- * -- * \since 0.10 -- */ --class POPPLER_QT4_EXPORT LinkJavaScript : public Link --{ -- public: -- /** -- * Create a new JavaScript link. -- * -- * \param linkArea the active area of the link -- * \param js the JS code to be interpreted -- */ -- LinkJavaScript( const QRectF &linkArea, const QString &js ); -- /** -- * Destructor. -- */ -- virtual ~LinkJavaScript(); -- -- LinkType linkType() const; -- -- /** -- * The JS code -- */ -- QString script() const; -- -- private: -- Q_DECLARE_PRIVATE( LinkJavaScript ) -- Q_DISABLE_COPY( LinkJavaScript ) --}; -- --/** -- * Movie: a movie to be played. -- * -- * \since 0.20 -- */ --class POPPLER_QT4_EXPORT LinkMovie : public Link --{ -- public: -- /** -- * Describes the operation to be performed on the movie. -- */ -- enum Operation { Play, -- Stop, -- Pause, -- Resume -- }; -- -- /** -- * Create a new Movie link. -- * -- * \param linkArea the active area of the link -- * \param operation the operation to be performed on the movie -- * \param annotationTitle the title of the movie annotation identifying the movie to be played -- * \param annotationReference the object reference of the movie annotation identifying the movie to be played -- * -- * Note: This constructor is supposed to be used by Poppler::Page only. -- */ -- LinkMovie( const QRectF &linkArea, Operation operation, const QString &annotationTitle, const Ref &annotationReference ); -- /** -- * Destructor. -- */ -- ~LinkMovie(); -- LinkType linkType() const; -- /** -- * Returns the operation to be performed on the movie. -- */ -- Operation operation() const; -- /** -- * Returns whether the given @p annotation is the referenced movie annotation for this movie @p link. -- */ -- bool isReferencedAnnotation( const MovieAnnotation *annotation ) const; -- -- private: -- Q_DECLARE_PRIVATE( LinkMovie ) -- Q_DISABLE_COPY( LinkMovie ) --}; -- --/** -- * OCGState: an optional content group state change. -- * -- * \since 0.50 -- */ --class POPPLER_QT4_EXPORT LinkOCGState : public Link --{ -- public: -- /** -- * Create a new OCGState link. This is only used by Poppler::Page. -- */ -- LinkOCGState( LinkOCGStatePrivate *ocgp ); -- /** -- * Destructor. -- */ -- ~LinkOCGState(); -- -- LinkType linkType() const; -- -- private: -- Q_DECLARE_PRIVATE( LinkOCGState ) -- Q_DISABLE_COPY( LinkOCGState ) --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-media.cc b/qt4/src/poppler-media.cc -deleted file mode 100644 -index f385f02e..00000000 ---- a/qt4/src/poppler-media.cc -+++ /dev/null -@@ -1,168 +0,0 @@ --/* poppler-media.cc: qt interface to poppler -- * Copyright (C) 2012 Guillermo A. Amaral B. <gamaral@kde.org> -- * Copyright (C) 2013 Albert Astals Cid <aacid@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-media.h" -- --#include "Rendition.h" -- --#include "poppler-private.h" -- --#include <QtCore/QBuffer> -- --#define BUFFER_MAX 4096 -- --namespace Poppler --{ -- --class MediaRenditionPrivate --{ --public: -- -- MediaRenditionPrivate(::MediaRendition *rendition) -- : rendition(rendition) -- { -- } -- -- ~MediaRenditionPrivate() -- { -- delete rendition; -- } -- -- ::MediaRendition *rendition; --}; -- --MediaRendition::MediaRendition(::MediaRendition *rendition) -- : d_ptr(new MediaRenditionPrivate(rendition)) --{ --} -- --MediaRendition::~MediaRendition() --{ -- delete d_ptr; --} -- --bool --MediaRendition::isValid() const --{ -- Q_D( const MediaRendition ); -- return d->rendition && d->rendition->isOk(); --} -- --QString --MediaRendition::contentType() const --{ -- Q_ASSERT(isValid() && "Invalid media rendition."); -- Q_D( const MediaRendition ); -- return UnicodeParsedString(d->rendition->getContentType()); --} -- --QString --MediaRendition::fileName() const --{ -- Q_ASSERT(isValid() && "Invalid media rendition."); -- Q_D( const MediaRendition ); -- return UnicodeParsedString(d->rendition->getFileName()); --} -- --bool --MediaRendition::isEmbedded() const --{ -- Q_ASSERT(isValid() && "Invalid media rendition."); -- Q_D( const MediaRendition ); -- return d->rendition->getIsEmbedded(); --} -- --QByteArray --MediaRendition::data() const --{ -- Q_ASSERT(isValid() && "Invalid media rendition."); -- Q_D( const MediaRendition ); -- -- Stream *s = d->rendition->getEmbbededStream(); -- if (!s) -- return QByteArray(); -- -- QBuffer buffer; -- Guchar data[BUFFER_MAX]; -- int bread; -- -- buffer.open(QIODevice::WriteOnly); -- s->reset(); -- while ((bread = s->doGetChars(BUFFER_MAX, data)) != 0) -- buffer.write(reinterpret_cast<const char *>(data), bread); -- buffer.close(); -- -- return buffer.data(); --} -- --bool --MediaRendition::autoPlay() const --{ -- Q_D( const MediaRendition ); -- if (d->rendition->getBEParameters()) { -- return d->rendition->getBEParameters()->autoPlay; -- } else if (d->rendition->getMHParameters()) { -- return d->rendition->getMHParameters()->autoPlay; -- } else qDebug("No BE or MH parameters to reference!"); -- return false; --} -- --bool --MediaRendition::showControls() const --{ -- Q_D( const MediaRendition ); -- if (d->rendition->getBEParameters()) { -- return d->rendition->getBEParameters()->showControls; -- } else if (d->rendition->getMHParameters()) { -- return d->rendition->getMHParameters()->showControls; -- } else qDebug("No BE or MH parameters to reference!"); -- return false; --} -- --float --MediaRendition::repeatCount() const --{ -- Q_D( const MediaRendition ); -- if (d->rendition->getBEParameters()) { -- return d->rendition->getBEParameters()->repeatCount; -- } else if (d->rendition->getMHParameters()) { -- return d->rendition->getMHParameters()->repeatCount; -- } else qDebug("No BE or MH parameters to reference!"); -- return 1.f; --} -- --QSize --MediaRendition::size() const --{ -- Q_D( const MediaRendition ); -- MediaParameters *mp = 0; -- -- if (d->rendition->getBEParameters()) -- mp = d->rendition->getBEParameters(); -- else if (d->rendition->getMHParameters()) -- mp = d->rendition->getMHParameters(); -- else qDebug("No BE or MH parameters to reference!"); -- -- if (mp) -- return QSize(mp->windowParams.width, mp->windowParams.height); -- return QSize(); --} -- --} -- -diff --git a/qt4/src/poppler-media.h b/qt4/src/poppler-media.h -deleted file mode 100644 -index 34e5c361..00000000 ---- a/qt4/src/poppler-media.h -+++ /dev/null -@@ -1,100 +0,0 @@ --/* poppler-media.h: qt interface to poppler -- * Copyright (C) 2012 Guillermo A. Amaral B. <gamaral@kde.org> -- * Copyright (C) 2012, 2013 Albert Astals Cid <aacid@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef __POPPLER_MEDIARENDITION_H__ --#define __POPPLER_MEDIARENDITION_H__ -- --#include "poppler-export.h" -- --#include <QtCore/QSize> --#include <QtCore/QString> -- --class MediaRendition; --class QIODevice; -- --namespace Poppler --{ -- class MediaRenditionPrivate; -- -- /** -- Qt wrapper for MediaRendition. -- -- \since 0.20 -- */ -- class POPPLER_QT4_EXPORT MediaRendition { -- public: -- /** -- Constructs a MediaRendition. Takes ownership of the passed rendition -- */ -- MediaRendition(::MediaRendition *rendition); -- ~MediaRendition(); -- -- /** -- Check if wrapper is holding a valid rendition object. -- */ -- bool isValid() const; -- -- /** -- Returns content type. -- */ -- QString contentType() const; -- -- /** -- Returns file name. -- */ -- QString fileName() const; -- -- /** -- Returns true if media is embedded. -- */ -- bool isEmbedded() const; -- -- /** -- Returns data buffer. -- */ -- QByteArray data() const; -- -- /** -- Convenience accessor for auto-play parameter. -- */ -- bool autoPlay() const; -- -- /** -- Convenience accessor for show controls parameter. -- */ -- bool showControls() const; -- -- /** -- Convenience accessor for repeat count parameter. -- */ -- float repeatCount() const; -- -- /** -- Convenience accessor for size parameter. -- */ -- QSize size() const; -- -- private: -- Q_DECLARE_PRIVATE( MediaRendition ) -- MediaRenditionPrivate *d_ptr; -- Q_DISABLE_COPY( MediaRendition ) -- }; --} -- --#endif /* __POPPLER_MEDIARENDITION_H__ */ -diff --git a/qt4/src/poppler-movie.cc b/qt4/src/poppler-movie.cc -deleted file mode 100644 -index a64847c0..00000000 ---- a/qt4/src/poppler-movie.cc -+++ /dev/null -@@ -1,110 +0,0 @@ --/* poppler-sound.cc: qt interface to poppler -- * Copyright (C) 2008, 2010, Pino Toscano <pino@kde.org> -- * Copyright (C) 2008, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2010, Carlos Garcia Campos <carlosgc@gnome.org> -- * Copyright (C) 2012, Tobias Koenig <tobias.koenig@kdab.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" -- --#include "Object.h" --#include "Annot.h" --#include "Movie.h" -- --#include <QtGui/QImage> -- --namespace Poppler --{ -- --class MovieData --{ --public: -- MovieData() -- : m_movieObj( 0 ) -- { -- } -- -- ~MovieData() -- { -- delete m_movieObj; -- } -- -- Movie *m_movieObj; -- QSize m_size; -- int m_rotation; -- QImage m_posterImage; -- MovieObject::PlayMode m_playMode : 3; -- bool m_showControls : 1; --}; -- --MovieObject::MovieObject( AnnotMovie *ann ) --{ -- m_movieData = new MovieData(); -- m_movieData->m_movieObj = ann->getMovie()->copy(); -- //TODO: copy poster image -- -- MovieActivationParameters *mp = m_movieData->m_movieObj->getActivationParameters(); -- int width, height; -- m_movieData->m_movieObj->getFloatingWindowSize(&width, &height); -- m_movieData->m_size = QSize(width, height); -- m_movieData->m_rotation = m_movieData->m_movieObj->getRotationAngle(); -- m_movieData->m_showControls = mp->showControls; -- m_movieData->m_playMode = (MovieObject::PlayMode)mp->repeatMode; --} -- --MovieObject::~MovieObject() --{ -- delete m_movieData; --} -- --QString MovieObject::url() const --{ -- GooString * goo = m_movieData->m_movieObj->getFileName(); -- return goo ? QString( goo->getCString() ) : QString(); --} -- --QSize MovieObject::size() const --{ -- return m_movieData->m_size; --} -- --int MovieObject::rotation() const --{ -- return m_movieData->m_rotation; --} -- --bool MovieObject::showControls() const --{ -- return m_movieData->m_showControls; --} -- --MovieObject::PlayMode MovieObject::playMode() const --{ -- return m_movieData->m_playMode; --} -- --bool MovieObject::showPosterImage() const --{ -- return (m_movieData->m_movieObj->getShowPoster() == gTrue); --} -- --QImage MovieObject::posterImage() const --{ -- return m_movieData->m_posterImage; --} -- --} -diff --git a/qt4/src/poppler-optcontent-private.h b/qt4/src/poppler-optcontent-private.h -deleted file mode 100644 -index b5e52999..00000000 ---- a/qt4/src/poppler-optcontent-private.h -+++ /dev/null -@@ -1,124 +0,0 @@ --/* poppler-optcontent-private.h: qt interface to poppler -- * -- * Copyright (C) 2007, Brad Hards <bradh@kde.org> -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2016, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2017, Hubert Figuière <hub@figuiere.net> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef POPPLER_OPTCONTENT_PRIVATE_H --#define POPPLER_OPTCONTENT_PRIVATE_H -- --#include <QtCore/QMap> --#include <QtCore/QSet> --#include <QtCore/QString> -- --class Array; --class OCGs; --class OptionalContentGroup; -- --class QModelIndex; -- --namespace Poppler --{ -- class OptContentItem; -- class OptContentModel; -- class OptContentModelPrivate; -- -- class RadioButtonGroup -- { -- public: -- RadioButtonGroup( OptContentModelPrivate *ocModel, Array *rbarray); -- ~RadioButtonGroup(); -- QSet<OptContentItem *> setItemOn( OptContentItem *itemToSetOn ); -- -- private: -- QList<OptContentItem*> itemsInGroup; -- }; -- -- class OptContentItem -- { -- public: -- enum ItemState { On, Off, HeadingOnly }; -- -- OptContentItem( OptionalContentGroup *group ); -- OptContentItem( const QString &label ); -- OptContentItem(); -- ~OptContentItem(); -- -- QString name() const { return m_name; } -- ItemState state() const { return m_stateBackup; } -- void setState(ItemState state, bool obeyRadioGroups, QSet<OptContentItem *> &changedItems); -- -- QList<OptContentItem*> childList() { return m_children; } -- -- void setParent( OptContentItem* parent) { m_parent = parent; } -- OptContentItem* parent() { return m_parent; } -- -- void addChild( OptContentItem *child ); -- -- void appendRBGroup( RadioButtonGroup *rbgroup ); -- -- bool isEnabled() const { return m_enabled; } -- -- QSet<OptContentItem*> recurseListChildren(bool includeMe = false) const; -- -- private: -- OptionalContentGroup *m_group; -- QString m_name; -- ItemState m_state; // true for ON, false for OFF -- ItemState m_stateBackup; -- QList<OptContentItem*> m_children; -- OptContentItem *m_parent; -- QList<RadioButtonGroup*> m_rbGroups; -- bool m_enabled; -- }; -- -- class OptContentModelPrivate -- { -- public: -- OptContentModelPrivate( OptContentModel *qq, OCGs *optContent ); -- ~OptContentModelPrivate(); -- -- void parseRBGroupsArray( Array *rBGroupArray ); -- OptContentItem *nodeFromIndex(const QModelIndex &index, bool canBeNull = false) const; -- QModelIndex indexFromItem(OptContentItem *node, int column) const; -- -- /** -- Get the OptContentItem corresponding to a given reference value. -- -- \param ref the reference number (e.g. from Object.getRefNum()) to look up -- -- \return the matching optional content item, or null if the reference wasn't found -- */ -- OptContentItem *itemFromRef( const QString &ref ) const; -- void setRootNode(OptContentItem *node); -- -- OptContentModel *q; -- -- QMap<QString, OptContentItem*> m_optContentItems; -- QList<OptContentItem*> m_headerOptContentItems; -- QList<RadioButtonGroup*> m_rbgroups; -- OptContentItem *m_rootNode; -- -- private: -- void addChild( OptContentItem *parent, OptContentItem *child); -- void parseOrderArray( OptContentItem *parentNode, Array *orderArray ); -- }; --} -- --#endif -diff --git a/qt4/src/poppler-optcontent.cc b/qt4/src/poppler-optcontent.cc -deleted file mode 100644 -index 0e7b5345..00000000 ---- a/qt4/src/poppler-optcontent.cc -+++ /dev/null -@@ -1,456 +0,0 @@ --/* poppler-optcontent.cc: qt interface to poppler -- * -- * Copyright (C) 2007, Brad Hards <bradh@kde.org> -- * Copyright (C) 2008, 2014, Pino Toscano <pino@kde.org> -- * Copyright (C) 2008, Carlos Garcia Campos <carlosgc@gnome.org> -- * Copyright (C) 2015-2017, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2017, Hubert Figuière <hub@figuiere.net> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-optcontent.h" -- --#include "poppler-optcontent-private.h" -- --#include "poppler-private.h" --#include "poppler-link-private.h" -- --#include <QtCore/QDebug> --#include <QtCore/QtAlgorithms> -- --#include "poppler/OptionalContent.h" --#include "poppler/Link.h" -- --namespace Poppler --{ -- -- RadioButtonGroup::RadioButtonGroup( OptContentModelPrivate *ocModel, Array *rbarray ) -- { -- itemsInGroup.reserve( rbarray->getLength() ); -- for (int i = 0; i < rbarray->getLength(); ++i) { -- Object ref = rbarray->getNF( i ); -- if ( ! ref.isRef() ) { -- qDebug() << "expected ref, but got:" << ref.getType(); -- } -- OptContentItem *item = ocModel->itemFromRef( QString::number(ref.getRefNum() ) ); -- itemsInGroup.append( item ); -- } -- for (int i = 0; i < itemsInGroup.size(); ++i) { -- OptContentItem *item = itemsInGroup.at(i); -- item->appendRBGroup( this ); -- } -- } -- -- RadioButtonGroup::~RadioButtonGroup() -- { -- } -- -- QSet<OptContentItem *> RadioButtonGroup::setItemOn( OptContentItem *itemToSetOn ) -- { -- QSet<OptContentItem *> changedItems; -- for (int i = 0; i < itemsInGroup.size(); ++i) { -- OptContentItem *thisItem = itemsInGroup.at(i); -- if (thisItem != itemToSetOn) { -- QSet<OptContentItem *> newChangedItems; -- thisItem->setState(OptContentItem::Off, false /*obeyRadioGroups*/, newChangedItems); -- changedItems += newChangedItems; -- } -- } -- return changedItems; -- } -- -- -- -- OptContentItem::OptContentItem( OptionalContentGroup *group ) -- { -- m_group = group; -- m_parent = 0; -- m_name = UnicodeParsedString( group->getName() ); -- if ( group->getState() == OptionalContentGroup::On ) { -- m_state = OptContentItem::On; -- } else { -- m_state = OptContentItem::Off; -- } -- m_stateBackup = m_state; -- m_enabled = true; -- } -- -- OptContentItem::OptContentItem( const QString &label ) -- { -- m_parent = 0; -- m_name = label; -- m_group = 0; -- m_state = OptContentItem::HeadingOnly; -- m_stateBackup = m_state; -- m_enabled = true; -- } -- -- OptContentItem::OptContentItem() : -- m_parent( 0 ), m_enabled(true) -- { -- } -- -- OptContentItem::~OptContentItem() -- { -- } -- -- void OptContentItem::appendRBGroup( RadioButtonGroup *rbgroup ) -- { -- m_rbGroups.append( rbgroup ); -- } -- -- -- void OptContentItem::setState(ItemState state, bool obeyRadioGroups, QSet<OptContentItem *> &changedItems) -- { -- if (state == m_state) -- return; -- -- m_state = state; -- m_stateBackup = m_state; -- changedItems.insert(this); -- QSet<OptContentItem *> empty; -- Q_FOREACH (OptContentItem *child, m_children) { -- ItemState oldState = child->m_stateBackup; -- child->setState(state == OptContentItem::On ? child->m_stateBackup : OptContentItem::Off, true /*obeyRadioGroups*/, empty); -- child->m_enabled = state == OptContentItem::On; -- child->m_stateBackup = oldState; -- } -- if (!m_group || !obeyRadioGroups) { -- return; -- } -- if ( state == OptContentItem::On ) { -- m_group->setState( OptionalContentGroup::On ); -- for (int i = 0; i < m_rbGroups.size(); ++i) { -- RadioButtonGroup *rbgroup = m_rbGroups.at(i); -- changedItems += rbgroup->setItemOn( this ); -- } -- } else if ( state == OptContentItem::Off ) { -- m_group->setState( OptionalContentGroup::Off ); -- } -- } -- -- void OptContentItem::addChild( OptContentItem *child ) -- { -- m_children += child; -- child->setParent( this ); -- } -- -- QSet<OptContentItem*> OptContentItem::recurseListChildren(bool includeMe) const -- { -- QSet<OptContentItem*> ret; -- if (includeMe) { -- ret.insert(const_cast<OptContentItem*>(this)); -- } -- Q_FOREACH (OptContentItem *child, m_children) { -- ret += child->recurseListChildren(true); -- } -- return ret; -- } -- -- OptContentModelPrivate::OptContentModelPrivate( OptContentModel *qq, OCGs *optContent ) -- : q(qq) -- { -- m_rootNode = new OptContentItem(); -- GooList *ocgs = optContent->getOCGs(); -- -- for (int i = 0; i < ocgs->getLength(); ++i) { -- OptionalContentGroup *ocg = static_cast<OptionalContentGroup*>(ocgs->get(i)); -- OptContentItem *node = new OptContentItem( ocg ); -- m_optContentItems.insert( QString::number(ocg->getRef().num), node); -- } -- -- if ( optContent->getOrderArray() == 0 ) { -- // no Order array, so drop them all at the top level -- QMapIterator<QString, OptContentItem*> i(m_optContentItems); -- while ( i.hasNext() ) { -- i.next(); -- addChild( m_rootNode, i.value() ); -- } -- } else { -- parseOrderArray( m_rootNode, optContent->getOrderArray() ); -- } -- -- parseRBGroupsArray( optContent->getRBGroupsArray() ); -- } -- -- OptContentModelPrivate::~OptContentModelPrivate() -- { -- qDeleteAll( m_optContentItems ); -- qDeleteAll( m_rbgroups ); -- qDeleteAll( m_headerOptContentItems ); -- delete m_rootNode; -- } -- -- void OptContentModelPrivate::parseOrderArray( OptContentItem *parentNode, Array *orderArray ) -- { -- OptContentItem *lastItem = parentNode; -- for (int i = 0; i < orderArray->getLength(); ++i) { -- Object orderItem = orderArray->get(i); -- if ( orderItem.isDict() ) { -- Object item = orderArray->getNF(i); -- if (item.isRef() ) { -- OptContentItem *ocItem = m_optContentItems.value(QString::number(item.getRefNum()), 0); -- if (ocItem) { -- addChild( parentNode, ocItem ); -- lastItem = ocItem; -- } else { -- qDebug() << "could not find group for object" << item.getRefNum(); -- } -- } -- } else if ( (orderItem.isArray()) && (orderItem.arrayGetLength() > 0) ) { -- parseOrderArray(lastItem, orderItem.getArray()); -- } else if ( orderItem.isString() ) { -- GooString *label = orderItem.getString(); -- OptContentItem *header = new OptContentItem ( UnicodeParsedString ( label ) ); -- m_headerOptContentItems.append( header ); -- addChild( parentNode, header ); -- parentNode = header; -- lastItem = header; -- } else { -- qDebug() << "something unexpected"; -- } -- } -- } -- -- void OptContentModelPrivate::parseRBGroupsArray( Array *rBGroupArray ) -- { -- if (! rBGroupArray) { -- return; -- } -- // This is an array of array(s) -- for (int i = 0; i < rBGroupArray->getLength(); ++i) { -- Object rbObj = rBGroupArray->get(i); -- if ( ! rbObj.isArray() ) { -- qDebug() << "expected inner array, got:" << rbObj.getType(); -- return; -- } -- Array *rbarray = rbObj.getArray(); -- RadioButtonGroup *rbg = new RadioButtonGroup( this, rbarray ); -- m_rbgroups.append( rbg ); -- } -- } -- -- OptContentModel::OptContentModel( OCGs *optContent, QObject *parent) -- : QAbstractItemModel(parent) -- { -- d = new OptContentModelPrivate( this, optContent ); -- } -- -- OptContentModel::~OptContentModel() -- { -- delete d; -- } -- -- void OptContentModelPrivate::setRootNode(OptContentItem *node) -- { -- delete m_rootNode; -- m_rootNode = node; -- q->reset(); -- } -- -- QModelIndex OptContentModel::index(int row, int column, const QModelIndex &parent) const -- { -- if (row < 0 || column != 0) { -- return QModelIndex(); -- } -- -- OptContentItem *parentNode = d->nodeFromIndex( parent ); -- if (row < parentNode->childList().count()) { -- return createIndex(row, column, parentNode->childList().at(row)); -- } -- return QModelIndex(); -- } -- -- QModelIndex OptContentModel::parent(const QModelIndex &child) const -- { -- OptContentItem *childNode = d->nodeFromIndex( child ); -- if (!childNode) { -- return QModelIndex(); -- } -- return d->indexFromItem(childNode->parent(), child.column()); -- } -- -- QModelIndex OptContentModelPrivate::indexFromItem(OptContentItem *node, int column) const -- { -- if (!node) { -- return QModelIndex(); -- } -- OptContentItem *parentNode = node->parent(); -- if (!parentNode) { -- return QModelIndex(); -- } -- const int row = parentNode->childList().indexOf(node); -- return q->createIndex(row, column, node); -- } -- -- int OptContentModel::rowCount(const QModelIndex &parent) const -- { -- OptContentItem *parentNode = d->nodeFromIndex( parent ); -- if (!parentNode) { -- return 0; -- } else { -- return parentNode->childList().count(); -- } -- } -- -- int OptContentModel::columnCount(const QModelIndex &parent) const -- { -- return 1; -- } -- -- -- QVariant OptContentModel::data(const QModelIndex &index, int role) const -- { -- OptContentItem *node = d->nodeFromIndex(index, true); -- if (!node) { -- return QVariant(); -- } -- -- switch (role) { -- case Qt::DisplayRole: -- return node->name(); -- break; -- case Qt::EditRole: -- if (node->state() == OptContentItem::On) { -- return true; -- } else if (node->state() == OptContentItem::Off) { -- return false; -- } -- break; -- case Qt::CheckStateRole: -- if (node->state() == OptContentItem::On) { -- return Qt::Checked; -- } else if (node->state() == OptContentItem::Off) { -- return Qt::Unchecked; -- } -- break; -- } -- -- return QVariant(); -- } -- -- bool OptContentModel::setData ( const QModelIndex & index, const QVariant & value, int role ) -- { -- OptContentItem *node = d->nodeFromIndex(index, true); -- if (!node) { -- return false; -- } -- -- switch (role) { -- case Qt::CheckStateRole: -- { -- const bool newvalue = value.toBool(); -- QSet<OptContentItem *> changedItems; -- node->setState(newvalue ? OptContentItem::On : OptContentItem::Off, true /*obeyRadioGroups*/, changedItems); -- -- if (!changedItems.isEmpty()) { -- changedItems += node->recurseListChildren(false); -- QModelIndexList indexes; -- Q_FOREACH (OptContentItem *item, changedItems) { -- indexes.append(d->indexFromItem(item, 0)); -- } -- qStableSort(indexes); -- Q_FOREACH (const QModelIndex &changedIndex, indexes) { -- emit dataChanged(changedIndex, changedIndex); -- } -- return true; -- } -- break; -- } -- } -- -- return false; -- } -- -- Qt::ItemFlags OptContentModel::flags ( const QModelIndex & index ) const -- { -- OptContentItem *node = d->nodeFromIndex(index); -- Qt::ItemFlags itemFlags = Qt::ItemIsSelectable | Qt::ItemIsUserCheckable; -- if (node->isEnabled()) { -- itemFlags |= Qt::ItemIsEnabled; -- } -- return itemFlags; -- } -- -- QVariant OptContentModel::headerData( int section, Qt::Orientation orientation, int role ) const -- { -- return QAbstractItemModel::headerData( section, orientation, role ); -- } -- -- void OptContentModel::applyLink( LinkOCGState *link ) -- { -- ::LinkOCGState *popplerLinkOCGState = static_cast<LinkOCGStatePrivate*>(link->d_ptr)->popplerLinkOCGState; -- -- QSet<OptContentItem *> changedItems; -- -- GooList *statesList = popplerLinkOCGState->getStateList(); -- for (int i = 0; i < statesList->getLength(); ++i) { -- ::LinkOCGState::StateList *stateList = (::LinkOCGState::StateList*)statesList->get(i); -- -- GooList *refsList = stateList->list; -- for (int j = 0; j < refsList->getLength(); ++j) { -- Ref *ref = (Ref *)refsList->get(j); -- OptContentItem *item = d->itemFromRef(QString::number(ref->num)); -- -- if (stateList->st == ::LinkOCGState::On) { -- item->setState(OptContentItem::On, popplerLinkOCGState->getPreserveRB(), changedItems); -- } else if (stateList->st == ::LinkOCGState::Off) { -- item->setState(OptContentItem::Off, popplerLinkOCGState->getPreserveRB(), changedItems); -- } else { -- OptContentItem::ItemState newState = item->state() == OptContentItem::On ? OptContentItem::Off : OptContentItem::On; -- item->setState(newState, popplerLinkOCGState->getPreserveRB(), changedItems); -- } -- } -- } -- -- if (!changedItems.isEmpty()) { -- QSet<OptContentItem *> aux; -- Q_FOREACH (OptContentItem *item, aux) { -- changedItems += item->recurseListChildren(false); -- } -- -- QModelIndexList indexes; -- Q_FOREACH (OptContentItem *item, changedItems) { -- indexes.append(d->indexFromItem(item, 0)); -- } -- qStableSort(indexes); -- Q_FOREACH (const QModelIndex &changedIndex, indexes) { -- emit dataChanged(changedIndex, changedIndex); -- } -- } -- } -- -- void OptContentModelPrivate::addChild( OptContentItem *parent, OptContentItem *child ) -- { -- parent->addChild( child ); -- } -- -- OptContentItem* OptContentModelPrivate::itemFromRef( const QString &ref ) const -- { -- return m_optContentItems.value(ref, 0); -- } -- -- OptContentItem* OptContentModelPrivate::nodeFromIndex(const QModelIndex &index, bool canBeNull) const -- { -- if (index.isValid()) { -- return static_cast<OptContentItem *>(index.internalPointer()); -- } else { -- return canBeNull ? 0 : m_rootNode; -- } -- } --} -- --#include "poppler-optcontent.moc" -diff --git a/qt4/src/poppler-optcontent.h b/qt4/src/poppler-optcontent.h -deleted file mode 100644 -index bf00a88d..00000000 ---- a/qt4/src/poppler-optcontent.h -+++ /dev/null -@@ -1,84 +0,0 @@ --/* poppler-optcontent.h: qt interface to poppler -- * -- * Copyright (C) 2007, Brad Hards <bradh@kde.org> -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2016, Albert Astals Cid <aacid@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef POPPLER_OPTCONTENT_H --#define POPPLER_OPTCONTENT_H -- --#include <QtCore/QAbstractListModel> -- --#include "poppler-export.h" --#include "poppler-link.h" -- --class OCGs; -- --namespace Poppler --{ -- class Document; -- class OptContentModelPrivate; -- -- /** -- * \brief Model for optional content -- * -- * OptContentModel is an item model representing the optional content items -- * that can be found in PDF documents. -- * -- * The model offers a mostly read-only display of the data, allowing to -- * enable/disable some contents setting the Qt::CheckStateRole data role. -- * -- * \since 0.8 -- */ -- class POPPLER_QT4_EXPORT OptContentModel : public QAbstractItemModel -- { -- friend class Document; -- -- Q_OBJECT -- -- public: -- virtual ~OptContentModel(); -- -- QModelIndex index(int row, int column, const QModelIndex &parent) const; -- QModelIndex parent(const QModelIndex &child) const; -- -- int rowCount(const QModelIndex &parent = QModelIndex()) const; -- int columnCount(const QModelIndex &parent) const; -- -- QVariant data(const QModelIndex &index, int role) const; -- virtual bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ); -- -- Qt::ItemFlags flags ( const QModelIndex & index ) const; -- -- virtual QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; -- -- /** -- * Applies the Optional Content Changes specified by that link. -- * \since 0.50 -- */ -- void applyLink( LinkOCGState *link ); -- -- private: -- OptContentModel( OCGs *optContent, QObject *parent = 0); -- -- friend class OptContentModelPrivate; -- OptContentModelPrivate *d; -- }; --} -- --#endif -diff --git a/qt4/src/poppler-page-private.h b/qt4/src/poppler-page-private.h -deleted file mode 100644 -index 1cb63e9f..00000000 ---- a/qt4/src/poppler-page-private.h -+++ /dev/null -@@ -1,57 +0,0 @@ --/* poppler-page.cc: qt interface to poppler -- * Copyright (C) 2005, Net Integration Technologies, Inc. -- * Copyright (C) 2007, 2012, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2015 Adam Reichold <adamreichold@myopera.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef _POPPLER_PAGE_PRIVATE_H_ --#define _POPPLER_PAGE_PRIVATE_H_ -- --#include "CharTypes.h" -- --class QRectF; -- --class LinkAction; --class Page; --class TextPage; -- --namespace Poppler --{ -- --class DocumentData; --class PageTransition; -- --class PageData { --public: -- Link* convertLinkActionToLink(::LinkAction * a, const QRectF &linkArea); -- -- DocumentData *parentDoc; -- ::Page *page; -- int index; -- PageTransition *transition; -- -- static Link* convertLinkActionToLink(::LinkAction * a, DocumentData *parentDoc, const QRectF &linkArea); -- -- TextPage *prepareTextSearch(const QString &text, Page::Rotation rotate, QVector<Unicode> *u); -- GBool performSingleTextSearch(TextPage* textPage, QVector<Unicode> &u, double &sLeft, double &sTop, double &sRight, double &sBottom, Page::SearchDirection direction, GBool sCase, GBool sWords); -- QList<QRectF> performMultipleTextSearch(TextPage* textPage, QVector<Unicode> &u, GBool sCase, GBool sWords); --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-page-transition-private.h b/qt4/src/poppler-page-transition-private.h -deleted file mode 100644 -index 63febb09..00000000 ---- a/qt4/src/poppler-page-transition-private.h -+++ /dev/null -@@ -1,28 +0,0 @@ --/* -- * Copyright (C) 2005, Albert Astals Cid -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --class Object; -- --namespace Poppler { -- --class PageTransitionParams { -- public: -- Object *dictObj; --}; -- --} -diff --git a/qt4/src/poppler-page-transition.cc b/qt4/src/poppler-page-transition.cc -deleted file mode 100644 -index 4fa39edd..00000000 ---- a/qt4/src/poppler-page-transition.cc -+++ /dev/null -@@ -1,101 +0,0 @@ --/* PageTransition.cc -- * Copyright (C) 2005, Net Integration Technologies, Inc. -- * Copyright (C) 2015, Arseniy Lartsev <arseniy@alumni.chalmers.se> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "PageTransition.h" --#include "poppler-page-transition.h" --#include "poppler-page-transition-private.h" -- --namespace Poppler { -- --class PageTransitionData --{ -- public: -- PageTransitionData(Object *trans) -- { -- pt = new ::PageTransition(trans); -- } -- -- PageTransitionData(const PageTransitionData &ptd) -- { -- pt = new ::PageTransition(*ptd.pt); -- } -- -- ~PageTransitionData() -- { -- delete pt; -- } -- -- ::PageTransition *pt; --}; -- --PageTransition::PageTransition(const PageTransitionParams ¶ms) --{ -- data = new PageTransitionData(params.dictObj); --} -- --PageTransition::PageTransition(const PageTransition &pt) --{ -- data = new PageTransitionData(*pt.data); --} -- --PageTransition::~PageTransition() --{ -- delete data; --} -- --PageTransition::Type PageTransition::type() const --{ -- return (Poppler::PageTransition::Type)data->pt->getType(); --} -- --int PageTransition::duration() const --{ -- return data->pt->getDuration(); --} -- --double PageTransition::durationReal() const --{ -- return data->pt->getDuration(); --} -- --PageTransition::Alignment PageTransition::alignment() const --{ -- return (Poppler::PageTransition::Alignment)data->pt->getAlignment(); --} -- --PageTransition::Direction PageTransition::direction() const --{ -- return (Poppler::PageTransition::Direction)data->pt->getDirection(); --} -- --int PageTransition::angle() const --{ -- return data->pt->getAngle(); --} -- --double PageTransition::scale() const --{ -- return data->pt->getScale(); --} --bool PageTransition::isRectangular() const --{ -- return data->pt->isRectangular(); --} -- --} -diff --git a/qt4/src/poppler-page-transition.h b/qt4/src/poppler-page-transition.h -deleted file mode 100644 -index e92adbd8..00000000 ---- a/qt4/src/poppler-page-transition.h -+++ /dev/null -@@ -1,158 +0,0 @@ --/* PageTransition.h -- * Copyright (C) 2005, Net Integration Technologies, Inc. -- * Copyright (C) 2005, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2015, Arseniy Lartsev <arseniy@alumni.chalmers.se> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef __PAGETRANSITION_X_H__ --#define __PAGETRANSITION_X_H__ -- --#include "poppler-export.h" -- --#include <QtCore/qglobal.h> -- --namespace Poppler { -- --class PageTransitionParams; --class PageTransitionData; -- --/** -- \brief Describes how a PDF file viewer shall perform the transition -- from one page to another -- -- In PDF files there is a way to specify if the viewer shall use -- certain effects to perform the transition from one page to -- another. This feature can be used, e.g., in a PDF-based beamer -- presentation. -- -- This utility class represents the transition effect, and can be -- used to extract the information from a PDF object. --*/ -- -- --class POPPLER_QT4_EXPORT PageTransition { -- public: -- -- /** \brief transition effect that shall be used -- */ -- // if changed remember to keep in sync with PageTransition.h enum -- enum Type { -- Replace = 0, -- Split, -- Blinds, -- Box, -- Wipe, -- Dissolve, -- Glitter, -- Fly, -- Push, -- Cover, -- Uncover, -- Fade -- }; -- -- /** \brief alignment of the transition effect that shall be used -- */ -- // if changed remember to keep in sync with PageTransition.h enum -- enum Alignment { -- Horizontal = 0, -- Vertical -- }; -- -- /** \brief direction of the transition effect that shall be used -- */ -- // if changed remember to keep in sync with PageTransition.h enum -- enum Direction { -- Inward = 0, -- Outward -- }; -- -- /** \brief Construct a new PageTransition object from a page dictionary. -- -- Users of the library will rarely need to construct a -- PageTransition object themselves. Instead, the method -- Poppler::Page::transition() can be used to find out if a certain -- transition effect is specified. -- -- @warning In case or error, this method will print an error message to stderr, -- and construct a default object. -- -- @param params an object whose dictionary will be read and -- parsed. This must be a valid object, whose dictionaries are -- accessed by the constructor. The object is only accessed by this -- constructor, and may be deleted after the constructor returns. -- */ -- PageTransition(const PageTransitionParams ¶ms); -- -- /** \brief copy constructor */ -- PageTransition(const PageTransition &pt); -- -- /** -- Destructor -- */ -- ~PageTransition(); -- -- /** -- \brief Get type of the transition. -- */ -- Type type() const; -- -- /** -- \brief Get duration of the transition in seconds as integer -- -- \deprecated This function is left for backward compatibility, use durationReal() instead. -- */ -- Q_DECL_DEPRECATED int duration() const; -- -- /** -- \brief Get duration of the transition in seconds -- */ -- double durationReal() const; -- -- /** -- \brief Get dimension in which the transition effect occurs. -- */ -- Alignment alignment() const; -- -- /** -- \brief Get direction of motion of the transition effect. -- */ -- Direction direction() const; -- -- /** -- \brief Get direction in which the transition effect moves. -- */ -- int angle() const; -- -- /** -- \brief Get starting or ending scale. -- */ -- double scale() const; -- -- /** -- \brief Returns true if the area to be flown is rectangular and -- opaque. -- */ -- bool isRectangular() const; -- -- private: -- PageTransitionData *data; --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-page.cc b/qt4/src/poppler-page.cc -deleted file mode 100644 -index ffe6e99c..00000000 ---- a/qt4/src/poppler-page.cc -+++ /dev/null -@@ -1,810 +0,0 @@ --/* poppler-page.cc: qt interface to poppler -- * Copyright (C) 2005, Net Integration Technologies, Inc. -- * Copyright (C) 2005, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2005-2017, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2005, Stefan Kebekus <stefan.kebekus@math.uni-koeln.de> -- * Copyright (C) 2006-2011, Pino Toscano <pino@kde.org> -- * Copyright (C) 2008 Carlos Garcia Campos <carlosgc@gnome.org> -- * Copyright (C) 2009 Shawn Rutledge <shawn.t.rutledge@gmail.com> -- * Copyright (C) 2010, 2012, Guillermo Amaral <gamaral@kdab.com> -- * Copyright (C) 2010 Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> -- * Copyright (C) 2010 Matthias Fauconneau <matthias.fauconneau@gmail.com> -- * Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -- * Copyright (C) 2012 Tobias Koenig <tokoe@kdab.com> -- * Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> -- * Copyright (C) 2012, 2015 Adam Reichold <adamreichold@myopera.com> -- * Copyright (C) 2012, 2013 Thomas Freitag <Thomas.Freitag@alfa.de> -- * Copyright (C) 2015 William Bader <williambader@hotmail.com> -- * Copyright (C) 2016 Arseniy Lartsev <arseniy@alumni.chalmers.se> -- * Copyright (C) 2017 Adrian Johnson <ajohnson@redneon.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include <poppler-qt4.h> -- --#include <QtCore/QHash> --#include <QtCore/QMap> --#include <QtCore/QVarLengthArray> --#include <QtGui/QImage> --#include <QtGui/QPainter> -- --#include <config.h> --#include <PDFDoc.h> --#include <Catalog.h> --#include <Form.h> --#include <ErrorCodes.h> --#include <TextOutputDev.h> --#include <Annot.h> --#include <Link.h> --#include <ArthurOutputDev.h> --#include <Rendition.h> --#if defined(HAVE_SPLASH) --#include <SplashOutputDev.h> --#include <splash/SplashBitmap.h> --#endif -- --#include "poppler-private.h" --#include "poppler-page-transition-private.h" --#include "poppler-page-private.h" --#include "poppler-link-extractor-private.h" --#include "poppler-link-private.h" --#include "poppler-annotation-private.h" --#include "poppler-form.h" --#include "poppler-media.h" -- --namespace Poppler { -- --Link* PageData::convertLinkActionToLink(::LinkAction * a, const QRectF &linkArea) --{ -- return convertLinkActionToLink(a, parentDoc, linkArea); --} -- --Link* PageData::convertLinkActionToLink(::LinkAction * a, DocumentData *parentDoc, const QRectF &linkArea) --{ -- if ( !a ) -- return NULL; -- -- Link * popplerLink = NULL; -- switch ( a->getKind() ) -- { -- case actionGoTo: -- { -- LinkGoTo * g = (LinkGoTo *) a; -- const LinkDestinationData ldd( g->getDest(), g->getNamedDest(), parentDoc, false ); -- // create link: no ext file, namedDest, object pointer -- popplerLink = new LinkGoto( linkArea, QString::null, LinkDestination( ldd ) ); -- } -- break; -- -- case actionGoToR: -- { -- LinkGoToR * g = (LinkGoToR *) a; -- // copy link file -- const QString fileName = UnicodeParsedString( g->getFileName() ); -- const LinkDestinationData ldd( g->getDest(), g->getNamedDest(), parentDoc, !fileName.isEmpty() ); -- // ceate link: fileName, namedDest, object pointer -- popplerLink = new LinkGoto( linkArea, fileName, LinkDestination( ldd ) ); -- } -- break; -- -- case actionLaunch: -- { -- LinkLaunch * e = (LinkLaunch *)a; -- GooString * p = e->getParams(); -- popplerLink = new LinkExecute( linkArea, e->getFileName()->getCString(), p ? p->getCString() : 0 ); -- } -- break; -- -- case actionNamed: -- { -- const char * name = ((LinkNamed *)a)->getName()->getCString(); -- if ( !strcmp( name, "NextPage" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::PageNext ); -- else if ( !strcmp( name, "PrevPage" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::PagePrev ); -- else if ( !strcmp( name, "FirstPage" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::PageFirst ); -- else if ( !strcmp( name, "LastPage" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::PageLast ); -- else if ( !strcmp( name, "GoBack" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::HistoryBack ); -- else if ( !strcmp( name, "GoForward" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::HistoryForward ); -- else if ( !strcmp( name, "Quit" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::Quit ); -- else if ( !strcmp( name, "GoToPage" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::GoToPage ); -- else if ( !strcmp( name, "Find" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::Find ); -- else if ( !strcmp( name, "FullScreen" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::Presentation ); -- else if ( !strcmp( name, "Print" ) ) -- popplerLink = new LinkAction( linkArea, LinkAction::Print ); -- else if ( !strcmp( name, "Close" ) ) -- { -- // acroread closes the document always, doesnt care whether -- // its presentation mode or not -- // popplerLink = new LinkAction( linkArea, LinkAction::EndPresentation ); -- popplerLink = new LinkAction( linkArea, LinkAction::Close ); -- } -- else -- { -- // TODO -- } -- } -- break; -- -- case actionURI: -- { -- popplerLink = new LinkBrowse( linkArea, ((LinkURI *)a)->getURI()->getCString() ); -- } -- break; -- -- case actionSound: -- { -- ::LinkSound *ls = (::LinkSound *)a; -- popplerLink = new LinkSound( linkArea, ls->getVolume(), ls->getSynchronous(), ls->getRepeat(), ls->getMix(), new SoundObject( ls->getSound() ) ); -- } -- break; -- -- case actionJavaScript: -- { -- ::LinkJavaScript *ljs = (::LinkJavaScript *)a; -- popplerLink = new LinkJavaScript( linkArea, UnicodeParsedString(ljs->getScript()) ); -- } -- break; -- -- case actionMovie: -- { -- ::LinkMovie *lm = (::LinkMovie *)a; -- -- const QString title = ( lm->hasAnnotTitle() ? UnicodeParsedString( lm->getAnnotTitle() ) : QString() ); -- -- Ref reference; -- reference.num = reference.gen = -1; -- if ( lm->hasAnnotRef() ) -- reference = *lm->getAnnotRef(); -- -- LinkMovie::Operation operation = LinkMovie::Play; -- switch ( lm->getOperation() ) -- { -- case ::LinkMovie::operationTypePlay: -- operation = LinkMovie::Play; -- break; -- case ::LinkMovie::operationTypePause: -- operation = LinkMovie::Pause; -- break; -- case ::LinkMovie::operationTypeResume: -- operation = LinkMovie::Resume; -- break; -- case ::LinkMovie::operationTypeStop: -- operation = LinkMovie::Stop; -- break; -- }; -- -- popplerLink = new LinkMovie( linkArea, operation, title, reference ); -- } -- break; -- -- case actionRendition: -- { -- ::LinkRendition *lrn = (::LinkRendition *)a; -- -- Ref reference; -- reference.num = reference.gen = -1; -- if ( lrn->hasScreenAnnot() ) -- reference = lrn->getScreenAnnot(); -- -- popplerLink = new LinkRendition( linkArea, lrn->getMedia() ? lrn->getMedia()->copy() : NULL, lrn->getOperation(), UnicodeParsedString( lrn->getScript() ), reference ); -- } -- break; -- -- case actionOCGState: -- { -- ::LinkOCGState *plocg = (::LinkOCGState *)a; -- -- LinkOCGStatePrivate *locgp = new LinkOCGStatePrivate( linkArea, plocg ); -- popplerLink = new LinkOCGState( locgp ); -- } -- -- case actionUnknown: -- break; -- } -- -- return popplerLink; --} -- --inline TextPage *PageData::prepareTextSearch(const QString &text, Page::Rotation rotate, QVector<Unicode> *u) --{ -- const QChar * str = text.unicode(); -- const int len = text.length(); -- u->resize(len); -- for (int i = 0; i < len; ++i) (*u)[i] = str[i].unicode(); -- -- const int rotation = (int)rotate * 90; -- -- // fetch ourselves a textpage -- TextOutputDev td(NULL, gTrue, 0, gFalse, gFalse); -- parentDoc->doc->displayPage( &td, index + 1, 72, 72, rotation, false, true, false, -- NULL, NULL, NULL, NULL, gTrue); -- TextPage *textPage=td.takeText(); -- -- return textPage; --} -- --inline GBool PageData::performSingleTextSearch(TextPage* textPage, QVector<Unicode> &u, double &sLeft, double &sTop, double &sRight, double &sBottom, Page::SearchDirection direction, GBool sCase, GBool sWords) --{ -- if (direction == Page::FromTop) -- return textPage->findText( u.data(), u.size(), -- gTrue, gTrue, gFalse, gFalse, sCase, gFalse, sWords, &sLeft, &sTop, &sRight, &sBottom ); -- else if ( direction == Page::NextResult ) -- return textPage->findText( u.data(), u.size(), -- gFalse, gTrue, gTrue, gFalse, sCase, gFalse, sWords, &sLeft, &sTop, &sRight, &sBottom ); -- else if ( direction == Page::PreviousResult ) -- return textPage->findText( u.data(), u.size(), -- gFalse, gTrue, gTrue, gFalse, sCase, gTrue, sWords, &sLeft, &sTop, &sRight, &sBottom ); -- -- return gFalse; --} -- --inline QList<QRectF> PageData::performMultipleTextSearch(TextPage* textPage, QVector<Unicode> &u, GBool sCase, GBool sWords) --{ -- QList<QRectF> results; -- double sLeft = 0.0, sTop = 0.0, sRight = 0.0, sBottom = 0.0; -- -- while(textPage->findText( u.data(), u.size(), -- gFalse, gTrue, gTrue, gFalse, sCase, gFalse, sWords, &sLeft, &sTop, &sRight, &sBottom )) -- { -- QRectF result; -- -- result.setLeft(sLeft); -- result.setTop(sTop); -- result.setRight(sRight); -- result.setBottom(sBottom); -- -- results.append(result); -- } -- -- return results; --} -- --Page::Page(DocumentData *doc, int index) { -- m_page = new PageData(); -- m_page->index = index; -- m_page->parentDoc = doc; -- m_page->page = doc->doc->getPage(m_page->index + 1); -- m_page->transition = 0; --} -- --Page::~Page() --{ -- delete m_page->transition; -- delete m_page; --} -- --QImage Page::renderToImage(double xres, double yres, int x, int y, int w, int h, Rotation rotate) const --{ -- int rotation = (int)rotate * 90; -- QImage img; -- switch(m_page->parentDoc->m_backend) -- { -- case Poppler::Document::SplashBackend: -- { --#if defined(HAVE_SPLASH) -- SplashColor bgColor; -- GBool overprintPreview = gFalse; --#ifdef SPLASH_CMYK -- overprintPreview = m_page->parentDoc->m_hints & Document::OverprintPreview ? gTrue : gFalse; -- if (overprintPreview) -- { -- Guchar c, m, y, k; -- -- c = 255 - m_page->parentDoc->paperColor.blue(); -- m = 255 - m_page->parentDoc->paperColor.red(); -- y = 255 - m_page->parentDoc->paperColor.green(); -- k = c; -- if (m < k) { -- k = m; -- } -- if (y < k) { -- k = y; -- } -- bgColor[0] = c - k; -- bgColor[1] = m - k; -- bgColor[2] = y - k; -- bgColor[3] = k; -- for (int i = 4; i < SPOT_NCOMPS + 4; i++) { -- bgColor[i] = 0; -- } -- } -- else --#endif -- { -- bgColor[0] = m_page->parentDoc->paperColor.blue(); -- bgColor[1] = m_page->parentDoc->paperColor.green(); -- bgColor[2] = m_page->parentDoc->paperColor.red(); -- } -- -- SplashColorMode colorMode = splashModeXBGR8; --#ifdef SPLASH_CMYK -- if (overprintPreview) colorMode = splashModeDeviceN8; --#endif -- -- SplashThinLineMode thinLineMode = splashThinLineDefault; -- if (m_page->parentDoc->m_hints & Document::ThinLineShape) thinLineMode = splashThinLineShape; -- if (m_page->parentDoc->m_hints & Document::ThinLineSolid) thinLineMode = splashThinLineSolid; -- -- const bool ignorePaperColor = m_page->parentDoc->m_hints & Document::IgnorePaperColor; -- -- SplashOutputDev splash_output( -- colorMode, 4, -- gFalse, -- ignorePaperColor ? NULL : bgColor, -- gTrue, -- thinLineMode, -- overprintPreview); -- -- splash_output.setFontAntialias(m_page->parentDoc->m_hints & Document::TextAntialiasing ? gTrue : gFalse); -- splash_output.setVectorAntialias(m_page->parentDoc->m_hints & Document::Antialiasing ? gTrue : gFalse); -- splash_output.setFreeTypeHinting(m_page->parentDoc->m_hints & Document::TextHinting ? gTrue : gFalse, -- m_page->parentDoc->m_hints & Document::TextSlightHinting ? gTrue : gFalse); -- -- splash_output.startDoc(m_page->parentDoc->doc); -- -- m_page->parentDoc->doc->displayPageSlice(&splash_output, m_page->index + 1, xres, yres, -- rotation, false, true, false, x, y, w, h, -- NULL, NULL, NULL, NULL, gTrue); -- -- SplashBitmap *bitmap = splash_output.getBitmap(); -- -- const int bw = bitmap->getWidth(); -- const int bh = bitmap->getHeight(); -- const int brs = bitmap->getRowSize(); -- -- // If we use DeviceN8, convert to XBGR8. -- // If requested, also transfer Splash's internal alpha channel. -- const SplashBitmap::ConversionMode mode = ignorePaperColor -- ? SplashBitmap::conversionAlphaPremultiplied -- : SplashBitmap::conversionOpaque; -- -- const QImage::Format format = ignorePaperColor -- ? QImage::Format_ARGB32_Premultiplied -- : QImage::Format_RGB32; -- -- if (bitmap->convertToXBGR(mode)) { -- SplashColorPtr data = bitmap->getDataPtr(); -- -- if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { -- // Convert byte order from RGBX to XBGR. -- for (int i = 0; i < bh; ++i) { -- for (int j = 0; j < bw; ++j) { -- SplashColorPtr pixel = &data[i * brs + j]; -- -- qSwap(pixel[0], pixel[3]); -- qSwap(pixel[1], pixel[2]); -- } -- } -- } -- -- // Construct a Qt image sharing the raw bitmap data. -- img = QImage(data, bw, bh, brs, format).copy(); -- } --#endif -- break; -- } -- case Poppler::Document::ArthurBackend: -- { -- QSize size = pageSize(); -- QImage tmpimg(w == -1 ? qRound( size.width() * xres / 72.0 ) : w, h == -1 ? qRound( size.height() * yres / 72.0 ) : h, QImage::Format_ARGB32); -- -- QPainter painter(&tmpimg); -- renderToPainter(&painter, xres, yres, x, y, w, h, rotate, DontSaveAndRestore); -- painter.end(); -- img = tmpimg; -- break; -- } -- } -- -- return img; --} -- --bool Page::renderToPainter(QPainter* painter, double xres, double yres, int x, int y, int w, int h, Rotation rotate, PainterFlags flags) const --{ -- if (!painter) -- return false; -- -- switch(m_page->parentDoc->m_backend) -- { -- case Poppler::Document::SplashBackend: -- return false; -- case Poppler::Document::ArthurBackend: -- { -- const bool savePainter = !(flags & DontSaveAndRestore); -- if (savePainter) -- painter->save(); -- if (m_page->parentDoc->m_hints & Document::Antialiasing) -- painter->setRenderHint(QPainter::Antialiasing); -- if (m_page->parentDoc->m_hints & Document::TextAntialiasing) -- painter->setRenderHint(QPainter::TextAntialiasing); -- painter->translate(x == -1 ? 0 : -x, y == -1 ? 0 : -y); -- ArthurOutputDev arthur_output(painter); -- arthur_output.startDoc(m_page->parentDoc->doc->getXRef()); -- m_page->parentDoc->doc->displayPageSlice(&arthur_output, -- m_page->index + 1, -- xres, -- yres, -- (int)rotate * 90, -- false, -- true, -- false, -- x, -- y, -- w, -- h); -- if (savePainter) -- painter->restore(); -- return true; -- } -- } -- return false; --} -- --QImage Page::thumbnail() const --{ -- unsigned char* data = 0; -- int w = 0; -- int h = 0; -- int rowstride = 0; -- GBool r = m_page->page->loadThumb(&data, &w, &h, &rowstride); -- QImage ret; -- if (r) -- { -- // first construct a temporary image with the data got, -- // then force a copy of it so we can free the raw thumbnail data -- ret = QImage(data, w, h, rowstride, QImage::Format_RGB888).copy(); -- gfree(data); -- } -- return ret; --} -- --QString Page::text(const QRectF &r, TextLayout textLayout) const --{ -- TextOutputDev *output_dev; -- GooString *s; -- PDFRectangle *rect; -- QString result; -- -- const GBool rawOrder = textLayout == RawOrderLayout; -- output_dev = new TextOutputDev(0, gFalse, 0, rawOrder, gFalse); -- m_page->parentDoc->doc->displayPageSlice(output_dev, m_page->index + 1, 72, 72, -- 0, false, true, false, -1, -1, -1, -1, -- NULL, NULL, NULL, NULL, gTrue); -- if (r.isNull()) -- { -- rect = m_page->page->getCropBox(); -- s = output_dev->getText(rect->x1, rect->y1, rect->x2, rect->y2); -- } -- else -- { -- s = output_dev->getText(r.left(), r.top(), r.right(), r.bottom()); -- } -- -- result = QString::fromUtf8(s->getCString()); -- -- delete output_dev; -- delete s; -- return result; --} -- --QString Page::text(const QRectF &r) const --{ -- return text(r, PhysicalLayout); --} -- --bool Page::search(const QString &text, double &sLeft, double &sTop, double &sRight, double &sBottom, SearchDirection direction, SearchMode caseSensitive, Rotation rotate) const --{ -- const GBool sCase = caseSensitive == Page::CaseSensitive ? gTrue : gFalse; -- -- QVector<Unicode> u; -- TextPage *textPage = m_page->prepareTextSearch(text, rotate, &u); -- -- const bool found = m_page->performSingleTextSearch(textPage, u, sLeft, sTop, sRight, sBottom, direction, sCase, gFalse); -- -- textPage->decRefCnt(); -- -- return found; --} -- --bool Page::search(const QString &text, double &sLeft, double &sTop, double &sRight, double &sBottom, SearchDirection direction, SearchFlags flags, Rotation rotate) const --{ -- const GBool sCase = flags.testFlag(IgnoreCase) ? gFalse : gTrue; -- const GBool sWords = flags.testFlag(WholeWords) ? gTrue : gFalse; -- -- QVector<Unicode> u; -- TextPage *textPage = m_page->prepareTextSearch(text, rotate, &u); -- -- const bool found = m_page->performSingleTextSearch(textPage, u, sLeft, sTop, sRight, sBottom, direction, sCase, sWords); -- -- textPage->decRefCnt(); -- -- return found; --} -- --bool Page::search(const QString &text, QRectF &rect, SearchDirection direction, SearchMode caseSensitive, Rotation rotate) const --{ -- double sLeft, sTop, sRight, sBottom; -- sLeft = rect.left(); -- sTop = rect.top(); -- sRight = rect.right(); -- sBottom = rect.bottom(); -- -- bool found = search(text, sLeft, sTop, sRight, sBottom, direction, caseSensitive, rotate); -- -- rect.setLeft( sLeft ); -- rect.setTop( sTop ); -- rect.setRight( sRight ); -- rect.setBottom( sBottom ); -- -- return found; --} -- --QList<QRectF> Page::search(const QString &text, SearchMode caseSensitive, Rotation rotate) const --{ -- const GBool sCase = caseSensitive == Page::CaseSensitive ? gTrue : gFalse; -- -- QVector<Unicode> u; -- TextPage *textPage = m_page->prepareTextSearch(text, rotate, &u); -- -- const QList<QRectF> results = m_page->performMultipleTextSearch(textPage, u, sCase, gFalse); -- -- textPage->decRefCnt(); -- -- return results; --} -- --QList<QRectF> Page::search(const QString &text, SearchFlags flags, Rotation rotate) const --{ -- const GBool sCase = flags.testFlag(IgnoreCase) ? gFalse : gTrue; -- const GBool sWords = flags.testFlag(WholeWords) ? gTrue : gFalse; -- -- QVector<Unicode> u; -- TextPage *textPage = m_page->prepareTextSearch(text, rotate, &u); -- -- const QList<QRectF> results = m_page->performMultipleTextSearch(textPage, u, sCase, sWords); -- -- textPage->decRefCnt(); -- -- return results; --} -- --QList<TextBox*> Page::textList(Rotation rotate) const --{ -- TextOutputDev *output_dev; -- -- QList<TextBox*> output_list; -- -- output_dev = new TextOutputDev(0, gFalse, 0, gFalse, gFalse); -- -- int rotation = (int)rotate * 90; -- -- m_page->parentDoc->doc->displayPageSlice(output_dev, m_page->index + 1, 72, 72, -- rotation, false, false, false, -1, -1, -1, -1, -- NULL, NULL, NULL, NULL, gTrue); -- -- TextWordList *word_list = output_dev->makeWordList(); -- -- if (!word_list) { -- delete output_dev; -- return output_list; -- } -- -- QHash<TextWord *, TextBox*> wordBoxMap; -- -- output_list.reserve(word_list->getLength()); -- for (int i = 0; i < word_list->getLength(); i++) { -- TextWord *word = word_list->get(i); -- GooString *gooWord = word->getText(); -- QString string = QString::fromUtf8(gooWord->getCString()); -- delete gooWord; -- double xMin, yMin, xMax, yMax; -- word->getBBox(&xMin, &yMin, &xMax, &yMax); -- -- TextBox* text_box = new TextBox(string, QRectF(xMin, yMin, xMax-xMin, yMax-yMin)); -- text_box->m_data->hasSpaceAfter = word->hasSpaceAfter() == gTrue; -- text_box->m_data->charBBoxes.reserve(word->getLength()); -- for (int j = 0; j < word->getLength(); ++j) -- { -- word->getCharBBox(j, &xMin, &yMin, &xMax, &yMax); -- text_box->m_data->charBBoxes.append(QRectF(xMin, yMin, xMax-xMin, yMax-yMin)); -- } -- -- wordBoxMap.insert(word, text_box); -- -- output_list.append(text_box); -- } -- -- for (int i = 0; i < word_list->getLength(); i++) { -- TextWord *word = word_list->get(i); -- TextBox* text_box = wordBoxMap.value(word); -- text_box->m_data->nextWord = wordBoxMap.value(word->nextWord()); -- } -- -- delete word_list; -- delete output_dev; -- -- return output_list; --} -- --PageTransition *Page::transition() const --{ -- if (!m_page->transition) { -- PageTransitionParams params; -- Object o = m_page->page->getTrans(); -- params.dictObj = &o; -- if (o.isDict()) m_page->transition = new PageTransition(params); -- } -- return m_page->transition; --} -- --Link *Page::action( PageAction act ) const --{ -- if ( act == Page::Opening || act == Page::Closing ) -- { -- Object o = m_page->page->getActions(); -- if (!o.isDict()) -- { -- return 0; -- } -- Dict *dict = o.getDict(); -- const char *key = act == Page::Opening ? "O" : "C"; -- Object o2 = dict->lookup((char*)key); -- ::LinkAction *lact = ::LinkAction::parseAction(&o2, m_page->parentDoc->doc->getCatalog()->getBaseURI() ); -- Link *popplerLink = NULL; -- if (lact != NULL) -- { -- popplerLink = m_page->convertLinkActionToLink(lact, QRectF()); -- delete lact; -- } -- return popplerLink; -- } -- return 0; --} -- --QSizeF Page::pageSizeF() const --{ -- Page::Orientation orient = orientation(); -- if ( ( Page::Landscape == orient ) || (Page::Seascape == orient ) ) { -- return QSizeF( m_page->page->getCropHeight(), m_page->page->getCropWidth() ); -- } else { -- return QSizeF( m_page->page->getCropWidth(), m_page->page->getCropHeight() ); -- } --} -- --QSize Page::pageSize() const --{ -- return pageSizeF().toSize(); --} -- --Page::Orientation Page::orientation() const --{ -- const int rotation = m_page->page->getRotate(); -- switch (rotation) { -- case 90: -- return Page::Landscape; -- break; -- case 180: -- return Page::UpsideDown; -- break; -- case 270: -- return Page::Seascape; -- break; -- default: -- return Page::Portrait; -- } --} -- --void Page::defaultCTM(double *CTM, double dpiX, double dpiY, int rotate, bool upsideDown) --{ -- m_page->page->getDefaultCTM(CTM, dpiX, dpiY, rotate, gFalse, upsideDown); --} -- --QList<Link*> Page::links() const --{ -- LinkExtractorOutputDev link_dev(m_page); -- m_page->parentDoc->doc->processLinks(&link_dev, m_page->index + 1); -- QList<Link*> popplerLinks = link_dev.links(); -- -- return popplerLinks; --} -- --QList<Annotation*> Page::annotations() const --{ -- return AnnotationPrivate::findAnnotations(m_page->page, m_page->parentDoc, QSet<Annotation::SubType>()); --} -- --QList<Annotation*> Page::annotations(const QSet<Annotation::SubType> &subtypes) const --{ -- return AnnotationPrivate::findAnnotations(m_page->page, m_page->parentDoc, subtypes); --} -- --void Page::addAnnotation( const Annotation *ann ) --{ -- AnnotationPrivate::addAnnotationToPage(m_page->page, m_page->parentDoc, ann); --} -- --void Page::removeAnnotation( const Annotation *ann ) --{ -- AnnotationPrivate::removeAnnotationFromPage(m_page->page, ann); --} -- --QList<FormField*> Page::formFields() const --{ -- QList<FormField*> fields; -- ::Page *p = m_page->page; -- ::FormPageWidgets * form = p->getFormWidgets(); -- int formcount = form->getNumWidgets(); -- for (int i = 0; i < formcount; ++i) -- { -- ::FormWidget *fm = form->getWidget(i); -- FormField * ff = NULL; -- switch (fm->getType()) -- { -- case formButton: -- { -- ff = new FormFieldButton(m_page->parentDoc, p, static_cast<FormWidgetButton*>(fm)); -- } -- break; -- -- case formText: -- { -- ff = new FormFieldText(m_page->parentDoc, p, static_cast<FormWidgetText*>(fm)); -- } -- break; -- -- case formChoice: -- { -- ff = new FormFieldChoice(m_page->parentDoc, p, static_cast<FormWidgetChoice*>(fm)); -- } -- break; -- -- default: ; -- } -- -- if (ff) -- fields.append(ff); -- } -- -- delete form; -- -- return fields; --} -- --double Page::duration() const --{ -- return m_page->page->getDuration(); --} -- --QString Page::label() const --{ -- GooString goo; -- if (!m_page->parentDoc->doc->getCatalog()->indexToLabel(m_page->index, &goo)) -- return QString(); -- -- return UnicodeParsedString(&goo); --} -- -- --} -diff --git a/qt4/src/poppler-pdf-converter.cc b/qt4/src/poppler-pdf-converter.cc -deleted file mode 100644 -index 9699b75b..00000000 ---- a/qt4/src/poppler-pdf-converter.cc -+++ /dev/null -@@ -1,115 +0,0 @@ --/* poppler-pdf-converter.cc: qt4 interface to poppler -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2008, 2009, Albert Astals Cid <aacid@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" -- --#include "poppler-private.h" --#include "poppler-converter-private.h" --#include "poppler-qiodeviceoutstream-private.h" -- --#include <QtCore/QFile> -- --#include <ErrorCodes.h> -- --namespace Poppler { -- --class PDFConverterPrivate : public BaseConverterPrivate --{ -- public: -- PDFConverterPrivate(); -- -- PDFConverter::PDFOptions opts; --}; -- --PDFConverterPrivate::PDFConverterPrivate() -- : BaseConverterPrivate(), opts(0) --{ --} -- -- --PDFConverter::PDFConverter(DocumentData *document) -- : BaseConverter(*new PDFConverterPrivate()) --{ -- Q_D(PDFConverter); -- d->document = document; --} -- --PDFConverter::~PDFConverter() --{ --} -- --void PDFConverter::setPDFOptions(PDFConverter::PDFOptions options) --{ -- Q_D(PDFConverter); -- d->opts = options; --} -- --PDFConverter::PDFOptions PDFConverter::pdfOptions() const --{ -- Q_D(const PDFConverter); -- return d->opts; --} -- --bool PDFConverter::convert() --{ -- Q_D(PDFConverter); -- d->lastError = NoError; -- -- if (d->document->locked) -- { -- d->lastError = FileLockedError; -- return false; -- } -- -- QIODevice *dev = d->openDevice(); -- if (!dev) -- { -- d->lastError = OpenOutputError; -- return false; -- } -- -- bool deleteFile = false; -- if (QFile *file = qobject_cast<QFile*>(dev)) -- deleteFile = !file->exists(); -- -- int errorCode = errNone; -- QIODeviceOutStream stream(dev); -- if (d->opts & WithChanges) -- { -- errorCode = d->document->doc->saveAs(&stream); -- } -- else -- { -- errorCode = d->document->doc->saveWithoutChangesAs(&stream); -- } -- d->closeDevice(); -- if (errorCode != errNone) -- { -- if (deleteFile) -- { -- qobject_cast<QFile*>(dev)->remove(); -- } -- if (errorCode == errOpenFile) d->lastError = OpenOutputError; -- else d->lastError = NotSupportedInputFileError; -- } -- -- return (errorCode == errNone); --} -- --} -diff --git a/qt4/src/poppler-private.cc b/qt4/src/poppler-private.cc -deleted file mode 100644 -index 1338a185..00000000 ---- a/qt4/src/poppler-private.cc -+++ /dev/null -@@ -1,296 +0,0 @@ --/* poppler-private.cc: qt interface to poppler -- * Copyright (C) 2005, Net Integration Technologies, Inc. -- * Copyright (C) 2006, 2011, 2015, 2017 by Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2008, 2010, 2011 by Pino Toscano <pino@kde.org> -- * Copyright (C) 2013 by Thomas Freitag <Thomas.Freitag@alfa.de> -- * Copyright (C) 2013 Adrian Johnson <ajohnson@redneon.com> -- * Copyright (C) 2016 Jakub Alba <jakubalba@gmail.com> -- * Inspired on code by -- * Copyright (C) 2004 by Albert Astals Cid <tsdgeos@terra.es> -- * Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-private.h" -- --#include <QtCore/QByteArray> --#include <QtCore/QDebug> --#include <QtCore/QVariant> -- --#include <Link.h> --#include <Outline.h> --#include <PDFDocEncoding.h> --#include <UnicodeMap.h> -- --namespace Poppler { -- --namespace Debug { -- -- static void qDebugDebugFunction(const QString &message, const QVariant & /*closure*/) -- { -- qDebug() << message; -- } -- -- PopplerDebugFunc debugFunction = qDebugDebugFunction; -- QVariant debugClosure; -- --} -- -- static UnicodeMap *utf8Map = 0; -- -- void setDebugErrorFunction(PopplerDebugFunc function, const QVariant &closure) -- { -- Debug::debugFunction = function ? function : Debug::qDebugDebugFunction; -- Debug::debugClosure = closure; -- } -- -- static void qt4ErrorFunction(void * /*data*/, ErrorCategory /*category*/, Goffset pos, char *msg) -- { -- QString emsg; -- -- if (pos >= 0) -- { -- emsg = QString::fromLatin1("Error (%1): ").arg(pos); -- } -- else -- { -- emsg = QString::fromLatin1("Error: "); -- } -- emsg += QString::fromAscii(msg); -- (*Debug::debugFunction)(emsg, Debug::debugClosure); -- } -- -- QString unicodeToQString(Unicode* u, int len) { -- if (!utf8Map) -- { -- GooString enc("UTF-8"); -- utf8Map = globalParams->getUnicodeMap(&enc); -- utf8Map->incRefCnt(); -- } -- -- // ignore the last character if it is 0x0 -- if ((len > 0) && (u[len - 1] == 0)) -- { -- --len; -- } -- -- GooString convertedStr; -- for (int i = 0; i < len; ++i) -- { -- char buf[8]; -- const int n = utf8Map->mapUnicode(u[i], buf, sizeof(buf)); -- convertedStr.append(buf, n); -- } -- -- return QString::fromUtf8(convertedStr.getCString(), convertedStr.getLength()); -- } -- -- QString UnicodeParsedString(GooString *s1) { -- if ( !s1 || s1->getLength() == 0 ) -- return QString(); -- -- char *cString; -- int stringLength; -- bool deleteCString; -- if ( ( s1->getChar(0) & 0xff ) == 0xfe && ( s1->getLength() > 1 && ( s1->getChar(1) & 0xff ) == 0xff ) ) -- { -- cString = s1->getCString(); -- stringLength = s1->getLength(); -- deleteCString = false; -- } -- else -- { -- cString = pdfDocEncodingToUTF16(s1, &stringLength); -- deleteCString = true; -- } -- -- QString result; -- // i = 2 to skip the unicode marker -- for ( int i = 2; i < stringLength; i += 2 ) -- { -- const Unicode u = ( ( cString[i] & 0xff ) << 8 ) | ( cString[i+1] & 0xff ); -- result += QChar( u ); -- } -- if (deleteCString) -- delete[] cString; -- return result; -- } -- -- GooString *QStringToUnicodeGooString(const QString &s) { -- int len = s.length() * 2 + 2; -- char *cstring = (char *)gmallocn(len, sizeof(char)); -- cstring[0] = (char)0xfe; -- cstring[1] = (char)0xff; -- for (int i = 0; i < s.length(); ++i) -- { -- cstring[2+i*2] = s.at(i).row(); -- cstring[3+i*2] = s.at(i).cell(); -- } -- GooString *ret = new GooString(cstring, len); -- gfree(cstring); -- return ret; -- } -- -- GooString *QStringToGooString(const QString &s) { -- int len = s.length(); -- char *cstring = (char *)gmallocn(s.length(), sizeof(char)); -- for (int i = 0; i < len; ++i) -- cstring[i] = s.at(i).unicode(); -- GooString *ret = new GooString(cstring, len); -- gfree(cstring); -- return ret; -- } -- -- GooString *QDateTimeToUnicodeGooString(const QDateTime &dt) { -- if (!dt.isValid()) { -- return NULL; -- } -- -- return QStringToUnicodeGooString(dt.toUTC().toString("yyyyMMddhhmmss+00'00'")); -- } -- -- static void linkActionToTocItem( ::LinkAction * a, DocumentData * doc, QDomElement * e ) -- { -- if ( !a || !e ) -- return; -- -- switch ( a->getKind() ) -- { -- case actionGoTo: -- { -- // page number is contained/referenced in a LinkGoTo -- LinkGoTo * g = static_cast< LinkGoTo * >( a ); -- LinkDest * destination = g->getDest(); -- if ( !destination && g->getNamedDest() ) -- { -- // no 'destination' but an internal 'named reference'. we could -- // get the destination for the page now, but it's VERY time consuming, -- // so better storing the reference and provide the viewport on demand -- GooString *s = g->getNamedDest(); -- QChar *charArray = new QChar[s->getLength()]; -- for (int i = 0; i < s->getLength(); ++i) charArray[i] = QChar(s->getCString()[i]); -- QString aux(charArray, s->getLength()); -- e->setAttribute( "DestinationName", aux ); -- delete[] charArray; -- } -- else if ( destination && destination->isOk() ) -- { -- LinkDestinationData ldd(destination, NULL, doc, false); -- e->setAttribute( "Destination", LinkDestination(ldd).toString() ); -- } -- break; -- } -- case actionGoToR: -- { -- // page number is contained/referenced in a LinkGoToR -- LinkGoToR * g = static_cast< LinkGoToR * >( a ); -- LinkDest * destination = g->getDest(); -- if ( !destination && g->getNamedDest() ) -- { -- // no 'destination' but an internal 'named reference'. we could -- // get the destination for the page now, but it's VERY time consuming, -- // so better storing the reference and provide the viewport on demand -- GooString *s = g->getNamedDest(); -- QChar *charArray = new QChar[s->getLength()]; -- for (int i = 0; i < s->getLength(); ++i) charArray[i] = QChar(s->getCString()[i]); -- QString aux(charArray, s->getLength()); -- e->setAttribute( "DestinationName", aux ); -- delete[] charArray; -- } -- else if ( destination && destination->isOk() ) -- { -- LinkDestinationData ldd(destination, NULL, doc, g->getFileName() != 0); -- e->setAttribute( "Destination", LinkDestination(ldd).toString() ); -- } -- e->setAttribute( "ExternalFileName", g->getFileName()->getCString() ); -- break; -- } -- case actionURI: -- { -- LinkURI * u = static_cast< LinkURI * >( a ); -- e->setAttribute( "DestinationURI", u->getURI()->getCString() ); -- } -- default: ; -- } -- } -- -- DocumentData::~DocumentData() -- { -- qDeleteAll(m_embeddedFiles); -- delete (OptContentModel *)m_optContentModel; -- delete doc; -- delete m_fontInfoIterator; -- -- count --; -- if ( count == 0 ) -- { -- utf8Map = 0; -- delete globalParams; -- } -- } -- -- void DocumentData::init() -- { -- m_fontInfoIterator = 0; -- m_backend = Document::SplashBackend; -- paperColor = Qt::white; -- m_hints = 0; -- m_optContentModel = 0; -- -- if ( count == 0 ) -- { -- utf8Map = 0; -- globalParams = new GlobalParams(); -- setErrorCallback(qt4ErrorFunction, NULL); -- } -- count ++; -- } -- -- -- void DocumentData::addTocChildren( QDomDocument * docSyn, QDomNode * parent, GooList * items ) -- { -- int numItems = items->getLength(); -- for ( int i = 0; i < numItems; ++i ) -- { -- // iterate over every object in 'items' -- OutlineItem * outlineItem = (OutlineItem *)items->get( i ); -- -- // 1. create element using outlineItem's title as tagName -- QString name; -- Unicode * uniChar = outlineItem->getTitle(); -- int titleLength = outlineItem->getTitleLength(); -- name = unicodeToQString(uniChar, titleLength); -- if ( name.isEmpty() ) -- continue; -- -- QDomElement item = docSyn->createElement( name ); -- parent->appendChild( item ); -- -- // 2. find the page the link refers to -- ::LinkAction * a = outlineItem->getAction(); -- linkActionToTocItem( a, this, &item ); -- -- item.setAttribute( "Open", QVariant( (bool)outlineItem->isOpen() ).toString() ); -- -- // 3. recursively descend over children -- outlineItem->open(); -- GooList * children = outlineItem->getKids(); -- if ( children ) -- addTocChildren( docSyn, &item, children ); -- } -- } -- --} -diff --git a/qt4/src/poppler-private.h b/qt4/src/poppler-private.h -deleted file mode 100644 -index a5ad3f3e..00000000 ---- a/qt4/src/poppler-private.h -+++ /dev/null -@@ -1,241 +0,0 @@ --/* poppler-private.h: qt interface to poppler -- * Copyright (C) 2005, Net Integration Technologies, Inc. -- * Copyright (C) 2005, 2008, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2006-2009, 2011, 2012, 2017 by Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2007-2009, 2011 by Pino Toscano <pino@kde.org> -- * Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> -- * Copyright (C) 2011 Hib Eris <hib@hiberis.nl> -- * Copyright (C) 2012, 2013 Thomas Freitag <Thomas.Freitag@alfa.de> -- * Copyright (C) 2013 Julien Nabet <serval2412@yahoo.fr> -- * Copyright (C) 2016 Jakub Alba <jakubalba@gmail.com> -- * Inspired on code by -- * Copyright (C) 2004 by Albert Astals Cid <tsdgeos@terra.es> -- * Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef _POPPLER_PRIVATE_H_ --#define _POPPLER_PRIVATE_H_ -- --#include <QtCore/QFile> --#include <QtCore/QPointer> --#include <QtCore/QVector> -- --#include <config.h> --#include <GfxState.h> --#include <GlobalParams.h> --#include <PDFDoc.h> --#include <FontInfo.h> --#include <OutputDev.h> --#include <Error.h> --#if defined(HAVE_SPLASH) --#include <SplashOutputDev.h> --#endif -- --#include "poppler-qt4.h" --#include "poppler-embeddedfile-private.h" -- --class LinkDest; --class FormWidget; -- --namespace Poppler { -- -- /* borrowed from kpdf */ -- QString unicodeToQString(Unicode* u, int len); -- -- QString UnicodeParsedString(GooString *s1); -- -- GooString *QStringToUnicodeGooString(const QString &s); -- -- GooString *QStringToGooString(const QString &s); -- -- GooString *QDateTimeToUnicodeGooString(const QDateTime &dt); -- -- void qt4ErrorFunction(int pos, char *msg, va_list args); -- -- class LinkDestinationData -- { -- public: -- LinkDestinationData( LinkDest *l, GooString *nd, Poppler::DocumentData *pdfdoc, bool external ) -- : ld(l), namedDest(nd), doc(pdfdoc), externalDest(external) -- { -- } -- -- LinkDest *ld; -- GooString *namedDest; -- Poppler::DocumentData *doc; -- bool externalDest; -- }; -- -- class DocumentData { -- public: -- DocumentData(const QString &filePath, GooString *ownerPassword, GooString *userPassword) -- { -- init(); -- m_filePath = filePath; -- --#if defined(_WIN32) -- wchar_t *fileName = new WCHAR[filePath.length()]; -- int length = filePath.toWCharArray(fileName); -- doc = new PDFDoc(fileName, length, ownerPassword, userPassword); -- delete[] fileName; --#else -- GooString *fileName = new GooString(QFile::encodeName(filePath)); -- doc = new PDFDoc(fileName, ownerPassword, userPassword); --#endif -- -- delete ownerPassword; -- delete userPassword; -- } -- -- DocumentData(const QByteArray &data, GooString *ownerPassword, GooString *userPassword) -- { -- fileContents = data; -- MemStream *str = new MemStream((char*)fileContents.data(), 0, fileContents.length(), Object(objNull)); -- init(); -- doc = new PDFDoc(str, ownerPassword, userPassword); -- delete ownerPassword; -- delete userPassword; -- } -- -- void init(); -- -- ~DocumentData(); -- -- void addTocChildren( QDomDocument * docSyn, QDomNode * parent, GooList * items ); -- -- void setPaperColor(const QColor &color) -- { -- paperColor = color; -- } -- -- void fillMembers() -- { -- m_fontInfoIterator = new FontIterator(0, this); -- int numEmb = doc->getCatalog()->numEmbeddedFiles(); -- if (!(0 == numEmb)) { -- // we have some embedded documents, build the list -- for (int yalv = 0; yalv < numEmb; ++yalv) { -- FileSpec *fs = doc->getCatalog()->embeddedFile(yalv); -- m_embeddedFiles.append(new EmbeddedFile(*new EmbeddedFileData(fs))); -- } -- } -- } -- -- static Document *checkDocument(DocumentData *doc); -- -- PDFDoc *doc; -- QString m_filePath; -- QByteArray fileContents; -- bool locked; -- FontIterator *m_fontInfoIterator; -- Document::RenderBackend m_backend; -- QList<EmbeddedFile*> m_embeddedFiles; -- QPointer<OptContentModel> m_optContentModel; -- QColor paperColor; -- int m_hints; -- static int count; -- }; -- -- class FontInfoData -- { -- public: -- FontInfoData() -- { -- isEmbedded = false; -- isSubset = false; -- type = FontInfo::unknown; -- } -- -- FontInfoData( const FontInfoData &fid ) -- { -- fontName = fid.fontName; -- fontFile = fid.fontFile; -- isEmbedded = fid.isEmbedded; -- isSubset = fid.isSubset; -- type = fid.type; -- embRef = fid.embRef; -- } -- -- FontInfoData( ::FontInfo* fi ) -- { -- if (fi->getName()) fontName = fi->getName()->getCString(); -- if (fi->getFile()) fontFile = fi->getFile()->getCString(); -- isEmbedded = fi->getEmbedded(); -- isSubset = fi->getSubset(); -- type = (Poppler::FontInfo::Type)fi->getType(); -- embRef = fi->getEmbRef(); -- } -- -- QString fontName; -- QString fontFile; -- bool isEmbedded : 1; -- bool isSubset : 1; -- FontInfo::Type type; -- Ref embRef; -- }; -- -- class FontIteratorData -- { -- public: -- FontIteratorData( int startPage, DocumentData *dd ) -- : fontInfoScanner( dd->doc, startPage ) -- , totalPages( dd->doc->getNumPages() ) -- , currentPage( qMax( startPage, 0 ) - 1 ) -- { -- } -- -- ~FontIteratorData() -- { -- } -- -- FontInfoScanner fontInfoScanner; -- int totalPages; -- int currentPage; -- }; -- -- class TextBoxData -- { -- public: -- TextBoxData() -- : nextWord(0), hasSpaceAfter(false) -- { -- } -- -- QString text; -- QRectF bBox; -- TextBox *nextWord; -- QVector<QRectF> charBBoxes; // the boundingRect of each character -- bool hasSpaceAfter; -- }; -- -- class FormFieldData -- { -- public: -- FormFieldData(DocumentData *_doc, ::Page *p, ::FormWidget *w) : -- doc(_doc), page(p), fm(w) -- { -- } -- -- DocumentData *doc; -- ::Page *page; -- ::FormWidget *fm; -- QRectF box; -- }; -- --} -- --#endif -diff --git a/qt4/src/poppler-ps-converter.cc b/qt4/src/poppler-ps-converter.cc -deleted file mode 100644 -index 4b43d8ec..00000000 ---- a/qt4/src/poppler-ps-converter.cc -+++ /dev/null -@@ -1,280 +0,0 @@ --/* poppler-ps-converter.cc: qt interface to poppler -- * Copyright (C) 2007, 2009, 2010, 2015, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -- * Copyright (C) 2011 Glad Deschrijver <glad.deschrijver@gmail.com> -- * Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it> -- * Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> -- * Copyright (C) 2014 Adrian Johnson <ajohnson@redneon.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" -- --#include "poppler-private.h" --#include "poppler-converter-private.h" -- --#include "PSOutputDev.h" -- --static void outputToQIODevice(void *stream, const char *data, int len) --{ -- static_cast<QIODevice*>(stream)->write(data, len); --} -- --namespace Poppler { -- --class PSConverterPrivate : public BaseConverterPrivate --{ -- public: -- PSConverterPrivate(); -- -- QList<int> pageList; -- QString title; -- double hDPI; -- double vDPI; -- int rotate; -- int paperWidth; -- int paperHeight; -- int marginRight; -- int marginBottom; -- int marginLeft; -- int marginTop; -- PSConverter::PSOptions opts; -- void (* pageConvertedCallback)(int page, void *payload); -- void *pageConvertedPayload; --}; -- --PSConverterPrivate::PSConverterPrivate() -- : BaseConverterPrivate(), -- hDPI(72), vDPI(72), rotate(0), paperWidth(-1), paperHeight(-1), -- marginRight(0), marginBottom(0), marginLeft(0), marginTop(0), -- opts(PSConverter::Printing), pageConvertedCallback(0), -- pageConvertedPayload(0) --{ --} -- -- --PSConverter::PSConverter(DocumentData *document) -- : BaseConverter(*new PSConverterPrivate()) --{ -- Q_D(PSConverter); -- d->document = document; --} -- --PSConverter::~PSConverter() --{ --} -- --void PSConverter::setPageList(const QList<int> &pageList) --{ -- Q_D(PSConverter); -- d->pageList = pageList; --} -- --void PSConverter::setTitle(const QString &title) --{ -- Q_D(PSConverter); -- d->title = title; --} -- --void PSConverter::setHDPI(double hDPI) --{ -- Q_D(PSConverter); -- d->hDPI = hDPI; --} -- --void PSConverter::setVDPI(double vDPI) --{ -- Q_D(PSConverter); -- d->vDPI = vDPI; --} -- --void PSConverter::setRotate(int rotate) --{ -- Q_D(PSConverter); -- d->rotate = rotate; --} -- --void PSConverter::setPaperWidth(int paperWidth) --{ -- Q_D(PSConverter); -- d->paperWidth = paperWidth; --} -- --void PSConverter::setPaperHeight(int paperHeight) --{ -- Q_D(PSConverter); -- d->paperHeight = paperHeight; --} -- --void PSConverter::setRightMargin(int marginRight) --{ -- Q_D(PSConverter); -- d->marginRight = marginRight; --} -- --void PSConverter::setBottomMargin(int marginBottom) --{ -- Q_D(PSConverter); -- d->marginBottom = marginBottom; --} -- --void PSConverter::setLeftMargin(int marginLeft) --{ -- Q_D(PSConverter); -- d->marginLeft = marginLeft; --} -- --void PSConverter::setTopMargin(int marginTop) --{ -- Q_D(PSConverter); -- d->marginTop = marginTop; --} -- --void PSConverter::setStrictMargins(bool strictMargins) --{ -- Q_D(PSConverter); -- if (strictMargins) -- d->opts |= StrictMargins; -- else -- d->opts &= ~StrictMargins; --} -- --void PSConverter::setForceRasterize(bool forceRasterize) --{ -- Q_D(PSConverter); -- if (forceRasterize) -- d->opts |= ForceRasterization; -- else -- d->opts &= ~ForceRasterization; --} -- --void PSConverter::setPSOptions(PSConverter::PSOptions options) --{ -- Q_D(PSConverter); -- d->opts = options; --} -- --PSConverter::PSOptions PSConverter::psOptions() const --{ -- Q_D(const PSConverter); -- return d->opts; --} -- --void PSConverter::setPageConvertedCallback(void (* callback)(int page, void *payload), void *payload) --{ -- Q_D(PSConverter); -- d->pageConvertedCallback = callback; -- d->pageConvertedPayload = payload; --} -- --static GBool annotDisplayDecideCbk(Annot *annot, void *user_data) --{ -- if (annot->getType() == Annot::typeWidget) -- return gTrue; // Never hide forms -- else -- return *(GBool*)user_data; --} -- --bool PSConverter::convert() --{ -- Q_D(PSConverter); -- d->lastError = NoError; -- -- Q_ASSERT(!d->pageList.isEmpty()); -- Q_ASSERT(d->paperWidth != -1); -- Q_ASSERT(d->paperHeight != -1); -- -- if (d->document->locked) -- { -- d->lastError = FileLockedError; -- return false; -- } -- -- QIODevice *dev = d->openDevice(); -- if (!dev) -- { -- d->lastError = OpenOutputError; -- return false; -- } -- -- QByteArray pstitle8Bit = d->title.toLocal8Bit(); -- char* pstitlechar; -- if (!d->title.isEmpty()) pstitlechar = pstitle8Bit.data(); -- else pstitlechar = 0; -- -- std::vector<int> pages; -- foreach(int page, d->pageList) -- { -- pages.push_back(page); -- } -- -- PSOutputDev *psOut = new PSOutputDev(outputToQIODevice, dev, -- pstitlechar, -- d->document->doc, -- pages, -- (d->opts & PrintToEPS) ? psModeEPS : psModePS, -- d->paperWidth, -- d->paperHeight, -- gFalse, -- gFalse, -- d->marginLeft, -- d->marginBottom, -- d->paperWidth - d->marginRight, -- d->paperHeight - d->marginTop, -- (d->opts & ForceRasterization)); -- -- if (d->opts & StrictMargins) -- { -- double xScale = ((double)d->paperWidth - (double)d->marginLeft - (double)d->marginRight) / (double)d->paperWidth; -- double yScale = ((double)d->paperHeight - (double)d->marginBottom - (double)d->marginTop) / (double)d->paperHeight; -- psOut->setScale(xScale, yScale); -- } -- -- if (psOut->isOk()) -- { -- GBool isPrinting = (d->opts & Printing) ? gTrue : gFalse; -- GBool showAnnotations = (d->opts & HideAnnotations) ? gFalse : gTrue; -- foreach(int page, d->pageList) -- { -- d->document->doc->displayPage(psOut, -- page, -- d->hDPI, -- d->vDPI, -- d->rotate, -- gFalse, -- gTrue, -- isPrinting, -- NULL, -- NULL, -- annotDisplayDecideCbk, -- &showAnnotations, gTrue); -- if (d->pageConvertedCallback) -- (*d->pageConvertedCallback)(page, d->pageConvertedPayload); -- } -- delete psOut; -- d->closeDevice(); -- return true; -- } -- else -- { -- delete psOut; -- d->closeDevice(); -- return false; -- } --} -- --} -diff --git a/qt4/src/poppler-qiodeviceoutstream-private.h b/qt4/src/poppler-qiodeviceoutstream-private.h -deleted file mode 100644 -index d0d20073..00000000 ---- a/qt4/src/poppler-qiodeviceoutstream-private.h -+++ /dev/null -@@ -1,47 +0,0 @@ --/* poppler-qiodevicestream-private.h: Qt4 interface to poppler -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2013 Adrian Johnson <ajohnson@redneon.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef POPPLER_QIODEVICESTREAM_PRIVATE_H --#define POPPLER_QIODEVICESTREAM_PRIVATE_H -- --#include "Object.h" --#include "Stream.h" -- --class QIODevice; -- --namespace Poppler { -- --class QIODeviceOutStream : public OutStream --{ -- public: -- QIODeviceOutStream(QIODevice* device); -- virtual ~QIODeviceOutStream(); -- -- virtual void close(); -- virtual Goffset getPos(); -- virtual void put(char c); -- virtual void printf(const char *format, ...); -- -- private: -- QIODevice *m_device; --}; -- --} -- --#endif -diff --git a/qt4/src/poppler-qiodeviceoutstream.cc b/qt4/src/poppler-qiodeviceoutstream.cc -deleted file mode 100644 -index e3e9f895..00000000 ---- a/qt4/src/poppler-qiodeviceoutstream.cc -+++ /dev/null -@@ -1,64 +0,0 @@ --/* poppler-qiodevicestream.cc: Qt4 interface to poppler -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * Copyright (C) 2013 Adrian Johnson <ajohnson@redneon.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qiodeviceoutstream-private.h" -- --#include <QtCore/QIODevice> -- --#include <stdio.h> -- --#define QIODeviceOutStreamBufSize 8192 -- --namespace Poppler { -- --QIODeviceOutStream::QIODeviceOutStream(QIODevice* device) -- : m_device(device) --{ --} -- --QIODeviceOutStream::~QIODeviceOutStream() --{ --} -- --void QIODeviceOutStream::close() --{ --} -- --Goffset QIODeviceOutStream::getPos() --{ -- return m_device->pos(); --} -- --void QIODeviceOutStream::put(char c) --{ -- m_device->putChar(c); --} -- --void QIODeviceOutStream::printf(const char *format, ...) --{ -- va_list ap; -- va_start(ap, format); -- char buf[QIODeviceOutStreamBufSize]; -- size_t bufsize = 0; -- bufsize = qvsnprintf(buf, QIODeviceOutStreamBufSize - 1, format, ap); -- va_end(ap); -- m_device->write(buf, bufsize); --} -- --} -diff --git a/qt4/src/poppler-qt4.h b/qt4/src/poppler-qt4.h -deleted file mode 100644 -index 1b5afb2e..00000000 ---- a/qt4/src/poppler-qt4.h -+++ /dev/null -@@ -1,1990 +0,0 @@ --/* poppler-qt.h: qt interface to poppler -- * Copyright (C) 2005, Net Integration Technologies, Inc. -- * Copyright (C) 2005, 2007, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2005-2012, 2014, 2015, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2005, Stefan Kebekus <stefan.kebekus@math.uni-koeln.de> -- * Copyright (C) 2006-2011, Pino Toscano <pino@kde.org> -- * Copyright (C) 2009 Shawn Rutledge <shawn.t.rutledge@gmail.com> -- * Copyright (C) 2010 Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> -- * Copyright (C) 2010 Matthias Fauconneau <matthias.fauconneau@gmail.com> -- * Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> -- * Copyright (C) 2011 Glad Deschrijver <glad.deschrijver@gmail.com> -- * Copyright (C) 2012, Guillermo A. Amaral B. <gamaral@kde.org> -- * Copyright (C) 2012, Fabio D'Urso <fabiodurso@hotmail.it> -- * Copyright (C) 2012, Tobias Koenig <tobias.koenig@kdab.com> -- * Copyright (C) 2012, 2014, 2015 Adam Reichold <adamreichold@myopera.com> -- * Copyright (C) 2012, 2013 Thomas Freitag <Thomas.Freitag@alfa.de> -- * Copyright (C) 2016 Jakub Alba <jakubalba@gmail.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#ifndef __POPPLER_QT_H__ --#define __POPPLER_QT_H__ -- --#include "poppler-annotation.h" --#include "poppler-link.h" --#include "poppler-optcontent.h" --#include "poppler-page-transition.h" -- --#include <QtCore/QByteArray> --#include <QtCore/QDateTime> --#include <QtCore/QSet> --#include <QtXml/QDomDocument> --#include "poppler-export.h" -- --class EmbFile; --class Sound; --class AnnotMovie; -- --/** -- The %Poppler Qt4 binding. --*/ --namespace Poppler { -- -- class Document; -- class DocumentData; -- -- class PageData; -- -- class FormField; -- -- class TextBoxData; -- -- class PDFConverter; -- class PSConverter; -- -- /** -- Debug/error function. -- -- This function type is used for debugging & error output; -- the first parameter is the actual message, the second is the unaltered -- closure argument which was passed to the setDebugErrorFunction call. -- -- \since 0.16 -- */ -- typedef void (*PopplerDebugFunc)(const QString & /*message*/, const QVariant & /*closure*/); -- -- /** -- Set a new debug/error output function. -- -- If not set, by default error and debug messages will be sent to the -- Qt \p qDebug() function. -- -- \param debugFunction the new debug function -- \param closure user data which will be passes as-is to the debug function -- -- \since 0.16 -- */ -- POPPLER_QT4_EXPORT void setDebugErrorFunction(PopplerDebugFunc debugFunction, const QVariant &closure); -- -- /** -- Describes the physical location of text on a document page -- -- This very simple class describes the physical location of text -- on the page. It consists of -- - a QString that contains the text -- - a QRectF that gives a box that describes where on the page -- the text is found. -- */ -- class POPPLER_QT4_EXPORT TextBox { -- friend class Page; -- public: -- /** -- The default constructor sets the \p text and the rectangle that -- contains the text. Coordinates for the \p bBox are in points = -- 1/72 of an inch. -- */ -- TextBox(const QString& text, const QRectF &bBox); -- /** -- Destructor. -- */ -- ~TextBox(); -- -- /** -- Returns the text of this text box -- */ -- QString text() const; -- -- /** -- Returns the position of the text, in point, i.e., 1/72 of -- an inch -- -- \since 0.8 -- */ -- QRectF boundingBox() const; -- -- /** -- Returns the pointer to the next text box, if there is one. -- -- Otherwise, it returns a null pointer. -- */ -- TextBox *nextWord() const; -- -- /** -- Returns the bounding box of the \p i -th characted of the word. -- */ -- QRectF charBoundingBox(int i) const; -- -- /** -- Returns whether there is a space character after this text box -- */ -- bool hasSpaceAfter() const; -- -- private: -- Q_DISABLE_COPY(TextBox) -- -- TextBoxData *m_data; -- }; -- -- -- class FontInfoData; -- /** -- Container class for information about a font within a PDF -- document -- */ -- class POPPLER_QT4_EXPORT FontInfo { -- friend class Document; -- public: -- /** -- The type of font. -- */ -- enum Type { -- unknown, -- Type1, -- Type1C, -- Type1COT, -- Type3, -- TrueType, -- TrueTypeOT, -- CIDType0, -- CIDType0C, -- CIDType0COT, -- CIDTrueType, -- CIDTrueTypeOT -- }; -- -- /// \cond PRIVATE -- /** -- Create a new font information container. -- */ -- FontInfo(); -- -- /** -- Create a new font information container. -- */ -- FontInfo( const FontInfoData &fid ); -- /// \endcond -- -- /** -- Copy constructor. -- */ -- FontInfo( const FontInfo &fi ); -- -- /** -- Destructor. -- */ -- ~FontInfo(); -- -- /** -- The name of the font. Can be QString::null if the font has no name -- */ -- QString name() const; -- -- /** -- The path of the font file used to represent this font on this system, -- or a null string is the font is embedded -- */ -- QString file() const; -- -- /** -- Whether the font is embedded in the file, or not -- -- \return true if the font is embedded -- */ -- bool isEmbedded() const; -- -- /** -- Whether the font provided is only a subset of the full -- font or not. This only has meaning if the font is embedded. -- -- \return true if the font is only a subset -- */ -- bool isSubset() const; -- -- /** -- The type of font encoding -- -- \return a enumerated value corresponding to the font encoding used -- -- \sa typeName for a string equivalent -- */ -- Type type() const; -- -- /** -- The name of the font encoding used -- -- \note if you are looking for the name of the font (as opposed to the -- encoding format used), you probably want name(). -- -- \sa type for a enumeration version -- */ -- QString typeName() const; -- -- /** -- Standard assignment operator -- */ -- FontInfo& operator=( const FontInfo &fi ); -- -- private: -- FontInfoData *m_data; -- }; -- -- -- class FontIteratorData; -- /** -- Iterator for reading the fonts in a document. -- -- FontIterator provides a Java-style iterator for reading the fonts in a -- document. -- -- You can use it in the following way: -- \code --Poppler::FontIterator* it = doc->newFontIterator(); --while (it->hasNext()) { -- QList<Poppler::FontInfo> fonts = it->next(); -- // do something with the fonts --} --// after doing the job, the iterator must be freed --delete it; -- \endcode -- -- \since 0.12 -- */ -- class POPPLER_QT4_EXPORT FontIterator { -- friend class Document; -- friend class DocumentData; -- public: -- /** -- Destructor. -- */ -- ~FontIterator(); -- -- /** -- Returns the fonts of the current page and then advances the iterator -- to the next page. -- */ -- QList<FontInfo> next(); -- -- /** -- Checks whether there is at least one more page to iterate, ie returns -- false when the iterator is beyond the last page. -- */ -- bool hasNext() const; -- -- /** -- Returns the current page where the iterator is. -- */ -- int currentPage() const; -- -- private: -- Q_DISABLE_COPY( FontIterator ) -- FontIterator( int, DocumentData *dd ); -- -- FontIteratorData *d; -- }; -- -- -- class EmbeddedFileData; -- /** -- Container class for an embedded file with a PDF document -- */ -- class POPPLER_QT4_EXPORT EmbeddedFile { -- friend class DocumentData; -- friend class AnnotationPrivate; -- public: -- /// \cond PRIVATE -- EmbeddedFile(EmbFile *embfile); -- /// \endcond -- -- /** -- Destructor. -- */ -- ~EmbeddedFile(); -- -- /** -- The name associated with the file -- */ -- QString name() const; -- -- /** -- The description associated with the file, if any. -- -- This will return an empty QString if there is no description element -- */ -- QString description() const; -- -- /** -- The size of the file. -- -- This will return < 0 if there is no size element -- */ -- int size() const; -- -- /** -- The modification date for the embedded file, if known. -- */ -- QDateTime modDate() const; -- -- /** -- The creation date for the embedded file, if known. -- */ -- QDateTime createDate() const; -- -- /** -- The MD5 checksum of the file. -- -- This will return an empty QByteArray if there is no checksum element. -- */ -- QByteArray checksum() const; -- -- /** -- The MIME type of the file, if known. -- -- \since 0.8 -- */ -- QString mimeType() const; -- -- /** -- The data as a byte array -- */ -- QByteArray data(); -- -- /** -- Is the embedded file valid? -- -- \since 0.12 -- */ -- bool isValid() const; -- -- /** -- A QDataStream for the actual data? -- */ -- //QDataStream dataStream() const; -- -- private: -- Q_DISABLE_COPY(EmbeddedFile) -- EmbeddedFile(EmbeddedFileData &dd); -- -- EmbeddedFileData *m_embeddedFile; -- }; -- -- -- /** -- \brief A page in a document. -- -- The Page class represents a single page within a PDF document. -- -- You cannot construct a Page directly, but you have to use the Document -- functions that return a new Page out of an index or a label. -- */ -- class POPPLER_QT4_EXPORT Page { -- friend class Document; -- public: -- /** -- Destructor. -- */ -- ~Page(); -- -- /** -- The type of rotation to apply for an operation -- */ -- enum Rotation { Rotate0 = 0, ///< Do not rotate -- Rotate90 = 1, ///< Rotate 90 degrees clockwise -- Rotate180 = 2, ///< Rotate 180 degrees -- Rotate270 = 3 ///< Rotate 270 degrees clockwise (90 degrees counterclockwise) -- }; -- -- /** -- The kinds of page actions -- */ -- enum PageAction { -- Opening, ///< The action when a page is "opened" -- Closing ///< The action when a page is "closed" -- }; -- -- /** -- How the text is going to be returned -- \since 0.16 -- */ -- enum TextLayout { -- PhysicalLayout, ///< The text is layouted to resemble the real page layout -- RawOrderLayout ///< The text is returned without any type of processing -- }; -- -- /** -- Additional flags for the renderToPainter method -- \since 0.16 -- */ -- enum PainterFlag { -- /** -- Do not save/restore the caller-owned painter. -- -- renderToPainter() by default preserves, using save() + restore(), -- the state of the painter specified; if this is not needed, this -- flag can avoid this job -- */ -- DontSaveAndRestore = 0x00000001 -- }; -- Q_DECLARE_FLAGS( PainterFlags, PainterFlag ) -- -- /** -- Render the page to a QImage using the current -- \link Document::renderBackend() Document renderer\endlink. -- -- If \p x = \p y = \p w = \p h = -1, the method will automatically -- compute the size of the image from the horizontal and vertical -- resolutions specified in \p xres and \p yres. Otherwise, the -- method renders only a part of the page, specified by the -- parameters (\p x, \p y, \p w, \p h) in pixel coordinates. The returned -- QImage then has size (\p w, \p h), independent of the page -- size. -- -- \param x specifies the left x-coordinate of the box, in -- pixels. -- -- \param y specifies the top y-coordinate of the box, in -- pixels. -- -- \param w specifies the width of the box, in pixels. -- -- \param h specifies the height of the box, in pixels. -- -- \param xres horizontal resolution of the graphics device, -- in dots per inch -- -- \param yres vertical resolution of the graphics device, in -- dots per inch -- -- \param rotate how to rotate the page -- -- \warning The parameter (\p x, \p y, \p w, \p h) are not -- well-tested. Unusual or meaningless parameters may lead to -- rather unexpected results. -- -- \returns a QImage of the page, or a null image on failure. -- -- \since 0.6 -- */ -- QImage renderToImage(double xres=72.0, double yres=72.0, int x=-1, int y=-1, int w=-1, int h=-1, Rotation rotate = Rotate0) const; -- -- /** -- Render the page to the specified QPainter using the current -- \link Document::renderBackend() Document renderer\endlink. -- -- If \p x = \p y = \p w = \p h = -1, the method will automatically -- compute the size of the page area from the horizontal and vertical -- resolutions specified in \p xres and \p yres. Otherwise, the -- method renders only a part of the page, specified by the -- parameters (\p x, \p y, \p w, \p h) in pixel coordinates. -- -- \param painter the painter to paint on -- -- \param x specifies the left x-coordinate of the box, in -- pixels. -- -- \param y specifies the top y-coordinate of the box, in -- pixels. -- -- \param w specifies the width of the box, in pixels. -- -- \param h specifies the height of the box, in pixels. -- -- \param xres horizontal resolution of the graphics device, -- in dots per inch -- -- \param yres vertical resolution of the graphics device, in -- dots per inch -- -- \param rotate how to rotate the page -- -- \param flags additional painter flags -- -- \warning The parameter (\p x, \p y, \p w, \p h) are not -- well-tested. Unusual or meaningless parameters may lead to -- rather unexpected results. -- -- \returns whether the painting succeeded -- -- \note This method is only supported for Arthur -- -- \since 0.16 -- */ -- bool renderToPainter(QPainter* painter, double xres=72.0, double yres=72.0, int x=-1, int y=-1, int w=-1, int h=-1, -- Rotation rotate = Rotate0, PainterFlags flags = 0) const; -- -- /** -- Get the page thumbnail if it exists. -- -- \return a QImage of the thumbnail, or a null image -- if the PDF does not contain one for this page -- -- \since 0.12 -- */ -- QImage thumbnail() const; -- -- /** -- Returns the text that is inside a specified rectangle -- -- \param rect the rectangle specifying the area of interest, -- with coordinates given in points, i.e., 1/72th of an inch. -- If rect is null, all text on the page is given -- -- \since 0.16 -- **/ -- QString text(const QRectF &rect, TextLayout textLayout) const; -- -- /** -- Returns the text that is inside a specified rectangle. -- The text is returned using the physical layout of the page -- -- \param rect the rectangle specifying the area of interest, -- with coordinates given in points, i.e., 1/72th of an inch. -- If rect is null, all text on the page is given -- **/ -- QString text(const QRectF &rect) const; -- -- /** -- The starting point for a search -- */ -- enum SearchDirection { FromTop, ///< Start sorting at the top of the document -- NextResult, ///< Find the next result, moving "down the page" -- PreviousResult ///< Find the previous result, moving "up the page" -- }; -- -- /** -- The type of search to perform -- */ -- enum SearchMode { CaseSensitive, ///< Case differences cause no match in searching -- CaseInsensitive ///< Case differences are ignored in matching -- }; -- -- /** -- Flags to modify the search behaviour \since 0.31 -- */ -- enum SearchFlag -- { -- IgnoreCase = 0x00000001, ///< Case differences are ignored -- WholeWords = 0x00000002 ///< Only whole words are matched -- }; -- Q_DECLARE_FLAGS( SearchFlags, SearchFlag ) -- -- /** -- Returns true if the specified text was found. -- -- \param text the text the search -- \param rect in all directions is used to return where the text was found, for NextResult and PreviousResult -- indicates where to continue searching for -- \param direction in which direction do the search -- \param caseSensitive be case sensitive? -- \param rotate the rotation to apply for the search order -- **/ -- Q_DECL_DEPRECATED bool search(const QString &text, QRectF &rect, SearchDirection direction, SearchMode caseSensitive, Rotation rotate = Rotate0) const; -- -- /** -- Returns true if the specified text was found. -- -- \param text the text the search -- \param rectXXX in all directions is used to return where the text was found, for NextResult and PreviousResult -- indicates where to continue searching for -- \param direction in which direction do the search -- \param caseSensitive be case sensitive? -- \param rotate the rotation to apply for the search order -- \since 0.14 -- **/ -- Q_DECL_DEPRECATED bool search(const QString &text, double &rectLeft, double &rectTop, double &rectRight, double &rectBottom, SearchDirection direction, SearchMode caseSensitive, Rotation rotate = Rotate0) const; -- -- /** -- Returns true if the specified text was found. -- -- \param text the text the search -- \param rectXXX in all directions is used to return where the text was found, for NextResult and PreviousResult -- indicates where to continue searching for -- \param direction in which direction do the search -- \param flags the flags to consider during matching -- \param rotate the rotation to apply for the search order -- -- \since 0.31 -- **/ -- bool search(const QString &text, double &rectLeft, double &rectTop, double &rectRight, double &rectBottom, SearchDirection direction, SearchFlags flags = 0, Rotation rotate = Rotate0) const; -- -- /** -- Returns a list of all occurrences of the specified text on the page. -- -- \param text the text to search -- \param caseSensitive whether to be case sensitive -- \param rotate the rotation to apply for the search order -- -- \warning Do not use the returned QRectF as arguments of another search call because of truncation issues if qreal is defined as float. -- -- \since 0.22 -- **/ -- Q_DECL_DEPRECATED QList<QRectF> search(const QString &text, SearchMode caseSensitive, Rotation rotate = Rotate0) const; -- -- /** -- Returns a list of all occurrences of the specified text on the page. -- -- \param text the text to search -- \param flags the flags to consider during matching -- \param rotate the rotation to apply for the search order -- -- \warning Do not use the returned QRectF as arguments of another search call because of truncation issues if qreal is defined as float. -- -- \since 0.31 -- **/ -- QList<QRectF> search(const QString &text, SearchFlags flags = 0, Rotation rotate = Rotate0) const; -- -- /** -- Returns a list of text of the page -- -- This method returns a QList of TextBoxes that contain all -- the text of the page, with roughly one text word of text -- per TextBox item. -- -- For text written in western languages (left-to-right and -- up-to-down), the QList contains the text in the proper -- order. -- -- \note The caller owns the text boxes and they should -- be deleted when no longer required. -- -- \warning This method is not tested with Asian scripts -- */ -- QList<TextBox*> textList(Rotation rotate = Rotate0) const; -- -- /** -- \return The dimensions (cropbox) of the page, in points (i.e. 1/72th of an inch) -- */ -- QSizeF pageSizeF() const; -- -- /** -- \return The dimensions (cropbox) of the page, in points (i.e. 1/72th of an inch) -- */ -- QSize pageSize() const; -- -- /** -- Returns the transition of this page -- -- \returns a pointer to a PageTransition structure that -- defines how transition to this page shall be performed. -- -- \note The PageTransition structure is owned by this page, and will -- automatically be destroyed when this page class is -- destroyed. -- **/ -- PageTransition *transition() const; -- -- /** -- Gets the page action specified, or NULL if there is no action. -- -- \since 0.6 -- **/ -- Link *action( PageAction act ) const; -- -- /** -- Types of orientations that are possible -- */ -- enum Orientation { -- Landscape, ///< Landscape orientation (portrait, with 90 degrees clockwise rotation ) -- Portrait, ///< Normal portrait orientation -- Seascape, ///< Seascape orientation (portrait, with 270 degrees clockwise rotation) -- UpsideDown ///< Upside down orientation (portrait, with 180 degrees rotation) -- }; -- -- /** -- The orientation of the page -- */ -- Orientation orientation() const; -- -- /** -- The default CTM -- */ -- void defaultCTM(double *CTM, double dpiX, double dpiY, int rotate, bool upsideDown); -- -- /** -- Gets the links of the page -- */ -- QList<Link*> links() const; -- -- /** -- Returns the annotations of the page -- -- \note If you call this method twice, you get different objects -- pointing to the same annotations (see Annotation). -- The caller owns the returned objects and they should be deleted -- when no longer required. -- */ -- QList<Annotation*> annotations() const; -- -- /** -- Returns the annotations of the page -- -- \param subtypes the subtypes of annotations you are interested in -- -- \note If you call this method twice, you get different objects -- pointing to the same annotations (see Annotation). -- The caller owns the returned objects and they should be deleted -- when no longer required. -- -- \since 0.28 -- */ -- QList<Annotation*> annotations(const QSet<Annotation::SubType> &subtypes) const; -- -- /** -- Adds an annotation to the page -- -- \note Ownership of the annotation object stays with the caller, who can -- delete it at any time. -- \since 0.20 -- */ -- void addAnnotation( const Annotation *ann ); -- -- /** -- Removes an annotation from the page and destroys the annotation object -- -- \note There mustn't be other Annotation objects pointing this annotation -- \since 0.20 -- */ -- void removeAnnotation( const Annotation *ann ); -- -- /** -- Returns the form fields on the page -- The caller gets the ownership of the returned objects. -- -- \since 0.6 -- */ -- QList<FormField*> formFields() const; -- -- /** -- Returns the page duration. That is the time, in seconds, that the page -- should be displayed before the presentation automatically advances to the next page. -- Returns < 0 if duration is not set. -- -- \since 0.6 -- */ -- double duration() const; -- -- /** -- Returns the label of the page, or a null string is the page has no label. -- -- \since 0.6 -- **/ -- QString label() const; -- -- private: -- Q_DISABLE_COPY(Page) -- -- Page(DocumentData *doc, int index); -- PageData *m_page; -- }; -- --/** -- \brief PDF document. -- -- The Document class represents a PDF document: its pages, and all the global -- properties, metadata, etc. -- -- \section ownership Ownership of the returned objects -- -- All the functions that returns class pointers create new object, and the -- responsability of those is given to the callee. -- -- The only exception is \link Poppler::Page::transition() Page::transition()\endlink. -- -- \section document-loading Loading -- -- To get a Document, you have to load it via the load() & loadFromData() -- functions. -- -- In all the functions that have passwords as arguments, they \b must be Latin1 -- encoded. If you have a password that is a UTF-8 string, you need to use -- QString::toLatin1() (or similar) to convert the password first. -- If you have a UTF-8 character array, consider converting it to a QString first -- (QString::fromUtf8(), or similar) before converting to Latin1 encoding. -- -- \section document-rendering Rendering -- -- To render pages of a document, you have different Document functions to set -- various options. -- -- \subsection document-rendering-backend Backends -- -- %Poppler offers a different backends for rendering the pages. Currently -- there are two backends (see #RenderBackend), but only the Splash engine works -- well and has been tested. -- -- The available rendering backends can be discovered via availableRenderBackends(). -- The current rendering backend can be changed using setRenderBackend(). -- Please note that setting a backend not listed in the available ones -- will always result in null QImage's. -- -- \section document-cms Color management support -- -- %Poppler, if compiled with this support, provides functions to handle color -- profiles. -- -- To know whether the %Poppler version you are using has support for color -- management, you can query Poppler::isCmsAvailable(). In case it is not -- avilable, all the color management-related functions will either do nothing -- or return null. --*/ -- class POPPLER_QT4_EXPORT Document { -- friend class Page; -- friend class DocumentData; -- -- public: -- /** -- The page mode -- */ -- enum PageMode { -- UseNone, ///< No mode - neither document outline nor thumbnail images are visible -- UseOutlines, ///< Document outline visible -- UseThumbs, ///< Thumbnail images visible -- FullScreen, ///< Fullscreen mode (no menubar, windows controls etc) -- UseOC, ///< Optional content group panel visible -- UseAttach ///< Attachments panel visible -- }; -- -- /** -- The page layout -- */ -- enum PageLayout { -- NoLayout, ///< Layout not specified -- SinglePage, ///< Display a single page -- OneColumn, ///< Display a single column of pages -- TwoColumnLeft, ///< Display the pages in two columns, with odd-numbered pages on the left -- TwoColumnRight, ///< Display the pages in two columns, with odd-numbered pages on the right -- TwoPageLeft, ///< Display the pages two at a time, with odd-numbered pages on the left -- TwoPageRight ///< Display the pages two at a time, with odd-numbered pages on the right -- }; -- -- /** -- The render backends available -- -- \since 0.6 -- */ -- enum RenderBackend { -- SplashBackend, ///< Splash backend -- ArthurBackend ///< Arthur (Qt4) backend -- }; -- -- /** -- The render hints available -- -- \since 0.6 -- */ -- enum RenderHint { -- Antialiasing = 0x00000001, ///< Antialiasing for graphics -- TextAntialiasing = 0x00000002, ///< Antialiasing for text -- TextHinting = 0x00000004, ///< Hinting for text \since 0.12.1 -- TextSlightHinting = 0x00000008, ///< Lighter hinting for text when combined with TextHinting \since 0.18 -- OverprintPreview = 0x00000010, ///< Overprint preview \since 0.22 -- ThinLineSolid = 0x00000020, ///< Enhance thin lines solid \since 0.24 -- ThinLineShape = 0x00000040, ///< Enhance thin lines shape. Wins over ThinLineSolid \since 0.24 -- IgnorePaperColor = 0x00000080 ///< Do not compose with the paper color \since 0.35 -- }; -- Q_DECLARE_FLAGS( RenderHints, RenderHint ) -- -- /** -- Form types -- -- \since 0.22 -- */ -- enum FormType { -- NoForm, ///< Document doesn't contain forms -- AcroForm, ///< AcroForm -- XfaForm ///< Adobe XML Forms Architecture (XFA), currently unsupported -- }; -- -- /** -- Set a color display profile for the current document. -- -- \param outputProfileA is a \c cmsHPROFILE of the LCMS library. -- -- \since 0.12 -- */ -- void setColorDisplayProfile(void *outputProfileA); -- /** -- Set a color display profile for the current document. -- -- \param name is the name of the display profile to set. -- -- \since 0.12 -- */ -- void setColorDisplayProfileName(const QString &name); -- /** -- Return the current RGB profile. -- -- \return a \c cmsHPROFILE of the LCMS library. -- -- \since 0.12 -- */ -- void* colorRgbProfile() const; -- /** -- Return the current display profile. -- -- \return a \c cmsHPROFILE of the LCMS library. -- -- \since 0.12 -- */ -- void *colorDisplayProfile() const; -- -- /** -- Load the document from a file on disk -- -- \param filePath the name (and path, if required) of the file to load -- \param ownerPassword the Latin1-encoded owner password to use in -- loading the file -- \param userPassword the Latin1-encoded user ("open") password -- to use in loading the file -- -- \return the loaded document, or NULL on error -- -- \note The caller owns the pointer to Document, and this should -- be deleted when no longer required. -- -- \warning The returning document may be locked if a password is required -- to open the file, and one is not provided (as the userPassword). -- */ -- static Document *load(const QString & filePath, -- const QByteArray &ownerPassword=QByteArray(), -- const QByteArray &userPassword=QByteArray()); -- -- /** -- Load the document from memory -- -- \param fileContents the file contents. They are copied so there is no need -- to keep the byte array around for the full life time of -- the document. -- \param ownerPassword the Latin1-encoded owner password to use in -- loading the file -- \param userPassword the Latin1-encoded user ("open") password -- to use in loading the file -- -- \return the loaded document, or NULL on error -- -- \note The caller owns the pointer to Document, and this should -- be deleted when no longer required. -- -- \warning The returning document may be locked if a password is required -- to open the file, and one is not provided (as the userPassword). -- -- \since 0.6 -- */ -- static Document *loadFromData(const QByteArray &fileContents, -- const QByteArray &ownerPassword=QByteArray(), -- const QByteArray &userPassword=QByteArray()); -- -- /** -- Get a specified Page -- -- Note that this follows the PDF standard of being zero based - if you -- want the first page, then you need an index of zero. -- -- The caller gets the ownership of the returned object. -- -- \param index the page number index -- */ -- Page *page(int index) const; -- -- /** -- \overload -- -- -- The intent is that you can pass in a label like \c "ix" and -- get the page with that label (which might be in the table of -- contents), or pass in \c "1" and get the page that the user -- expects (which might not be the first page, if there is a -- title page and a table of contents). -- -- \param label the page label -- */ -- Page *page(const QString &label) const; -- -- /** -- The number of pages in the document -- */ -- int numPages() const; -- -- /** -- The type of mode that should be used by the application -- when the document is opened. Note that while this is -- called page mode, it is really viewer application mode. -- */ -- PageMode pageMode() const; -- -- /** -- The layout that pages should be shown in when the document -- is first opened. This basically describes how pages are -- shown relative to each other. -- */ -- PageLayout pageLayout() const; -- -- /** -- The predominant reading order for text as supplied by -- the document's viewer preferences. -- -- \since 0.26 -- */ -- Qt::LayoutDirection textDirection() const; -- -- /** -- Provide the passwords required to unlock the document -- -- \param ownerPassword the Latin1-encoded owner password to use in -- loading the file -- \param userPassword the Latin1-encoded user ("open") password -- to use in loading the file -- */ -- bool unlock(const QByteArray &ownerPassword, const QByteArray &userPassword); -- -- /** -- Determine if the document is locked -- */ -- bool isLocked() const; -- -- /** -- The date associated with the document -- -- You would use this method with something like: -- \code --QDateTime created = m_doc->date("CreationDate"); --QDateTime modified = m_doc->date("ModDate"); -- \endcode -- -- The available dates are: -- - CreationDate: the date of creation of the document -- - ModDate: the date of the last change in the document -- -- \param data the type of date that is required -- */ -- QDateTime date( const QString & data ) const; -- -- /** -- Set the Info dict date entry specified by \param key to \param val -- -- \returns true on success, false on failure -- */ -- bool setDate( const QString & key, const QDateTime & val ); -- -- /** -- The date of the creation of the document -- */ -- QDateTime creationDate() const; -- -- /** -- Set the creation date of the document to \param val -- -- \returns true on success, false on failure -- */ -- bool setCreationDate( const QDateTime & val ); -- -- /** -- The date of the last change in the document -- */ -- QDateTime modificationDate() const; -- -- /** -- Set the modification date of the document to \param val -- -- \returns true on success, false on failure -- */ -- bool setModificationDate( const QDateTime & val ); -- -- /** -- Get specified information associated with the document -- -- You would use this method with something like: -- \code --QString title = m_doc->info("Title"); --QString subject = m_doc->info("Subject"); -- \endcode -- -- In addition to \c Title and \c Subject, other information that may -- be available include \c Author, \c Keywords, \c Creator and \c Producer. -- -- \param data the information that is required -- -- \sa infoKeys() to get a list of the available keys -- */ -- QString info( const QString & data ) const; -- -- /** -- Set the value of the document's Info dictionary entry specified by \param key to \param val -- -- \returns true on success, false on failure -- */ -- bool setInfo( const QString & key, const QString & val ); -- -- /** -- The title of the document -- */ -- QString title() const; -- -- /** -- Set the title of the document to \param val -- -- \returns true on success, false on failure -- */ -- bool setTitle( const QString & val ); -- -- /** -- The author of the document -- */ -- QString author() const; -- -- /** -- Set the author of the document to \param val -- -- \returns true on success, false on failure -- */ -- bool setAuthor( const QString & val ); -- -- /** -- The subject of the document -- */ -- QString subject() const; -- -- /** -- Set the subject of the document to \param val -- -- \returns true on success, false on failure -- */ -- bool setSubject( const QString & val ); -- -- /** -- The keywords of the document -- */ -- QString keywords() const; -- -- /** -- Set the keywords of the document to \param val -- -- \returns true on success, false on failure -- */ -- bool setKeywords( const QString & val ); -- -- /** -- The creator of the document -- */ -- QString creator() const; -- -- /** -- Set the creator of the document to \param val -- -- \returns true on success, false on failure -- */ -- bool setCreator( const QString & val ); -- -- /** -- The producer of the document -- */ -- QString producer() const; -- -- /** -- Set the producer of the document to \param val -- -- \returns true on success, false on failure -- */ -- bool setProducer( const QString & val ); -- -- /** -- Remove the document's Info dictionary -- -- \returns true on success, false on failure -- */ -- bool removeInfo(); -- -- /** -- Obtain a list of the available string information keys. -- */ -- QStringList infoKeys() const; -- -- /** -- Test if the document is encrypted -- */ -- bool isEncrypted() const; -- -- /** -- Test if the document is linearised -- -- In some cases, this is called "fast web view", since it -- is mostly an optimisation for viewing over the Web. -- */ -- bool isLinearized() const; -- -- /** -- Test if the permissions on the document allow it to be -- printed -- */ -- bool okToPrint() const; -- -- /** -- Test if the permissions on the document allow it to be -- printed at high resolution -- */ -- bool okToPrintHighRes() const; -- -- /** -- Test if the permissions on the document allow it to be -- changed. -- -- \note depending on the type of change, it may be more -- appropriate to check other properties as well. -- */ -- bool okToChange() const; -- -- /** -- Test if the permissions on the document allow the -- contents to be copied / extracted -- */ -- bool okToCopy() const; -- -- /** -- Test if the permissions on the document allow annotations -- to be added or modified, and interactive form fields (including -- signature fields) to be completed. -- */ -- bool okToAddNotes() const; -- -- /** -- Test if the permissions on the document allow interactive -- form fields (including signature fields) to be completed. -- -- \note this can be true even if okToAddNotes() is false - this -- means that only form completion is permitted. -- */ -- bool okToFillForm() const; -- -- /** -- Test if the permissions on the document allow interactive -- form fields (including signature fields) to be set, created and -- modified -- */ -- bool okToCreateFormFields() const; -- -- /** -- Test if the permissions on the document allow content extraction -- (text and perhaps other content) for accessibility usage (eg for -- a screen reader) -- */ -- bool okToExtractForAccessibility() const; -- -- /** -- Test if the permissions on the document allow it to be -- "assembled" - insertion, rotation and deletion of pages; -- or creation of bookmarks and thumbnail images. -- -- \note this can be true even if okToChange() is false -- */ -- bool okToAssemble() const; -- -- /** -- The version of the PDF specification that the document -- conforms to -- -- \deprecated use getPdfVersion and avoid float point -- comparisons/handling -- */ -- Q_DECL_DEPRECATED double pdfVersion() const; -- -- /** -- The version of the PDF specification that the document -- conforms to -- -- \param major an optional pointer to a variable where store the -- "major" number of the version -- \param minor an optional pointer to a variable where store the -- "minor" number of the version -- -- \since 0.12 -- */ -- void getPdfVersion(int *major, int *minor) const; -- -- /** -- The fonts within the PDF document. -- -- This is a shorthand for getting all the fonts at once. -- -- \note this can take a very long time to run with a large -- document. You may wish to use a FontIterator if you have more -- than say 20 pages -- -- \see newFontIterator() -- */ -- QList<FontInfo> fonts() const; -- -- /** -- Scans for fonts within the PDF document. -- -- \param numPages the number of pages to scan -- \param fontList pointer to the list where the font information -- should be placed -- -- \note with this method you can scan for fonts only \em once for each -- document; once the end is reached, no more scanning with this method -- can be done -- -- \return false if the end of the document has been reached -- -- \deprecated this function is quite limited in its job (see note), -- better use fonts() or newFontIterator() -- -- \see fonts(), newFontIterator() -- */ -- Q_DECL_DEPRECATED bool scanForFonts( int numPages, QList<FontInfo> *fontList ) const; -- -- /** -- Creates a new FontIterator object for font scanning. -- -- The new iterator can be used for reading the font information of the -- document, reading page by page. -- -- The caller is responsible for the returned object, ie it should freed -- it when no more useful. -- -- \param startPage the initial page from which start reading fonts -- -- \see fonts() -- -- \since 0.12 -- */ -- FontIterator* newFontIterator( int startPage = 0 ) const; -- -- /** -- The font data if the font is an embedded one. -- -- \since 0.10 -- */ -- QByteArray fontData(const FontInfo &font) const; -- -- /** -- The documents embedded within the PDF document. -- -- \note there are two types of embedded document - this call -- only accesses documents that are embedded at the document level. -- */ -- QList<EmbeddedFile*> embeddedFiles() const; -- -- /** -- Whether there are any documents embedded in this PDF document. -- */ -- bool hasEmbeddedFiles() const; -- -- /** -- Gets the table of contents (TOC) of the Document. -- -- The caller is responsable for the returned object. -- -- In the tree the tag name is the 'screen' name of the entry. A tag can have -- attributes. Here follows the list of tag attributes with meaning: -- - Destination: A string description of the referred destination -- - DestinationName: A 'named reference' to the viewport -- - ExternalFileName: A link to a external filename -- - Open: A bool value that tells whether the subbranch of the item is open or not -- -- Resolving the final destination for each item can be done in the following way: -- - first, checking for 'Destination': if not empty, then a LinkDestination -- can be constructed straight with it -- - as second step, if the 'DestinationName' is not empty, then the destination -- can be resolved using linkDestination() -- -- Note also that if 'ExternalFileName' is not emtpy, then the destination refers -- to that document (and not to the current one). -- -- \returns the TOC, or NULL if the Document does not have one -- */ -- QDomDocument *toc() const; -- -- /** -- Tries to resolve the named destination \p name. -- -- \note this operation starts a search through the whole document -- -- \returns a new LinkDestination object if the named destination was -- actually found, or NULL otherwise -- */ -- LinkDestination *linkDestination( const QString &name ); -- -- /** -- Sets the paper color -- -- \param color the new paper color -- */ -- void setPaperColor(const QColor &color); -- /** -- The paper color -- -- The default color is white. -- */ -- QColor paperColor() const; -- -- /** -- Sets the backend used to render the pages. -- -- \param backend the new rendering backend -- -- \since 0.6 -- */ -- void setRenderBackend( RenderBackend backend ); -- /** -- The currently set render backend -- -- The default backend is \ref SplashBackend -- -- \since 0.6 -- */ -- RenderBackend renderBackend() const; -- -- /** -- The available rendering backends. -- -- \since 0.6 -- */ -- static QSet<RenderBackend> availableRenderBackends(); -- -- /** -- Sets the render \p hint . -- -- \note some hints may not be supported by some rendering backends. -- -- \param on whether the flag should be added or removed. -- -- \since 0.6 -- */ -- void setRenderHint( RenderHint hint, bool on = true ); -- /** -- The currently set render hints. -- -- \since 0.6 -- */ -- RenderHints renderHints() const; -- -- /** -- Gets a new PS converter for this document. -- -- The caller gets the ownership of the returned converter. -- -- \since 0.6 -- */ -- PSConverter *psConverter() const; -- -- /** -- Gets a new PDF converter for this document. -- -- The caller gets the ownership of the returned converter. -- -- \since 0.8 -- */ -- PDFConverter *pdfConverter() const; -- -- /** -- Gets the metadata stream contents -- -- \since 0.6 -- */ -- QString metadata() const; -- -- /** -- Test whether this document has "optional content". -- -- Optional content is used to optionally turn on (display) -- and turn off (not display) some elements of the document. -- The most common use of this is for layers in design -- applications, but it can be used for a range of things, -- such as not including some content in printing, and -- displaying content in the appropriate language. -- -- \since 0.8 -- */ -- bool hasOptionalContent() const; -- -- /** -- Itemviews model for optional content. -- -- The model is owned by the document. -- -- \since 0.8 -- */ -- OptContentModel *optionalContentModel(); -- -- /** -- Document-level JavaScript scripts. -- -- Returns the list of document level JavaScript scripts to be always -- executed before any other script. -- -- \since 0.10 -- */ -- QStringList scripts() const; -- -- /** -- The PDF identifiers. -- -- \param permanentId an optional pointer to a variable where store the -- permanent ID of the document -- \param updateId an optional pointer to a variable where store the -- update ID of the document -- -- \return whether the document has the IDs -- -- \since 0.16 -- */ -- bool getPdfId(QByteArray *permanentId, QByteArray *updateId) const; -- -- /** -- Returns the type of forms contained in the document -- -- \since 0.22 -- */ -- FormType formType() const; -- -- /** -- Destructor. -- */ -- ~Document(); -- -- private: -- Q_DISABLE_COPY(Document) -- -- DocumentData *m_doc; -- -- Document(DocumentData *dataA); -- }; -- -- class BaseConverterPrivate; -- class PSConverterPrivate; -- class PDFConverterPrivate; -- /** -- \brief Base converter. -- -- This is the base class for the converters. -- -- \since 0.8 -- */ -- class POPPLER_QT4_EXPORT BaseConverter -- { -- friend class Document; -- public: -- /** -- Destructor. -- */ -- virtual ~BaseConverter(); -- -- /** Sets the output file name. You must set this or the output device. */ -- void setOutputFileName(const QString &outputFileName); -- -- /** -- * Sets the output device. You must set this or the output file name. -- * -- * \since 0.8 -- */ -- void setOutputDevice(QIODevice *device); -- -- /** -- Does the conversion. -- -- \return whether the conversion succeeded -- */ -- virtual bool convert() = 0; -- -- enum Error -- { -- NoError, -- FileLockedError, -- OpenOutputError, -- NotSupportedInputFileError -- }; -- -- /** -- Returns the last error -- \since 0.12.1 -- */ -- Error lastError() const; -- -- protected: -- /// \cond PRIVATE -- BaseConverter(BaseConverterPrivate &dd); -- Q_DECLARE_PRIVATE(BaseConverter) -- BaseConverterPrivate *d_ptr; -- /// \endcond -- -- private: -- Q_DISABLE_COPY(BaseConverter) -- }; -- -- /** -- Converts a PDF to PS -- -- Sizes have to be in Points (1/72 inch) -- -- If you are using QPrinter you can get paper size by doing: -- \code --QPrinter dummy(QPrinter::PrinterResolution); --dummy.setFullPage(true); --dummy.setPageSize(myPageSize); --width = dummy.width(); --height = dummy.height(); -- \endcode -- -- \since 0.6 -- */ -- class POPPLER_QT4_EXPORT PSConverter : public BaseConverter -- { -- friend class Document; -- public: -- /** -- Options for the PS export. -- -- \since 0.10 -- */ -- enum PSOption { -- Printing = 0x00000001, ///< The PS is generated for printing purposes -- StrictMargins = 0x00000002, -- ForceRasterization = 0x00000004, -- PrintToEPS = 0x00000008, ///< Output EPS instead of PS \since 0.20 -- HideAnnotations = 0x00000010 ///< Don't print annotations \since 0.20 -- }; -- Q_DECLARE_FLAGS( PSOptions, PSOption ) -- -- /** -- Destructor. -- */ -- ~PSConverter(); -- -- /** Sets the list of pages to print. Mandatory. */ -- void setPageList(const QList<int> &pageList); -- -- /** -- Sets the title of the PS Document. Optional -- */ -- void setTitle(const QString &title); -- -- /** -- Sets the horizontal DPI. Defaults to 72.0 -- */ -- void setHDPI(double hDPI); -- -- /** -- Sets the vertical DPI. Defaults to 72.0 -- */ -- void setVDPI(double vDPI); -- -- /** -- Sets the rotate. Defaults to not rotated -- */ -- void setRotate(int rotate); -- -- /** -- Sets the output paper width. Has to be set. -- */ -- void setPaperWidth(int paperWidth); -- -- /** -- Sets the output paper height. Has to be set. -- */ -- void setPaperHeight(int paperHeight); -- -- /** -- Sets the output right margin. Defaults to 0 -- */ -- void setRightMargin(int marginRight); -- -- /** -- Sets the output bottom margin. Defaults to 0 -- */ -- void setBottomMargin(int marginBottom); -- -- /** -- Sets the output left margin. Defaults to 0 -- */ -- void setLeftMargin(int marginLeft); -- -- /** -- Sets the output top margin. Defaults to 0 -- */ -- void setTopMargin(int marginTop); -- -- /** -- Defines if margins have to be strictly followed (even if that -- means changing aspect ratio), or if the margins can be adapted -- to keep aspect ratio. -- -- Defaults to false. -- */ -- void setStrictMargins(bool strictMargins); -- -- /** Defines if the page will be rasterized to an image before printing. Defaults to false */ -- void setForceRasterize(bool forceRasterize); -- -- /** -- Sets the options for the PS export. -- -- \since 0.10 -- */ -- void setPSOptions(PSOptions options); -- -- /** -- The currently set options for the PS export. -- -- The default flags are: Printing. -- -- \since 0.10 -- */ -- PSOptions psOptions() const; -- -- /** -- Sets a function that will be called each time a page is converted. -- -- The payload belongs to the caller. -- -- \since 0.16 -- */ -- void setPageConvertedCallback(void (* callback)(int page, void *payload), void *payload); -- -- bool convert(); -- -- private: -- Q_DECLARE_PRIVATE(PSConverter) -- Q_DISABLE_COPY(PSConverter) -- -- PSConverter(DocumentData *document); -- }; -- -- /** -- Converts a PDF to PDF (thus saves a copy of the document). -- -- \since 0.8 -- */ -- class POPPLER_QT4_EXPORT PDFConverter : public BaseConverter -- { -- friend class Document; -- public: -- /** -- Options for the PDF export. -- */ -- enum PDFOption { -- WithChanges = 0x00000001 ///< The changes done to the document are saved as well -- }; -- Q_DECLARE_FLAGS( PDFOptions, PDFOption ) -- -- /** -- Destructor. -- */ -- virtual ~PDFConverter(); -- -- /** -- Sets the options for the PDF export. -- */ -- void setPDFOptions(PDFOptions options); -- /** -- The currently set options for the PDF export. -- */ -- PDFOptions pdfOptions() const; -- -- bool convert(); -- -- private: -- Q_DECLARE_PRIVATE(PDFConverter) -- Q_DISABLE_COPY(PDFConverter) -- -- PDFConverter(DocumentData *document); -- }; -- -- /** -- Conversion from PDF date string format to QDateTime -- */ -- POPPLER_QT4_EXPORT QDateTime convertDate( char *dateString ); -- -- /** -- Whether the color management functions are available. -- -- \since 0.12 -- */ -- POPPLER_QT4_EXPORT bool isCmsAvailable(); -- -- /** -- Whether the overprint preview functionality is available. -- -- \since 0.22 -- */ -- POPPLER_QT4_EXPORT bool isOverprintPreviewAvailable(); -- -- class SoundData; -- /** -- Container class for a sound file in a PDF document. -- -- A sound can be either External (in that case should be loaded the file -- whose url is represented by url() ), or Embedded, and the player has to -- play the data contained in data(). -- -- \since 0.6 -- */ -- class POPPLER_QT4_EXPORT SoundObject { -- public: -- /** -- The type of sound -- */ -- enum SoundType { -- External, ///< The real sound file is external -- Embedded ///< The sound is contained in the data -- }; -- -- /** -- The encoding format used for the sound -- */ -- enum SoundEncoding { -- Raw, ///< Raw encoding, with unspecified or unsigned values in the range [ 0, 2^B - 1 ] -- Signed, ///< Twos-complement values -- muLaw, ///< mu-law-encoded samples -- ALaw ///< A-law-encoded samples -- }; -- -- /// \cond PRIVATE -- SoundObject(Sound *popplersound); -- /// \endcond -- -- ~SoundObject(); -- -- /** -- Is the sound embedded (SoundObject::Embedded) or external (SoundObject::External)? -- */ -- SoundType soundType() const; -- -- /** -- The URL of the sound file to be played, in case of SoundObject::External -- */ -- QString url() const; -- -- /** -- The data of the sound, in case of SoundObject::Embedded -- */ -- QByteArray data() const; -- -- /** -- The sampling rate of the sound -- */ -- double samplingRate() const; -- -- /** -- The number of sound channels to use to play the sound -- */ -- int channels() const; -- -- /** -- The number of bits per sample value per channel -- */ -- int bitsPerSample() const; -- -- /** -- The encoding used for the sound -- */ -- SoundEncoding soundEncoding() const; -- -- private: -- Q_DISABLE_COPY(SoundObject) -- -- SoundData *m_soundData; -- }; -- -- class MovieData; -- /** -- Container class for a movie object in a PDF document. -- -- \since 0.10 -- */ -- class POPPLER_QT4_EXPORT MovieObject { -- friend class AnnotationPrivate; -- public: -- /** -- The play mode for playing the movie -- */ -- enum PlayMode { -- PlayOnce, ///< Play the movie once, closing the movie controls at the end -- PlayOpen, ///< Like PlayOnce, but leaving the controls open -- PlayRepeat, ///< Play continuously until stopped -- PlayPalindrome ///< Play forward, then backward, then again foward and so on until stopped -- }; -- -- ~MovieObject(); -- -- /** -- The URL of the movie to be played -- */ -- QString url() const; -- -- /** -- The size of the movie -- */ -- QSize size() const; -- -- /** -- The rotation (either 0, 90, 180, or 270 degrees clockwise) for the movie, -- */ -- int rotation() const; -- -- /** -- Whether show a bar with movie controls -- */ -- bool showControls() const; -- -- /** -- How to play the movie -- */ -- PlayMode playMode() const; -- -- /** -- Returns whether a poster image should be shown if the movie is not playing. -- \since 0.22 -- */ -- bool showPosterImage() const; -- -- /** -- Returns the poster image that should be shown if the movie is not playing. -- If the image is null but showImagePoster() returns @c true, the first frame of the movie -- should be used as poster image. -- \since 0.22 -- */ -- QImage posterImage() const; -- -- private: -- /// \cond PRIVATE -- MovieObject( AnnotMovie *ann ); -- /// \endcond -- -- Q_DISABLE_COPY(MovieObject) -- -- MovieData *m_movieData; -- }; -- --} -- --Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::Page::PainterFlags) --Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::Page::SearchFlags) --Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::Document::RenderHints) --Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::PDFConverter::PDFOptions) --Q_DECLARE_OPERATORS_FOR_FLAGS(Poppler::PSConverter::PSOptions) -- --#endif -diff --git a/qt4/src/poppler-sound.cc b/qt4/src/poppler-sound.cc -deleted file mode 100644 -index eb19b9d3..00000000 ---- a/qt4/src/poppler-sound.cc -+++ /dev/null -@@ -1,132 +0,0 @@ --/* poppler-sound.cc: qt interface to poppler -- * Copyright (C) 2006-2007, Pino Toscano <pino@kde.org> -- * Copyright (C) 2008, Albert Astals Cid <aacid@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" -- --#include "Object.h" --#include "Stream.h" --#include "Sound.h" -- --namespace Poppler --{ -- --class SoundData --{ --public: -- SoundData() -- : m_soundObj( 0 ) -- { -- } -- -- ~SoundData() -- { -- delete m_soundObj; -- } -- -- SoundObject::SoundType m_type; -- Sound *m_soundObj; --}; -- --SoundObject::SoundObject(Sound *popplersound) --{ -- m_soundData = new SoundData(); -- switch ( popplersound->getSoundKind() ) -- { -- case soundEmbedded: -- m_soundData->m_type = SoundObject::Embedded; -- break; -- case soundExternal: -- default: -- m_soundData->m_type = SoundObject::External; -- break; -- } -- -- m_soundData->m_soundObj = popplersound->copy(); --} -- --SoundObject::~SoundObject() --{ -- delete m_soundData; --} -- --SoundObject::SoundType SoundObject::soundType() const --{ -- return m_soundData->m_type; --} -- --QString SoundObject::url() const --{ -- if ( m_soundData->m_type != SoundObject::External ) -- return QString(); -- -- GooString * goo = m_soundData->m_soundObj->getFileName(); -- return goo ? QString( goo->getCString() ) : QString(); --} -- --QByteArray SoundObject::data() const --{ -- if ( m_soundData->m_type != SoundObject::Embedded ) -- return QByteArray(); -- -- Stream *stream = m_soundData->m_soundObj->getStream(); -- stream->reset(); -- int dataLen = 0; -- QByteArray fileArray; -- int i; -- while ( (i = stream->getChar()) != EOF) { -- fileArray[dataLen] = (char)i; -- ++dataLen; -- } -- fileArray.resize(dataLen); -- -- return fileArray; --} -- --double SoundObject::samplingRate() const --{ -- return m_soundData->m_soundObj->getSamplingRate(); --} -- --int SoundObject::channels() const --{ -- return m_soundData->m_soundObj->getChannels(); --} -- --int SoundObject::bitsPerSample() const --{ -- return m_soundData->m_soundObj->getBitsPerSample(); --} -- --SoundObject::SoundEncoding SoundObject::soundEncoding() const --{ -- switch ( m_soundData->m_soundObj->getEncoding() ) -- { -- case soundRaw: -- return SoundObject::Raw; -- case soundSigned: -- return SoundObject::Signed; -- case soundMuLaw: -- return SoundObject::muLaw; -- case soundALaw: -- return SoundObject::ALaw; -- } -- return SoundObject::Raw; --} -- --} -diff --git a/qt4/src/poppler-textbox.cc b/qt4/src/poppler-textbox.cc -deleted file mode 100644 -index 88cf2a9e..00000000 ---- a/qt4/src/poppler-textbox.cc -+++ /dev/null -@@ -1,63 +0,0 @@ --/* poppler-qt.h: qt interface to poppler -- * Copyright (C) 2005, Brad Hards <bradh@frogmouth.net> -- * Copyright (C) 2006-2008, Albert Astals Cid <aacid@kde.org> -- * Copyright (C) 2008, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include "poppler-qt4.h" --#include "poppler-private.h" -- --namespace Poppler { -- --TextBox::TextBox(const QString& text, const QRectF &bBox) --{ -- m_data = new TextBoxData(); -- m_data->text = text; -- m_data->bBox = bBox; --} -- --TextBox::~TextBox() --{ -- delete m_data; --} -- --QString TextBox::text() const --{ -- return m_data->text; --} -- --QRectF TextBox::boundingBox() const --{ -- return m_data->bBox; --} -- --TextBox *TextBox::nextWord() const --{ -- return m_data->nextWord; --} -- --QRectF TextBox::charBoundingBox(int i) const --{ -- return m_data->charBBoxes.value(i); --} -- --bool TextBox::hasSpaceAfter() const --{ -- return m_data->hasSpaceAfter; --} -- --} -diff --git a/qt4/tests/.gitignore b/qt4/tests/.gitignore -deleted file mode 100644 -index 3746eb87..00000000 ---- a/qt4/tests/.gitignore -+++ /dev/null -@@ -1,33 +0,0 @@ --.deps --.libs --*.la --*.lo --*.moc --Makefile --Makefile.in --stress-poppler-qt4 --stress-poppler-dir --test-poppler-qt4 --test-password-qt4 --poppler-attachments --poppler-fonts --poppler-texts --poppler-forms --stress-threads-qt4 --test-render-to-file --check_actualtext --check_attachments --check_dateConversion --check_fonts --check_goostring --check_lexer --check_links --check_metadata --check_optcontent --check_permissions --check_pagelayout --check_pagemode --check_password --check_search --check_strings -- -diff --git a/qt4/tests/CMakeLists.txt b/qt4/tests/CMakeLists.txt -deleted file mode 100644 -index a01a638a..00000000 ---- a/qt4/tests/CMakeLists.txt -+++ /dev/null -@@ -1,67 +0,0 @@ --add_definitions(${QT4_DEFINITIONS}) --add_definitions(-DTESTDATADIR=\"${TESTDATADIR}\") -- --include_directories( -- ${CMAKE_CURRENT_SOURCE_DIR} -- ${CMAKE_CURRENT_SOURCE_DIR}/../src -- ${CMAKE_CURRENT_BINARY_DIR} -- ${QT4_INCLUDE_DIR} --) -- --macro(QT4_ADD_SIMPLETEST exe source) -- string(REPLACE "-" "" test_name ${exe}) -- set(${test_name}_SOURCES -- ${source} -- ) -- poppler_add_test(${exe} BUILD_QT4_TESTS ${${test_name}_SOURCES}) -- target_link_libraries(${exe} poppler-qt4) -- if(MSVC) -- target_link_libraries(${exe} poppler ${poppler_LIBS}) -- endif() --endmacro(QT4_ADD_SIMPLETEST) -- --macro(QT4_ADD_QTEST exe source) -- if (QT4_QTTEST_FOUND) -- string(REPLACE "-" "" test_name ${exe}) -- set(${test_name}_SOURCES -- ${source} -- ) -- poppler_add_unittest(${exe} BUILD_QT4_TESTS ${${test_name}_SOURCES}) -- qt4_automoc(${${test_name}_SOURCES}) -- target_link_libraries(${exe} poppler-qt4 ${QT4_QTTEST_LIBRARY}) -- if(MSVC) -- target_link_libraries(${exe} poppler ${poppler_LIBS}) -- endif() -- endif () --endmacro(QT4_ADD_QTEST) -- -- --qt4_add_simpletest(test-poppler-qt4 test-poppler-qt4.cpp) --qt4_add_simpletest(test-password-qt4 test-password-qt4.cpp) --qt4_add_simpletest(test-render-to-file-qt4 test-render-to-file.cpp) --qt4_add_simpletest(poppler-qt4-forms poppler-forms.cpp) --qt4_add_simpletest(poppler-qt4-fonts poppler-fonts.cpp) --qt4_add_simpletest(poppler-qt4-attachments poppler-attachments.cpp) --qt4_add_simpletest(stress-poppler-qt4 stress-poppler-qt4.cpp) --qt4_add_simpletest(stress-poppler-dir-qt4 stress-poppler-dir.cpp) --qt4_add_simpletest(stress-threads-qt4 stress-threads-qt4.cpp) --qt4_add_simpletest(poppler-qt4-texts poppler-texts.cpp) -- --qt4_add_qtest(check_qt4_attachments check_attachments.cpp) --qt4_add_qtest(check_qt4_dateConversion check_dateConversion.cpp) --qt4_add_qtest(check_qt4_fonts check_fonts.cpp) --qt4_add_qtest(check_qt4_links check_links.cpp) --qt4_add_qtest(check_qt4_metadata check_metadata.cpp) --qt4_add_qtest(check_qt4_optcontent check_optcontent.cpp) --qt4_add_qtest(check_qt4_pagelayout check_pagelayout.cpp) --qt4_add_qtest(check_qt4_pagemode check_pagemode.cpp) --qt4_add_qtest(check_qt4_password check_password.cpp) --qt4_add_qtest(check_qt4_permissions check_permissions.cpp) --qt4_add_qtest(check_qt4_search check_search.cpp) --qt4_add_qtest(check_qt4_actualtext check_actualtext.cpp) --qt4_add_qtest(check_qt4_lexer check_lexer.cpp) --qt4_add_qtest(check_qt4_pagelabelinfo check_pagelabelinfo.cpp) --qt4_add_qtest(check_qt4_goostring check_goostring.cpp) --if (NOT WIN32) -- qt4_add_qtest(check_qt4_strings check_strings.cpp) --endif () -diff --git a/qt4/tests/README.unittest b/qt4/tests/README.unittest -deleted file mode 100644 -index 02296e08..00000000 ---- a/qt4/tests/README.unittest -+++ /dev/null -@@ -1,23 +0,0 @@ --The unittests for the Qt4 bindings rely on the QtTestLib package, and --will not be built until this is installed. If you do not have it, then --you can download it from the Trolltech website. -- --Note that there are a range of ways in which you can run the tests: --1. "make check" will run all the tests. --2. You can run a single test by executing the applicable --executable. For example, you can run the PageMode tests by --"./check_pagemode" --3. You can run a single function within a single test by appending the --name of the function to the executable. For example, if you just want --to run the FullScreen test within the PageMode tests, you can --"./check_pagemode checkFullScreen". Run the executable with -functions --to get a list of all the functions. --4. You can run a single function with specific data by appending the --name of the function, followed by a colon, then the data label to the --executable. For example, to just do the Author check within the --metadata checks, you can "./check_metadata checkStrings:Author". -- --For a full list of options, run a executable with "-help". -- --Brad Hards --bradh@frogmouth.net -diff --git a/qt4/tests/check_actualtext.cpp b/qt4/tests/check_actualtext.cpp -deleted file mode 100644 -index 5c765c51..00000000 ---- a/qt4/tests/check_actualtext.cpp -+++ /dev/null -@@ -1,33 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --#include <QtCore/QFile> -- --class TestActualText: public QObject --{ -- Q_OBJECT --private slots: -- void checkActualText1(); --}; -- --void TestActualText::checkActualText1() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/WithActualText.pdf"); -- QVERIFY( doc ); -- -- Poppler::Page *page = doc->page(0); -- QVERIFY( page ); -- -- QCOMPARE( page->text(QRectF()), QString("The slow brown fox jumps over the black dog.") ); -- -- delete page; -- -- delete doc; --} -- --QTEST_MAIN(TestActualText) -- --#include "check_actualtext.moc" -- -diff --git a/qt4/tests/check_attachments.cpp b/qt4/tests/check_attachments.cpp -deleted file mode 100644 -index 73e31502..00000000 ---- a/qt4/tests/check_attachments.cpp -+++ /dev/null -@@ -1,157 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --#include <QtCore/QFile> -- --class TestAttachments: public QObject --{ -- Q_OBJECT --private slots: -- void checkNoAttachments(); -- void checkAttach1(); -- void checkAttach2(); -- void checkAttach3(); -- void checkAttach4(); --}; -- --void TestAttachments::checkNoAttachments() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->hasEmbeddedFiles(), false ); -- -- delete doc; --} -- --void TestAttachments::checkAttach1() --{ -- -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/WithAttachments.pdf"); -- QVERIFY( doc ); -- -- QVERIFY( doc->hasEmbeddedFiles() ); -- -- QList<Poppler::EmbeddedFile*> fileList = doc->embeddedFiles(); -- QCOMPARE( fileList.size(), 2 ); -- -- Poppler::EmbeddedFile *embfile = fileList.at(0); -- QCOMPARE( embfile->name(), QString( "kroller.png" ) ); -- QCOMPARE( embfile->description(), QString() ); -- QCOMPARE( embfile->createDate(), QDateTime( QDate(), QTime() ) ); -- QCOMPARE( embfile->modDate(), QDateTime( QDate(), QTime() ) ); -- QCOMPARE( embfile->mimeType(), QString() ); -- -- QFile file(TESTDATADIR "/unittestcases/kroller.png" ); -- QVERIFY( file.open( QIODevice::ReadOnly ) ); -- QByteArray krollerData = file.readAll(); -- QByteArray embdata = embfile->data(); -- QCOMPARE( krollerData, embdata ); -- -- -- Poppler::EmbeddedFile *embfile2 = fileList.at(1); -- QCOMPARE( embfile2->name(), QString("gnome-64.gif") ); -- QCOMPARE( embfile2->description(), QString() ); -- QCOMPARE( embfile2->modDate(), QDateTime( QDate(), QTime() ) ); -- QCOMPARE( embfile2->createDate(), QDateTime( QDate(), QTime() ) ); -- QCOMPARE( embfile2->mimeType(), QString() ); -- -- QFile file2(TESTDATADIR "/unittestcases/gnome-64.gif" ); -- QVERIFY( file2.open( QIODevice::ReadOnly ) ); -- QByteArray g64Data = file2.readAll(); -- QByteArray emb2data = embfile2->data(); -- QCOMPARE( g64Data, emb2data ); -- -- delete doc; --} -- -- --void TestAttachments::checkAttach2() --{ -- -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/A6EmbeddedFiles.pdf"); -- QVERIFY( doc ); -- -- QVERIFY( doc->hasEmbeddedFiles() ); -- -- QList<Poppler::EmbeddedFile*> fileList; -- fileList = doc->embeddedFiles(); -- QCOMPARE( fileList.size(), 3 ); -- -- Poppler::EmbeddedFile *embfile1 = fileList.at(0); -- QCOMPARE( embfile1->name(), QString("Acro7 thoughts") ); -- QCOMPARE( embfile1->description(), QString() ); -- QCOMPARE( embfile1->createDate(), QDateTime( QDate( 2003, 8, 4 ), QTime( 13, 54, 54), Qt::UTC ) ); -- QCOMPARE( embfile1->modDate(), QDateTime( QDate( 2003, 8, 4 ), QTime( 14, 15, 27), Qt::UTC ) ); -- QCOMPARE( embfile1->mimeType(), QString("text/xml") ); -- -- Poppler::EmbeddedFile *embfile2 = fileList.at(1); -- QCOMPARE( embfile2->name(), QString("acro transitions 1.xls") ); -- QCOMPARE( embfile2->description(), QString() ); -- QCOMPARE( embfile2->createDate(), QDateTime( QDate( 2003, 7, 18 ), QTime( 21, 7, 16), Qt::UTC ) ); -- QCOMPARE( embfile2->modDate(), QDateTime( QDate( 2003, 7, 22 ), QTime( 13, 4, 40), Qt::UTC ) ); -- QCOMPARE( embfile2->mimeType(), QString("application/excel") ); -- -- Poppler::EmbeddedFile *embfile3 = fileList.at(2); -- QCOMPARE( embfile3->name(), QString("apago_pdfe_wide.gif") ); -- QCOMPARE( embfile3->description(), QString() ); -- QCOMPARE( embfile3->createDate(), QDateTime( QDate( 2003, 1, 31 ), QTime( 15, 54, 29), Qt::UTC ) ); -- QCOMPARE( embfile3->modDate(), QDateTime( QDate( 2003, 1, 31 ), QTime( 15, 52, 58), Qt::UTC ) ); -- QCOMPARE( embfile3->mimeType(), QString() ); -- -- delete doc; --} -- --void TestAttachments::checkAttach3() --{ -- -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/shapes+attachments.pdf"); -- QVERIFY( doc ); -- -- QVERIFY( doc->hasEmbeddedFiles() ); -- -- QList<Poppler::EmbeddedFile*> fileList; -- fileList = doc->embeddedFiles(); -- QCOMPARE( fileList.size(), 1 ); -- -- Poppler::EmbeddedFile *embfile = fileList.at(0); -- QCOMPARE( embfile->name(), QString( "ADEX1.xpdf.pgp" ) ); -- QCOMPARE( embfile->description(), QString() ); -- QCOMPARE( embfile->createDate(), QDateTime( QDate( 2004, 3, 29 ), QTime( 19, 37, 16), Qt::UTC ) ); -- QCOMPARE( embfile->modDate(), QDateTime( QDate( 2004, 3, 29 ), QTime( 19, 37, 16), Qt::UTC ) ); -- QCOMPARE( embfile->mimeType(), QString() ); -- delete doc; -- --} -- --void TestAttachments::checkAttach4() --{ -- -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/imageretrieve+attachment.pdf"); -- QVERIFY( doc ); -- -- QVERIFY( doc->hasEmbeddedFiles() ); -- -- QList<Poppler::EmbeddedFile*> fileList; -- fileList = doc->embeddedFiles(); -- QCOMPARE( fileList.size(), 1 ); -- -- Poppler::EmbeddedFile *embfile = fileList.at(0); -- QCOMPARE( embfile->name(), QString( "export-altona.csv" ) ); -- QCOMPARE( embfile->description(), QString("Altona Export") ); -- QCOMPARE( embfile->createDate(), QDateTime( QDate( 2005, 8, 30 ), QTime( 20, 49, 35), Qt::UTC ) ); -- QCOMPARE( embfile->modDate(), QDateTime( QDate( 2005, 8, 30 ), QTime( 20, 49, 52), Qt::UTC ) ); -- QCOMPARE( embfile->mimeType(), QString("application/vnd.ms-excel") ); -- delete doc; -- --} -- --QTEST_MAIN(TestAttachments) --#include "check_attachments.moc" -- -diff --git a/qt4/tests/check_dateConversion.cpp b/qt4/tests/check_dateConversion.cpp -deleted file mode 100644 -index c1f84e2f..00000000 ---- a/qt4/tests/check_dateConversion.cpp -+++ /dev/null -@@ -1,142 +0,0 @@ --#include <QtTest/QtTest> -- --Q_DECLARE_METATYPE(QDate) --Q_DECLARE_METATYPE(QTime) -- --#include <poppler-qt4.h> -- --class TestDateConv: public QObject --{ -- Q_OBJECT --private slots: -- void initTestCase(); -- void checkDates_data(); -- void checkDates(); -- void checkInvalidDates_data(); -- void checkInvalidDates(); --}; -- --void TestDateConv::initTestCase() --{ -- qRegisterMetaType<QDate>("QDate"); -- qRegisterMetaType<QTime>("QTime"); --} -- --void TestDateConv::checkDates_data() --{ -- QTest::addColumn<QByteArray>("input"); -- QTest::addColumn<QDate>("day"); -- QTest::addColumn<QTime>("time"); -- -- // This is a typical case - all data provided -- QTest::newRow("D:20040101121110") -- << QByteArray("D:20040101121110Z") -- << QDate( 2004, 1, 1) -- << QTime( 12, 11, 10); -- -- // The D: is strongly recommended, but optional -- QTest::newRow("20040101121110") -- << QByteArray("20040101121110Z") -- << QDate( 2004, 1, 1) -- << QTime( 12, 11, 10); -- -- // Only the year is actually required -- QTest::newRow("D:2006") -- << QByteArray("D:2006") -- << QDate( 2006, 1, 1) -- << QTime( 0, 0, 0); -- -- QTest::newRow("D:200602") -- << QByteArray("D:200602") -- << QDate( 2006, 2, 1) -- << QTime( 0, 0, 0); -- -- QTest::newRow("D:20060304") -- << QByteArray("D:20060304") -- << QDate( 2006, 3, 4) -- << QTime( 0, 0, 0); -- -- QTest::newRow("D:2006030405") -- << QByteArray("D:2006030405") -- << QDate( 2006, 3, 4) -- << QTime( 5, 0, 0); -- -- QTest::newRow("D:200603040512") -- << QByteArray("D:200603040512") -- << QDate( 2006, 3, 4) -- << QTime( 5, 12, 0); -- -- // If the timezone isn't specified, I assume UTC -- QTest::newRow("D:20060304051226") -- << QByteArray("D:20060304051226") -- << QDate( 2006, 3, 4) -- << QTime( 5, 12, 26); -- -- // Check for real timezone conversions -- QTest::newRow("D:20030131115258-04'00'") -- << QByteArray("D:20030131115258-04'00'") -- << QDate( 2003, 1, 31) -- << QTime( 15, 52, 58); -- -- QTest::newRow("D:20030131115258+05'00'") -- << QByteArray("D:20030131115258+05'00'") -- << QDate( 2003, 1, 31) -- << QTime( 6, 52, 58); -- -- // There are places that have non-hour offsets -- // Yep, that means you Adelaide. -- QTest::newRow("D:20030131115258+08'30'") -- << QByteArray("D:20030131115258+08'30'") -- << QDate( 2003, 1, 31) -- << QTime( 3, 22, 58); -- -- QTest::newRow("D:20030131115258-08'30'") -- << QByteArray("D:20030131115258-08'30'") -- << QDate( 2003, 1, 31) -- << QTime( 20, 22, 58); --} -- --void TestDateConv::checkDates() --{ -- QFETCH(QByteArray, input); -- QFETCH(QDate, day); -- QFETCH(QTime, time); -- -- QCOMPARE( Poppler::convertDate(input.data()), QDateTime(day, time, Qt::UTC) ); --} -- --void TestDateConv::checkInvalidDates_data() --{ -- QTest::addColumn<QByteArray>("input"); -- -- // Null data -- QTest::newRow("Null data") -- << QByteArray(); -- -- // Empty data -- QTest::newRow("Empty data") -- << QByteArray(""); -- -- // Empty data -- QTest::newRow("One character") -- << QByteArray("D"); -- -- // Empty data -- QTest::newRow("'D:'") -- << QByteArray("D:"); -- -- // Empty data -- QTest::newRow("Not a date") -- << QByteArray("D:IAmNotAValidDate"); --} -- --void TestDateConv::checkInvalidDates() --{ -- QFETCH(QByteArray, input); -- -- QCOMPARE(Poppler::convertDate(input.data()), QDateTime()); --} -- --QTEST_MAIN(TestDateConv) -- --#include "check_dateConversion.moc" -diff --git a/qt4/tests/check_fonts.cpp b/qt4/tests/check_fonts.cpp -deleted file mode 100644 -index 77579a97..00000000 ---- a/qt4/tests/check_fonts.cpp -+++ /dev/null -@@ -1,248 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --#include <memory> -- --class TestFontsData: public QObject --{ -- Q_OBJECT --private slots: -- void checkNoFonts(); -- void checkType1(); -- void checkType3(); -- void checkTrueType(); -- void checkFontIterator(); -- void checkSecondDocumentQuery(); -- void checkMultipleIterations(); -- void checkScanForFonts(); --}; -- -- --static QList<Poppler::FontInfo> loadFontsViaIterator( Poppler::Document *doc, int from = 0, int count = -1 ) --{ -- int num = count == -1 ? doc->numPages() - from : count; -- QList<Poppler::FontInfo> list; -- std::unique_ptr< Poppler::FontIterator > it( doc->newFontIterator( from ) ); -- while ( it->hasNext() && num ) -- { -- list += it->next(); -- --num; -- } -- return list; --} -- --namespace Poppler --{ --static bool operator==( const FontInfo &f1, const FontInfo &f2 ) --{ -- if ( f1.name() != f2.name() ) -- return false; -- if ( f1.file() != f2.file() ) -- return false; -- if ( f1.isEmbedded() != f2.isEmbedded() ) -- return false; -- if ( f1.isSubset() != f2.isSubset() ) -- return false; -- if ( f1.type() != f2.type() ) -- return false; -- if ( f1.typeName() != f2.typeName() ) -- return false; -- return true; --} --} -- --void TestFontsData::checkNoFonts() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/tests/image.pdf"); -- QVERIFY( doc ); -- -- QList<Poppler::FontInfo> listOfFonts = doc->fonts(); -- QCOMPARE( listOfFonts.size(), 0 ); -- -- delete doc; --} -- --void TestFontsData::checkType1() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/tests/text.pdf"); -- QVERIFY( doc ); -- -- QList<Poppler::FontInfo> listOfFonts = doc->fonts(); -- QCOMPARE( listOfFonts.size(), 1 ); -- QCOMPARE( listOfFonts.at(0).name(), QString("Helvetica") ); -- QCOMPARE( listOfFonts.at(0).type(), Poppler::FontInfo::Type1 ); -- QCOMPARE( listOfFonts.at(0).typeName(), QString("Type 1") ); -- -- QCOMPARE( listOfFonts.at(0).isEmbedded(), false ); -- QCOMPARE( listOfFonts.at(0).isSubset(), false ); -- -- delete doc; --} -- --void TestFontsData::checkType3() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/tests/type3.pdf"); -- QVERIFY( doc ); -- -- QList<Poppler::FontInfo> listOfFonts = doc->fonts(); -- QCOMPARE( listOfFonts.size(), 2 ); -- QCOMPARE( listOfFonts.at(0).name(), QString("Helvetica") ); -- QCOMPARE( listOfFonts.at(0).type(), Poppler::FontInfo::Type1 ); -- QCOMPARE( listOfFonts.at(0).typeName(), QString("Type 1") ); -- -- QCOMPARE( listOfFonts.at(0).isEmbedded(), false ); -- QCOMPARE( listOfFonts.at(0).isSubset(), false ); -- -- QCOMPARE( listOfFonts.at(1).name(), QString("") ); -- QCOMPARE( listOfFonts.at(1).type(), Poppler::FontInfo::Type3 ); -- QCOMPARE( listOfFonts.at(1).typeName(), QString("Type 3") ); -- -- QCOMPARE( listOfFonts.at(1).isEmbedded(), true ); -- QCOMPARE( listOfFonts.at(1).isSubset(), false ); -- -- delete doc; --} -- --void TestFontsData::checkTrueType() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf"); -- QVERIFY( doc ); -- -- QList<Poppler::FontInfo> listOfFonts = doc->fonts(); -- QCOMPARE( listOfFonts.size(), 2 ); -- QCOMPARE( listOfFonts.at(0).name(), QString("Arial-BoldMT") ); -- QCOMPARE( listOfFonts.at(0).type(), Poppler::FontInfo::TrueType ); -- QCOMPARE( listOfFonts.at(0).typeName(), QString("TrueType") ); -- -- QCOMPARE( listOfFonts.at(0).isEmbedded(), false ); -- QCOMPARE( listOfFonts.at(0).isSubset(), false ); -- -- QCOMPARE( listOfFonts.at(1).name(), QString("ArialMT") ); -- QCOMPARE( listOfFonts.at(1).type(), Poppler::FontInfo::TrueType ); -- QCOMPARE( listOfFonts.at(1).typeName(), QString("TrueType") ); -- -- QCOMPARE( listOfFonts.at(1).isEmbedded(), false ); -- QCOMPARE( listOfFonts.at(1).isSubset(), false ); -- -- delete doc; --} -- --void TestFontsData::checkFontIterator() --{ -- // loading a 1-page document -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/tests/type3.pdf"); -- QVERIFY( doc ); -- // loading a 6-pages document -- Poppler::Document *doc6 = Poppler::Document::load(TESTDATADIR "/tests/cropbox.pdf"); -- QVERIFY( doc6 ); -- -- std::unique_ptr< Poppler::FontIterator > it; -- -- // some tests with the 1-page document: -- // - check a default iterator -- it.reset( doc->newFontIterator() ); -- QVERIFY( it->hasNext() ); -- // - check an iterator for negative pages to behave as 0 -- it.reset( doc->newFontIterator( -1 ) ); -- QVERIFY( it->hasNext() ); -- // - check an iterator for pages out of the page limit -- it.reset( doc->newFontIterator( 1 ) ); -- QVERIFY( !it->hasNext() ); -- // - check that it reaches the end after 1 iteration -- it.reset( doc->newFontIterator() ); -- QVERIFY( it->hasNext() ); -- it->next(); -- QVERIFY( !it->hasNext() ); -- -- // some tests with the 6-page document: -- // - check a default iterator -- it.reset( doc6->newFontIterator() ); -- QVERIFY( it->hasNext() ); -- // - check an iterator for pages out of the page limit -- it.reset( doc6->newFontIterator( 6 ) ); -- QVERIFY( !it->hasNext() ); -- // - check that it reaches the end after 6 iterations -- it.reset( doc6->newFontIterator() ); -- QVERIFY( it->hasNext() ); -- it->next(); -- QVERIFY( it->hasNext() ); -- it->next(); -- QVERIFY( it->hasNext() ); -- it->next(); -- QVERIFY( it->hasNext() ); -- it->next(); -- QVERIFY( it->hasNext() ); -- it->next(); -- QVERIFY( it->hasNext() ); -- it->next(); -- QVERIFY( !it->hasNext() ); -- -- delete doc; -- delete doc6; --} -- --void TestFontsData::checkSecondDocumentQuery() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/tests/type3.pdf"); -- QVERIFY( doc ); -- -- QList<Poppler::FontInfo> listOfFonts = doc->fonts(); -- QCOMPARE( listOfFonts.size(), 2 ); -- // check we get the very same result when calling fonts() again (#19405) -- QList<Poppler::FontInfo> listOfFonts2 = doc->fonts(); -- QCOMPARE( listOfFonts, listOfFonts2 ); -- -- delete doc; --} -- --void TestFontsData::checkMultipleIterations() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/tests/type3.pdf"); -- QVERIFY( doc ); -- -- QList<Poppler::FontInfo> listOfFonts = loadFontsViaIterator( doc ); -- QCOMPARE( listOfFonts.size(), 2 ); -- QList<Poppler::FontInfo> listOfFonts2 = loadFontsViaIterator( doc ); -- QCOMPARE( listOfFonts, listOfFonts2 ); -- -- delete doc; --} -- --void TestFontsData::checkScanForFonts() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/tests/fonts.pdf"); -- QVERIFY( doc ); -- -- QList<Poppler::FontInfo> listOfFonts = doc->fonts(); -- QCOMPARE( listOfFonts.size(), 3 ); -- // check we get the very same result when gatering fonts using scanForFonts -- QList<Poppler::FontInfo> listOfFonts2; -- for ( int i = 0; i < doc->numPages(); ++i ) -- { -- doc->scanForFonts( 1, &listOfFonts2 ); -- } -- QCOMPARE( listOfFonts, listOfFonts2 ); -- -- // check doing a second scanForFonts gives no result -- QList<Poppler::FontInfo> listOfFonts3; -- for ( int i = 0; i < doc->numPages(); ++i ) -- { -- doc->scanForFonts( 1, &listOfFonts3 ); -- } -- QVERIFY( listOfFonts3.isEmpty() ); -- -- delete doc; --} -- --QTEST_MAIN(TestFontsData) --#include "check_fonts.moc" -- -diff --git a/qt4/tests/check_goostring.cpp b/qt4/tests/check_goostring.cpp -deleted file mode 100644 -index 69f7cdc5..00000000 ---- a/qt4/tests/check_goostring.cpp -+++ /dev/null -@@ -1,127 +0,0 @@ --#include <QtCore/QScopedPointer> --#include <QtTest/QtTest> -- --#include "goo/GooString.h" -- --class TestGooString : public QObject --{ -- Q_OBJECT --private slots: -- void testInsertData_data(); -- void testInsertData(); -- void testInsert(); -- void testFormat(); --}; -- --void TestGooString::testInsertData_data() --{ -- QTest::addColumn<QByteArray>("string"); -- QTest::addColumn<QByteArray>("addition"); -- QTest::addColumn<int>("position"); -- QTest::addColumn<QByteArray>("result"); -- -- QTest::newRow("foo") << QByteArray("foo") << QByteArray("bar") << 0 << QByteArray("barfoo"); -- QTest::newRow("<empty>") << QByteArray() << QByteArray("bar") << 0 << QByteArray("bar"); -- QTest::newRow("foo+bar #1") << QByteArray("f+bar") << QByteArray("oo") << 1 << QByteArray("foo+bar"); -- QTest::newRow("foo+bar #2") << QByteArray("fobar") << QByteArray("o+") << 2 << QByteArray("foo+bar"); -- QTest::newRow("foo+bar #last") << QByteArray("foo+r") << QByteArray("ba") << 4 << QByteArray("foo+bar"); -- QTest::newRow("foo+bar #end") << QByteArray("foo+") << QByteArray("bar") << 4 << QByteArray("foo+bar"); -- QTest::newRow("long #start") << QByteArray("very string") << QByteArray("long long long long long ") << 5 << QByteArray("very long long long long long string"); --} -- --void TestGooString::testInsertData() --{ -- QFETCH(QByteArray, string); -- QFETCH(QByteArray, addition); -- QFETCH(int, position); -- QFETCH(QByteArray, result); -- -- GooString goo(string.constData()); -- QCOMPARE(goo.getCString(), string.constData()); -- goo.insert(position, addition.constData()); -- QCOMPARE(goo.getCString(), result.constData()); --} -- --void TestGooString::testInsert() --{ -- { -- GooString goo; -- goo.insert(0, "."); -- goo.insert(0, "This is a very long long test string"); -- QCOMPARE(goo.getCString(), "This is a very long long test string."); -- } -- { -- GooString goo; -- goo.insert(0, "second-part-third-part"); -- goo.insert(0, "first-part-"); -- QCOMPARE(goo.getCString(), "first-part-second-part-third-part"); -- } --} -- --void TestGooString::testFormat() --{ -- { -- const QScopedPointer<GooString> goo(GooString::format("{0:d},{1:x}", 1, 0xF)); -- QCOMPARE(goo->getCString(), "1,f"); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("{0:d},{0:x},{0:X},{0:o},{0:b},{0:w}", 0xA)); -- QCOMPARE(goo->getCString(), "10,a,A,12,1010, "); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("{0:d},{0:x},{0:X},{0:o},{0:b}", -0xA)); -- QCOMPARE(goo->getCString(), "-10,-a,-A,-12,-1010"); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("{0:c}{1:c}{2:c}{3:c}", -- 'T', (char)'E', (short)'S', (int)'T')); -- QCOMPARE(goo->getCString(), "TEST"); -- -- const QScopedPointer<GooString> goo2(GooString::format("{0:s} {1:t}", "TEST", goo.data())); -- QCOMPARE(goo2->getCString(), "TEST TEST"); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("{0:ud} {1:d} {2:d}", -- UINT_MAX, INT_MAX, INT_MIN)); -- const QByteArray expected = QString("%1 %2 %3").arg(UINT_MAX).arg(INT_MAX).arg(INT_MIN).toLatin1(); -- QCOMPARE(goo->getCString(), expected.constData()); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("{0:uld} {1:ld} {2:ld}", -- ULONG_MAX, LONG_MAX, LONG_MIN)); -- const QByteArray expected = QString("%1 %2 %3").arg(ULONG_MAX).arg(LONG_MAX).arg(LONG_MIN).toLatin1(); -- QCOMPARE(goo->getCString(), expected.constData()); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("{0:ulld} {1:lld} {2:lld}", -- ULLONG_MAX, LLONG_MAX, LLONG_MIN)); -- const QByteArray expected = QString("%1 %2 %3").arg(ULLONG_MAX).arg(LLONG_MAX).arg(LLONG_MIN).toLatin1(); -- QCOMPARE(goo->getCString(), expected.constData()); -- } -- { -- const QScopedPointer<GooString> gooD(GooString::format("{0:.1f} {0:.1g} {0:.1gs} | {1:.1f} {1:.1g} {1:.1gs}", 1., .012)); -- const QScopedPointer<GooString> gooF(GooString::format("{0:.1f} {0:.1g} {0:.1gs} | {1:.1f} {1:.1g} {1:.1gs}", 1.f, .012f)); -- QCOMPARE(gooD->getCString(), "1.0 1 1 | 0.0 0 0.01"); -- QCOMPARE(gooF->getCString(), "1.0 1 1 | 0.0 0 0.01"); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("{0:.4f} {0:.4g} {0:.4gs}", .012)); -- QCOMPARE(goo->getCString(), "0.0120 0.012 0.012"); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("{{ SomeText {0:d} }}", 1)); -- QCOMPARE(goo->getCString(), "{ SomeText 1 }"); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("{{{{ {{ SomeText {0:d}", 2)); -- QCOMPARE(goo->getCString(), "{{ { SomeText 2"); -- } -- { -- const QScopedPointer<GooString> goo(GooString::format("SomeText {0:d} }} }}}}", 3)); -- QCOMPARE(goo->getCString(), "SomeText 3 } }}"); -- } --} -- --QTEST_MAIN(TestGooString) --#include "check_goostring.moc" -- -diff --git a/qt4/tests/check_lexer.cpp b/qt4/tests/check_lexer.cpp -deleted file mode 100644 -index 93c3621d..00000000 ---- a/qt4/tests/check_lexer.cpp -+++ /dev/null -@@ -1,107 +0,0 @@ --#include <QtTest/QtTest> -- --#include "Object.h" --#include "Lexer.h" -- --class TestLexer : public QObject --{ -- Q_OBJECT --private slots: -- void testNumbers(); --}; -- --void TestLexer::testNumbers() --{ -- char data[] = "0 1 -1 2147483647 -2147483647 2147483648 -2147483648 4294967297 -2147483649 0.1 1.1 -1.1 2147483647.1 -2147483647.1 2147483648.1 -2147483648.1 4294967297.1 -2147483649.1 9223372036854775807 18446744073709551615"; -- MemStream *stream = new MemStream(data, 0, strlen(data), Object(objNull)); -- Lexer *lexer = new Lexer(NULL, stream); -- QVERIFY( lexer ); -- -- Object obj; -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt); -- QCOMPARE(obj.getInt(), 0); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt); -- QCOMPARE(obj.getInt(), 1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt); -- QCOMPARE(obj.getInt(), -1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt); -- QCOMPARE(obj.getInt(), 2147483647); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt); -- QCOMPARE(obj.getInt(), -2147483647); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt64); -- QCOMPARE(obj.getInt64(), 2147483648ll); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt); -- QCOMPARE(obj.getInt(), -2147483647-1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt64); -- QCOMPARE(obj.getInt64(), 4294967297ll); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt64); -- QCOMPARE(obj.getInt64(), -2147483649ll); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), 0.1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), 1.1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), -1.1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), 2147483647.1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), -2147483647.1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), 2147483648.1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), -2147483648.1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), 4294967297.1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), -2147483649.1); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objInt64); -- QCOMPARE(obj.getInt64(), 9223372036854775807ll); -- -- obj = lexer->getObj(); -- QCOMPARE(obj.getType(), objReal); -- QCOMPARE(obj.getReal(), 18446744073709551616.); -- -- delete lexer; --} -- --QTEST_MAIN(TestLexer) --#include "check_lexer.moc" -- -diff --git a/qt4/tests/check_links.cpp b/qt4/tests/check_links.cpp -deleted file mode 100644 -index e5c17368..00000000 ---- a/qt4/tests/check_links.cpp -+++ /dev/null -@@ -1,98 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --#include <memory> -- --class TestLinks : public QObject --{ -- Q_OBJECT --private slots: -- void checkDocumentWithNoDests(); -- void checkDests_xr01(); -- void checkDests_xr02(); --}; -- --static bool isDestinationValid_pageNumber( const Poppler::LinkDestination *dest, const Poppler::Document *doc ) --{ -- return dest->pageNumber() > 0 && dest->pageNumber() <= doc->numPages(); --} -- --static bool isDestinationValid_name( const Poppler::LinkDestination *dest ) --{ -- return !dest->destinationName().isEmpty(); --} -- -- --void TestLinks::checkDocumentWithNoDests() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/WithAttachments.pdf"); -- QVERIFY( doc ); -- -- std::unique_ptr< Poppler::LinkDestination > dest; -- dest.reset( doc->linkDestination("no.dests.in.this.document") ); -- QVERIFY( !isDestinationValid_pageNumber( dest.get(), doc ) ); -- QVERIFY( isDestinationValid_name( dest.get() ) ); -- -- delete doc; --} -- --void TestLinks::checkDests_xr01() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/xr01.pdf"); -- QVERIFY( doc ); -- -- Poppler::Page *page = doc->page(0); -- QVERIFY( page ); -- -- QList< Poppler::Link* > links = page->links(); -- QCOMPARE( links.count(), 2 ); -- -- { -- QCOMPARE( links.at(0)->linkType(), Poppler::Link::Goto ); -- Poppler::LinkGoto *link = static_cast< Poppler::LinkGoto * >( links.at(0) ); -- const Poppler::LinkDestination dest = link->destination(); -- QVERIFY( !isDestinationValid_pageNumber( &dest, doc ) ); -- QVERIFY( isDestinationValid_name( &dest ) ); -- QCOMPARE( dest.destinationName(), QString::fromLatin1("section.1") ); -- } -- -- { -- QCOMPARE( links.at(1)->linkType(), Poppler::Link::Goto ); -- Poppler::LinkGoto *link = static_cast< Poppler::LinkGoto * >( links.at(1) ); -- const Poppler::LinkDestination dest = link->destination(); -- QVERIFY( !isDestinationValid_pageNumber( &dest, doc ) ); -- QVERIFY( isDestinationValid_name( &dest ) ); -- QCOMPARE( dest.destinationName(), QString::fromLatin1("section.2") ); -- } -- -- qDeleteAll(links); -- delete page; -- delete doc; --} -- --void TestLinks::checkDests_xr02() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/xr02.pdf"); -- QVERIFY( doc ); -- -- std::unique_ptr< Poppler::LinkDestination > dest; -- dest.reset( doc->linkDestination("section.1") ); -- QVERIFY( isDestinationValid_pageNumber( dest.get(), doc ) ); -- QVERIFY( !isDestinationValid_name( dest.get() ) ); -- dest.reset( doc->linkDestination("section.2") ); -- QVERIFY( isDestinationValid_pageNumber( dest.get(), doc ) ); -- QVERIFY( !isDestinationValid_name( dest.get() ) ); -- dest.reset( doc->linkDestination("section.3") ); -- QVERIFY( !isDestinationValid_pageNumber( dest.get(), doc ) ); -- QVERIFY( isDestinationValid_name( dest.get() ) ); -- -- delete doc; --} -- --QTEST_MAIN(TestLinks) -- --#include "check_links.moc" -diff --git a/qt4/tests/check_metadata.cpp b/qt4/tests/check_metadata.cpp -deleted file mode 100644 -index fb4f7163..00000000 ---- a/qt4/tests/check_metadata.cpp -+++ /dev/null -@@ -1,275 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --class TestMetaData: public QObject --{ -- Q_OBJECT --private slots: -- void checkStrings_data(); -- void checkStrings(); -- void checkStrings2_data(); -- void checkStrings2(); -- void checkStringKeys(); -- void checkLinearised(); -- void checkNumPages(); -- void checkDate(); -- void checkPageSize(); -- void checkPortraitOrientation(); -- void checkLandscapeOrientation(); -- void checkUpsideDownOrientation(); -- void checkSeascapeOrientation(); -- void checkVersion(); -- void checkPdfId(); -- void checkNoPdfId(); --}; -- --void TestMetaData::checkStrings_data() --{ -- QTest::addColumn<QString>("key"); -- QTest::addColumn<QString>("value"); -- -- QTest::newRow( "Author" ) << "Author" << "Brad Hards"; -- QTest::newRow( "Title" ) << "Title" << "Two pages"; -- QTest::newRow( "Subject" ) << "Subject" -- << "A two page layout for poppler testing"; -- QTest::newRow( "Keywords" ) << "Keywords" << "Qt4 bindings"; -- QTest::newRow( "Creator" ) << "Creator" << "iText: cgpdftops CUPS filter"; -- QTest::newRow( "Producer" ) << "Producer" << "Acrobat Distiller 7.0 for Macintosh"; --} -- --void TestMetaData::checkStrings() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf"); -- QVERIFY( doc ); -- -- QFETCH( QString, key ); -- QFETCH( QString, value ); -- QCOMPARE( doc->info(key), value ); -- -- delete doc; --} -- --void TestMetaData::checkStrings2_data() --{ -- QTest::addColumn<QString>("key"); -- QTest::addColumn<QString>("value"); -- -- QTest::newRow( "Title" ) << "Title" << "Malaga hotels"; -- QTest::newRow( "Author" ) << "Author" << "Brad Hards"; -- QTest::newRow( "Creator" ) << "Creator" << "Safari: cgpdftops CUPS filter"; -- QTest::newRow( "Producer" ) << "Producer" << "Acrobat Distiller 7.0 for Macintosh"; -- QTest::newRow( "Keywords" ) << "Keywords" << "First\rSecond\rthird"; -- QTest::newRow( "Custom1" ) << "Custom1" << "CustomValue1"; -- QTest::newRow( "Custom2" ) << "Custom2" << "CustomValue2"; --} -- --void TestMetaData::checkStrings2() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf"); -- QVERIFY( doc ); -- -- QFETCH( QString, key ); -- QFETCH( QString, value ); -- QCOMPARE( doc->info(key), value ); -- -- delete doc; --} -- --void TestMetaData::checkStringKeys() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf"); -- QVERIFY( doc ); -- -- QStringList keyList; -- keyList << "Title" << "Author" << "Creator" << "Keywords" << "CreationDate"; -- keyList << "Producer" << "ModDate" << "Custom1" << "Custom2"; -- keyList.sort(); -- QStringList keysInDoc = doc->infoKeys(); -- keysInDoc.sort(); -- QCOMPARE( keysInDoc, keyList ); -- -- delete doc; --} -- --void TestMetaData::checkLinearised() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf"); -- QVERIFY( doc ); -- -- QVERIFY( doc->isLinearized() ); -- -- delete doc; -- -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf"); -- QVERIFY( doc ); -- QCOMPARE( doc->isLinearized(), false ); -- -- delete doc; --} -- --void TestMetaData::checkPortraitOrientation() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf"); -- QVERIFY( doc ); -- -- Poppler::Page *page = doc->page(0); -- QCOMPARE( page->orientation(), Poppler::Page::Portrait ); -- -- delete page; -- delete doc; --} -- --void TestMetaData::checkNumPages() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf"); -- QVERIFY( doc ); -- QCOMPARE( doc->numPages(), 2 ); -- -- delete doc; -- -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf"); -- QVERIFY( doc ); -- QCOMPARE( doc->numPages(), 1 ); -- -- delete doc; --} -- --void TestMetaData::checkDate() --{ -- Poppler::Document *doc; -- -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf"); -- QVERIFY( doc ); -- QCOMPARE( doc->date("ModDate"), QDateTime(QDate(2005, 12, 5), QTime(9,44,46), Qt::UTC ) ); -- QCOMPARE( doc->date("CreationDate"), QDateTime(QDate(2005, 8, 13), QTime(1,12,11), Qt::UTC ) ); -- -- delete doc; --} -- --void TestMetaData::checkPageSize() --{ -- Poppler::Document *doc; -- -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf"); -- QVERIFY( doc ); -- Poppler::Page *page = doc->page(0); -- QCOMPARE( page->pageSize(), QSize(595, 842) ); -- QCOMPARE( page->pageSizeF(), QSizeF(595.22, 842) ); -- -- delete page; -- delete doc; --} -- -- --void TestMetaData::checkLandscapeOrientation() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf"); -- QVERIFY( doc ); -- -- Poppler::Page *page = doc->page(1); -- QCOMPARE( page->orientation(), Poppler::Page::Landscape ); -- -- delete page; -- delete doc; --} -- --void TestMetaData::checkUpsideDownOrientation() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf"); -- QVERIFY( doc ); -- -- Poppler::Page *page = doc->page(2); -- QCOMPARE( page->orientation(), Poppler::Page::UpsideDown ); -- -- delete page; -- delete doc; --} -- --void TestMetaData::checkSeascapeOrientation() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf"); -- QVERIFY( doc ); -- -- Poppler::Page *page = doc->page(3); -- QCOMPARE( page->orientation(), Poppler::Page::Seascape ); -- -- delete page; -- delete doc; --} -- --void TestMetaData::checkVersion() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->pdfVersion(), 1.6 ); -- int major = 0, minor = 0; -- doc->getPdfVersion( &major, &minor ); -- QCOMPARE( major, 1 ); -- QCOMPARE( minor, 6 ); -- -- delete doc; --} -- --void TestMetaData::checkPdfId() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/A6EmbeddedFiles.pdf"); -- QVERIFY( doc ); -- -- const QByteArray referencePermanentId( "00C9D5B6D8FB11D7A902003065D630AA" ); -- const QByteArray referenceUpdateId( "39AECAE6D8FB11D7A902003065D630AA" ); -- -- { -- // no IDs wanted, just existance check -- QVERIFY( doc->getPdfId( 0, 0 ) ); -- } -- { -- // only permanent ID -- QByteArray permanentId; -- QVERIFY( doc->getPdfId( &permanentId, 0 ) ); -- QCOMPARE( permanentId.toUpper(), referencePermanentId ); -- } -- { -- // only update ID -- QByteArray updateId; -- QVERIFY( doc->getPdfId( 0, &updateId ) ); -- QCOMPARE( updateId.toUpper(), referenceUpdateId ); -- } -- { -- // both IDs -- QByteArray permanentId; -- QByteArray updateId; -- QVERIFY( doc->getPdfId( &permanentId, &updateId ) ); -- QCOMPARE( permanentId.toUpper(), referencePermanentId ); -- QCOMPARE( updateId.toUpper(), referenceUpdateId ); -- } -- -- delete doc; --} -- --void TestMetaData::checkNoPdfId() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/WithActualText.pdf"); -- QVERIFY( doc ); -- -- QVERIFY( !doc->getPdfId( 0, 0 ) ); -- -- delete doc; --} -- --QTEST_MAIN(TestMetaData) --#include "check_metadata.moc" -- -diff --git a/qt4/tests/check_optcontent.cpp b/qt4/tests/check_optcontent.cpp -deleted file mode 100644 -index 2de29952..00000000 ---- a/qt4/tests/check_optcontent.cpp -+++ /dev/null -@@ -1,446 +0,0 @@ --#include <QtTest/QtTest> -- --#include "PDFDoc.h" --#include "GlobalParams.h" -- --#include <poppler-qt4.h> -- --class TestOptionalContent: public QObject --{ -- Q_OBJECT --private slots: -- void checkVisPolicy(); -- void checkNestedLayers(); -- void checkNoOptionalContent(); -- void checkIsVisible(); -- void checkVisibilitySetting(); -- void checkRadioButtons(); --}; -- --void TestOptionalContent::checkVisPolicy() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/vis_policy_test.pdf"); -- QVERIFY( doc ); -- -- QVERIFY( doc->hasOptionalContent() ); -- -- Poppler::OptContentModel *optContent = doc->optionalContentModel(); -- QModelIndex index; -- index = optContent->index( 0, 0, QModelIndex() ); -- QCOMPARE( optContent->data( index, Qt::DisplayRole ).toString(), QString( "A" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( index, Qt::CheckStateRole ).toInt() ), Qt::Checked ); -- index = optContent->index( 1, 0, QModelIndex() ); -- QCOMPARE( optContent->data( index, Qt::DisplayRole ).toString(), QString( "B" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( index, Qt::CheckStateRole ).toInt() ), Qt::Checked ); -- -- delete doc; --} -- --void TestOptionalContent::checkNestedLayers() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/NestedLayers.pdf"); -- QVERIFY( doc ); -- -- QVERIFY( doc->hasOptionalContent() ); -- -- Poppler::OptContentModel *optContent = doc->optionalContentModel(); -- QModelIndex index; -- -- index = optContent->index( 0, 0, QModelIndex() ); -- QCOMPARE( optContent->data( index, Qt::DisplayRole ).toString(), QString( "Black Text and Green Snow" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( index, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- index = optContent->index( 1, 0, QModelIndex() ); -- QCOMPARE( optContent->data( index, Qt::DisplayRole ).toString(), QString( "Mountains and Image" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( index, Qt::CheckStateRole ).toInt() ), Qt::Checked ); -- -- // This is a sub-item of "Mountains and Image" -- QModelIndex subindex = optContent->index( 0, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "Image" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( index, Qt::CheckStateRole ).toInt() ), Qt::Checked ); -- -- index = optContent->index( 2, 0, QModelIndex() ); -- QCOMPARE( optContent->data( index, Qt::DisplayRole ).toString(), QString( "Starburst" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( index, Qt::CheckStateRole ).toInt() ), Qt::Checked ); -- -- index = optContent->index( 3, 0, QModelIndex() ); -- QCOMPARE( optContent->data( index, Qt::DisplayRole ).toString(), QString( "Watermark" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( index, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- delete doc; --} -- --void TestOptionalContent::checkNoOptionalContent() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->hasOptionalContent(), false ); -- -- delete doc; --} -- --void TestOptionalContent::checkIsVisible() --{ -- GooString *fileName = new GooString(TESTDATADIR "/unittestcases/vis_policy_test.pdf"); -- globalParams = new GlobalParams(); -- PDFDoc *doc = new PDFDoc( fileName ); -- QVERIFY( doc ); -- -- OCGs *ocgs = doc->getOptContentConfig(); -- QVERIFY( ocgs ); -- -- XRef *xref = doc->getXRef(); -- -- Object obj; -- -- // In this test, both Ref(21,0) and Ref(2,0) are set to On -- -- // AnyOn, one element array: -- // 22 0 obj<</Type/OCMD/OCGs[21 0 R]/P/AnyOn>>endobj -- obj = xref->fetch( 22, 0 ); -- QVERIFY( obj.isDict() ); -- QVERIFY( ocgs->optContentIsVisible( &obj ) ); -- -- // Same again, looking for any leaks or dubious free()'s -- obj = xref->fetch( 22, 0 ); -- QVERIFY( obj.isDict() ); -- QVERIFY( ocgs->optContentIsVisible( &obj ) ); -- -- // AnyOff, one element array: -- // 29 0 obj<</Type/OCMD/OCGs[21 0 R]/P/AnyOff>>endobj -- obj = xref->fetch( 29, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AllOn, one element array: -- // 36 0 obj<</Type/OCMD/OCGs[28 0 R]/P/AllOn>>endobj -- obj = xref->fetch( 36, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- -- // AllOff, one element array: -- // 43 0 obj<</Type/OCMD/OCGs[28 0 R]/P/AllOff>>endobj -- obj = xref->fetch( 43, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AnyOn, multi-element array: -- // 50 0 obj<</Type/OCMD/OCGs[21 0 R 28 0 R]/P/AnyOn>>endobj -- obj = xref->fetch( 50, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AnyOff, multi-element array: -- // 57 0 obj<</Type/OCMD/P/AnyOff/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 57, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AllOn, multi-element array: -- // 64 0 obj<</Type/OCMD/P/AllOn/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 64, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AllOff, multi-element array: -- // 71 0 obj<</Type/OCMD/P/AllOff/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 71, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- delete doc; -- delete globalParams; --} -- --void TestOptionalContent::checkVisibilitySetting() --{ -- globalParams = new GlobalParams(); -- GooString *fileName = new GooString(TESTDATADIR "/unittestcases/vis_policy_test.pdf"); -- PDFDoc *doc = new PDFDoc( fileName ); -- QVERIFY( doc ); -- -- OCGs *ocgs = doc->getOptContentConfig(); -- QVERIFY( ocgs ); -- -- XRef *xref = doc->getXRef(); -- -- Object obj; -- -- // In this test, both Ref(21,0) and Ref(28,0) start On, -- // based on the file settings -- Object ref21obj( 21, 0 ); -- Ref ref21 = ref21obj.getRef(); -- OptionalContentGroup *ocgA = ocgs->findOcgByRef( ref21 ); -- QVERIFY( ocgA ); -- -- QVERIFY( (ocgA->getName()->cmp("A")) == 0 ); -- QCOMPARE( ocgA->getState(), OptionalContentGroup::On ); -- -- Object ref28obj( 28, 0 ); -- Ref ref28 = ref28obj.getRef(); -- OptionalContentGroup *ocgB = ocgs->findOcgByRef( ref28 ); -- QVERIFY( ocgB ); -- -- QVERIFY( (ocgB->getName()->cmp("B")) == 0 ); -- QCOMPARE( ocgB->getState(), OptionalContentGroup::On ); -- -- // turn one Off -- ocgA->setState( OptionalContentGroup::Off ); -- -- // AnyOn, one element array: -- // 22 0 obj<</Type/OCMD/OCGs[21 0 R]/P/AnyOn>>endobj -- obj = xref->fetch( 22, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // Same again, looking for any leaks or dubious free()'s -- obj = xref->fetch( 22, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AnyOff, one element array: -- // 29 0 obj<</Type/OCMD/OCGs[21 0 R]/P/AnyOff>>endobj -- obj = xref->fetch( 29, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AllOn, one element array: -- // 36 0 obj<</Type/OCMD/OCGs[28 0 R]/P/AllOn>>endobj -- obj = xref->fetch( 36, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AllOff, one element array: -- // 43 0 obj<</Type/OCMD/OCGs[28 0 R]/P/AllOff>>endobj -- obj = xref->fetch( 43, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AnyOn, multi-element array: -- // 50 0 obj<</Type/OCMD/OCGs[21 0 R 28 0 R]/P/AnyOn>>endobj -- obj = xref->fetch( 50, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AnyOff, multi-element array: -- // 57 0 obj<</Type/OCMD/P/AnyOff/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 57, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AllOn, multi-element array: -- // 64 0 obj<</Type/OCMD/P/AllOn/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 64, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AllOff, multi-element array: -- // 71 0 obj<</Type/OCMD/P/AllOff/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 71, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- -- // Turn the other one off as well (i.e. both are Off) -- ocgB->setState(OptionalContentGroup::Off); -- -- // AnyOn, one element array: -- // 22 0 obj<</Type/OCMD/OCGs[21 0 R]/P/AnyOn>>endobj -- obj = xref->fetch( 22, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // Same again, looking for any leaks or dubious free()'s -- obj = xref->fetch( 22, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AnyOff, one element array: -- // 29 0 obj<</Type/OCMD/OCGs[21 0 R]/P/AnyOff>>endobj -- obj = xref->fetch( 29, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AllOn, one element array: -- // 36 0 obj<</Type/OCMD/OCGs[28 0 R]/P/AllOn>>endobj -- obj = xref->fetch( 36, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AllOff, one element array: -- // 43 0 obj<</Type/OCMD/OCGs[28 0 R]/P/AllOff>>endobj -- obj = xref->fetch( 43, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AnyOn, multi-element array: -- // 50 0 obj<</Type/OCMD/OCGs[21 0 R 28 0 R]/P/AnyOn>>endobj -- obj = xref->fetch( 50, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AnyOff, multi-element array: -- // 57 0 obj<</Type/OCMD/P/AnyOff/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 57, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AllOn, multi-element array: -- // 64 0 obj<</Type/OCMD/P/AllOn/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 64, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AllOff, multi-element array: -- // 71 0 obj<</Type/OCMD/P/AllOff/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 71, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- -- // Turn the first one on again (21 is On, 28 is Off) -- ocgA->setState(OptionalContentGroup::On); -- -- // AnyOn, one element array: -- // 22 0 obj<</Type/OCMD/OCGs[21 0 R]/P/AnyOn>>endobj -- obj = xref->fetch( 22, 0); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // Same again, looking for any leaks or dubious free()'s -- obj = xref->fetch( 22, 0); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AnyOff, one element array: -- // 29 0 obj<</Type/OCMD/OCGs[21 0 R]/P/AnyOff>>endobj -- obj = xref->fetch( 29, 0); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AllOn, one element array: -- // 36 0 obj<</Type/OCMD/OCGs[28 0 R]/P/AllOn>>endobj -- obj = xref->fetch( 36, 0); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AllOff, one element array: -- // 43 0 obj<</Type/OCMD/OCGs[28 0 R]/P/AllOff>>endobj -- obj = xref->fetch( 43, 0); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AnyOn, multi-element array: -- // 50 0 obj<</Type/OCMD/OCGs[21 0 R 28 0 R]/P/AnyOn>>endobj -- obj = xref->fetch( 50, 0); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AnyOff, multi-element array: -- // 57 0 obj<</Type/OCMD/P/AnyOff/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 57, 0); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), true ); -- -- // AllOn, multi-element array: -- // 64 0 obj<</Type/OCMD/P/AllOn/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 64, 0); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- // AllOff, multi-element array: -- // 71 0 obj<</Type/OCMD/P/AllOff/OCGs[21 0 R 28 0 R]>>endobj -- obj = xref->fetch( 71, 0 ); -- QVERIFY( obj.isDict() ); -- QCOMPARE( ocgs->optContentIsVisible( &obj ), false ); -- -- delete doc; -- delete globalParams; --} -- --void TestOptionalContent::checkRadioButtons() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/ClarityOCGs.pdf"); -- QVERIFY( doc ); -- -- QVERIFY( doc->hasOptionalContent() ); -- -- Poppler::OptContentModel *optContent = doc->optionalContentModel(); -- QModelIndex index; -- -- index = optContent->index( 0, 0, QModelIndex() ); -- QCOMPARE( optContent->data( index, Qt::DisplayRole ).toString(), QString( "Languages" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( index, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- // These are sub-items of the "Languages" label -- QModelIndex subindex = optContent->index( 0, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "English" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Checked ); -- -- subindex = optContent->index( 1, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "French" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- subindex = optContent->index( 2, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "Japanese" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- // RBGroup of languages, so turning on Japanese should turn off English -- QVERIFY( optContent->setData( subindex, QVariant( true ), Qt::CheckStateRole ) ); -- -- subindex = optContent->index( 0, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "English" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- subindex = optContent->index( 2, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "Japanese" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Checked ); -- -- subindex = optContent->index( 1, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "French" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- // and turning on French should turn off Japanese -- QVERIFY( optContent->setData( subindex, QVariant( true ), Qt::CheckStateRole ) ); -- -- subindex = optContent->index( 0, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "English" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- subindex = optContent->index( 2, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "Japanese" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- subindex = optContent->index( 1, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "French" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Checked ); -- -- -- // and turning off French should leave them all off -- QVERIFY( optContent->setData( subindex, QVariant( false ), Qt::CheckStateRole ) ); -- -- subindex = optContent->index( 0, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "English" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- subindex = optContent->index( 2, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "Japanese" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- subindex = optContent->index( 1, 0, index ); -- QCOMPARE( optContent->data( subindex, Qt::DisplayRole ).toString(), QString( "French" ) ); -- QCOMPARE( static_cast<Qt::CheckState>( optContent->data( subindex, Qt::CheckStateRole ).toInt() ), Qt::Unchecked ); -- -- delete doc; --} -- --QTEST_MAIN(TestOptionalContent) -- --#include "check_optcontent.moc" -- -diff --git a/qt4/tests/check_pagelabelinfo.cpp b/qt4/tests/check_pagelabelinfo.cpp -deleted file mode 100644 -index 4eb1ec36..00000000 ---- a/qt4/tests/check_pagelabelinfo.cpp -+++ /dev/null -@@ -1,43 +0,0 @@ --#include <QtTest/QtTest> -- --#include "PageLabelInfo_p.h" -- --class TestPageLabelInfo : public QObject --{ -- Q_OBJECT --private slots: -- void testToRoman(); -- void testFromRoman(); -- void testToLatin(); -- void testFromLatin(); --}; -- --void TestPageLabelInfo::testToRoman() --{ -- GooString str; -- toRoman(177, &str, gFalse); -- QCOMPARE (str.getCString(), "clxxvii"); --} -- --void TestPageLabelInfo::testFromRoman() --{ -- GooString roman("clxxvii"); -- QCOMPARE(fromRoman(roman.getCString()), 177); --} -- --void TestPageLabelInfo::testToLatin() --{ -- GooString str; -- toLatin(54, &str, gFalse); -- QCOMPARE(str.getCString(), "bbb"); --} -- --void TestPageLabelInfo::testFromLatin() --{ -- GooString latin("ddd"); -- QCOMPARE(fromLatin(latin.getCString()), 56); --} -- --QTEST_MAIN(TestPageLabelInfo) --#include "check_pagelabelinfo.moc" -- -diff --git a/qt4/tests/check_pagelayout.cpp b/qt4/tests/check_pagelayout.cpp -deleted file mode 100644 -index 6108f886..00000000 ---- a/qt4/tests/check_pagelayout.cpp -+++ /dev/null -@@ -1,49 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --class TestPageLayout: public QObject --{ -- Q_OBJECT --private slots: -- void checkNone(); -- void checkSingle(); -- void checkFacing(); --}; -- --void TestPageLayout::checkNone() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/UseNone.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->pageLayout(), Poppler::Document::NoLayout ); -- -- delete doc; --} -- --void TestPageLayout::checkSingle() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/FullScreen.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->pageLayout(), Poppler::Document::SinglePage ); -- -- delete doc; --} -- --void TestPageLayout::checkFacing() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->pageLayout(), Poppler::Document::TwoPageRight ); -- -- delete doc; --} -- --QTEST_MAIN(TestPageLayout) --#include "check_pagelayout.moc" -- -diff --git a/qt4/tests/check_pagemode.cpp b/qt4/tests/check_pagemode.cpp -deleted file mode 100644 -index 0565fe20..00000000 ---- a/qt4/tests/check_pagemode.cpp -+++ /dev/null -@@ -1,73 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --class TestPageMode: public QObject --{ -- Q_OBJECT --private slots: -- void checkNone(); -- void checkFullScreen(); -- void checkAttachments(); -- void checkThumbs(); -- void checkOC(); --}; -- --void TestPageMode::checkNone() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/UseNone.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->pageMode(), Poppler::Document::UseNone ); -- -- delete doc; --} -- --void TestPageMode::checkFullScreen() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/FullScreen.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->pageMode(), Poppler::Document::FullScreen ); -- -- delete doc; --} -- --void TestPageMode::checkAttachments() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/UseAttachments.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->pageMode(), Poppler::Document::UseAttach ); -- -- delete doc; --} -- --void TestPageMode::checkThumbs() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/UseThumbs.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->pageMode(), Poppler::Document::UseThumbs ); -- -- delete doc; --} -- --void TestPageMode::checkOC() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/UseOC.pdf"); -- QVERIFY( doc ); -- -- QCOMPARE( doc->pageMode(), Poppler::Document::UseOC ); -- -- delete doc; --} -- --QTEST_MAIN(TestPageMode) --#include "check_pagemode.moc" -- -diff --git a/qt4/tests/check_password.cpp b/qt4/tests/check_password.cpp -deleted file mode 100644 -index 4c7dcd1c..00000000 ---- a/qt4/tests/check_password.cpp -+++ /dev/null -@@ -1,88 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --class TestPassword: public QObject --{ -- Q_OBJECT --private slots: -- void password1(); -- void password1a(); -- void password2(); -- void password2a(); -- void password2b(); -- void password3(); --}; -- -- --// BUG:4557 --void TestPassword::password1() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(QString::fromUtf8(TESTDATADIR "/unittestcases/Gday garçon - open.pdf"), "", QString::fromUtf8("garçon").toLatin1() ); -- QVERIFY( doc ); -- QVERIFY( !doc->isLocked() ); -- -- delete doc; --} -- -- --void TestPassword::password1a() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(QString::fromUtf8(TESTDATADIR "/unittestcases/Gday garçon - open.pdf") ); -- QVERIFY( doc ); -- QVERIFY( doc->isLocked() ); -- QVERIFY( !doc->unlock( "", QString::fromUtf8("garçon").toLatin1() ) ); -- QVERIFY( !doc->isLocked() ); -- -- delete doc; --} -- --void TestPassword::password2() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(QString::fromUtf8(TESTDATADIR "/unittestcases/Gday garçon - owner.pdf"), QString::fromUtf8("garçon").toLatin1(), "" ); -- QVERIFY( doc ); -- QVERIFY( !doc->isLocked() ); -- -- delete doc; --} -- --void TestPassword::password2a() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(QString::fromUtf8(TESTDATADIR "/unittestcases/Gday garçon - owner.pdf"), QString::fromUtf8("garçon").toLatin1() ); -- QVERIFY( doc ); -- QVERIFY( !doc->isLocked() ); -- -- delete doc; --} -- --void TestPassword::password2b() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(QString::fromUtf8(TESTDATADIR "/unittestcases/Gday garçon - owner.pdf") ); -- QVERIFY( doc ); -- QVERIFY( !doc->isLocked() ); -- QVERIFY( !doc->unlock( QString::fromUtf8("garçon").toLatin1(), "" ) ); -- QVERIFY( !doc->isLocked() ); -- -- delete doc; --} -- --void TestPassword::password3() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load( QString::fromUtf8(TESTDATADIR "/unittestcases/PasswordEncrypted.pdf") ); -- QVERIFY( doc ); -- QVERIFY( doc->isLocked() ); -- QVERIFY( !doc->unlock( "", "password" ) ); -- QVERIFY( !doc->isLocked() ); -- -- delete doc; --} -- --QTEST_MAIN(TestPassword) --#include "check_password.moc" -- -diff --git a/qt4/tests/check_permissions.cpp b/qt4/tests/check_permissions.cpp -deleted file mode 100644 -index a3f3bdc6..00000000 ---- a/qt4/tests/check_permissions.cpp -+++ /dev/null -@@ -1,44 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --class TestPermissions: public QObject --{ -- Q_OBJECT --private slots: -- void permissions1(); --}; -- --void TestPermissions::permissions1() --{ -- Poppler::Document *doc; -- doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf"); -- QVERIFY( doc ); -- -- // we are allowed to print -- QVERIFY( doc->okToPrint() ); -- -- // we are not allowed to change -- QVERIFY( !(doc->okToChange()) ); -- -- // we are not allowed to copy or extract content -- QVERIFY( !(doc->okToCopy()) ); -- -- // we are not allowed to print at high resolution -- QVERIFY( !(doc->okToPrintHighRes()) ); -- -- // we are not allowed to fill forms -- QVERIFY( !(doc->okToFillForm()) ); -- -- // we are allowed to extract content for accessibility -- QVERIFY( doc->okToExtractForAccessibility() ); -- -- // we are allowed to assemble this document -- QVERIFY( doc->okToAssemble() ); -- -- delete doc; --} -- --QTEST_MAIN(TestPermissions) --#include "check_permissions.moc" -- -diff --git a/qt4/tests/check_search.cpp b/qt4/tests/check_search.cpp -deleted file mode 100644 -index 99659e04..00000000 ---- a/qt4/tests/check_search.cpp -+++ /dev/null -@@ -1,175 +0,0 @@ --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> -- --class TestSearch: public QObject --{ -- Q_OBJECT --private slots: -- void bug7063(); -- void testNextAndPrevious(); -- void testWholeWordsOnly(); --}; -- --void TestSearch::bug7063() --{ -- QScopedPointer< Poppler::Document > document(Poppler::Document::load(TESTDATADIR "/unittestcases/bug7063.pdf")); -- QVERIFY( document ); -- -- QScopedPointer< Poppler::Page > page(document->page(0)); -- QVERIFY( page ); -- -- QRectF pageRegion( QPointF(0,0), page->pageSize() ); -- QCOMPARE( page->search(QString("non-ascii:"), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), true ); -- -- QCOMPARE( page->search(QString("Ascii"), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), false ); -- QCOMPARE( page->search(QString("Ascii"), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseInsensitive), true ); -- -- QCOMPARE( page->search(QString("latin1:"), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), false ); -- -- QCOMPARE( page->search(QString::fromUtf8("é"), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), true ); -- QCOMPARE( page->search(QString::fromUtf8("à "), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), true ); -- QCOMPARE( page->search(QString::fromUtf8("ç"), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), true ); -- QCOMPARE( page->search(QString::fromUtf8("search \"é\", \"à \" or \"ç\""), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), true ); -- QCOMPARE( page->search(QString::fromUtf8("¥µ©"), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), true ); -- QCOMPARE( page->search(QString::fromUtf8("¥©"), pageRegion, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), false ); -- -- double rectLeft = 0.0, rectTop = 0.0, rectRight = page->pageSizeF().width(), rectBottom = page->pageSizeF().height(); -- -- QCOMPARE( page->search(QString("non-ascii:"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), true ); -- -- QCOMPARE( page->search(QString("Ascii"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), false ); -- QCOMPARE( page->search(QString("Ascii"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop, Poppler::Page::IgnoreCase), true ); -- -- QCOMPARE( page->search(QString("latin1:"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), false ); -- -- QCOMPARE( page->search(QString::fromUtf8("é"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), true ); -- QCOMPARE( page->search(QString::fromUtf8("à "), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), true ); -- QCOMPARE( page->search(QString::fromUtf8("ç"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), true ); -- QCOMPARE( page->search(QString::fromUtf8("search \"é\", \"à \" or \"ç\""), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), true ); -- QCOMPARE( page->search(QString::fromUtf8("¥µ©"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), true ); -- QCOMPARE( page->search(QString::fromUtf8("¥©"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), false ); --} -- --void TestSearch::testNextAndPrevious() --{ -- QScopedPointer< Poppler::Document > document(Poppler::Document::load(TESTDATADIR "/unittestcases/xr01.pdf")); -- QVERIFY( document ); -- -- QScopedPointer< Poppler::Page > page(document->page(0)); -- QVERIFY( page ); -- -- QRectF region( QPointF(0,0), page->pageSize() ); -- -- QCOMPARE( page->search(QString("is"), region, Poppler::Page::FromTop, Poppler::Page::CaseSensitive), true ); -- QVERIFY( qAbs(region.x() - 161.44) < 0.01 ); -- QVERIFY( qAbs(region.y() - 127.85) < 0.01 ); -- QVERIFY( qAbs(region.width() - 6.70) < 0.01 ); -- QVERIFY( qAbs(region.height() - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), region, Poppler::Page::NextResult, Poppler::Page::CaseSensitive), true ); -- QVERIFY( qAbs(region.x() - 171.46) < 0.01 ); -- QVERIFY( qAbs(region.y() - 127.85) < 0.01 ); -- QVERIFY( qAbs(region.width() - 6.70) < 0.01 ); -- QVERIFY( qAbs(region.height() - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), region, Poppler::Page::NextResult, Poppler::Page::CaseSensitive), true ); -- QVERIFY( qAbs(region.x() - 161.44) < 0.01 ); -- QVERIFY( qAbs(region.y() - 139.81) < 0.01 ); -- QVERIFY( qAbs(region.width() - 6.70) < 0.01 ); -- QVERIFY( qAbs(region.height() - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), region, Poppler::Page::NextResult, Poppler::Page::CaseSensitive), true ); -- QVERIFY( qAbs(region.x() - 171.46) < 0.01 ); -- QVERIFY( qAbs(region.y() - 139.81) < 0.01 ); -- QVERIFY( qAbs(region.width() - 6.70) < 0.01 ); -- QVERIFY( qAbs(region.height() - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), region, Poppler::Page::NextResult, Poppler::Page::CaseSensitive), false ); -- QCOMPARE( page->search(QString("is"), region, Poppler::Page::PreviousResult, Poppler::Page::CaseSensitive), true ); -- QVERIFY( qAbs(region.x() - 161.44) < 0.01 ); -- QVERIFY( qAbs(region.y() - 139.81) < 0.01 ); -- QVERIFY( qAbs(region.width() - 6.70) < 0.01 ); -- QVERIFY( qAbs(region.height() - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), region, Poppler::Page::PreviousResult, Poppler::Page::CaseSensitive), true ); -- QVERIFY( qAbs(region.x() - 171.46) < 0.01 ); -- QVERIFY( qAbs(region.y() - 127.85) < 0.01 ); -- QVERIFY( qAbs(region.width() - 6.70) < 0.01 ); -- QVERIFY( qAbs(region.height() - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), region, Poppler::Page::PreviousResult, Poppler::Page::CaseSensitive), true ); -- QVERIFY( qAbs(region.x() - 161.44) < 0.01 ); -- QVERIFY( qAbs(region.y() - 127.85) < 0.01 ); -- QVERIFY( qAbs(region.width() - 6.70) < 0.01 ); -- QVERIFY( qAbs(region.height() - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), region, Poppler::Page::PreviousResult, Poppler::Page::CaseSensitive), false ); -- -- double rectLeft = 0.0, rectTop = 0.0, rectRight = page->pageSizeF().width(), rectBottom = page->pageSizeF().height(); -- -- QCOMPARE( page->search(QString("is"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::FromTop), true ); -- QVERIFY( qAbs(rectLeft - 161.44) < 0.01 ); -- QVERIFY( qAbs(rectTop - 127.85) < 0.01 ); -- QVERIFY( qAbs(rectRight - rectLeft - 6.70) < 0.01 ); -- QVERIFY( qAbs(rectBottom - rectTop - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::NextResult), true ); -- QVERIFY( qAbs(rectLeft - 171.46) < 0.01 ); -- QVERIFY( qAbs(rectTop - 127.85) < 0.01 ); -- QVERIFY( qAbs(rectRight - rectLeft - 6.70) < 0.01 ); -- QVERIFY( qAbs(rectBottom - rectTop - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::NextResult), true ); -- QVERIFY( qAbs(rectLeft - 161.44) < 0.01 ); -- QVERIFY( qAbs(rectTop - 139.81) < 0.01 ); -- QVERIFY( qAbs(rectRight - rectLeft - 6.70) < 0.01 ); -- QVERIFY( qAbs(rectBottom - rectTop - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::NextResult), true ); -- QVERIFY( qAbs(rectLeft - 171.46) < 0.01 ); -- QVERIFY( qAbs(rectTop - 139.81) < 0.01 ); -- QVERIFY( qAbs(rectRight - rectLeft - 6.70) < 0.01 ); -- QVERIFY( qAbs(rectBottom - rectTop - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::NextResult), false ); -- QCOMPARE( page->search(QString("is"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::PreviousResult), true ); -- QVERIFY( qAbs(rectLeft - 161.44) < 0.01 ); -- QVERIFY( qAbs(rectTop - 139.81) < 0.01 ); -- QVERIFY( qAbs(rectRight - rectLeft - 6.70) < 0.01 ); -- QVERIFY( qAbs(rectBottom - rectTop - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::PreviousResult), true ); -- QVERIFY( qAbs(rectLeft - 171.46) < 0.01 ); -- QVERIFY( qAbs(rectTop - 127.85) < 0.01 ); -- QVERIFY( qAbs(rectRight - rectLeft - 6.70) < 0.01 ); -- QVERIFY( qAbs(rectBottom - rectTop - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::PreviousResult), true ); -- QVERIFY( qAbs(rectLeft - 161.44) < 0.01 ); -- QVERIFY( qAbs(rectTop - 127.85) < 0.01 ); -- QVERIFY( qAbs(rectRight - rectLeft - 6.70) < 0.01 ); -- QVERIFY( qAbs(rectBottom - rectTop - 8.85) < 0.01 ); -- QCOMPARE( page->search(QString("is"), rectLeft, rectTop, rectRight, rectBottom, Poppler::Page::PreviousResult), false ); --} -- --void TestSearch::testWholeWordsOnly() --{ -- QScopedPointer< Poppler::Document > document(Poppler::Document::load(TESTDATADIR "/unittestcases/WithActualText.pdf")); -- QVERIFY( document ); -- -- QScopedPointer< Poppler::Page > page(document->page(0)); -- QVERIFY( page ); -- -- const Poppler::Page::SearchDirection direction = Poppler::Page::FromTop; -- -- const Poppler::Page::SearchFlags mode0 = 0; -- const Poppler::Page::SearchFlags mode1 = Poppler::Page::IgnoreCase; -- const Poppler::Page::SearchFlags mode2 = Poppler::Page::WholeWords; -- const Poppler::Page::SearchFlags mode3 = Poppler::Page::IgnoreCase | Poppler::Page::WholeWords; -- -- double left, top, right, bottom; -- -- QCOMPARE( page->search(QLatin1String("brown"), left, top, right, bottom, direction, mode0), true ); -- QCOMPARE( page->search(QLatin1String("brOwn"), left, top, right, bottom, direction, mode0), false ); -- -- QCOMPARE( page->search(QLatin1String("brOwn"), left, top, right, bottom, direction, mode1), true ); -- QCOMPARE( page->search(QLatin1String("brawn"), left, top, right, bottom, direction, mode1), false ); -- -- QCOMPARE( page->search(QLatin1String("brown"), left, top, right, bottom, direction, mode2), true ); -- QCOMPARE( page->search(QLatin1String("own"), left, top, right, bottom, direction, mode2), false ); -- -- QCOMPARE( page->search(QLatin1String("brOwn"), left, top, right, bottom, direction, mode3), true ); -- QCOMPARE( page->search(QLatin1String("Own"), left, top, right, bottom, direction, mode3), false ); --} -- --QTEST_MAIN(TestSearch) --#include "check_search.moc" -- -diff --git a/qt4/tests/check_strings.cpp b/qt4/tests/check_strings.cpp -deleted file mode 100644 -index 700ae9c2..00000000 ---- a/qt4/tests/check_strings.cpp -+++ /dev/null -@@ -1,250 +0,0 @@ --/* -- * Copyright (C) 2010, 2011, Pino Toscano <pino@kde.org> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2, or (at your option) -- * any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -- */ -- --#include <QtTest/QtTest> -- --#include <poppler-qt4.h> --#include <poppler-private.h> -- --#include <GlobalParams.h> -- --Q_DECLARE_METATYPE(GooString*) --Q_DECLARE_METATYPE(Unicode*) -- --class TestStrings : public QObject --{ -- Q_OBJECT -- --private slots: -- void initTestCase(); -- void cleanupTestCase(); -- void check_unicodeToQString_data(); -- void check_unicodeToQString(); -- void check_UnicodeParsedString_data(); -- void check_UnicodeParsedString(); -- void check_QStringToUnicodeGooString_data(); -- void check_QStringToUnicodeGooString(); -- void check_QStringToGooString_data(); -- void check_QStringToGooString(); -- --private: -- GooString* newGooString(const char *s); -- GooString* newGooString(const char *s, int l); -- -- QVector<GooString *> m_gooStrings; --}; -- --void TestStrings::initTestCase() --{ -- qRegisterMetaType<GooString*>("GooString*"); -- qRegisterMetaType<Unicode*>("Unicode*"); -- -- globalParams = new GlobalParams(); --} -- --void TestStrings::cleanupTestCase() --{ -- qDeleteAll(m_gooStrings); -- -- delete globalParams; --} -- --void TestStrings::check_unicodeToQString_data() --{ -- QTest::addColumn<Unicode*>("data"); -- QTest::addColumn<int>("length"); -- QTest::addColumn<QString>("result"); -- -- { -- const int l = 1; -- Unicode *u = new Unicode[l]; -- u[0] = int('a'); -- QTest::newRow("a") << u << l << QString::fromUtf8("a"); -- } -- { -- const int l = 1; -- Unicode *u = new Unicode[l]; -- u[0] = 0x0161; -- QTest::newRow("\u0161") << u << l << QString::fromUtf8("\u0161"); -- } -- { -- const int l = 2; -- Unicode *u = new Unicode[l]; -- u[0] = int('a'); -- u[1] = int('b'); -- QTest::newRow("ab") << u << l << QString::fromUtf8("ab"); -- } -- { -- const int l = 2; -- Unicode *u = new Unicode[l]; -- u[0] = int('a'); -- u[1] = 0x0161; -- QTest::newRow("a\u0161") << u << l << QString::fromUtf8("a\u0161"); -- } -- { -- const int l = 2; -- Unicode *u = new Unicode[l]; -- u[0] = 0x5c01; -- u[1] = 0x9762; -- QTest::newRow("\xe5\xb0\x81\xe9\x9d\xa2") << u << l << QString::fromUtf8("\xe5\xb0\x81\xe9\x9d\xa2"); -- } -- { -- const int l = 3; -- Unicode *u = new Unicode[l]; -- u[0] = 0x5c01; -- u[1] = 0x9762; -- u[2] = 0x0; -- QTest::newRow("\xe5\xb0\x81\xe9\x9d\xa2 + 0") << u << l << QString::fromUtf8("\xe5\xb0\x81\xe9\x9d\xa2"); -- } --} -- --void TestStrings::check_unicodeToQString() --{ -- QFETCH(Unicode*, data); -- QFETCH(int, length); -- QFETCH(QString, result); -- -- QCOMPARE(Poppler::unicodeToQString(data, length), result); -- -- delete [] data; --} -- --void TestStrings::check_UnicodeParsedString_data() --{ -- QTest::addColumn<GooString*>("string"); -- QTest::addColumn<QString>("result"); -- -- // non-unicode strings -- QTest::newRow("<empty>") << newGooString("") -- << QString(); -- QTest::newRow("a") << newGooString("a") -- << QString::fromUtf8("a"); -- QTest::newRow("ab") << newGooString("ab") -- << QString::fromUtf8("ab"); -- QTest::newRow("~") << newGooString("~") -- << QString::fromUtf8("~"); -- QTest::newRow("test string") << newGooString("test string") -- << QString::fromUtf8("test string"); -- -- // unicode strings -- QTest::newRow("<unicode marks>") << newGooString("\xFE\xFF") -- << QString(); -- QTest::newRow("U a") << newGooString("\xFE\xFF\0a", 4) -- << QString::fromUtf8("a"); -- QTest::newRow("U ~") << newGooString("\xFE\xFF\0~", 4) -- << QString::fromUtf8("~"); -- QTest::newRow("U aa") << newGooString("\xFE\xFF\0a\0a", 6) -- << QString::fromUtf8("aa"); -- QTest::newRow("U \xC3\x9F") << newGooString("\xFE\xFF\0\xDF", 4) -- << QString::fromUtf8("\xC3\x9F"); -- QTest::newRow("U \xC3\x9F\x61") << newGooString("\xFE\xFF\0\xDF\0\x61", 6) -- << QString::fromUtf8("\xC3\x9F\x61"); -- QTest::newRow("U \xC5\xA1") << newGooString("\xFE\xFF\x01\x61", 4) -- << QString::fromUtf8("\xC5\xA1"); -- QTest::newRow("U \xC5\xA1\x61") << newGooString("\xFE\xFF\x01\x61\0\x61", 6) -- << QString::fromUtf8("\xC5\xA1\x61"); -- QTest::newRow("test string") << newGooString("\xFE\xFF\0t\0e\0s\0t\0 \0s\0t\0r\0i\0n\0g", 24) -- << QString::fromUtf8("test string"); --} -- --void TestStrings::check_UnicodeParsedString() --{ -- QFETCH(GooString*, string); -- QFETCH(QString, result); -- -- QCOMPARE(Poppler::UnicodeParsedString(string), result); --} -- --void TestStrings::check_QStringToUnicodeGooString_data() --{ -- QTest::addColumn<QString>("string"); -- QTest::addColumn<QByteArray>("result"); -- -- -- QTest::newRow("<null>") << QString() -- << QByteArray(""); -- QTest::newRow("<empty>") << QString::fromUtf8("") -- << QByteArray(""); -- QTest::newRow("a") << QString::fromUtf8("a") -- << QByteArray("\0a", 2); -- QTest::newRow("ab") << QString::fromUtf8("ab") -- << QByteArray("\0a\0b", 4); -- QTest::newRow("test string") << QString::fromUtf8("test string") -- << QByteArray("\0t\0e\0s\0t\0 \0s\0t\0r\0i\0n\0g", 22); -- QTest::newRow("\xC3\x9F") << QString::fromUtf8("\xC3\x9F") -- << QByteArray("\0\xDF", 2); -- QTest::newRow("\xC3\x9F\x61") << QString::fromUtf8("\xC3\x9F\x61") -- << QByteArray("\0\xDF\0\x61", 4); --} -- --void TestStrings::check_QStringToUnicodeGooString() --{ -- QFETCH(QString, string); -- QFETCH(QByteArray, result); -- -- GooString *goo = Poppler::QStringToUnicodeGooString(string); -- QVERIFY(goo->hasUnicodeMarker()); -- QCOMPARE(goo->getLength(), string.length() * 2 + 2); -- QCOMPARE(result, QByteArray::fromRawData(goo->getCString() + 2, goo->getLength() - 2)); -- -- delete goo; --} -- --void TestStrings::check_QStringToGooString_data() --{ -- QTest::addColumn<QString>("string"); -- QTest::addColumn<GooString*>("result"); -- -- QTest::newRow("<null>") << QString() -- << newGooString(""); -- QTest::newRow("<empty>") << QString::fromUtf8("") -- << newGooString(""); -- QTest::newRow("a") << QString::fromUtf8("a") -- << newGooString("a"); -- QTest::newRow("ab") << QString::fromUtf8("ab") -- << newGooString("ab"); --} -- --void TestStrings::check_QStringToGooString() --{ -- QFETCH(QString, string); -- QFETCH(GooString*, result); -- -- GooString *goo = Poppler::QStringToGooString(string); -- QCOMPARE(goo->getCString(), result->getCString()); -- -- delete goo; --} -- --GooString* TestStrings::newGooString(const char *s) --{ -- GooString *goo = new GooString(s); -- m_gooStrings.append(goo); -- return goo; --} -- --GooString* TestStrings::newGooString(const char *s, int l) --{ -- GooString *goo = new GooString(s, l); -- m_gooStrings.append(goo); -- return goo; --} -- --QTEST_MAIN(TestStrings) -- --#include "check_strings.moc" -diff --git a/qt4/tests/poppler-attachments.cpp b/qt4/tests/poppler-attachments.cpp -deleted file mode 100644 -index 992dc565..00000000 ---- a/qt4/tests/poppler-attachments.cpp -+++ /dev/null -@@ -1,39 +0,0 @@ --#include <QtCore/QCoreApplication> --#include <QtCore/QDebug> -- --#include <iostream> -- --#include <poppler-qt4.h> -- --int main( int argc, char **argv ) --{ -- QCoreApplication a( argc, argv ); // QApplication required! -- -- if (!( argc == 2 )) -- { -- qWarning() << "usage: poppler-attachments filename"; -- exit(1); -- } -- -- Poppler::Document *doc = Poppler::Document::load(argv[1]); -- if (!doc) -- { -- qWarning() << "doc not loaded"; -- exit(1); -- } -- -- if (doc->hasEmbeddedFiles()) { -- std::cout << "Embedded files: " << std::endl; -- foreach(Poppler::EmbeddedFile *file, doc->embeddedFiles()) { -- std::cout << " " << qPrintable(file->name()) << std::endl; -- std::cout << " desc:" << qPrintable(file->description()) << std::endl; -- QByteArray data = file->data(); -- std::cout << " data: " << data.constData() << std::endl; -- } -- -- } else { -- std::cout << "There are no embedded document at the top level" << std::endl; -- } -- delete doc; -- --} -diff --git a/qt4/tests/poppler-fonts.cpp b/qt4/tests/poppler-fonts.cpp -deleted file mode 100644 -index 6b66ec42..00000000 ---- a/qt4/tests/poppler-fonts.cpp -+++ /dev/null -@@ -1,89 +0,0 @@ --#include <QtCore/QCoreApplication> --#include <QtCore/QDebug> -- --#include <iostream> -- --#include <poppler-qt4.h> -- --int main( int argc, char **argv ) --{ -- QCoreApplication a( argc, argv ); // QApplication required! -- -- if (!( argc == 2 )) -- { -- qWarning() << "usage: poppler-fonts filename"; -- exit(1); -- } -- -- Poppler::Document *doc = Poppler::Document::load(argv[1]); -- if (!doc) -- { -- qWarning() << "doc not loaded"; -- exit(1); -- } -- -- std::cout << "name type emb sub font file"; -- std::cout << std::endl; -- std::cout << "------------------------------------ ------------ --- --- ---------"; -- std::cout << std::endl; -- -- foreach( const Poppler::FontInfo &font, doc->fonts() ) { -- if (font.name().isNull()) { -- std::cout << qPrintable( QString("%1").arg(QString("[none]"), -37) ); -- } else { -- std::cout << qPrintable( QString("%1").arg(font.name(), -37) ); -- } -- switch( font.type() ) { -- case Poppler::FontInfo::unknown: -- std::cout << "unknown "; -- break; -- case Poppler::FontInfo::Type1: -- std::cout << "Type 1 "; -- break; -- case Poppler::FontInfo::Type1C: -- std::cout << "Type 1C "; -- break; -- case Poppler::FontInfo::Type3: -- std::cout << "Type 3 "; -- break; -- case Poppler::FontInfo::TrueType: -- std::cout << "TrueType "; -- break; -- case Poppler::FontInfo::CIDType0: -- std::cout << "CID Type 0 "; -- break; -- case Poppler::FontInfo::CIDType0C: -- std::cout << "CID Type 0C "; -- break; -- case Poppler::FontInfo::CIDTrueType: -- std::cout << "CID TrueType "; -- break; -- case Poppler::FontInfo::Type1COT: -- std::cout << "Type 1C (OT) "; -- break; -- case Poppler::FontInfo::TrueTypeOT: -- std::cout << "TrueType (OT) "; -- break; -- case Poppler::FontInfo::CIDType0COT: -- std::cout << "CID Type 0C (OT) "; -- break; -- case Poppler::FontInfo::CIDTrueTypeOT: -- std::cout << "CID TrueType (OT) "; -- break; -- } -- -- if ( font.isEmbedded() ) { -- std::cout << "yes "; -- } else { -- std::cout << "no "; -- } -- if ( font.isSubset() ) { -- std::cout << "yes "; -- } else { -- std::cout << "no "; -- } -- std::cout << qPrintable( QString("%1").arg(font.file()) ); -- std::cout << std::endl; -- } -- delete doc; --} -diff --git a/qt4/tests/poppler-forms.cpp b/qt4/tests/poppler-forms.cpp -deleted file mode 100644 -index 98891a91..00000000 ---- a/qt4/tests/poppler-forms.cpp -+++ /dev/null -@@ -1,166 +0,0 @@ --#include <QtCore/QCoreApplication> --#include <QtCore/QDebug> -- --#include <iostream> -- --#include <poppler-qt4.h> --#include <poppler-form.h> -- --static std::ostream& operator<< (std::ostream &out, Poppler::FormField::FormType type) --{ -- switch (type) { -- case Poppler::FormField::FormButton: out << "Button"; break; -- case Poppler::FormField::FormText: out << "Text"; break; -- case Poppler::FormField::FormChoice: out << "Choice"; break; -- case Poppler::FormField::FormSignature: out << "Signature"; break; -- } -- return out; --} -- --static std::ostream& operator<< (std::ostream &out, Poppler::FormFieldButton::ButtonType type) --{ -- switch (type) { -- case Poppler::FormFieldButton::Push: out << "Push"; break; -- case Poppler::FormFieldButton::CheckBox: out << "CheckBox"; break; -- case Poppler::FormFieldButton::Radio: out << "Radio"; break; -- } -- return out; --} -- --static std::ostream& operator<< (std::ostream &out, Poppler::FormFieldText::TextType type) --{ -- switch (type) { -- case Poppler::FormFieldText::Normal: out << "Normal"; break; -- case Poppler::FormFieldText::Multiline: out << "Multiline"; break; -- case Poppler::FormFieldText::FileSelect: out << "FileSelect"; break; -- } -- return out; --} -- --static std::ostream& operator<< (std::ostream &out, Poppler::FormFieldChoice::ChoiceType type) --{ -- switch (type) { -- case Poppler::FormFieldChoice::ComboBox: out << "ComboBox"; break; -- case Poppler::FormFieldChoice::ListBox: out << "ListBox"; break; -- } -- return out; --} -- --static std::ostream& operator<< (std::ostream &out, Qt::Alignment alignment) --{ -- switch (alignment) { -- case Qt::AlignLeft: out << "Left"; break; -- case Qt::AlignRight: out << "Right"; break; -- case Qt::AlignHCenter: out << "HCenter"; break; -- case Qt::AlignJustify: out << "Justify"; break; -- case Qt::AlignTop: out << "Top"; break; -- case Qt::AlignBottom: out << "Bottom"; break; -- case Qt::AlignVCenter: out << "VCenter"; break; -- case Qt::AlignCenter: out << "Center"; break; -- case Qt::AlignAbsolute: out << "Absolute"; break; -- } -- return out; --} -- --static std::ostream& operator<< (std::ostream &out, const QString &string) --{ -- out << string.toUtf8().constData(); -- return out; --} -- --static std::ostream& operator<< (std::ostream &out, const QRectF &rect) --{ -- out << QString("top: %1 left: %2 width: %3 height: %4").arg(rect.x()).arg(rect.y()).arg(rect.width()).arg(rect.height()); -- return out; --} -- --template<typename T> --std::ostream& operator<< (std::ostream &out, const QList<T> &elems) --{ -- bool isFirst = true; -- for (int i = 0; i < elems.count(); ++i) { -- if (!isFirst) -- out << " "; -- out << elems[i]; -- isFirst = false; -- } -- return out; --} -- --int main( int argc, char **argv ) --{ -- QCoreApplication a( argc, argv ); -- -- if (!( argc == 2 )) -- { -- qWarning() << "usage: poppler-forms filename"; -- exit(1); -- } -- -- Poppler::Document *doc = Poppler::Document::load(argv[1]); -- if (!doc) -- { -- qWarning() << "doc not loaded"; -- exit(1); -- } -- -- std::cout << "Forms for file " << argv[1] << std::endl; -- for (int i = 0; i < doc->numPages(); ++i) { -- Poppler::Page *page = doc->page(i); -- if (page) { -- QList<Poppler::FormField*> forms = page->formFields(); -- std::cout << "\tPage " << i + 1 << std::endl; -- foreach( const Poppler::FormField *form, forms ) { -- std::cout << "\t\tForm" << std::endl; -- std::cout << "\t\t\tType: " << form->type() << std::endl; -- std::cout << "\t\t\tRect: " << form->rect() << std::endl; -- std::cout << "\t\t\tID: " << form->id() << std::endl; -- std::cout << "\t\t\tName: " << form->name() << std::endl; -- std::cout << "\t\t\tFullyQualifiedName: " << form->fullyQualifiedName() << std::endl; -- std::cout << "\t\t\tUIName: " << form->uiName() << std::endl; -- std::cout << "\t\t\tReadOnly: " << form->isReadOnly() << std::endl; -- std::cout << "\t\t\tVisible: " << form->isVisible() << std::endl; -- switch (form->type()) { -- case Poppler::FormField::FormButton: { -- const Poppler::FormFieldButton *buttonForm = static_cast<const Poppler::FormFieldButton *>(form); -- std::cout << "\t\t\tButtonType: " << buttonForm->buttonType() << std::endl; -- std::cout << "\t\t\tCaption: " << buttonForm->caption() << std::endl; -- std::cout << "\t\t\tState: " << buttonForm->state() << std::endl; -- std::cout << "\t\t\tSiblings: " << buttonForm->siblings() << std::endl; -- } -- break; -- -- case Poppler::FormField::FormText: { -- const Poppler::FormFieldText *textForm = static_cast<const Poppler::FormFieldText *>(form); -- std::cout << "\t\t\tTextType: " << textForm->textType() << std::endl; -- std::cout << "\t\t\tText: " << textForm->text() << std::endl; -- std::cout << "\t\t\tIsPassword: " << textForm->isPassword() << std::endl; -- std::cout << "\t\t\tIsRichText: " << textForm->isRichText() << std::endl; -- std::cout << "\t\t\tMaximumLength: " << textForm->maximumLength() << std::endl; -- std::cout << "\t\t\tTextAlignment: " << textForm->textAlignment() << std::endl; -- std::cout << "\t\t\tCanBeSpellChecked: " << textForm->canBeSpellChecked() << std::endl; -- } -- break; -- -- case Poppler::FormField::FormChoice: { -- const Poppler::FormFieldChoice *choiceForm = static_cast<const Poppler::FormFieldChoice *>(form); -- std::cout << "\t\t\tChoiceType: " << choiceForm->choiceType() << std::endl; -- std::cout << "\t\t\tChoices: " << choiceForm->choices() << std::endl; -- std::cout << "\t\t\tIsEditable: " << choiceForm->isEditable() << std::endl; -- std::cout << "\t\t\tIsMultiSelect: " << choiceForm->multiSelect() << std::endl; -- std::cout << "\t\t\tCurrentChoices: " << choiceForm->currentChoices() << std::endl; -- std::cout << "\t\t\tEditChoice: " << choiceForm->editChoice() << std::endl; -- std::cout << "\t\t\tTextAlignment: " << choiceForm->textAlignment() << std::endl; -- std::cout << "\t\t\tCanBeSpellChecked: " << choiceForm->canBeSpellChecked() << std::endl; -- } -- break; -- -- case Poppler::FormField::FormSignature: -- break; -- } -- } -- qDeleteAll(forms); -- } -- } -- delete doc; --} -diff --git a/qt4/tests/poppler-texts.cpp b/qt4/tests/poppler-texts.cpp -deleted file mode 100644 -index ec283531..00000000 ---- a/qt4/tests/poppler-texts.cpp -+++ /dev/null -@@ -1,40 +0,0 @@ --#include <QtCore/QCoreApplication> --#include <QtCore/QDebug> -- --#include <iostream> -- --#include <poppler-qt4.h> -- --int main( int argc, char **argv ) --{ -- QCoreApplication a( argc, argv ); // QApplication required! -- -- if (!( argc == 2 )) -- { -- qWarning() << "usage: poppler-texts filename"; -- exit(1); -- } -- -- Poppler::Document *doc = Poppler::Document::load(argv[1]); -- if (!doc) -- { -- qWarning() << "doc not loaded"; -- exit(1); -- } -- -- for ( int i = 0; i < doc->numPages(); i++ ) -- { -- int j = 0; -- std::cout << "*** Page " << i << std::endl; -- std::cout << std::flush; -- -- Poppler::Page *page = doc->page(i); -- const QByteArray utf8str = page->text( QRectF(), Poppler::Page::RawOrderLayout ).toUtf8(); -- std::cout << std::flush; -- for ( j = 0; j < utf8str.size(); j++ ) -- std::cout << utf8str[j]; -- std::cout << std::endl; -- delete page; -- } -- delete doc; --} -diff --git a/qt4/tests/stress-poppler-dir.cpp b/qt4/tests/stress-poppler-dir.cpp -deleted file mode 100644 -index 6eeab6fa..00000000 ---- a/qt4/tests/stress-poppler-dir.cpp -+++ /dev/null -@@ -1,67 +0,0 @@ --#include <QtCore/QDebug> --#include <QtCore/QDir> --#include <QtCore/QTime> --#include <QtGui/QApplication> --#include <QtGui/QImage> -- --#include <iostream> -- --#include <poppler-qt4.h> -- --int main( int argc, char **argv ) --{ -- QApplication a( argc, argv ); // QApplication required! -- -- QTime t; -- t.start(); -- -- QDir directory( argv[1] ); -- foreach ( const QString &fileName, directory.entryList() ) { -- if (fileName.endsWith("pdf") ) { -- qDebug() << "Doing" << fileName.toLatin1().data() << ":"; -- Poppler::Document *doc = Poppler::Document::load( directory.canonicalPath()+"/"+fileName ); -- if (!doc) { -- qWarning() << "doc not loaded"; -- } else if ( doc->isLocked() ) { -- if (! doc->unlock( "", "password" ) ) { -- qWarning() << "couldn't unlock document"; -- delete doc; -- } -- } else { -- int major = 0, minor = 0; -- doc->getPdfVersion( &major, &minor ); -- doc->info("Title"); -- doc->info("Subject"); -- doc->info("Author"); -- doc->info("Keywords"); -- doc->info("Creator"); -- doc->info("Producer"); -- doc->date("CreationDate").toString(); -- doc->date("ModDate").toString(); -- doc->numPages(); -- doc->isLinearized(); -- doc->isEncrypted(); -- doc->okToPrint(); -- doc->okToCopy(); -- doc->okToChange(); -- doc->okToAddNotes(); -- doc->pageMode(); -- -- for( int index = 0; index < doc->numPages(); ++index ) { -- Poppler::Page *page = doc->page( index ); -- QImage image = page->renderToImage(); -- page->pageSize(); -- page->orientation(); -- delete page; -- std::cout << "."; -- std::cout.flush(); -- } -- std::cout << std::endl; -- delete doc; -- } -- } -- } -- -- std::cout << "Elapsed time: " << (t.elapsed()/1000) << "seconds" << std::endl; -- --} -diff --git a/qt4/tests/stress-poppler-qt4.cpp b/qt4/tests/stress-poppler-qt4.cpp -deleted file mode 100644 -index 56844543..00000000 ---- a/qt4/tests/stress-poppler-qt4.cpp -+++ /dev/null -@@ -1,74 +0,0 @@ --#include <QtCore/QDebug> --#include <QtCore/QDir> --#include <QtCore/QTime> --#include <QtGui/QApplication> --#include <QtGui/QImage> -- --#include <iostream> -- --#include <poppler-qt4.h> -- --int main( int argc, char **argv ) --{ -- QApplication a( argc, argv ); // QApplication required! -- -- Q_UNUSED( argc ); -- Q_UNUSED( argv ); -- -- QTime t; -- t.start(); -- QDir dbDir( QString( "./pdfdb" ) ); -- if ( !dbDir.exists() ) { -- qWarning() << "Database directory does not exist"; -- } -- -- QStringList excludeSubDirs; -- excludeSubDirs << "000048" << "000607"; -- -- foreach ( const QString &subdir, dbDir.entryList(QStringList() << "0000*", QDir::Dirs) ) { -- if ( excludeSubDirs.contains(subdir) ) { -- // then skip it -- } else { -- QString path = "./pdfdb/" + subdir + "/data.pdf"; -- std::cout <<"Doing " << path.toLatin1().data() << " :"; -- Poppler::Document *doc = Poppler::Document::load( path ); -- if (!doc) { -- qWarning() << "doc not loaded"; -- } else { -- int major = 0, minor = 0; -- doc->getPdfVersion( &major, &minor ); -- doc->info("Title"); -- doc->info("Subject"); -- doc->info("Author"); -- doc->info("Keywords"); -- doc->info("Creator"); -- doc->info("Producer"); -- doc->date("CreationDate").toString(); -- doc->date("ModDate").toString(); -- doc->numPages(); -- doc->isLinearized(); -- doc->isEncrypted(); -- doc->okToPrint(); -- doc->okToCopy(); -- doc->okToChange(); -- doc->okToAddNotes(); -- doc->pageMode(); -- -- for( int index = 0; index < doc->numPages(); ++index ) { -- Poppler::Page *page = doc->page( index ); -- QImage image = page->renderToImage(); -- page->pageSize(); -- page->orientation(); -- delete page; -- std::cout << "."; -- std::cout.flush(); -- } -- std::cout << std::endl; -- delete doc; -- } -- } -- } -- -- std::cout << "Elapsed time: " << (t.elapsed()/1000) << std::endl; -- --} -diff --git a/qt4/tests/stress-threads-qt4.cpp b/qt4/tests/stress-threads-qt4.cpp -deleted file mode 100644 -index 00968de1..00000000 ---- a/qt4/tests/stress-threads-qt4.cpp -+++ /dev/null -@@ -1,309 +0,0 @@ -- --#ifndef _WIN32 --#include <unistd.h> --#else --#include <windows.h> --#define sleep Sleep --#endif --#include <time.h> -- --#include <poppler-qt4.h> --#include <poppler-form.h> -- --#include <QtCore/QDebug> --#include <QtCore/QFile> --#include <QtCore/QMutex> --#include <QtCore/QThread> --#include <QtGui/QImage> -- --class SillyThread : public QThread --{ --public: -- SillyThread(Poppler::Document* document, QObject* parent = 0); -- -- void run(); -- --private: -- Poppler::Document* m_document; -- QVector< Poppler::Page* > m_pages; -- --}; -- --class CrazyThread : public QThread --{ --public: -- CrazyThread(uint seed, Poppler::Document* document, QMutex* annotationMutex, QObject* parent = 0); -- -- void run(); -- --private: -- uint m_seed; -- Poppler::Document* m_document; -- QMutex* m_annotationMutex; -- --}; -- --static Poppler::Page* loadPage(Poppler::Document* document, int index) --{ -- Poppler::Page* page = document->page(index); -- -- if(page == 0) -- { -- qDebug() << "!Document::page"; -- -- exit(EXIT_FAILURE); -- } -- -- return page; --} -- --static Poppler::Page* loadRandomPage(Poppler::Document* document) --{ -- return loadPage(document, qrand() % document->numPages()); --} -- --SillyThread::SillyThread(Poppler::Document* document, QObject* parent) : QThread(parent), -- m_document(document), -- m_pages() --{ -- m_pages.reserve(m_document->numPages()); -- -- for(int index = 0; index < m_document->numPages(); ++index) -- { -- m_pages.append(loadPage(m_document, index)); -- } --} -- -- --void SillyThread::run() --{ -- forever -- { -- foreach(Poppler::Page* page, m_pages) -- { -- QImage image = page->renderToImage(); -- -- if(image.isNull()) -- { -- qDebug() << "!Page::renderToImage"; -- -- ::exit(EXIT_FAILURE); -- } -- } -- } --} -- --CrazyThread::CrazyThread(uint seed, Poppler::Document* document, QMutex* annotationMutex, QObject* parent) : QThread(parent), -- m_seed(seed), -- m_document(document), -- m_annotationMutex(annotationMutex) --{ --} -- --void CrazyThread::run() --{ -- typedef QScopedPointer< Poppler::Page > PagePointer; -- -- qsrand(m_seed); -- -- forever -- { -- if(qrand() % 2 == 0) -- { -- qDebug() << "search..."; -- -- PagePointer page(loadRandomPage(m_document)); -- -- page->search("c", Poppler::Page::CaseInsensitive); -- page->search("r", Poppler::Page::CaseSensitive); -- page->search("a", Poppler::Page::CaseInsensitive); -- page->search("z", Poppler::Page::CaseSensitive); -- page->search("y", Poppler::Page::CaseInsensitive); -- } -- -- if(qrand() % 2 == 0) -- { -- qDebug() << "links..."; -- -- PagePointer page(loadRandomPage(m_document)); -- -- QList< Poppler::Link* > links = page->links(); -- -- qDeleteAll(links); -- } -- -- if(qrand() % 2 == 0) -- { -- qDebug() << "form fields..."; -- -- PagePointer page(loadRandomPage(m_document)); -- -- QList< Poppler::FormField* > formFields = page->formFields(); -- -- qDeleteAll(formFields); -- } -- -- if(qrand() % 2 == 0) -- { -- qDebug() << "thumbnail..."; -- -- PagePointer page(loadRandomPage(m_document)); -- -- page->thumbnail(); -- } -- -- if(qrand() % 2 == 0) -- { -- qDebug() << "text..."; -- -- PagePointer page(loadRandomPage(m_document)); -- -- page->text(QRectF(QPointF(), page->pageSizeF())); -- } -- -- if(qrand() % 2 == 0) -- { -- QMutexLocker mutexLocker(m_annotationMutex); -- -- qDebug() << "add annotation..."; -- -- PagePointer page(loadRandomPage(m_document)); -- -- Poppler::Annotation* annotation = 0; -- -- switch(qrand() % 3) -- { -- default: -- case 0: -- annotation = new Poppler::TextAnnotation(qrand() % 2 == 0 ? Poppler::TextAnnotation::Linked : Poppler::TextAnnotation::InPlace); -- break; -- case 1: -- annotation = new Poppler::HighlightAnnotation(); -- break; -- case 2: -- annotation = new Poppler::InkAnnotation(); -- break; -- } -- -- annotation->setBoundary(QRectF(0.0, 0.0, 0.5, 0.5)); -- annotation->setContents("crazy"); -- -- page->addAnnotation(annotation); -- -- delete annotation; -- } -- -- if(qrand() % 2 == 0) -- { -- QMutexLocker mutexLocker(m_annotationMutex); -- -- for(int index = 0; index < m_document->numPages(); ++index) -- { -- PagePointer page(loadPage(m_document, index)); -- -- QList< Poppler::Annotation* > annotations = page->annotations(); -- -- if(!annotations.isEmpty()) -- { -- qDebug() << "modify annotation..."; -- -- annotations.at(qrand() % annotations.size())->setBoundary(QRectF(0.5, 0.5, 0.25, 0.25)); -- annotations.at(qrand() % annotations.size())->setAuthor("foo"); -- annotations.at(qrand() % annotations.size())->setContents("bar"); -- annotations.at(qrand() % annotations.size())->setCreationDate(QDateTime::currentDateTime()); -- annotations.at(qrand() % annotations.size())->setModificationDate(QDateTime::currentDateTime()); -- } -- -- qDeleteAll(annotations); -- -- if(!annotations.isEmpty()) -- { -- break; -- } -- } -- } -- -- if(qrand() % 2 == 0) -- { -- QMutexLocker mutexLocker(m_annotationMutex); -- -- for(int index = 0; index < m_document->numPages(); ++index) -- { -- PagePointer page(loadPage(m_document, index)); -- -- QList< Poppler::Annotation* > annotations = page->annotations(); -- -- if(!annotations.isEmpty()) -- { -- qDebug() << "remove annotation..."; -- -- page->removeAnnotation(annotations.takeAt(qrand() % annotations.size())); -- } -- -- qDeleteAll(annotations); -- -- if(!annotations.isEmpty()) -- { -- break; -- } -- } -- } -- -- if(qrand() % 2 == 0) -- { -- qDebug() << "fonts..."; -- -- m_document->fonts(); -- } -- } --} -- --int main(int argc, char** argv) --{ -- if(argc < 5) -- { -- qDebug() << "usage: stress-threads-qt duration sillyCount crazyCount file(s)"; -- -- return EXIT_FAILURE; -- } -- -- const int duration = atoi(argv[1]); -- const int sillyCount = atoi(argv[2]); -- const int crazyCount = atoi(argv[3]); -- -- qsrand(time(0)); -- -- for(int argi = 4; argi < argc; ++argi) -- { -- const QString file = QFile::decodeName(argv[argi]); -- Poppler::Document* document = Poppler::Document::load(file); -- -- if(document == 0) -- { -- qDebug() << "Could not load" << file; -- continue; -- } -- -- if(document->isLocked()) -- { -- qDebug() << file << "is locked"; -- continue; -- } -- -- for(int i = 0; i < sillyCount; ++i) -- { -- (new SillyThread(document))->start(); -- } -- -- QMutex* annotationMutex = new QMutex(); -- -- for(int i = 0; i < crazyCount; ++i) -- { -- (new CrazyThread(qrand(), document, annotationMutex))->start(); -- } -- } -- -- sleep(duration); -- -- return EXIT_SUCCESS; --} -diff --git a/qt4/tests/test-password-qt4.cpp b/qt4/tests/test-password-qt4.cpp -deleted file mode 100644 -index c961874d..00000000 ---- a/qt4/tests/test-password-qt4.cpp -+++ /dev/null -@@ -1,136 +0,0 @@ --#include <QtCore/QDebug> --#include <QtGui/QApplication> --#include <QtGui/QImage> --#include <QtGui/QPainter> --#include <QtGui/QPaintEvent> --#include <QtGui/QWidget> -- --#include <poppler-qt4.h> -- --class PDFDisplay : public QWidget // picture display widget --{ --public: -- PDFDisplay( Poppler::Document *d ); -- ~PDFDisplay(); --protected: -- void paintEvent( QPaintEvent * ); -- void keyPressEvent( QKeyEvent * ); --private: -- void display(); -- int m_currentPage; -- QImage image; -- Poppler::Document *doc; --}; -- --PDFDisplay::PDFDisplay( Poppler::Document *d ) --{ -- doc = d; -- m_currentPage = 0; -- display(); --} -- --void PDFDisplay::display() --{ -- if (doc) { -- Poppler::Page *page = doc->page(m_currentPage); -- if (page) { -- qDebug() << "Displaying page: " << m_currentPage; -- image = page->renderToImage(); -- update(); -- delete page; -- } -- } else { -- qWarning() << "doc not loaded"; -- } --} -- --PDFDisplay::~PDFDisplay() --{ -- delete doc; --} -- --void PDFDisplay::paintEvent( QPaintEvent *e ) --{ -- QPainter paint( this ); // paint widget -- if (!image.isNull()) { -- paint.drawImage(0, 0, image); -- } else { -- qWarning() << "null image"; -- } --} -- --void PDFDisplay::keyPressEvent( QKeyEvent *e ) --{ -- if (e->key() == Qt::Key_Down) -- { -- if (m_currentPage + 1 < doc->numPages()) -- { -- m_currentPage++; -- display(); -- } -- } -- else if (e->key() == Qt::Key_Up) -- { -- if (m_currentPage > 0) -- { -- m_currentPage--; -- display(); -- } -- } -- else if (e->key() == Qt::Key_Q) -- { -- exit(0); -- } --} -- --int main( int argc, char **argv ) --{ -- QApplication a( argc, argv ); // QApplication required! -- -- if ( argc != 3) -- { -- qWarning() << "usage: test-password-qt4 owner-password filename"; -- exit(1); -- } -- -- Poppler::Document *doc = Poppler::Document::load(argv[2], argv[1]); -- if (!doc) -- { -- qWarning() << "doc not loaded"; -- exit(1); -- } -- -- // output some meta-data -- int major = 0, minor = 0; -- doc->getPdfVersion( &major, &minor ); -- qDebug() << " PDF Version: " << qPrintable(QString::fromLatin1("%1.%2").arg(major).arg(minor)); -- qDebug() << " Title: " << doc->info("Title"); -- qDebug() << " Subject: " << doc->info("Subject"); -- qDebug() << " Author: " << doc->info("Author"); -- qDebug() << " Key words: " << doc->info("Keywords"); -- qDebug() << " Creator: " << doc->info("Creator"); -- qDebug() << " Producer: " << doc->info("Producer"); -- qDebug() << " Date created: " << doc->date("CreationDate").toString(); -- qDebug() << " Date modified: " << doc->date("ModDate").toString(); -- qDebug() << "Number of pages: " << doc->numPages(); -- qDebug() << " Linearised: " << doc->isLinearized(); -- qDebug() << " Encrypted: " << doc->isEncrypted(); -- qDebug() << " OK to print: " << doc->okToPrint(); -- qDebug() << " OK to copy: " << doc->okToCopy(); -- qDebug() << " OK to change: " << doc->okToChange(); -- qDebug() << "OK to add notes: " << doc->okToAddNotes(); -- qDebug() << " Page mode: " << doc->pageMode(); -- QStringList fontNameList; -- foreach( const Poppler::FontInfo &font, doc->fonts() ) -- fontNameList += font.name(); -- qDebug() << " Fonts: " << fontNameList.join( ", " ); -- -- Poppler::Page *page = doc->page(0); -- qDebug() << " Page 1 size: " << page->pageSize().width()/72 << "inches x " << page->pageSize().height()/72 << "inches"; -- -- PDFDisplay test( doc ); // create picture display -- test.setWindowTitle("Poppler-Qt4 Test"); -- test.show(); // show it -- -- return a.exec(); // start event loop --} -diff --git a/qt4/tests/test-poppler-qt4.cpp b/qt4/tests/test-poppler-qt4.cpp -deleted file mode 100644 -index ae6b11f3..00000000 ---- a/qt4/tests/test-poppler-qt4.cpp -+++ /dev/null -@@ -1,235 +0,0 @@ --#include <QtCore/QDebug> --#include <QtCore/QFile> --#include <QtGui/QApplication> --#include <QtGui/QImage> --#include <QtGui/QLabel> --#include <QtGui/QMouseEvent> --#include <QtGui/QPainter> --#include <QtGui/QPaintEvent> --#include <QtGui/QToolTip> --#include <QtGui/QWidget> -- --#include <poppler-qt4.h> -- --class PDFDisplay : public QWidget // picture display widget --{ --public: -- PDFDisplay( Poppler::Document *d, bool arthur ); -- ~PDFDisplay(); -- void setShowTextRects(bool show); -- void display(); --protected: -- void paintEvent( QPaintEvent * ); -- void keyPressEvent( QKeyEvent * ); -- void mousePressEvent( QMouseEvent * ); --private: -- int m_currentPage; -- QImage image; -- Poppler::Document *doc; -- QString backendString; -- bool showTextRects; -- QList<Poppler::TextBox*> textRects; --}; -- --PDFDisplay::PDFDisplay( Poppler::Document *d, bool arthur ) --{ -- showTextRects = false; -- doc = d; -- m_currentPage = 0; -- if (arthur) -- { -- backendString = "Arthur"; -- doc->setRenderBackend(Poppler::Document::ArthurBackend); -- } -- else -- { -- backendString = "Splash"; -- doc->setRenderBackend(Poppler::Document::SplashBackend); -- } -- doc->setRenderHint(Poppler::Document::Antialiasing, true); -- doc->setRenderHint(Poppler::Document::TextAntialiasing, true); --} -- --void PDFDisplay::setShowTextRects(bool show) --{ -- showTextRects = show; --} -- --void PDFDisplay::display() --{ -- if (doc) { -- Poppler::Page *page = doc->page(m_currentPage); -- if (page) { -- qDebug() << "Displaying page using" << backendString << "backend: " << m_currentPage; -- QTime t = QTime::currentTime(); -- image = page->renderToImage(); -- qDebug() << "Rendering took" << t.msecsTo(QTime::currentTime()) << "msecs"; -- qDeleteAll(textRects); -- if (showTextRects) -- { -- QPainter painter(&image); -- painter.setPen(Qt::red); -- textRects = page->textList(); -- foreach(Poppler::TextBox *tb, textRects) -- { -- painter.drawRect(tb->boundingBox()); -- } -- } -- else textRects.clear(); -- update(); -- delete page; -- } -- } else { -- qWarning() << "doc not loaded"; -- } --} -- --PDFDisplay::~PDFDisplay() --{ -- qDeleteAll(textRects); -- delete doc; --} -- --void PDFDisplay::paintEvent( QPaintEvent *e ) --{ -- QPainter paint( this ); // paint widget -- if (!image.isNull()) { -- paint.drawImage(0, 0, image); -- } else { -- qWarning() << "null image"; -- } --} -- --void PDFDisplay::keyPressEvent( QKeyEvent *e ) --{ -- if (e->key() == Qt::Key_Down) -- { -- if (m_currentPage + 1 < doc->numPages()) -- { -- m_currentPage++; -- display(); -- } -- } -- else if (e->key() == Qt::Key_Up) -- { -- if (m_currentPage > 0) -- { -- m_currentPage--; -- display(); -- } -- } -- else if (e->key() == Qt::Key_Q) -- { -- exit(0); -- } --} -- --void PDFDisplay::mousePressEvent( QMouseEvent *e ) --{ -- int i = 0; -- foreach(Poppler::TextBox *tb, textRects) -- { -- if (tb->boundingBox().contains(e->pos())) -- { -- QString tt = QString("Text: \"%1\"\nIndex in text list: %2").arg(tb->text()).arg(i); -- QToolTip::showText(e->globalPos(), tt, this); -- break; -- } -- ++i; -- } --} -- --int main( int argc, char **argv ) --{ -- QApplication a( argc, argv ); // QApplication required! -- -- if ( argc < 2 || -- (argc == 3 && strcmp(argv[2], "-extract") != 0 && strcmp(argv[2], "-arthur") != 0 && strcmp(argv[2], "-textRects") != 0) || -- argc > 3) -- { -- // use argument as file name -- qWarning() << "usage: test-poppler-qt4 filename [-extract|-arthur|-textRects]"; -- exit(1); -- } -- -- Poppler::Document *doc = Poppler::Document::load(QFile::decodeName(argv[1])); -- if (!doc) -- { -- qWarning() << "doc not loaded"; -- exit(1); -- } -- -- if (doc->isLocked()) -- { -- qWarning() << "document locked (needs password)"; -- exit(0); -- } -- -- // output some meta-data -- int major = 0, minor = 0; -- doc->getPdfVersion( &major, &minor ); -- qDebug() << " PDF Version: " << qPrintable(QString::fromLatin1("%1.%2").arg(major).arg(minor)); -- qDebug() << " Title: " << doc->info("Title"); -- qDebug() << " Subject: " << doc->info("Subject"); -- qDebug() << " Author: " << doc->info("Author"); -- qDebug() << " Key words: " << doc->info("Keywords"); -- qDebug() << " Creator: " << doc->info("Creator"); -- qDebug() << " Producer: " << doc->info("Producer"); -- qDebug() << " Date created: " << doc->date("CreationDate").toString(); -- qDebug() << " Date modified: " << doc->date("ModDate").toString(); -- qDebug() << "Number of pages: " << doc->numPages(); -- qDebug() << " Linearised: " << doc->isLinearized(); -- qDebug() << " Encrypted: " << doc->isEncrypted(); -- qDebug() << " OK to print: " << doc->okToPrint(); -- qDebug() << " OK to copy: " << doc->okToCopy(); -- qDebug() << " OK to change: " << doc->okToChange(); -- qDebug() << "OK to add notes: " << doc->okToAddNotes(); -- qDebug() << " Page mode: " << doc->pageMode(); -- qDebug() << " Metadata: " << doc->metadata(); -- -- if ( doc->hasEmbeddedFiles() ) { -- qDebug() << "Embedded files:"; -- foreach( Poppler::EmbeddedFile *file, doc->embeddedFiles() ) { -- qDebug() << " " << file->name(); -- } -- qDebug(); -- } else { -- qDebug() << "No embedded files"; -- } -- -- if (doc->numPages() <= 0) -- { -- delete doc; -- qDebug() << "Doc has no pages"; -- return 0; -- } -- -- Poppler::Page *page = doc->page(0); -- if (page) -- { -- qDebug() << "Page 1 size: " << page->pageSize().width()/72 << "inches x " << page->pageSize().height()/72 << "inches"; -- delete page; -- } -- -- if (argc == 2 || (argc == 3 && strcmp(argv[2], "-arthur") == 0) || (argc == 3 && strcmp(argv[2], "-textRects") == 0)) -- { -- bool useArthur = (argc == 3 && strcmp(argv[2], "-arthur") == 0); -- PDFDisplay test( doc, useArthur ); // create picture display -- test.setWindowTitle("Poppler-Qt4 Test"); -- test.setShowTextRects(argc == 3 && strcmp(argv[2], "-textRects") == 0); -- test.display(); -- test.show(); // show it -- -- return a.exec(); // start event loop -- } -- else -- { -- Poppler::Page *page = doc->page(0); -- -- QLabel *l = new QLabel(page->text(QRectF()), 0); -- l->show(); -- delete page; -- delete doc; -- return a.exec(); -- } --} -diff --git a/qt4/tests/test-render-to-file.cpp b/qt4/tests/test-render-to-file.cpp -deleted file mode 100644 -index b01aa03c..00000000 ---- a/qt4/tests/test-render-to-file.cpp -+++ /dev/null -@@ -1,69 +0,0 @@ --#include <QtCore/QDebug> --#include <QtCore/QFile> --#include <QtGui/QApplication> --#include <QtGui/QImage> -- --#include <poppler-qt4.h> -- --int main( int argc, char **argv ) --{ -- QApplication a( argc, argv ); // QApplication required! -- -- if ( argc < 2 || -- (argc == 3 && strcmp(argv[2], "-arthur") != 0) || -- argc > 3) -- { -- // use argument as file name -- qWarning() << "usage: test-poppler-qt4 filename [-arthur]"; -- exit(1); -- } -- -- Poppler::Document *doc = Poppler::Document::load(QFile::decodeName(argv[1])); -- if (!doc) -- { -- qWarning() << "doc not loaded"; -- exit(1); -- } -- -- if (doc->isLocked()) -- { -- qWarning() << "document locked (needs password)"; -- exit(0); -- } -- -- if (doc->numPages() <= 0) -- { -- delete doc; -- qDebug() << "Doc has no pages"; -- return 0; -- } -- -- QString backendString; -- if (argc == 3 && strcmp(argv[2], "-arthur") == 0) -- { -- backendString = "Arthur"; -- doc->setRenderBackend(Poppler::Document::ArthurBackend); -- } -- else -- { -- backendString = "Splash"; -- doc->setRenderBackend(Poppler::Document::SplashBackend); -- } -- doc->setRenderHint(Poppler::Document::Antialiasing, true); -- doc->setRenderHint(Poppler::Document::TextAntialiasing, true); -- -- for (int i = 0; i < doc->numPages(); ++i) -- { -- Poppler::Page *page = doc->page(i); -- if (page) { -- qDebug() << "Rendering page using" << backendString << "backend: " << i; -- QTime t = QTime::currentTime(); -- QImage image = page->renderToImage(); -- qDebug() << "Rendering took" << t.msecsTo(QTime::currentTime()) << "msecs"; -- image.save(QString("test-rennder-to-file%1.ppm").arg(i)); -- delete page; -- } -- } -- -- return 0; --} - diff --git a/source/l/poppler/poppler.splashpath.h.revert.diff b/source/l/poppler/poppler.splashpath.h.revert.diff deleted file mode 100644 index 4f008bd5..00000000 --- a/source/l/poppler/poppler.splashpath.h.revert.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- ./splash/SplashPath.h.orig 2018-06-19 16:16:47.000000000 -0500 -+++ ./splash/SplashPath.h 2018-06-21 14:04:25.679001859 -0500 -@@ -137,6 +137,8 @@ - - friend class SplashXPath; - friend class Splash; -+ // this is a temporary hack, until we read FreeType paths directly -+ friend class ArthurOutputDev; - }; - - #endif |