diff --git a/.gitmodules b/.gitmodules index 7868b4899..0c9aac5a4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ +[submodule "scripts"] + path = scripts + url = http://system@scm.trinitydesktop.org/scm/git/scripts [submodule "main/dependencies/qt3"] path = main/dependencies/qt3 url = http://system@scm.trinitydesktop.org/scm/git/qt3 @@ -361,3 +364,6 @@ [submodule "main/applications/yakuake"] path = main/applications/yakuake url = http://system@scm.trinitydesktop.org/scm/git/yakuake +[submodule "main/thirdparty"] + path = main/thirdparty + url = http://system@scm.trinitydesktop.org/scm/git/thirdparty diff --git a/main/thirdparty b/main/thirdparty new file mode 160000 index 000000000..a512a0bb0 --- /dev/null +++ b/main/thirdparty @@ -0,0 +1 @@ +Subproject commit a512a0bb01959fcd8fecbc79b4f54ec4ca868062 diff --git a/main/thirdparty/libreoffice/3.3.2/patches/NOTES b/main/thirdparty/libreoffice/3.3.2/patches/NOTES deleted file mode 100644 index 15a4f25d6..000000000 --- a/main/thirdparty/libreoffice/3.3.2/patches/NOTES +++ /dev/null @@ -1,3 +0,0 @@ -This patchset is intended for Debian and has not been tested on other systems, however the patch libreoffice-trinity.diff should apply cleanly to a stock LibreOffice source tree and function properly if enabled. - -After patch application, you will need to rerun autoconf from within the libreoffice-build directory in order to apply the changes made to configure.in diff --git a/main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity-debian.diff b/main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity-debian.diff deleted file mode 100644 index a28748b3f..000000000 --- a/main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity-debian.diff +++ /dev/null @@ -1,368 +0,0 @@ -diff -urN debian/changelog debian/changelog ---- debian/changelog 2011-04-19 17:25:22.000000000 -0500 -+++ debian/changelog 2011-08-20 21:10:45.000000000 -0500 -@@ -1,3 +1,9 @@ -+libreoffice (1:3.3.2-1ubuntu5~build1~natty) natty; urgency=low -+ -+ * Enable TDE module -+ -+ -- Timothy Pearson Sat, 20 Aug 2011 15:14:00 -0600 -+ - libreoffice (1:3.3.2-1ubuntu4) natty; urgency=low - - * fix corrupted startcenter desktop file (LP: #765010) -diff -urN debian/control debian/control ---- debian/control 2011-04-19 17:25:51.000000000 -0500 -+++ debian/control 2011-08-20 21:14:56.000000000 -0500 -@@ -4,7 +4,7 @@ - Maintainer: Ubuntu Core Developers - XSBC-Original-Maintainer: Debian LibreOffice Maintainers - Uploaders: Rene Engelhard --Build-Depends: lsb-release, bzip2, bison, flex | flex-old, libxaw7-dev, unzip, zip, autoconf, automake, sharutils, pkg-config, libfontconfig1-dev, libc0.1 (>= 2.10.2-7) [kfreebsd-i386 kfreebsd-amd64], zlib1g-dev, libfreetype6-dev, libx11-dev, libsm-dev, libxt-dev, libxext-dev, libxtst-dev, libice-dev, libsane-dev, libxrender-dev, libcups2-dev, libarchive-zip-perl, libpng12-dev, libjpeg-dev, libxml2-dev, libexpat1-dev, fastjar, xsltproc, libxkbfile-dev, libxinerama-dev, x11proto-render-dev, unixodbc-dev (>= 2.2.11), libxml-parser-perl, gperf, libpq-dev, po-debconf, bc, wget | curl, g++ (>> 4.3.0) [s390], gcc (>> 4.3.0) [s390], dpkg-dev (>= 1.15.1), libgl1-mesa-dev [!armel !mips !mipsel], libglu1-mesa-dev [!armel !mips !mipsel], libpoppler-dev (>= 0.8.0), libgraphite-dev, libtextcat-dev (>= 2.2-8), libcurl4-gnutls-dev, libssl-dev, libdb-dev, python (>= 2.6.6-3+squeeze4), python-dev, debhelper (>= 7.2.3~), libcppunit-dev (>= 1.12), openjdk-6-jdk [alpha amd64 armel armhf i386 powerpc powerpcspe ppc64 s390 s390x sparc], gcj-native-helper [!powerpc !powerpcspe !ppc64], libgcj-common (>= 1:4.4.1) [!powerpc !powerpcspe !ppc64], ant (>= 1.7.0), ant-optional (>= 1.7.0), libcommons-codec-java, libcommons-httpclient-java, libcommons-lang-java, libcommons-logging-java, libservlet2.5-java, libbase-java-openoffice.org [!armel], libsac-java [!armel], libxml-java-openoffice.org [!armel], libflute-java-openoffice.org [!armel], libpentaho-reporting-flow-engine-java-openoffice.org [!armel], liblayout-java-openoffice.org [!armel], libloader-java-openoffice.org [!armel], libformula-java-openoffice.org [!armel], librepository-java-openoffice.org [!armel], libfonts-java-openoffice.org [!armel], libserializer-java-openoffice.org [!armel], libcommons-logging-java, libservlet2.5-java, xulrunner-dev | firefox-dev, libnss3-dev (>= 3.12.3), dmake (>= 1:4.11), mono-devel (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], libmono-dev (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], mono-utils (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], cli-common-dev (>= 0.5.7) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], libhunspell-dev (>= 1.1.5-2), libhyphen-dev (>= 2.4), libstlport4.6-dev (>= 4.6.2-3) [i386], libboost-dev (>= 1.38), libmdds-dev, libvigraimpex-dev, libwpd-dev (>= 0.9.0), libmythes-dev (>= 2:1.2), libwps-dev (>= 0.2.0), libwpg-dev (>= 0.2.0), libicu-dev (>= 4.0), libxslt1-dev, libcairo2-dev, kdelibs5-dev (>= 4:4.3.4), libqt4-dev (>= 4.5), libmysqlclient-dev, libmysqlcppconn-dev (>= 1.1.0~r791), libxrandr-dev, libhsqldb-java (>> 1.8.0.10), bsh (>= 2.0b4), liblpsolve55-dev (>= 5.5.0.13-5+b1), lp-solve (>= 5.5.0.13-5+b1), libsuitesparse-dev (>= 1:3.4.0), libdbus-glib-1-dev (>= 0.60), libgstreamer-plugins-base0.10-dev, libneon27-gnutls-dev, librdf0-dev (>= 1.0.8), libgtk2.0-dev (>= 2.10), libgnomevfs2-dev, libgconf2-dev, libldap2-dev -+Build-Depends: lsb-release, bzip2, bison, flex | flex-old, libxaw7-dev, unzip, zip, autoconf, automake, sharutils, pkg-config, libfontconfig1-dev, libc0.1 (>= 2.10.2-7) [kfreebsd-i386 kfreebsd-amd64], zlib1g-dev, libfreetype6-dev, libx11-dev, libsm-dev, libxt-dev, libxext-dev, libxtst-dev, libice-dev, libsane-dev, libxrender-dev, libcups2-dev, libarchive-zip-perl, libpng12-dev, libjpeg-dev, libxml2-dev, libexpat1-dev, fastjar, xsltproc, libxkbfile-dev, libxinerama-dev, x11proto-render-dev, unixodbc-dev (>= 2.2.11), libxml-parser-perl, gperf, libpq-dev, po-debconf, bc, wget | curl, g++ (>> 4.3.0) [s390], gcc (>> 4.3.0) [s390], dpkg-dev (>= 1.15.1), libgl1-mesa-dev [!armel !mips !mipsel], libglu1-mesa-dev [!armel !mips !mipsel], libpoppler-dev (>= 0.8.0), libgraphite-dev, libtextcat-dev (>= 2.2-8), libcurl4-gnutls-dev, libssl-dev, libdb-dev, python (>= 2.6.6-3+squeeze4), python-dev, debhelper (>= 7.2.3~), libcppunit-dev (>= 1.12), openjdk-6-jdk [alpha amd64 armel armhf i386 powerpc powerpcspe ppc64 s390 s390x sparc], gcj-native-helper [!powerpc !powerpcspe !ppc64], libgcj-common (>= 1:4.4.1) [!powerpc !powerpcspe !ppc64], ant (>= 1.7.0), ant-optional (>= 1.7.0), libcommons-codec-java, libcommons-httpclient-java, libcommons-lang-java, libcommons-logging-java, libservlet2.5-java, libbase-java-openoffice.org [!armel], libsac-java [!armel], libxml-java-openoffice.org [!armel], libflute-java-openoffice.org [!armel], libpentaho-reporting-flow-engine-java-openoffice.org [!armel], liblayout-java-openoffice.org [!armel], libloader-java-openoffice.org [!armel], libformula-java-openoffice.org [!armel], librepository-java-openoffice.org [!armel], libfonts-java-openoffice.org [!armel], libserializer-java-openoffice.org [!armel], libcommons-logging-java, libservlet2.5-java, xulrunner-dev | firefox-dev, libnss3-dev (>= 3.12.3), dmake (>= 1:4.11), mono-devel (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], libmono-dev (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], mono-utils (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], cli-common-dev (>= 0.5.7) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], libhunspell-dev (>= 1.1.5-2), libhyphen-dev (>= 2.4), libstlport4.6-dev (>= 4.6.2-3) [i386], libboost-dev (>= 1.38), libmdds-dev, libvigraimpex-dev, libwpd-dev (>= 0.9.0), libmythes-dev (>= 2:1.2), libwps-dev (>= 0.2.0), libwpg-dev (>= 0.2.0), libicu-dev (>= 4.0), libxslt1-dev, libcairo2-dev, kdelibs4-trinity-dev, libqt4-dev (>= 4.5), libmysqlclient-dev, libmysqlcppconn-dev (>= 1.1.0~r791), libxrandr-dev, libhsqldb-java (>> 1.8.0.10), bsh (>= 2.0b4), liblpsolve55-dev (>= 5.5.0.13-5+b1), lp-solve (>= 5.5.0.13-5+b1), libsuitesparse-dev (>= 1:3.4.0), libdbus-glib-1-dev (>= 0.60), libgstreamer-plugins-base0.10-dev, libneon27-gnutls-dev, librdf0-dev (>= 1.0.8), libgtk2.0-dev (>= 2.10), libgnomevfs2-dev, libgconf2-dev, libldap2-dev - Build-Depends-Indep: fdupes, xml-core, imagemagick, fontforge - Build-Conflicts: libcairo2 (= 1.4.8-1), libxul-dev (= 1.8.0.13~pre070720-0etch1), gjdoc (= 0.7.8-2), libc6-dev (= 2.6.1-3) [i386 amd64], libc6-dev (= 2.6.1-4) [i386 amd64], nvidia-glx-dev, nvidia-glx-legacy-dev, libmono-dev (= 1.2.6+dfsg-1), libmono-dev (= 1.2.6+dfsg-2), libmono-dev (= 1.2.6+dfsg-3), libmono-dev (= 1.2.6+dfsg-4), libmono-dev (= 2.4+dfsg-2) [sparc], gcj-4.2 (= 4.2.2-6), flex (= 2.5.34-1) [amd64], libboost1.39-dev (<< 1.39.0-2), graphicsmagick-imagemagick-compat (<< 1.3.9~), ant (= 1.8.0-1) [hppa ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel], ant (= 1.8.0-2) [hppa ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel], ant (= 1.8.0-3) [hppa ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel], base-files (= 6.0), base-files (= 6.0squeeze1), libhsqldb-java (>= 1.8.1~) - Standards-Version: 3.9.1 -@@ -18,7 +18,7 @@ - Architecture: alpha amd64 armel armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 - Depends: libreoffice-core (= ${binary:Version}), libreoffice-writer, libreoffice-calc, libreoffice-impress, libreoffice-draw, libreoffice-math, libreoffice-base [!armel], libreoffice-report-builder-bin [!armel], ttf-dejavu, ttf-sil-gentium-basic, libreoffice-filter-mobiledev, ${lucene-depends}, ${java-common-depends}, ${misc:Depends} - Recommends: ttf-liberation | ttf-mscorefonts-installer --Suggests: hunspell-dictionary, myspell-dictionary, libreoffice-help-${help-l10n-virtual-version}, menu, unixodbc, cups-bsd, libsane, hyphen-hyphenation-patterns, mythes-thesaurus, libxrender1, libgl1, libreoffice-gnome | libreoffice-kde, iceweasel | firefox | icedove | thunderbird | iceape-browser | mozilla-browser, ${java-runtime-depends}, openclipart-libreoffice, pstoedit, imagemagick | graphicsmagick-imagemagick-compat, libpaper-utils, ${gstreamer-plugins-suggests}, ${libldap-suggests}, ${ooo-binfilter-dep}, ${ooo-officebean-dep} -+Suggests: hunspell-dictionary, myspell-dictionary, libreoffice-help-${help-l10n-virtual-version}, menu, unixodbc, cups-bsd, libsane, hyphen-hyphenation-patterns, mythes-thesaurus, libxrender1, libgl1, libreoffice-gnome | libreoffice-kde | libreoffice-trinity, iceweasel | firefox | icedove | thunderbird | iceape-browser | mozilla-browser, ${java-runtime-depends}, openclipart-libreoffice, pstoedit, imagemagick | graphicsmagick-imagemagick-compat, libpaper-utils, ${gstreamer-plugins-suggests}, ${libldap-suggests}, ${ooo-binfilter-dep}, ${ooo-officebean-dep} - Description: office productivity suite - LibreOffice is a full-featured office productivity suite that provides - a near drop-in replacement for Microsoft(R) Office. -@@ -45,6 +45,7 @@ - QuickStarter for GNOMEs notification are - * libreoffice-gnome: GNOME VFS, GConf backend - * libreoffice-kde: KDE UI Plugin and KDE File Picker support -+ * libreoffice-trinity: TDE UI Plugin and TDE File Picker support - * menu: Will add libreoffice menu entries for every Debian window manager. - * unixodbc: ODBC database support - * cups-bsd: Allows LibreOffice to detect your CUPS printer queues -@@ -91,7 +92,7 @@ - Package: libreoffice-core - Architecture: alpha amd64 armel armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 - Depends: libreoffice-common (>> ${base-version}), ttf-opensymbol (>= 1:3.0), ${shlibs:Depends}, ure (>= 1.5.1+OOo3.1.1-15), fontconfig, ${mozilla-nss-depends}, ${misc:Depends} --Conflicts: libreoffice-calc (<< ${binary:Version}), libreoffice-writer (<< ${binary:Version}), libreoffice-impress (<< ${binary:Version}), libreoffice-draw (<< ${binary:Version}), libreoffice-base (<< ${binary:Version}), libreoffice-gtk (<< ${binary:Version}), libreoffice-gnome (<< ${binary:Version}), libreoffice-kde (<< ${binary:Version}), libreoffice-evolution (<< ${binary:Version}), libreoffice-filter-so52 (<< ${binary:Version}), libreoffice-officebean (<< ${binary:Version}), libreoffice-dev (<< ${binary:Version}), libcairo2 (= 1.4.8-1), libicu38 (= 3.8~d01-1), cli-uno-bridge (<< 1:3.0.0~dev300m22), cacao-oj6-jre, mozilla-plugin-vlc (<< 1.0) -+Conflicts: libreoffice-calc (<< ${binary:Version}), libreoffice-writer (<< ${binary:Version}), libreoffice-impress (<< ${binary:Version}), libreoffice-draw (<< ${binary:Version}), libreoffice-base (<< ${binary:Version}), libreoffice-gtk (<< ${binary:Version}), libreoffice-gnome (<< ${binary:Version}), libreoffice-kde (<< ${binary:Version}), libreoffice-trinity (<< ${binary:Version}), libreoffice-evolution (<< ${binary:Version}), libreoffice-filter-so52 (<< ${binary:Version}), libreoffice-officebean (<< ${binary:Version}), libreoffice-dev (<< ${binary:Version}), libcairo2 (= 1.4.8-1), libicu38 (= 3.8~d01-1), cli-uno-bridge (<< 1:3.0.0~dev300m22), cacao-oj6-jre, mozilla-plugin-vlc (<< 1.0) - Breaks: myspell-ru (<< 0.99g5-8.1), myspell-lv (<< 0.7.3-3.1), myspell-et (<< 1:20030606-12.1), myspell-fi (<< 0.7-17.2), myspell-cs-cz (<< 20040229-4.1), myspell-el-gr (<< 0.3-1.1), myspell-nn (<< 2.0.10-3.1), myspell-nb (<< 2.0.10-3.1), hunspell-ar (<< 0.0.0+20080110-1.1), myspell-hu (<< 0.99.4-1.2), hunspell-gl-es (<< 2.2a-6), myspell-gv (<< 0.50-8), myspell-en-au (<< 2.1-5), myspell-fa (<< 0.20070816-2), hunspell-uz (<< 0.6-3.1), hunspell-ko (<< 0.3.3-1), hunspell-se (<< 1.0~beta6.20081222-1.1), hunspell-de-med (<< 20090825-1), hunspell-en-us (<< 20070829-3), myspell-sv-se (<< 1.3.8-6-2.2), myspell-sk (<< 0.5.5a-2.1), myspell-fo (<< 0.2.36-3), myspell-nl (<< 1:1.10-3), myspell-pt-br (<< 2009.03.30-1.1), myspell-pl (<< 20090830-1), myspell-pt-pt (<< 20090309-1.1), myspell-ga (<< 2.0-19), myspell-gd (<< 0.50-7), myspell-ku (<< 0.20.0-1.1), myspell-hr (<< 20060617-2), myspell-fr-gut (<< 1:1.0-26.1), myspell-eo (<< 2.1.2000.02.25-41), myspell-de-de-oldspell (<< 1:2-25.1), myspell-da (<< 1.6.18-1.1), myspell-es (<< 1.10-7), myspell-de-at (<< 20071211-2), myspell-de-ch (<< 20071211-2), myspell-de-de (<< 20071211-2), hunspell-de-at (<< 20071211-2), hunspell-de-ch (<< 20071211-2), hunspell-de-de (<< 20071211-2), myspell-ca (<< 0.6-8), myspell-tl (<< 0.4-0-5), myspell-ne (<< 1.0-4.1), myspell-fr (<< 1.4-25), myspell-hy (<< 0.10.1-1.1), myspell-en-us (<< 1:3.1.0-3), myspell-en-gb (<< 1:3.1.0-3), myspell-en-za (<< 1:3.1.0-3), myspell-af (<< 1:3.1.0-3), myspell-it (<< 1:3.1.0-3), myspell-sw (<< 1:3.1.0-3), myspell-th (<< 1:3.1.0-3), hunspell-en-ca (<< 1:3.1.0-3), hunspell-ne (<< 1:3.1.0-3), hunspell-da (<< 1:3.1.0-3), hunspell-fr (<< 1:3.1.0-3), hunspell-vi (<< 1:3.1.0-3), hunspell-hu (<< 1:3.1.0-3), hunspell-sr (<< 1:3.1.0-3), hunspell-sh (<< 1:3.1.0-3), myspell-lv (<< 0.7.3-3.1), myspell-et (<< 1:20030606-12.1), myspell-nn (<< 2.0.10-3.1), myspell-nb (<< 2.0.10-3.1) - Provides: libreoffice-bundled - Description: office productivity suite -- arch-dependent files -@@ -772,7 +773,7 @@ - Section: debug - Architecture: alpha amd64 armel armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 - Priority: extra --Depends: libreoffice-core (= ${binary:Version}) | libreoffice-gcj (= ${binary:Version}) | libreoffice-dev (= ${binary:Version}) | libreoffice-gnome (= ${binary:Version}) | libreoffice-kde (= ${binary:Version}) | libreoffice-calc (= ${binary:Version}) | libreoffice-base-core (= ${binary:Version}) | libreoffice-base (= ${binary:Version}) | libreoffice-impress (= ${binary:Version}) | libreoffice-filter-binfilter (= ${binary:Version}) | libreoffice-draw (= ${binary:Version}) | libreoffice-writer (= ${binary:Version}) | python-uno (= ${binary:Version}) | cli-uno-bridge (= ${binary:Version}) | mozilla-libreoffice (= ${binary:Version}) | libreoffice-ogltrans (= ${binary:Version}), ${misc:Depends} -+Depends: libreoffice-core (= ${binary:Version}) | libreoffice-gcj (= ${binary:Version}) | libreoffice-dev (= ${binary:Version}) | libreoffice-gnome (= ${binary:Version}) | libreoffice-kde (= ${binary:Version}) | libreoffice-trinity (= ${binary:Version}) | libreoffice-calc (= ${binary:Version}) | libreoffice-base-core (= ${binary:Version}) | libreoffice-base (= ${binary:Version}) | libreoffice-impress (= ${binary:Version}) | libreoffice-filter-binfilter (= ${binary:Version}) | libreoffice-draw (= ${binary:Version}) | libreoffice-writer (= ${binary:Version}) | python-uno (= ${binary:Version}) | cli-uno-bridge (= ${binary:Version}) | mozilla-libreoffice (= ${binary:Version}) | libreoffice-ogltrans (= ${binary:Version}), ${misc:Depends} - Recommends: ure-dbg - Suggests: ${dbg-dbg-suggests} - Description: office productivity suite -- debug symbols -@@ -834,6 +835,25 @@ - * konqueror / kmail - * libreoffice-kab: KDE Addressbook support - -+Package: libreoffice-trinity -+Architecture: alpha amd64 armel armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 -+Depends: libreoffice-core (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} -+Recommends: ${tde-iconset-dep} -+Suggests: konqueror-trinity, kmail-trinity, libreoffice-kab-trinity -+Section: kde -+Enhances: libreoffice -+Replaces: openoffice.org-trinity (<< 1:3.3.0~) -+Description: office productivity suite -- TDE integration -+ LibreOffice is a full-featured office productivity suite that provides -+ a near drop-in replacement for Microsoft(R) Office. -+ . -+ This package contains the TDE plugin for drawing OOo's widgets with -+ TDE/Qt and a TDEish File Picker when running under TDE. -+ You can extend the functionality of this by installing these packages: -+ . -+ * konqueror-trinity / kmail-trinity -+ * libreoffice-kab-trinity: TDE Addressbook support -+ - Package: libreoffice-sdbc-postgresql - Section: misc - Architecture: alpha amd64 armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 -diff -urN debian/control.in debian/control.in ---- debian/control.in 2011-04-19 17:25:22.000000000 -0500 -+++ debian/control.in 2011-08-20 21:12:34.000000000 -0500 -@@ -180,6 +180,7 @@ - libreofficeVER-gtk (<< ${binary:Version}), - libreofficeVER-gnome (<< ${binary:Version}), - libreofficeVER-kde (<< ${binary:Version}), -+ libreofficeVER-trinity (<< ${binary:Version}), - libreofficeVER-evolution (<< ${binary:Version}), - libreofficeVER-filter-so52 (<< ${binary:Version}), - libreofficeVER-officebean (<< ${binary:Version}), -diff -urN debian/control.tdeab.in debian/control.tdeab.in ---- debian/control.tdeab.in 1969-12-31 18:00:00.000000000 -0600 -+++ debian/control.tdeab.in 2011-08-20 14:31:00.000000000 -0500 -@@ -0,0 +1,14 @@ -+Package: libreofficeVER-kab-trinity -+Architecture: %OOO_BASE_ARCHS% -+Depends: libreofficeVER-core (= ${binary:Version}), -+ ${shlibs:Depends}, -+ ${misc:Depends} -+Recommends: kaddressbook-trinity -+Conflicts: ure (<< 1.5.1+OOo3.1.1-15) -+Description: office productivity suite -- TDE adressbook support -+ LibreOffice is a full-featured office productivity suite that provides -+ a near drop-in replacement for Microsoft(R) Office. -+ . -+ This package allows LibreOffice to access the TDE Addressbook. -+ You need to install kaddressbook-trinity separately. -+ -diff -urN debian/control.tde.in debian/control.tde.in ---- debian/control.tde.in 1969-12-31 18:00:00.000000000 -0600 -+++ debian/control.tde.in 2011-08-20 14:31:00.000000000 -0500 -@@ -0,0 +1,23 @@ -+Package: libreofficeVER-trinity -+Architecture: %OOO_ARCHS% -+Depends: libreofficeVER-core (= ${binary:Version}), -+ ${shlibs:Depends}, -+ ${misc:Depends} -+Recommends: ${tde-iconset-dep} -+Suggests: konqueror-trinity, -+ kmail-trinity, -+ libreofficeVER-kab-trinity -+Section: kde -+Enhances: libreofficeVER -+Replaces: openoffice.org-trinity (<< 1:3.3.0~) -+Description: office productivity suite -- TDE integration -+ LibreOffice is a full-featured office productivity suite that provides -+ a near drop-in replacement for Microsoft(R) Office. -+ . -+ This package contains the TDE plugin for drawing OOo's widgets with -+ TDE/TQt and a TDEish File Picker when running under TDE. -+ You can extend the functionality of this by installing these packages: -+ . -+ * konqueror-trinity / kmail-trinity -+ * libreoffice-kab-trinity: TDE Addressbook support -+ -diff -urN debian/rules debian/rules ---- debian/rules 2011-04-19 17:25:22.000000000 -0500 -+++ debian/rules 2011-08-20 14:31:00.000000000 -0500 -@@ -175,7 +175,8 @@ - BUILD_CAIROCANVAS=y - SYSTEM_STUFF += cairo - CAIRO_FONTS_PATCH=y --BUILD_KDE=y -+BUILD_KDE=n -+BUILD_TDE=y - KDE_VER=4 - ifeq "$(BUILD_KDE)" "y" - ifeq "$(KDE_VER)" "3" -@@ -191,6 +192,12 @@ - QT_MINVER= (>= 4.5) - KDELIBS_MINVER= (>= 4:4.3.4) - endif -+ifeq "$(BUILD_TDE)" "y" -+ ENABLE_TDEAB=y -+endif -+ifeq "$(BUILD_TDE)" "y" -+ TDELIBS_MINVER= (>= 4:3.5.12) -+endif - BUILD_DBG_PACKAGE=y - SYSTEM_STUFF += beanshell - SYSTEM_STUFF += hsqldb -@@ -383,6 +390,7 @@ - ENABLE_MYSQLNATIVE=n - ENABLE_EVO2=n - ENABLE_KDEAB=n -+ ENABLE_TDEAB=n - ENABLE_REPORTDESIGN=n - DEBHELPER_OPTIONS += -Nlibreoffice$(VER)-base libreoffice$(VER)-base-core - DEBHELPER_OPTIONS += -Nlibreoffice$(VER)-evolution -Nlibreoffice$(VER)-kab -@@ -996,6 +1004,25 @@ - endif - endif - -+ifeq "$(BUILD_TDE)" "n" -+ CONFIGURE_FLAGS+= --disable-tde -+ CONFIGURE_FLAGS+= --with-images="$(IMAGES)" -+else -+ CONFIGURE_FLAGS+= --disable-kde -+ CONFIGURE_FLAGS+= --disable-kde4 -+ CONFIGURE_FLAGS+= --enable-tde -+ TDE_ICONSET_DEP=libreoffice$(VER)-style-crystal -+ BUILD_DEPS += , kdelibs4-trinity-dev -+ -+ DBG_DBG_SUGGESTS+= , kdelibs-trinity-dbg, libtqtinterface-dbg -+ -+ ifeq "$(ENABLE_TDEAB)" "y" -+ BUILD_DEPS += , kdepim-trinity-dev -+ else -+ CONFIGURE_FLAGS+= --disable-tdeab -+ endif -+endif -+ - ifeq "$(ENABLE_MYSQLNATIVE)" "y" - CONFIGURE_FLAGS += --enable-mysql-connector - ifneq (,$(filter mysql, $(SYSTEM_STUFF))) -@@ -1523,6 +1550,11 @@ - >> debian/control < debian/control.kde.in - perl -pi -e 's/ libreoffice$(VER)-gnome,/ libreoffice-gnome | libreoffice$(VER)-kde,/' debian/control - endif -+ifeq "$(BUILD_TDE)" "y" -+ sed -e "s|libreofficeVER|libreoffice$(VER)|g" \ -+ >> debian/control < debian/control.tde.in -+ perl -pi -e 's/ libreoffice$(VER)-gnome,/ libreoffice-gnome | libreoffice$(VER)-trinity,/' debian/control -+endif - ifeq "$(ENABLE_SDBC_POSTGRESQL)" "y" - sed -e "s|libreofficeVER|libreoffice$(VER)|g" \ - >> debian/control < debian/control.postgresql.in -@@ -1539,6 +1571,10 @@ - sed -e "s|libreofficeVER|libreoffice$(VER)|g" \ - >> debian/control < debian/control.kab.in - endif -+ifeq "$(ENABLE_TDEAB)" "y" -+ sed -e "s|libreofficeVER|libreoffice$(VER)|g" \ -+ >> debian/control < debian/control.tdeab.in -+endif - endif # ifeq "$(PKGSOURCE)" "libreoffice$(VER)" - - perl -pi -e "s,%OOO_ARCHS%,$(OOO_ARCHS),g" debian/control -@@ -1610,6 +1646,10 @@ - perl -pi -e 's/GConf backend$$/GConf backend\n * libreoffice$(VER)-kde: KDE UI Plugin and KDE File Picker support/' debian/control - endif - -+ifeq "$(BUILD_TDE)" "y" -+ perl -pi -e 's/GConf backend$$/GConf backend\n * libreoffice$(VER)-trinity: TDE UI Plugin and TDE File Picker support/' debian/control -+endif -+ - ifeq "$(ENABLE_LDAP)" "y" - perl -pi -e 's/paperconf$$/paperconf\n * $(LDAP_LIB): LDAP client library; needed for LibreOffice getting its\n profiles from LDAP/' debian/control - endif -@@ -1694,6 +1734,12 @@ - ln -sf /usr/bin/moc-qt$(KDE_VER) $(CURDIR)/debian/usr/bin/moc - endif - -+ifeq "$(BUILD_TDE)" "y" -+ # be sure we use the right moc, FIXME: Trinity uses its own moc -+ mkdir -p $(CURDIR)/debian/usr/bin -+ ln -sf /usr/bin/moc-qt$(KDE_VER) $(CURDIR)/debian/usr/bin/moc -+endif -+ - ifeq "$(USE_STLPORT)" "y" - ifeq "$(USE_SYSTEM_STLPORT)" "y" - # stlport home -@@ -1770,6 +1816,7 @@ - dh_testdir - - ifeq "$(BUILD_KDE)" "n" -+ ifeq "$(BUILD_TDE)" "n" - # hack to tell we want crystal icons nevertheless and they should be - # extracted... - if ! grep -q crystal $(OOO_BUILD_TREE)/bin/setup; then \ -@@ -1778,6 +1825,7 @@ - | sed -e s/\'industrial/\'industrial\ crystal/ \ - > $(OOO_BUILD_TREE)/bin/setup && rm $(OOO_BUILD_TREE)/bin/setup.bak; \ - fi -+ endif - endif - - cd $(OOO_BUILD_TREE) ; \ -@@ -2276,6 +2324,12 @@ - -br $(PKGDIR)-core/$(OODIR)/program/services.rdb \ - -c 'vnd.sun.star.expand:$$OOO_BASE_DIR/program/libkab1.so' - endif -+ifeq "$(ENABLE_TDEAB)" "y" -+ debian/ure/$(OOBRANDDIR)/ure/bin/regcomp -revoke \ -+ -r $(PKGDIR)-core/$(OODIR)/program/services.rdb \ -+ -br $(PKGDIR)-core/$(OODIR)/program/services.rdb \ -+ -c 'vnd.sun.star.expand:$$OOO_BASE_DIR/program/libtdeab1.so' -+endif - ifeq "$(BUILD_BINFILTERS)" "y" - debian/ure/$(OOBRANDDIR)/ure/bin/regcomp -revoke \ - -r $(PKGDIR)-core/$(OODIR)/program/services.rdb \ -@@ -2362,6 +2416,49 @@ - done - endif - -+ifeq "$(BUILD_TDE)" "y" -+ mkdir -p -m755 $(PKGDIR)-trinity/$(OODIR)/program -+ mkdir -p -m755 $(PKGDIR)-trinity/$(OOBRANDDIR)/program -+ for f in fps_tde*.uno.so libvclplug_tde*.so; do \ -+ mv $(PKGDIR)-core/$(OODIR)/program/$$f $(PKGDIR)-trinity/$(OODIR)/program || exit 1 ;\ -+ done -+ mv $(PKGDIR)-common/$(OOBRANDDIR)/program/tdefilepicker \ -+ $(PKGDIR)-trinity/$(OOBRANDDIR)/program -+ -+ # install files for TDEs "create new" ... -+ mkdir -p $(PKGDIR)-trinity/usr/share/templates/.source -+ for i in $(SOURCE_TREE)/extras/source/shellnew/*; do \ -+ cp $$i $(PKGDIR)-trinity/usr/share/templates/.source/`basename $$i`; \ -+ done -+ cat debian/templates/soffice-template.desktop.in \ -+ | sed -e "s/@APP@/Writer/" \ -+ | sed -e "s/@EXT@/odt/" \ -+ | sed -e "s/@TYPE@/text/" \ -+ > $(PKGDIR)-trinity/usr/share/templates/soffice.odt.desktop -+ cat debian/templates/soffice-template.desktop.in \ -+ | sed -e "s/@APP@/Calc/" \ -+ | sed -e "s/@EXT@/ods/" \ -+ | sed -e "s/@TYPE@/spreadsheet/" \ -+ > $(PKGDIR)-trinity/usr/share/templates/soffice.ods.desktop -+ cat debian/templates/soffice-template.desktop.in \ -+ | sed -e "s/@APP@/Impress/" \ -+ | sed -e "s/@EXT@/odp/" \ -+ | sed -e "s/@TYPE@/presentation/" \ -+ > $(PKGDIR)-trinity/usr/share/templates/soffice.odp.desktop -+ cat debian/templates/soffice-template.desktop.in \ -+ | sed -e "s/@APP@/Draw/" \ -+ | sed -e "s/@EXT@/odg/" \ -+ | sed -e "s/@TYPE@/drawing/" \ -+ > $(PKGDIR)-trinity/usr/share/templates/soffice.odg.desktop -+endif -+ifeq "$(ENABLE_TDEAB)" "y" -+ rm -rf $(PKGDIR)-kab-trinity -+ mkdir -p -m755 $(PKGDIR)-kab-trinity/$(OODIR)/program -+ for f in libtdeab*so; do \ -+ mv $(PKGDIR)-core/$(OODIR)/program/$$f $(PKGDIR)-kab-trinity/$(OODIR)/program || exit 1 ;\ -+ done -+endif -+ - # move the GNOME stuff which are *not* in gid_Module_Optional_Gnome - # (which is moved into -gnome in package-ooo) into -gnome - mkdir -p -m755 $(PKGDIR)-gnome/$(OODIR)/program -@@ -3455,6 +3552,7 @@ - -V'ooo-binfilter-dep=$(OOO_BINFILTER_DEP)' \ - -V'ooo-officebean-dep=$(OOO_OFFICEBEAN_DEP)' \ - -V'kde-iconset-dep=$(KDE_ICONSET_DEP)' \ -+ -V'tde-iconset-dep=$(TDE_ICONSET_DEP)' \ - -V'lpsolve-dep=$(LPSOLVE_DEP)' \ - -V'gstreamer-plugins-suggests=$(GSTREAMER_PLUGINS_SUGGESTS)' \ - -V'libebook-dep=$(shell debian/scripts/get_libebook_dep.sh)' \ -diff -urN libreoffice-build/configure.in libreoffice-build/configure.in ---- libreoffice-build/configure.in 2011-03-15 11:51:33.000000000 -0500 -+++ libreoffice-build/configure.in 2011-08-21 16:24:42.000000000 -0500 -@@ -81,6 +81,11 @@ - --disable-kde4 Disables KDE4 native widgets.], - ,) - -+AC_ARG_ENABLE(tde, -+[ -+ --disable-tde Disables TDE native widgets.], -+,) -+ - AC_ARG_ENABLE(mono, - [ - --enable-mono Enables the compilation of the Mono bindings.], -@@ -928,6 +933,16 @@ - OOO_WIDGET_FLAGS="$OOO_WIDGET_FLAGS --disable-kde4" - fi - -+OOO_WIDGET_FLAGS= -+if test "$enable_tde" != "no"; then -+ if test "z$with_win32" = "z" -a "z`uname -s`" != "zDarwin" -a "z$with_distro" != "zCrossWin32"; then -+ OOO_WIDGET_FLAGS="--enable-tde" -+ widget_sets="tde" -+ fi -+else -+ OOO_WIDGET_FLAGS="--disable-tde" -+fi -+ - if test "$enable_gtk" != "no"; then - if test "z$with_win32" = "z" -a "z`uname -s`" != "zDarwin" -a "z$with_distro" != "zCrossWin32"; then - OOO_WIDGET_FLAGS="--enable-gtk $OOO_WIDGET_FLAGS" diff --git a/main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity.diff b/main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity.diff deleted file mode 100644 index 33a55305c..000000000 --- a/main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity.diff +++ /dev/null @@ -1,15796 +0,0 @@ -diff -urN libreoffice-build/patches/dev300/apply libreoffice-build/patches/dev300/apply ---- libreoffice-build/patches/dev300/apply 2011-08-21 16:22:42.000000000 -0500 -+++ libreoffice-build/patches/dev300/apply 2011-08-21 16:24:42.000000000 -0500 -@@ -22,7 +22,7 @@ - - LinuxCommon : Common, Defaults, FontConfigTemporaryHacks, \ - FedoraLinuxOnlyFixes, LinuxOnly, msaccess, OpenGLTransitions, \ -- CliMonoCommon, Mono, MonoComp, AddressBooks, QuickStarter, KDE4, Netbook, \ -+ CliMonoCommon, Mono, MonoComp, AddressBooks, QuickStarter, KDE4, TDE, Netbook, \ - GlobalNSPluginSupport - MacOSXCommon : Common, Defaults - Win32Common : Common, Defaults, Win32Only, CliMonoCommon, CliComponent, NotDebian -@@ -184,8 +184,6 @@ - # pass $ORIGIN correctly to RPATH - icu-4.2.1-rpath.diff. pmladek - --[ TemporaryHacks ] -- - # add idl target to toplevel makefile - makefile-idl-build.diff, noelpwer - -@@ -1493,6 +1491,10 @@ - # we need a good plan before, though ;-) - split-icons-search-usr-share.diff, n#296502, pmladek - -+[ TDE ] -+# add trinity integration -+trinity-modules.diff -+ - [ ArkOnly ] - SectionOwner => brosenk - -diff -urN libreoffice-build/patches/dev300/trinity-modules.diff libreoffice-build/patches/dev300/trinity-modules.diff ---- libreoffice-build/patches/dev300/trinity-modules.diff 1969-12-31 18:00:00.000000000 -0600 -+++ libreoffice-build/patches/dev300/trinity-modules.diff 2011-08-21 16:24:42.000000000 -0500 -@@ -0,0 +1,15748 @@ -+diff -urN configure.in configure.in -+--- configure.in 2011-03-08 12:51:39.000000000 -0600 -++++ configure.in 2011-08-17 16:40:04.716144357 -0500 -+@@ -233,6 +233,15 @@ -+ [ --disable-kdeab Disable the KDE3 address book support -+ ],,if test "$enable_kde" = "yes"; then enable_kdeab=yes; fi) -+ -++AC_ARG_ENABLE(tde, -++[ --enable-tde Determines whether to use TQt3/TDE vclplug on platforms -++ where TQt and TDE are available. -++],,) -++ -++AC_ARG_ENABLE(tdeab, -++[ --disable-tdeab Disable the TDE address book support -++],,if test "$enable_tde" = "yes"; then enable_tdeab=yes; fi) -++ -+ AC_ARG_ENABLE(kde4, -+ [ --enable-kde4 Determines whether to use Qt4/KDE4 vclplug on platforms -+ where Qt4 and KDE4 are available. May be used with --enable-kde -+@@ -1350,6 +1359,7 @@ -+ test_cairo=yes -+ build_gstreamer=yes -+ test_kde=yes -++ test_tde=yes -+ test_cups=yes -+ test_randr=yes -+ test_freetype=yes -+@@ -1385,6 +1395,7 @@ -+ build_gstreamer=yes -+ test_kde=yes -+ test_kde4=yes -++ test_tde=yes -+ test_cups=yes -+ test_randr=yes -+ test_freetype=yes -+@@ -1428,6 +1439,7 @@ -+ build_gstreamer=yes -+ test_kde=yes -+ test_kde4=yes -++ test_tde=yes -+ test_cups=yes -+ test_randr=yes -+ test_freetype=yes -+@@ -1463,6 +1475,7 @@ -+ build_gstreamer=yes -+ test_kde=yes -+ test_kde4=yes -++ test_tde=yes -+ test_cups=yes -+ test_randr=yes -+ test_freetype=yes -+@@ -1482,6 +1495,7 @@ -+ test_gtk=yes -+ build_cairo=yes -+ test_kde=yes -++ test_tde=yes -+ test_cups=yes -+ test_freetype=yes -+ test_randr=yes -+@@ -6141,6 +6155,13 @@ -+ fi -+ AC_SUBST(ENABLE_KDE4) -+ -++ENABLE_TDE="" -++if test "x$enable_tde" = "xyes"; then -++ ENABLE_TDE="TRUE" -++ R="$R tde" -++fi -++AC_SUBST(ENABLE_TDE) -++ -+ if test -z "$R"; then -+ AC_MSG_RESULT([none]) -+ else -+@@ -7044,6 +7065,129 @@ -+ AC_SUBST(KDE_HAVE_GLIB) -+ -+ dnl =================================================================== -++dnl Check whether the Qt3 and TDE libraries are available. -++dnl =================================================================== -++ -++TDE_CFLAGS="" -++TDE_LIBS="" -++if test "$_os" != "OpenBSD"; then -++ MOC="moc" -++fi -++if test "$test_tde" = "yes" -a "$ENABLE_TDE" = "TRUE" ; then -++ dnl Search paths for Qt3 and TDE -++ if test "$build_cpu" != "x86_64" ; then -++ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib/qt3/include /usr/lib/qt/include /usr/share/qt3/include /usr/local/include/X11/qt3 $x_includes" -++ qt_libdirs="$QTLIB /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries" -++ else -++ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib64/qt3/include /usr/lib64/qt/include /usr/share/qt3/include /usr/lib/qt3/include /usr/lib/qt/include /usr/local/include/X11/qt3 $x_includes" -++ qt_libdirs="$QTLIB /usr/local/qt/lib64 /usr/lib64/qt /usr/lib64 /usr/X11R6/lib64/X11/qt /usr/X11R6/lib64/qt /usr/lib64/qt3/lib64 /usr/lib64/qt/lib64 /usr/share/qt3/lib64 /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries" -++ fi -++ if test -n "$QTDIR" ; then -++ qt_incdirs="$QTDIR/include $qt_incdirs" -++ if test "$build_cpu" != "x86_64" ; then -++ qt_libdirs="$QTDIR/lib $qt_libdirs" -++ else -++ qt_libdirs="$QTDIR/lib64 $QTDIR/lib $qt_libdirs" -++ fi -++ fi -++ if test "$build_cpu" != "x86_64" ; then -++ tde_incdirs="/opt/trinity/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes" -++ tde_libdirs="/opt/trinity/lib /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib/kde4/lib /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries" -++ else -++ tde_incdirs="/opt/trinity/include /usr/lib64/kde/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes" -++ tde_libdirs="/opt/trinity/lib /usr/lib64/kde/lib64 /usr/local/kde/lib64 /usr/kde/lib64 /usr/lib64/kde /usr/lib64/kde3 /usr/lib64 /usr/X11R6/lib64 /usr/local/lib64 /opt/trinity/lib64 /opt/kde/lib64 /usr/X11R6/kde/lib64 /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries" -++ fi -++ if test -n "$TDEDIR" ; then -++ tde_incdirs="$TDEDIR/include $tde_incdirs" -++ if test "$build_cpu" != "x86_64" ; then -++ tde_libdirs="$TDEDIR/lib $tde_libdirs" -++ else -++ tde_libdirs="$TDEDIR/lib64 $TDEDIR/lib $tde_libdirs" -++ fi -++ fi -++ -++ dnl What to test -++ qt_test_include="qstyle.h" -++ qt_test_library="libqt-mt.so*" -++ tde_test_include="kapp.h" -++ tde_test_library="libDCOP.so*" -++ -++ dnl Check for Qt3 headers -++ AC_MSG_CHECKING([for Qt3 headers]) -++ qt_incdir="no" -++ for tde_check in $qt_incdirs ; do -++ if test -r "$tde_check/$qt_test_include" ; then -++ qt_incdir="$tde_check" -++ break -++ fi -++ done -++ AC_MSG_RESULT([$qt_incdir]) -++ if test "x$qt_incdir" = "xno" ; then -++ AC_MSG_ERROR([Qt3 headers not found. Please specify the root of -++your Qt3 installation by exporting QTDIR before running "configure".]) -++ fi -++ -++ dnl Check for Qt3 libraries -++ AC_MSG_CHECKING([for Qt3 libraries]) -++ qt_libdir="no" -++ for qt_check in $qt_libdirs ; do -++ if test -r "`ls $qt_check/$qt_test_library 2>/dev/null | head -1`" ; then -++ qt_libdir="$qt_check" -++ break -++ fi -++ done -++ AC_MSG_RESULT([$qt_libdir]) -++ if test "x$qt_libdir" = "xno" ; then -++ AC_MSG_ERROR([Qt3 libraries not found. Please specify the root of -++your Qt3 installation by exporting QTDIR before running "configure".]) -++ fi -++ -++ dnl Check for Meta Object Compiler -++ AC_PATH_PROG( MOC, moc, no, [`dirname $qt_libdir`/bin:$QTDIR/bin:$PATH] ) -++ if test "$MOC" = "no" ; then -++ AC_MSG_ERROR([Qt3 Meta Object Compiler not found. Please specify -++the root of your Qt3 installation by exporting QTDIR before running "configure".]) -++ fi -++ -++ dnl Check for TDE headers -++ AC_MSG_CHECKING([for TDE headers]) -++ tde_incdir="no" -++ for tde_check in $tde_incdirs ; do -++ if test -r "$tde_check/$tde_test_include" ; then -++ tde_incdir="$tde_check" -++ break -++ fi -++ done -++ AC_MSG_RESULT([$tde_incdir]) -++ if test "x$tde_incdir" = "xno" ; then -++ AC_MSG_ERROR([TDE headers not found. Please specify the root of -++your TDE installation by exporting TDEDIR before running "configure".]) -++ fi -++ -++ dnl Check for TDE libraries -++ AC_MSG_CHECKING([for TDE libraries]) -++ tde_libdir="no" -++ for tde_check in $tde_libdirs ; do -++ if test -r "`ls $tde_check/$tde_test_library 2>/dev/null | head -1`" ; then -++ tde_libdir="$tde_check" -++ break -++ fi -++ done -++ AC_MSG_RESULT([$tde_libdir]) -++ if test "x$tde_libdir" = "xno" ; then -++ AC_MSG_ERROR([TDE libraries not found. Please specify the root of -++your TDE installation by exporting TDEDIR before running "configure".]) -++ fi -++ -++ dnl Set the variables -++ TDE_CFLAGS="-I$qt_incdir -I$tde_incdir -I/usr/include/tqt -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT" -++ TDE_LIBS="-L$tde_libdir -L$qt_libdir -lkdeui -lkdecore -ltqt -lqt-mt" -++fi -++AC_SUBST(TDE_CFLAGS) -++AC_SUBST(TDE_LIBS) -++AC_SUBST(MOC) -++ -++dnl =================================================================== -+ dnl Test for the enabling the lockdown pieces -+ dnl =================================================================== -+ AC_MSG_CHECKING([whether to enable the lockdown pieces]) -+@@ -7100,6 +7244,33 @@ -+ AC_SUBST(ENABLE_KAB) -+ -+ dnl =================================================================== -++dnl Test whether to include TDE AB support -++dnl =================================================================== -++AC_MSG_CHECKING([whether to enable TDE address book support]) -++if test "$enable_tdeab" = "yes" && test "$enable_tde" = "yes"; then -++ AC_MSG_RESULT([yes]) -++ AC_LANG_PUSH([C++]) -++ save_CXXFLAGS=$CXXFLAGS -++ CXXFLAGS="$CXXFLAGS $TDE_CFLAGS" -++ AC_MSG_CHECKING([whether TDE is between 3.2 and 3.6]) -++ AC_TRY_RUN([ -++#include -++ -++int main(int argc, char **argv) { -++ if (KDE_VERSION_MAJOR == 3 && 2 <= KDE_VERSION_MINOR && KDE_VERSION_MINOR <= 6) return 0; -++ else return 1; -++} -++ ], [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([TDE version too old or too recent, please use another version of TDE or disable TDE address book support])]) -++ CXXFLAGS=$save_CXXFLAGS -++ AC_LANG_POP([C++]) -++ ENABLE_TDEAB=TRUE -++else -++ AC_MSG_RESULT([no]) -++ ENABLE_TDEAB= -++fi -++AC_SUBST(ENABLE_TDEAB) -++ -++dnl =================================================================== -+ dnl Test whether to include MathMLDTD -+ dnl =================================================================== -+ AC_MSG_CHECKING([whether to include MathMLDTD]) -+diff -urN connectivity/source/drivers/tdeab/exports.dxp connectivity/source/drivers/tdeab/exports.dxp -+--- connectivity/source/drivers/tdeab/exports.dxp 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/exports.dxp 2011-08-17 14:23:01.735590880 -0500 -+@@ -0,0 +1,3 @@ -++component_getImplementationEnvironment -++component_writeInfo -++component_getFactory -+diff -urN connectivity/source/drivers/tdeab/KCatalog.cxx connectivity/source/drivers/tdeab/KCatalog.cxx -+--- connectivity/source/drivers/tdeab/KCatalog.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KCatalog.cxx 2011-08-17 14:29:39.766199199 -0500 -+@@ -0,0 +1,128 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KCatalog.hxx" -++#include "KConnection.hxx" -++#include "KTables.hxx" -++ -++using namespace connectivity::kab; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::beans; -++using namespace ::com::sun::star::sdbcx; -++using namespace ::com::sun::star::sdbc; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++using namespace ::cppu; -++ -++// ------------------------------------------------------------------------- -++KabCatalog::KabCatalog(KabConnection* _pCon) -++ : connectivity::sdbcx::OCatalog(_pCon), -++ m_pConnection(_pCon), -++ m_xMetaData(m_pConnection->getMetaData()) -++{ -++} -++// ------------------------------------------------------------------------- -++void KabCatalog::refreshTables() -++{ -++ TStringVector aVector; -++ Sequence< ::rtl::OUString > aTypes(1); -++ aTypes[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%")); -++ Reference< XResultSet > xResult = m_xMetaData->getTables( -++ Any(), -++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")), -++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")), -++ aTypes); -++ -++ if (xResult.is()) -++ { -++ Reference< XRow > xRow(xResult,UNO_QUERY); -++ ::rtl::OUString aName; -++ // const ::rtl::OUString& sDot = KabCatalog::getDot(); -++ -++ while (xResult->next()) -++ { -++ // aName = xRow->getString(2); -++ // aName += sDot; -++ aName = xRow->getString(3); -++ aVector.push_back(aName); -++ } -++ } -++ if (m_pTables) -++ m_pTables->reFill(aVector); -++ else -++ m_pTables = new KabTables(m_xMetaData,*this,m_aMutex,aVector); -++} -++// ------------------------------------------------------------------------- -++void KabCatalog::refreshViews() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabCatalog::refreshGroups() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabCatalog::refreshUsers() -++{ -++} -++// ------------------------------------------------------------------------- -++const ::rtl::OUString& KabCatalog::getDot() -++{ -++ static const ::rtl::OUString sDot = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(".")); -++ return sDot; -++} -++// ----------------------------------------------------------------------------- -++ -++// XTablesSupplier -++Reference< XNameAccess > SAL_CALL KabCatalog::getTables( ) throw(RuntimeException) -++{ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ checkDisposed(rBHelper.bDisposed); -++ -++ try -++ { -++ if (!m_pTables) -++ refreshTables(); -++ } -++ catch( const RuntimeException& ) -++ { -++ // allowed to leave this method -++ throw; -++ } -++ catch( const Exception& ) -++ { -++ // allowed -++ } -++ -++ return m_pTables; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KCatalog.hxx connectivity/source/drivers/tdeab/KCatalog.hxx -+--- connectivity/source/drivers/tdeab/KCatalog.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KCatalog.hxx 2011-08-17 14:29:32.345628247 -0500 -+@@ -0,0 +1,68 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_CATALOG_HXX_ -++#define _CONNECTIVITY_KAB_CATALOG_HXX_ -++ -++#include "connectivity/sdbcx/VCatalog.hxx" -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabConnection; -++ -++ class KabCatalog : public connectivity::sdbcx::OCatalog -++ { -++ KabConnection* m_pConnection; // used to get the metadata -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; // just to make things easier -++ -++ public: -++ KabCatalog(KabConnection* _pCon); -++ -++ inline KabConnection* getConnection() const { return m_pConnection; } -++ -++ static const ::rtl::OUString& getDot(); -++ -++ // implementation of the pure virtual methods -++ virtual void refreshTables(); -++ virtual void refreshViews(); -++ virtual void refreshGroups(); -++ virtual void refreshUsers(); -++ -++ // XTablesSupplier -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTables( -++ ) throw(::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_CATALOG_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KColumns.cxx connectivity/source/drivers/tdeab/KColumns.cxx -+--- connectivity/source/drivers/tdeab/KColumns.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KColumns.cxx 2011-08-17 14:29:23.634958020 -0500 -+@@ -0,0 +1,102 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KColumns.hxx" -++#include "KTable.hxx" -++#include "KTables.hxx" -++#include "KCatalog.hxx" -++#include "connectivity/sdbcx/VColumn.hxx" -++ -++using namespace connectivity::kab; -++using namespace connectivity::sdbcx; -++using namespace connectivity; -++using namespace ::comphelper; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::beans; -++using namespace ::com::sun::star::sdbc; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++ -++// ------------------------------------------------------------------------- -++sdbcx::ObjectType KabColumns::createObject(const ::rtl::OUString& _rName) -++{ -++ Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns( -++ Any(), -++ m_pTable->getSchema(), -++ m_pTable->getTableName(), -++ _rName); -++ -++ sdbcx::ObjectType xRet = NULL; -++ if (xResult.is()) -++ { -++ Reference< XRow > xRow(xResult,UNO_QUERY); -++ -++ while (xResult->next()) -++ { -++ if (xRow->getString(4) == _rName) -++ { -++ OColumn* pRet = new OColumn( -++ _rName, -++ xRow->getString(6), -++ xRow->getString(13), -++ xRow->getString(12), -++ xRow->getInt(11), -++ xRow->getInt(7), -++ xRow->getInt(9), -++ xRow->getInt(5), -++ sal_False, -++ sal_False, -++ sal_False, -++ sal_True); -++ xRet = pRet; -++ break; -++ } -++ } -++ } -++ -++ return xRet; -++} -++// ------------------------------------------------------------------------- -++void KabColumns::impl_refresh() throw(RuntimeException) -++{ -++ m_pTable->refreshColumns(); -++} -++// ------------------------------------------------------------------------- -++KabColumns::KabColumns( KabTable* _pTable, -++ ::osl::Mutex& _rMutex, -++ const TStringVector &_rVector) -++ : sdbcx::OCollection(*_pTable, sal_True, _rMutex, _rVector), -++ m_pTable(_pTable) -++{ -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KColumns.hxx connectivity/source/drivers/tdeab/KColumns.hxx -+--- connectivity/source/drivers/tdeab/KColumns.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KColumns.hxx 2011-08-17 14:29:13.974214692 -0500 -+@@ -0,0 +1,58 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_COLUMNS_HXX_ -++#define _CONNECTIVITY_KAB_COLUMNS_HXX_ -++ -++#include "KTable.hxx" -++#include "connectivity/sdbcx/VCollection.hxx" -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabColumns : public sdbcx::OCollection -++ { -++ protected: -++ KabTable* m_pTable; -++ -++ virtual sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); -++ virtual void impl_refresh() throw(::com::sun::star::uno::RuntimeException); -++ -++ public: -++ KabColumns( KabTable* _pTable, -++ ::osl::Mutex& _rMutex, -++ const TStringVector &_rVector); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_COLUMNS_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/kcondition.cxx connectivity/source/drivers/tdeab/kcondition.cxx -+--- connectivity/source/drivers/tdeab/kcondition.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/kcondition.cxx 2011-08-17 14:29:06.863667577 -0500 -+@@ -0,0 +1,233 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "kcondition.hxx" -++#include "kfields.hxx" -++#include "connectivity/CommonTools.hxx" -++ -++using namespace ::connectivity::kab; -++using namespace ::com::sun::star::sdbc; -++// ----------------------------------------------------------------------------- -++KabCondition::~KabCondition() -++{ -++} -++// ----------------------------------------------------------------------------- -++KabConditionConstant::KabConditionConstant(const sal_Bool bValue) -++ : KabCondition(), -++ m_bValue(bValue) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionConstant::isAlwaysTrue() const -++{ -++ return m_bValue; -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionConstant::isAlwaysFalse() const -++{ -++ return !m_bValue; -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionConstant::eval(const ::KABC::Addressee &) const -++{ -++ return m_bValue; -++} -++// ----------------------------------------------------------------------------- -++KabConditionColumn::KabConditionColumn(const ::rtl::OUString &sColumnName) throw(SQLException) -++ : KabCondition(), -++ m_nFieldNumber(findKabField(sColumnName)) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionColumn::isAlwaysTrue() const -++{ -++ // Sometimes true, sometimes false -++ return sal_False; -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionColumn::isAlwaysFalse() const -++{ -++ // Sometimes true, sometimes false -++ return sal_False; -++} -++// ----------------------------------------------------------------------------- -++KabConditionNull::KabConditionNull(const ::rtl::OUString &sColumnName) throw(SQLException) -++ : KabConditionColumn(sColumnName) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionNull::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++ -++ return aQtName.isNull(); -++// TDE address book currently does not use NULL values. -++// But it might do it someday -++} -++// ----------------------------------------------------------------------------- -++KabConditionNotNull::KabConditionNotNull(const ::rtl::OUString &sColumnName) throw(SQLException) -++ : KabConditionColumn(sColumnName) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionNotNull::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++ -++ return !aQtName.isNull(); -++// TDE address book currently does not use NULL values. -++// But it might do it someday -++} -++// ----------------------------------------------------------------------------- -++KabConditionCompare::KabConditionCompare(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -++ : KabConditionColumn(sColumnName), -++ m_sMatchString(sMatchString) -++{ -++} -++// ----------------------------------------------------------------------------- -++KabConditionEqual::KabConditionEqual(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -++ : KabConditionCompare(sColumnName, sMatchString) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionEqual::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++// Timestamps should not be compared according to their string value -++// The syntax for such queries should be like -++// {ts '2004-03-29 12:55:00.000000'} -++// They should also support operators like '<' or '>=' -++ -++ if (aQtName.isNull()) return sal_False; -++ -++ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2()); -++ return sValue == m_sMatchString; -++} -++// ----------------------------------------------------------------------------- -++KabConditionDifferent::KabConditionDifferent(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -++ : KabConditionCompare(sColumnName, sMatchString) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionDifferent::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++ -++ if (aQtName.isNull()) return sal_False; -++ -++ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2()); -++ return sValue != m_sMatchString; -++} -++// ----------------------------------------------------------------------------- -++KabConditionSimilar::KabConditionSimilar(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -++ : KabConditionCompare(sColumnName, sMatchString) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionSimilar::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++ -++ if (aQtName.isNull()) return sal_False; -++ -++ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2()); -++ return match(m_sMatchString, sValue, '\0'); -++} -++// ----------------------------------------------------------------------------- -++KabConditionBoolean::KabConditionBoolean(KabCondition *pLeft, KabCondition *pRight) -++ : KabCondition(), -++ m_pLeft(pLeft), -++ m_pRight(pRight) -++{ -++} -++// ----------------------------------------------------------------------------- -++KabConditionBoolean::~KabConditionBoolean() -++{ -++ delete m_pLeft; -++ delete m_pRight; -++} -++// ----------------------------------------------------------------------------- -++KabConditionOr::KabConditionOr(KabCondition *pLeft, KabCondition *pRight) -++ : KabConditionBoolean(pLeft, pRight) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionOr::isAlwaysTrue() const -++{ -++ return m_pLeft->isAlwaysTrue() || m_pRight->isAlwaysTrue(); -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionOr::isAlwaysFalse() const -++{ -++ return m_pLeft->isAlwaysFalse() && m_pRight->isAlwaysFalse(); -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionOr::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ // We avoid evaluating terms as much as we can -++ if (m_pLeft->isAlwaysTrue() || m_pRight->isAlwaysTrue()) return sal_True; -++ if (m_pLeft->isAlwaysFalse() && m_pRight->isAlwaysFalse()) return sal_False; -++ -++ if (m_pLeft->eval(aAddressee)) return sal_True; -++ if (m_pRight->eval(aAddressee)) return sal_True; -++ -++ return sal_False; -++} -++// ----------------------------------------------------------------------------- -++KabConditionAnd::KabConditionAnd(KabCondition *pLeft, KabCondition *pRight) -++ : KabConditionBoolean(pLeft, pRight) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionAnd::isAlwaysTrue() const -++{ -++ return m_pLeft->isAlwaysTrue() && m_pRight->isAlwaysTrue(); -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionAnd::isAlwaysFalse() const -++{ -++ return m_pLeft->isAlwaysFalse() || m_pRight->isAlwaysFalse(); -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionAnd::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ // We avoid evaluating terms as much as we can -++ if (m_pLeft->isAlwaysFalse() || m_pRight->isAlwaysFalse()) return sal_False; -++ if (m_pLeft->isAlwaysTrue() && m_pRight->isAlwaysTrue()) return sal_True; -++ -++ if (!m_pLeft->eval(aAddressee)) return sal_False; -++ if (!m_pRight->eval(aAddressee)) return sal_False; -++ -++ return sal_True; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/kcondition.hxx connectivity/source/drivers/tdeab/kcondition.hxx -+--- connectivity/source/drivers/tdeab/kcondition.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/kcondition.hxx 2011-08-17 14:28:59.403093526 -0500 -+@@ -0,0 +1,164 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_CONDITION_HXX_ -++#define _CONNECTIVITY_KAB_CONDITION_HXX_ -++ -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++// ----------------------------------------------------------------------------- -++class KabCondition -++{ -++ public: -++ virtual ~KabCondition(); -++ virtual sal_Bool isAlwaysTrue() const = 0; -++ virtual sal_Bool isAlwaysFalse() const = 0; -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const = 0; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionConstant : public KabCondition -++{ -++ protected: -++ sal_Bool m_bValue; -++ -++ public: -++ KabConditionConstant(const sal_Bool bValue); -++ virtual sal_Bool isAlwaysTrue() const; -++ virtual sal_Bool isAlwaysFalse() const; -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionColumn : public KabCondition -++{ -++ protected: -++ sal_Int32 m_nFieldNumber; -++ -++ TQString value(const ::KABC::Addressee &aAddressee) const; -++ -++ public: -++ KabConditionColumn( -++ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool isAlwaysTrue() const; -++ virtual sal_Bool isAlwaysFalse() const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionNull : public KabConditionColumn -++{ -++ public: -++ KabConditionNull( -++ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionNotNull : public KabConditionColumn -++{ -++ public: -++ KabConditionNotNull( -++ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionCompare : public KabConditionColumn -++{ -++ protected: -++ const ::rtl::OUString m_sMatchString; -++ -++ public: -++ KabConditionCompare( -++ const ::rtl::OUString &sColumnName, -++ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionEqual : public KabConditionCompare -++{ -++ public: -++ KabConditionEqual( -++ const ::rtl::OUString &sColumnName, -++ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionDifferent : public KabConditionCompare -++{ -++ public: -++ KabConditionDifferent( -++ const ::rtl::OUString &sColumnName, -++ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionSimilar : public KabConditionCompare -++{ -++ public: -++ KabConditionSimilar( -++ const ::rtl::OUString &sColumnName, -++ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionBoolean : public KabCondition -++{ -++ protected: -++ KabCondition *m_pLeft, *m_pRight; -++ -++ public: -++ KabConditionBoolean(KabCondition *pLeft, KabCondition *pRight); -++ virtual ~KabConditionBoolean(); -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionOr : public KabConditionBoolean -++{ -++ public: -++ KabConditionOr(KabCondition *pLeft, KabCondition *pRight); -++ virtual sal_Bool isAlwaysTrue() const; -++ virtual sal_Bool isAlwaysFalse() const; -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionAnd : public KabConditionBoolean -++{ -++ public: -++ KabConditionAnd(KabCondition *pLeft, KabCondition *pRight); -++ virtual sal_Bool isAlwaysTrue() const; -++ virtual sal_Bool isAlwaysFalse() const; -++ virtual sal_Bool eval(const ::KABC::Addressee &addressee) const; -++}; -++// ----------------------------------------------------------------------------- -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_CONDITION_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KConnection.cxx connectivity/source/drivers/tdeab/KConnection.cxx -+--- connectivity/source/drivers/tdeab/KConnection.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KConnection.cxx 2011-08-17 14:28:53.822664134 -0500 -+@@ -0,0 +1,332 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KConnection.hxx" -++#include "KDatabaseMetaData.hxx" -++#include "KStatement.hxx" -++#include "KPreparedStatement.hxx" -++#include "KDriver.hxx" -++#include "KCatalog.hxx" -++#include -++#include -++#include -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::sdbcx; -++ -++IMPLEMENT_SERVICE_INFO(KabConnection, "com.sun.star.sdbc.drivers.KabConnection", "com.sun.star.sdbc.Connection") -++//----------------------------------------------------------------------------- -++KabConnection::KabConnection(KabDriver* _pDriver) -++ : OMetaConnection_BASE(m_aMutex), -++ OSubComponent((::cppu::OWeakObject*)_pDriver, this), -++ m_xMetaData(NULL), -++ m_pAddressBook(NULL), -++ m_pDriver(_pDriver) -++{ -++ m_pDriver->acquire(); -++} -++//----------------------------------------------------------------------------- -++KabConnection::~KabConnection() -++{ -++ if (!isClosed()) -++ close(); -++ -++ m_pDriver->release(); -++ m_pDriver = NULL; -++} -++//----------------------------------------------------------------------------- -++void SAL_CALL KabConnection::release() throw() -++{ -++ relase_ChildImpl(); -++} -++// ----------------------------------------------------------------------------- -++void KabConnection::construct(const ::rtl::OUString&, const Sequence< PropertyValue >&) throw(SQLException) -++{ -++ osl_incrementInterlockedCount( &m_refCount ); -++ -++ // create a TDE address book object -++ m_pAddressBook = KABC::StdAddressBook::self(); -++ m_pAddressBook->setAutomaticSave(false); -++// perharps we should analyze the URL to know whether the addressbook is local, over LDAP, etc... -++// perharps we should get some user and password information from "info" properties -++ -++ osl_decrementInterlockedCount( &m_refCount ); -++} -++// XServiceInfo -++// -------------------------------------------------------------------------------- -++Reference< XStatement > SAL_CALL KabConnection::createStatement( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // create a statement -++ // the statement can only be executed once -++ Reference< XStatement > xReturn = new KabStatement(this); -++ m_aStatements.push_back(WeakReferenceHelper(xReturn)); -++ return xReturn; -++} -++// -------------------------------------------------------------------------------- -++Reference< XPreparedStatement > SAL_CALL KabConnection::prepareStatement( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // create a statement -++ // the statement can only be executed more than once -++ Reference< XPreparedStatement > xReturn = new KabPreparedStatement(this, _sSql); -++ m_aStatements.push_back(WeakReferenceHelper(xReturn)); -++ return xReturn; -++} -++// -------------------------------------------------------------------------------- -++Reference< XPreparedStatement > SAL_CALL KabConnection::prepareCall( const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // not implemented yet :-) a task to do -++ return NULL; -++} -++// -------------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabConnection::nativeSQL( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ // when you need to transform SQL92 to you driver specific you can do it here -++ -++ return _sSql; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setAutoCommit( sal_Bool ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ // here you have to set your commit mode please have a look at the jdbc documentation to get a clear explanation -++} -++// -------------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabConnection::getAutoCommit( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ // you have to distinguish which if you are in autocommit mode or not -++ // at normal case true should be fine here -++ -++ return sal_True; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::commit( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // when you database does support transactions you should commit here -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::rollback( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // same as commit but for the other case -++} -++// -------------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabConnection::isClosed( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ // just simple -> we are closed when we are disposed, that means someone called dispose(); (XComponent) -++ return KabConnection_BASE::rBHelper.bDisposed; -++} -++// -------------------------------------------------------------------------------- -++Reference< XDatabaseMetaData > SAL_CALL KabConnection::getMetaData( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // here we have to create the class with biggest interface -++ // The answer is 42 :-) -++ Reference< XDatabaseMetaData > xMetaData = m_xMetaData; -++ if (!xMetaData.is()) -++ { -++ xMetaData = new KabDatabaseMetaData(this); // need the connection because it can return it -++ m_xMetaData = xMetaData; -++ } -++ -++ return xMetaData; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setReadOnly( sal_Bool ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // set you connection to readonly -++} -++// -------------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabConnection::isReadOnly( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // return if your connection to readonly -++ return sal_False; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setCatalog( const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // if your database doesn't work with catalogs you go to next method otherwise you kjnow what to do -++} -++// -------------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabConnection::getCatalog( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ -++ // return your current catalog -++ return ::rtl::OUString(); -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setTransactionIsolation( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // set your isolation level -++ // please have a look at @see com.sun.star.sdbc.TransactionIsolation -++} -++// -------------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabConnection::getTransactionIsolation( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ -++ // please have a look at @see com.sun.star.sdbc.TransactionIsolation -++ return TransactionIsolation::NONE; -++} -++// -------------------------------------------------------------------------------- -++Reference< ::com::sun::star::container::XNameAccess > SAL_CALL KabConnection::getTypeMap( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // if your driver has special database types you can return it here -++ -++ return NULL; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setTypeMap( const Reference< ::com::sun::star::container::XNameAccess >& ) throw(SQLException, RuntimeException) -++{ -++ // the other way around -++} -++// -------------------------------------------------------------------------------- -++// XCloseable -++void SAL_CALL KabConnection::close( ) throw(SQLException, RuntimeException) -++{ -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ } -++ dispose(); -++} -++// -------------------------------------------------------------------------------- -++// XWarningsSupplier -++Any SAL_CALL KabConnection::getWarnings( ) throw(SQLException, RuntimeException) -++{ -++ // when you collected some warnings -> return it -++ return Any(); -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::clearWarnings( ) throw(SQLException, RuntimeException) -++{ -++ // you should clear your collected warnings here -++} -++//------------------------------------------------------------------------------ -++void KabConnection::disposing() -++{ -++ // we noticed that we should be destroied in near future so we have to dispose our statements -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++ for (OWeakRefArray::iterator i = m_aStatements.begin(); m_aStatements.end() != i; ++i) -++ { -++ Reference< XComponent > xComp(i->get(), UNO_QUERY); -++ if (xComp.is()) -++ xComp->dispose(); -++ } -++ m_aStatements.clear(); -++ -++ if (m_pAddressBook != NULL) -++ { -++ m_pAddressBook->close(); -++ m_pAddressBook = NULL; -++ } -++ -++ m_xMetaData = ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XDatabaseMetaData>(); -++ -++ dispose_ChildImpl(); -++ KabConnection_BASE::disposing(); -++} -++// ----------------------------------------------------------------------------- -++Reference< XTablesSupplier > SAL_CALL KabConnection::createCatalog() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ Reference< XTablesSupplier > xTab = m_xCatalog; -++ if (!m_xCatalog.is()) -++ { -++ KabCatalog *pCat = new KabCatalog(this); -++ xTab = pCat; -++ m_xCatalog = xTab; -++ } -++ return xTab; -++} -++// ----------------------------------------------------------------------------- -++::KABC::AddressBook* KabConnection::getAddressBook() const -++{ -++ return m_pAddressBook; -++} -++// ----------------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL createKabConnection( void* _pDriver ) -++{ -++ KabConnection* pConnection = new KabConnection( static_cast< KabDriver* >( _pDriver ) ); -++ // by definition, the pointer crossing library boundaries as void ptr is acquired once -++ pConnection->acquire(); -++ return pConnection; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KConnection.hxx connectivity/source/drivers/tdeab/KConnection.hxx -+--- connectivity/source/drivers/tdeab/KConnection.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KConnection.hxx 2011-08-17 14:28:47.592184720 -0500 -+@@ -0,0 +1,142 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_CONNECTION_HXX_ -++#define _CONNECTIVITY_KAB_CONNECTION_HXX_ -++ -++#include -++#include "OSubComponent.hxx" -++#include "connectivity/CommonTools.hxx" -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++namespace KABC -++{ -++ class StdAddressBook; -++ class AddressBook; -++} -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ -++ typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::sdbc::XConnection, -++ ::com::sun::star::sdbc::XWarningsSupplier, -++ ::com::sun::star::lang::XServiceInfo -++ > OMetaConnection_BASE; -++ -++ class KabStatement_Base; -++ class KabDriver; -++ class KabDatabaseMetaData; -++ -++ typedef OMetaConnection_BASE KabConnection_BASE; // implements basics and text encoding -++ typedef std::vector< ::com::sun::star::uno::WeakReferenceHelper > OWeakRefArray; -++ -++ class KabConnection : public comphelper::OBaseMutex, -++ public KabConnection_BASE, -++ public OSubComponent -++ { -++ friend class OSubComponent; -++ -++ protected: -++ //==================================================================== -++ // Data attributes -++ //==================================================================== -++ ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; -++ -++ OWeakRefArray m_aStatements; // vector containing a list of all the Statement objects -++ // for this Connection -++ -++ ::KABC::StdAddressBook* m_pAddressBook; // the address book -++ KabDriver* m_pDriver; // pointer to the owning driver object -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier> -++ m_xCatalog; // needed for the SQL interpreter -++ -++ public: -++ virtual void construct( const ::rtl::OUString& url,const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info) throw(::com::sun::star::sdbc::SQLException); -++ -++ KabConnection(KabDriver* _pDriver); -++ virtual ~KabConnection(); -++ -++ void closeAllStatements () throw( ::com::sun::star::sdbc::SQLException); -++ -++ // OComponentHelper -++ virtual void SAL_CALL disposing(void); -++ -++ // XInterface -++ virtual void SAL_CALL release() throw(); -++ -++ // XServiceInfo -++ DECLARE_SERVICE_INFO(); -++ -++ // XConnection -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement > SAL_CALL createStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareCall( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL nativeSQL( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL getAutoCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL commit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL rollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isClosed( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setCatalog( const ::rtl::OUString& catalog ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getCatalog( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getTransactionIsolation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTypeMap( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setTypeMap( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XCloseable -++ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XWarningsSupplier -++ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // needed for the SQL interpreter -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > SAL_CALL createCatalog(); -++ -++ // accessors -++ inline KabDriver* getDriver() const { return m_pDriver;} -++ ::KABC::AddressBook* getAddressBook() const; -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_CONNECTION_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx -+--- connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx 2011-08-17 14:28:44.171921542 -0500 -+@@ -0,0 +1,1084 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KDatabaseMetaData.hxx" -++#include "kfields.hxx" -++#include "TDEInit.h" -++#include -++#include "FDatabaseMetaDataResultSet.hxx" -++#include "OTypeInfo.hxx" -++#include -++#include -++#include -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++ -++KabDatabaseMetaData::KabDatabaseMetaData(KabConnection* _pCon) -++ : m_xConnection(_pCon), -++ m_bUseCatalog(sal_True) -++{ -++ OSL_ENSURE(_pCon,"KabDatabaseMetaData::KabDatabaseMetaData: No connection set!"); -++ -++ osl_incrementInterlockedCount( &m_refCount ); -++ m_bUseCatalog = !(usesLocalFiles() || usesLocalFilePerTable()); -++ osl_decrementInterlockedCount( &m_refCount ); -++} -++// ------------------------------------------------------------------------- -++KabDatabaseMetaData::~KabDatabaseMetaData() -++{ -++} -++// ------------------------------------------------------------------------- -++const ::rtl::OUString & KabDatabaseMetaData::getAddressBookTableName() -++{ -++ static const ::rtl::OUString aAddressBookTableName -++ (::rtl::OUString::createFromAscii( i18n("Address Book") )); -++ -++ return aAddressBookTableName; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getCatalogSeparator( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aVal; -++ if (m_bUseCatalog) -++ { // do some special here for you database -++ } -++ -++ return aVal; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxBinaryLiteralLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxRowSize( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxCatalogNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxCharLiteralLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInIndex( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxCursorNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxConnections( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInTable( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxStatementLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxTableNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxTablesInSelect( ) throw(SQLException, RuntimeException) -++{ -++ // MaxTablesInSelect describes how many tables can participate in the FROM part of a given SELECT statement, -++ // currently, the resultset/statement implementations can cope with one table only -++ sal_Int32 nValue = 1; -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::doesMaxRowSizeIncludeBlobs( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesLowerCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesLowerCaseIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesMixedCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesMixedCaseIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesUpperCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesUpperCaseIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsAlterTableWithAddColumn( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsAlterTableWithDropColumn( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxIndexLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsNonNullableColumns( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getCatalogTerm( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aVal; -++ if (m_bUseCatalog) -++ { -++ } -++ return aVal; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getIdentifierQuoteString( ) throw(SQLException, RuntimeException) -++{ -++ // normally this is " -++ ::rtl::OUString aVal = ::rtl::OUString::createFromAscii("\""); -++ return aVal; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getExtraNameCharacters( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aVal; -++ return aVal; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsDifferentTableCorrelationNames( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::isCatalogAtStart( ) throw(SQLException, RuntimeException) -++{ -++ sal_Bool bValue = sal_False; -++ if (m_bUseCatalog) -++ { -++ } -++ return bValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::dataDefinitionIgnoredInTransactions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::dataDefinitionCausesTransactionCommit( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsDataManipulationTransactionsOnly( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsPositionedDelete( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsPositionedUpdate( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenStatementsAcrossRollback( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenStatementsAcrossCommit( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenCursorsAcrossCommit( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenCursorsAcrossRollback( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsTransactionIsolationLevel( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInDataManipulation( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsANSI92FullSQL( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsANSI92EntryLevelSQL( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; // should be supported at least -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsIntegrityEnhancementFacility( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInIndexDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInTableDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInTableDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInIndexDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInDataManipulation( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOuterJoins( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxStatements( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxProcedureNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxSchemaNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsTransactions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::allProceduresAreCallable( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsStoredProcedures( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSelectForUpdate( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::allTablesAreSelectable( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::isReadOnly( ) throw(SQLException, RuntimeException) -++{ -++ // for the moment, we have read-only addresses, but this might change in the future -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::usesLocalFiles( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::usesLocalFilePerTable( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsTypeConversion( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullPlusNonNullIsNull( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsColumnAliasing( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsTableCorrelationNames( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsConvert( sal_Int32, sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsExpressionsInOrderBy( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsGroupBy( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsGroupByBeyondSelect( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsGroupByUnrelated( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMultipleTransactions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMultipleResultSets( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsLikeEscapeClause( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOrderByUnrelated( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsUnion( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsUnionAll( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMixedCaseIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMixedCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedAtEnd( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedAtStart( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedHigh( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedLow( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInProcedureCalls( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInPrivilegeDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInProcedureCalls( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInPrivilegeDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCorrelatedSubqueries( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInComparisons( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInExists( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInIns( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInQuantifieds( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsANSI92IntermediateSQL( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getURL( ) throw(SQLException, RuntimeException) -++{ -++ // if someday we support more than the default address book, -++ // this method should return the URL which was used to create it -++ ::rtl::OUString aValue = ::rtl::OUString::createFromAscii("sdbc:address:kab:"); -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getUserName( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getDriverName( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue = ::rtl::OUString::createFromAscii("kab"); -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getDriverVersion() throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue = ::rtl::OUString::createFromAscii(KAB_DRIVER_VERSION); -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getDatabaseProductVersion( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getDatabaseProductName( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getProcedureTerm( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getSchemaTerm( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getDriverMajorVersion( ) throw(RuntimeException) -++{ -++ return KAB_DRIVER_VERSION_MAJOR; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getDefaultTransactionIsolation( ) throw(SQLException, RuntimeException) -++{ -++ return TransactionIsolation::NONE; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getDriverMinorVersion( ) throw(RuntimeException) -++{ -++ return KAB_DRIVER_VERSION_MINOR; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getSQLKeywords( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getSearchStringEscape( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getStringFunctions( ) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getTimeDateFunctions( ) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getSystemFunctions( ) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getNumericFunctions( ) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsExtendedSQLGrammar( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCoreSQLGrammar( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMinimumSQLGrammar( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsFullOuterJoins( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsLimitedOuterJoins( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInGroupBy( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInOrderBy( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInSelect( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxUserNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsResultSetType( sal_Int32 setType ) throw(SQLException, RuntimeException) -++{ -++ switch (setType) -++ { -++ case ResultSetType::FORWARD_ONLY: -++ case ResultSetType::SCROLL_INSENSITIVE: -++ return sal_True; -++ } -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ switch (setType) -++ { -++ case ResultSetType::FORWARD_ONLY: -++ case ResultSetType::SCROLL_INSENSITIVE: -++ return sal_True; -++ } -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::ownUpdatesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::ownDeletesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::ownInsertsAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::othersUpdatesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::othersDeletesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::othersInsertsAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::updatesAreDetected( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::deletesAreDetected( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::insertsAreDetected( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsBatchUpdates( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++Reference< XConnection > SAL_CALL KabDatabaseMetaData::getConnection( ) throw(SQLException, RuntimeException) -++{ -++ return (Reference< XConnection >) m_xConnection.get(); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTableTypes( ) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTableTypes); -++ Reference< XResultSet > xRef = pResult; -++ -++ static ODatabaseMetaDataResultSet::ORows aRows; -++ static const ::rtl::OUString aTable(::rtl::OUString::createFromAscii("TABLE")); -++ -++ if (aRows.empty()) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow(2); -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = new ORowSetValueDecorator(aTable); -++ aRows.push_back(aRow); -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTypeInfo( ) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); -++ Reference< XResultSet > xRef = pResult; -++ -++ static ODatabaseMetaDataResultSet::ORows aRows; -++ if (aRows.empty()) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow(19); -++ -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("CHAR")); -++ aRow[2] = new ORowSetValueDecorator(DataType::CHAR); -++ aRow[3] = new ORowSetValueDecorator((sal_Int32) 254); -++ aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue(); -++ aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue(); -++ aRow[6] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[7] = new ORowSetValueDecorator((sal_Int32) ColumnValue::NULLABLE); -++ aRow[8] = ODatabaseMetaDataResultSet::get1Value(); -++ aRow[9] = new ORowSetValueDecorator((sal_Int32) ColumnSearch::CHAR); -++ aRow[10] = ODatabaseMetaDataResultSet::get1Value(); -++ aRow[11] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[12] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[13] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[16] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[17] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[18] = new ORowSetValueDecorator((sal_Int32) 10); -++ aRows.push_back(aRow); -++// Much more types might appear in TDE address books -++// To be completed -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getCatalogs( ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eCatalogs ); -++} -++// ----------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getSchemas( ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eSchemas ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getColumnPrivileges( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, -++ const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eColumnPrivileges ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getColumns( -++ const Any&, -++ const ::rtl::OUString&, -++ const ::rtl::OUString& tableNamePattern, -++ const ::rtl::OUString& columnNamePattern) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); -++ Reference< XResultSet > xRef = pResult; -++ -++ ODatabaseMetaDataResultSet::ORows aRows; -++ -++ if (match(tableNamePattern, getAddressBookTableName(), '\0')) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow(19); -++ -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[3] = new ORowSetValueDecorator(getAddressBookTableName()); -++ aRow[8] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[9] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[10] = new ORowSetValueDecorator((sal_Int32) 10); -++ aRow[11] = ODatabaseMetaDataResultSet::get1Value(); -++ aRow[12] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[13] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[14] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[15] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[16] = new ORowSetValueDecorator((sal_Int32) 254); -++ aRow[18] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("YES")); -++ -++ sal_Int32 nPosition = 1; -++ TQString aQtName; -++ ::rtl::OUString sName; -++ -++ aQtName = ::KABC::Addressee::revisionLabel(); -++ sName = (const sal_Unicode *) aQtName.ucs2(); -++ if (match(columnNamePattern, sName, '\0')) -++ { -++ aRow[4] = new ORowSetValueDecorator(sName); -++ aRow[5] = new ORowSetValueDecorator(DataType::TIMESTAMP); -++ aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP")); -++ aRow[17] = new ORowSetValueDecorator(nPosition++); -++ aRows.push_back(aRow); -++ } -++ -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ ::KABC::Field::List::iterator aField; -++ -++ for ( aField = aFields.begin(); -++ aField != aFields.end(); -++ ++aField, ++nPosition) -++ { -++ aQtName = (*aField)->label(); -++ sName = (const sal_Unicode *) aQtName.ucs2(); -++ if (match(columnNamePattern, sName, '\0')) -++ { -++ aRow[4] = new ORowSetValueDecorator(sName); -++ aRow[5] = new ORowSetValueDecorator(DataType::CHAR); -++ aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("CHAR")); -++ aRow[7] = new ORowSetValueDecorator((sal_Int32) 256); -++// Might be VARCHAR and not CHAR[256]... -++ aRow[17] = new ORowSetValueDecorator(nPosition); -++ aRows.push_back(aRow); -++ } -++ } -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTables( -++ const Any&, -++ const ::rtl::OUString&, -++ const ::rtl::OUString&, -++ const Sequence< ::rtl::OUString >& types) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTables); -++ Reference< XResultSet > xRef = pResult; -++ -++ // check whether we have tables in the requested types -++ // for the moment, we answer only the "TABLE" table type -++ // when no types are given at all, we return all the tables -++ static const ::rtl::OUString aTable(::rtl::OUString::createFromAscii("TABLE")); -++ sal_Bool bTableFound = sal_False; -++ const ::rtl::OUString* p = types.getConstArray(), -++ * pEnd = p + types.getLength(); -++ -++ if (p == pEnd) -++ { -++ bTableFound = sal_True; -++ } -++ else while (p < pEnd) -++ { -++ if (match(*p, aTable, '\0')) -++ { -++ bTableFound = sal_True; -++ break; -++ } -++ p++; -++ } -++ if (!bTableFound) -++ return xRef; -++ -++ static ODatabaseMetaDataResultSet::ORows aRows; -++ -++ if (aRows.empty()) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow(6); -++ -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[3] = new ORowSetValueDecorator(getAddressBookTableName()); -++ aRow[4] = new ORowSetValueDecorator(aTable); -++ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRows.push_back(aRow); -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedureColumns( -++ const Any&, const ::rtl::OUString&, -++ const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedureColumns ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedures( -++ const Any&, const ::rtl::OUString&, -++ const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedures ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getVersionColumns( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& table ) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eVersionColumns); -++ -++ Reference< XResultSet > xRef = pResult; -++ -++ ODatabaseMetaDataResultSet::ORows aRows; -++ -++ if (table == getAddressBookTableName()) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow( 9 ); -++ TQString aQtName = ::KABC::Addressee::revisionLabel(); -++ ::rtl::OUString sName = (const sal_Unicode *) aQtName.ucs2(); -++ -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ -++ aRow[2] = new ORowSetValueDecorator(sName); -++ aRow[3] = new ORowSetValueDecorator(DataType::TIMESTAMP); -++ aRow[4] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP")); -++ -++ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[6] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[7] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[8] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ -++ aRows.push_back(aRow); -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getExportedKeys( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eExportedKeys ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getImportedKeys( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eImportedKeys ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getPrimaryKeys( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::ePrimaryKeys ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getIndexInfo( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, -++ sal_Bool, sal_Bool ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eIndexInfo ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getBestRowIdentifier( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, sal_Int32, -++ sal_Bool ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eBestRowIdentifier ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTablePrivileges( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTablePrivileges ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getCrossReference( -++ const Any&, const ::rtl::OUString&, -++ const ::rtl::OUString&, const Any&, -++ const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eCrossReference ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getUDTs( const Any&, const ::rtl::OUString&, const ::rtl::OUString&, const Sequence< sal_Int32 >& ) throw(SQLException, RuntimeException) -++{ -++ OSL_ENSURE(0,"Not implemented yet!"); -++ throw SQLException(); -++} -++// ----------------------------------------------------------------------------- -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx -+--- connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx 2011-08-17 14:28:31.880975797 -0500 -+@@ -0,0 +1,217 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ -++#define _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ -++ -++#include "KConnection.hxx" -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ //************************************************************** -++ //************ Class: KabDatabaseMetaData -++ //************************************************************** -++ -++ typedef ::cppu::WeakImplHelper1< ::com::sun::star::sdbc::XDatabaseMetaData> KabDatabaseMetaData_BASE; -++ -++ class KabDatabaseMetaData : public KabDatabaseMetaData_BASE -++ { -++ ::com::sun::star::uno::Reference< KabConnection > m_xConnection; -++ sal_Bool m_bUseCatalog; -++ -++ public: -++ -++ inline KabConnection* getOwnConnection() const { return m_xConnection.get(); } -++ -++ KabDatabaseMetaData(KabConnection* _pCon); -++ static const ::rtl::OUString & getAddressBookTableName(); -++ virtual ~KabDatabaseMetaData(); -++ -++ // this interface is really BIG -++ // XDatabaseMetaData -++ virtual sal_Bool SAL_CALL allProceduresAreCallable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL allTablesAreSelectable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getURL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getUserName( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullsAreSortedHigh( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullsAreSortedLow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullsAreSortedAtStart( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullsAreSortedAtEnd( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getDatabaseProductName( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getDatabaseProductVersion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getDriverName( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getDriverVersion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getDriverMajorVersion( ) throw(::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getDriverMinorVersion( ) throw(::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL usesLocalFiles( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL usesLocalFilePerTable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getIdentifierQuoteString( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSQLKeywords( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getNumericFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getStringFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSystemFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getTimeDateFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSearchStringEscape( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getExtraNameCharacters( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsAlterTableWithAddColumn( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsAlterTableWithDropColumn( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsColumnAliasing( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullPlusNonNullIsNull( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsTypeConversion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsTableCorrelationNames( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOrderByUnrelated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsGroupBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsGroupByUnrelated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsLikeEscapeClause( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMultipleResultSets( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMultipleTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsNonNullableColumns( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCoreSQLGrammar( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsANSI92FullSQL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOuterJoins( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsFullOuterJoins( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsLimitedOuterJoins( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSchemaTerm( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getProcedureTerm( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getCatalogTerm( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isCatalogAtStart( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getCatalogSeparator( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInDataManipulation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInTableDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInDataManipulation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInTableDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsPositionedDelete( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsPositionedUpdate( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSelectForUpdate( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsStoredProcedures( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSubqueriesInExists( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSubqueriesInIns( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsUnion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsUnionAll( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxCharLiteralLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInIndex( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInSelect( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInTable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxConnections( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxCursorNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxIndexLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxSchemaNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxProcedureNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxCatalogNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxRowSize( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxStatementLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxStatements( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxTableNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxTablesInSelect( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxUserNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getProcedures( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& procedureNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getProcedureColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& procedureNamePattern, const ::rtl::OUString& columnNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTables( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& types ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getSchemas( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getCatalogs( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTableTypes( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const ::rtl::OUString& columnNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getColumnPrivileges( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, const ::rtl::OUString& columnNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTablePrivileges( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getBestRowIdentifier( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, sal_Int32 scope, sal_Bool nullable ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getVersionColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getPrimaryKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getImportedKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getExportedKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getCrossReference( const ::com::sun::star::uno::Any& primaryCatalog, const ::rtl::OUString& primarySchema, const ::rtl::OUString& primaryTable, const ::com::sun::star::uno::Any& foreignCatalog, const ::rtl::OUString& foreignSchema, const ::rtl::OUString& foreignTable ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTypeInfo( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getIndexInfo( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, sal_Bool unique, sal_Bool approximate ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsBatchUpdates( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getUDTs( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& typeNamePattern, const ::com::sun::star::uno::Sequence< sal_Int32 >& types ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KDriver.cxx connectivity/source/drivers/tdeab/KDriver.cxx -+--- connectivity/source/drivers/tdeab/KDriver.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KDriver.cxx 2011-08-17 14:28:05.938979574 -0500 -+@@ -0,0 +1,476 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KDriver.hxx" -++#include "TDEInit.h" -++#include "KConnection.hxx" -++ -++/** === begin UNO includes === **/ -++#include -++#include -++#include -++/** === end UNO includes === **/ -++#include -++#include -++#include "resource/tdeab_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::sdb; -++using namespace com::sun::star::frame; -++using namespace connectivity::kab; -++ -++// ======================================================================= -++// = KabImplModule -++// ======================================================================= -++// -------------------------------------------------------------------------------- -++KabImplModule::KabImplModule( const Reference< XMultiServiceFactory >& _rxFactory ) -++ :m_xORB(_rxFactory) -++ ,m_bAttemptedLoadModule(false) -++ ,m_bAttemptedInitialize(false) -++ ,m_hConnectorModule(NULL) -++ ,m_pConnectionFactoryFunc(NULL) -++ ,m_pApplicationInitFunc(NULL) -++ ,m_pApplicationShutdownFunc(NULL) -++ ,m_pTDEVersionCheckFunc(NULL) -++{ -++ if ( !m_xORB.is() ) -++ throw NullPointerException(); -++} -++ -++// -------------------------------------------------------------------------------- -++bool KabImplModule::isTDEPresent() -++{ -++ if ( !impl_loadModule() ) -++ return false; -++ -++ return true; -++} -++ -++// -------------------------------------------------------------------------------- -++KabImplModule::TDEVersionType KabImplModule::matchTDEVersion() -++{ -++ OSL_PRECOND( m_pTDEVersionCheckFunc, "KabImplModule::matchTDEVersion: module not loaded!" ); -++ -++ int nVersionInfo = (*m_pTDEVersionCheckFunc)(); -++ if ( nVersionInfo < 0 ) -++ return eTooOld; -++ if ( nVersionInfo > 0 ) -++ return eToNew; -++ return eSupported; -++} -++ -++// -------------------------------------------------------------------------------- -++namespace -++{ -++ template< typename FUNCTION > -++ void lcl_getFunctionFromModuleOrUnload( oslModule& _rModule, const sal_Char* _pAsciiSymbolName, FUNCTION& _rFunction ) -++ { -++ _rFunction = NULL; -++ if ( _rModule ) -++ { -++ // -++ const ::rtl::OUString sSymbolName = ::rtl::OUString::createFromAscii( _pAsciiSymbolName ); -++ _rFunction = (FUNCTION)( osl_getSymbol( _rModule, sSymbolName.pData ) ); -++ -++ if ( !_rFunction ) -++ { // did not find the symbol -++ OSL_ENSURE( false, ::rtl::OString( "lcl_getFunctionFromModuleOrUnload: could not find the symbol " ) + ::rtl::OString( _pAsciiSymbolName ) ); -++ osl_unloadModule( _rModule ); -++ _rModule = NULL; -++ } -++ } -++ } -++} -++ -++// -------------------------------------------------------------------------------- -++extern "C" { void SAL_CALL thisModule() {} } -++ -++bool KabImplModule::impl_loadModule() -++{ -++ if ( m_bAttemptedLoadModule ) -++ return ( m_hConnectorModule != NULL ); -++ m_bAttemptedLoadModule = true; -++ -++ OSL_ENSURE( !m_hConnectorModule && !m_pConnectionFactoryFunc && !m_pApplicationInitFunc && !m_pApplicationShutdownFunc && !m_pTDEVersionCheckFunc, -++ "KabImplModule::impl_loadModule: inconsistence: inconsistency (never attempted load before, but some values already set)!"); -++ -++ const ::rtl::OUString sModuleName = ::rtl::OUString::createFromAscii( SAL_MODULENAME( "kabdrv1" ) ); -++ m_hConnectorModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, SAL_LOADMODULE_NOW ); // LAZY! #i61335# -++ OSL_ENSURE( m_hConnectorModule, "KabImplModule::impl_loadModule: could not load the implementation library!" ); -++ if ( !m_hConnectorModule ) -++ return false; -++ -++ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "createKabConnection", m_pConnectionFactoryFunc ); -++ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "initKApplication", m_pApplicationInitFunc ); -++ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "shutdownKApplication", m_pApplicationShutdownFunc ); -++ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "matchTDEVersion", m_pTDEVersionCheckFunc ); -++ -++ if ( !m_hConnectorModule ) -++ // one of the symbols did not exist -++ throw RuntimeException(); -++ -++ return true; -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_unloadModule() -++{ -++ OSL_PRECOND( m_hConnectorModule != NULL, "KabImplModule::impl_unloadModule: no module!" ); -++ -++ osl_unloadModule( m_hConnectorModule ); -++ m_hConnectorModule = NULL; -++ -++ m_pConnectionFactoryFunc = NULL; -++ m_pApplicationInitFunc = NULL; -++ m_pApplicationShutdownFunc = NULL; -++ m_pTDEVersionCheckFunc = NULL; -++ -++ m_bAttemptedLoadModule = false; -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::init() -++{ -++ if ( !impl_loadModule() ) -++ impl_throwNoKdeException(); -++ -++ // if we're not running on a supported version, throw -++ KabImplModule::TDEVersionType eTDEVersion = matchTDEVersion(); -++ -++ if ( eTDEVersion == eTooOld ) -++ impl_throwKdeTooOldException(); -++ -++ if ( ( eTDEVersion == eToNew ) && !impl_doAllowNewTDEVersion() ) -++ impl_throwKdeTooNewException(); -++ -++ if ( !m_bAttemptedInitialize ) -++ { -++ m_bAttemptedInitialize = true; -++ (*m_pApplicationInitFunc)(); -++ } -++} -++ -++// -------------------------------------------------------------------------------- -++bool KabImplModule::impl_doAllowNewTDEVersion() -++{ -++ try -++ { -++ Reference< XMultiServiceFactory > xConfigProvider( -++ m_xORB->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) ) ), -++ UNO_QUERY_THROW ); -++ Sequence< Any > aCreationArgs(1); -++ aCreationArgs[0] <<= PropertyValue( -++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) ), -++ 0, -++ makeAny( KabDriver::impl_getConfigurationSettingsPath() ), -++ PropertyState_DIRECT_VALUE ); -++ Reference< XPropertySet > xSettings( xConfigProvider->createInstanceWithArguments( -++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationAccess" ) ), -++ aCreationArgs ), -++ UNO_QUERY_THROW ); -++ -++ sal_Bool bDisableCheck = sal_False; -++ xSettings->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DisableTDEMaximumVersionCheck" ) ) ) >>= bDisableCheck; -++ -++ return bDisableCheck != sal_False; -++ } -++ catch( const Exception& ) -++ { -++ DBG_UNHANDLED_EXCEPTION(); -++ } -++ return false; -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_throwNoKdeException() -++{ -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceString( -++ STR_NO_TDE_INST -++ ) ); -++ impl_throwGenericSQLException( sError ); -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_throwKdeTooOldException() -++{ -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution( -++ STR_TDE_VERSION_TOO_OLD, -++ "$major$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MAJOR), -++ "$minor$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MINOR) -++ ) ); -++ impl_throwGenericSQLException( sError ); -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_throwGenericSQLException( const ::rtl::OUString& _rMessage ) -++{ -++ SQLException aError; -++ aError.Message = _rMessage; -++ aError.SQLState = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) ); -++ aError.ErrorCode = 0; -++ throw aError; -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_throwKdeTooNewException() -++{ -++ ::connectivity::SharedResources aResources; -++ -++ SQLException aError; -++ aError.Message = aResources.getResourceStringWithSubstitution( -++ STR_TDE_VERSION_TOO_NEW, -++ "$major$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MAJOR), -++ "$minor$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MINOR) -++ ); -++ aError.SQLState = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) ); -++ aError.ErrorCode = 0; -++ -++ SQLContext aDetails; -++ ::rtl::OUStringBuffer aMessage; -++ aMessage.append( aResources.getResourceString(STR_TDE_VERSION_TOO_NEW_WORK_AROUND) ); -++ -++ aMessage.appendAscii( "Sub disableTDEMaxVersionCheck\n" ); -++ aMessage.appendAscii( " BasicLibraries.LoadLibrary( \"Tools\" )\n" ); -++ -++ aMessage.appendAscii( " Dim configNode as Object\n" ); -++ aMessage.appendAscii( " configNode = GetRegistryKeyContent( \"" ); -++ aMessage.append( KabDriver::impl_getConfigurationSettingsPath() ); -++ aMessage.appendAscii( "\", true )\n" ); -++ -++ aMessage.appendAscii( " configNode.DisableTDEMaximumVersionCheck = TRUE\n" ); -++ aMessage.appendAscii( " configNode.commitChanges\n" ); -++ aMessage.appendAscii( "End Sub\n" ); -++ -++ aDetails.Message = aMessage.makeStringAndClear(); -++ -++ aError.NextException <<= aDetails; -++ -++ throw aError; -++} -++ -++// -------------------------------------------------------------------------------- -++KabConnection* KabImplModule::createConnection( KabDriver* _pDriver ) const -++{ -++ OSL_PRECOND( m_hConnectorModule, "KabImplModule::createConnection: not initialized!" ); -++ -++ void* pUntypedConnection = (*m_pConnectionFactoryFunc)( _pDriver ); -++ if ( !pUntypedConnection ) -++ throw RuntimeException(); -++ -++ return static_cast< KabConnection* >( pUntypedConnection ); -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::shutdown() -++{ -++ if ( !m_hConnectorModule ) -++ return; -++ -++ (*m_pApplicationShutdownFunc)(); -++ m_bAttemptedInitialize = false; -++ -++ impl_unloadModule(); -++} -++ -++// ======================================================================= -++// = KabDriver -++// ======================================================================= -++KabDriver::KabDriver( -++ const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) -++ : KDriver_BASE(m_aMutex), -++ m_xMSFactory(_rxFactory), -++ m_aImplModule(_rxFactory) -++{ -++ if ( !m_xMSFactory.is() ) -++ throw NullPointerException(); -++ -++ osl_incrementInterlockedCount( &m_refCount ); -++ try -++ { -++ Reference< XDesktop > xDesktop( -++ m_xMSFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ) ), -++ UNO_QUERY_THROW ); -++ xDesktop->addTerminateListener( this ); -++ } -++ catch( const Exception& ) -++ { -++ DBG_UNHANDLED_EXCEPTION(); -++ } -++ osl_decrementInterlockedCount( &m_refCount ); -++} -++// -------------------------------------------------------------------------------- -++void KabDriver::disposing() -++{ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++ // when driver will be destroied so all our connections have to be destroied as well -++ for (OWeakRefArray::iterator i = m_xConnections.begin(); m_xConnections.end() != i; ++i) -++ { -++ Reference< XComponent > xComp(i->get(), UNO_QUERY); -++ if (xComp.is()) -++ xComp->dispose(); -++ } -++ m_xConnections.clear(); -++ -++ WeakComponentImplHelperBase::disposing(); -++} -++// static ServiceInfo -++//------------------------------------------------------------------------------ -++rtl::OUString KabDriver::getImplementationName_Static( ) throw(RuntimeException) -++{ -++ return rtl::OUString::createFromAscii( impl_getAsciiImplementationName() ); -++} -++//------------------------------------------------------------------------------ -++Sequence< ::rtl::OUString > KabDriver::getSupportedServiceNames_Static( ) throw (RuntimeException) -++{ -++ // which service is supported -++ // for more information @see com.sun.star.sdbc.Driver -++ Sequence< ::rtl::OUString > aSNS( 1 ); -++ aSNS[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdbc.Driver"); -++ -++ return aSNS; -++} -++//------------------------------------------------------------------ -++::rtl::OUString SAL_CALL KabDriver::getImplementationName( ) throw(RuntimeException) -++{ -++ return getImplementationName_Static(); -++} -++//------------------------------------------------------------------ -++sal_Bool SAL_CALL KabDriver::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException) -++{ -++ Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames()); -++ const ::rtl::OUString* pSupported = aSupported.getConstArray(); -++ const ::rtl::OUString* pEnd = pSupported + aSupported.getLength(); -++ -++ while (pSupported != pEnd && !pSupported->equals(_rServiceName)) -++ ++pSupported; -++ return pSupported != pEnd; -++} -++//------------------------------------------------------------------ -++Sequence< ::rtl::OUString > SAL_CALL KabDriver::getSupportedServiceNames( ) throw(RuntimeException) -++{ -++ return getSupportedServiceNames_Static(); -++} -++// -------------------------------------------------------------------------------- -++Reference< XConnection > SAL_CALL KabDriver::connect( const ::rtl::OUString& url, const Sequence< PropertyValue >& info ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++ m_aImplModule.init(); -++ -++ // create a new connection with the given properties and append it to our vector -++ KabConnection* pConnection = m_aImplModule.createConnection( this ); -++ OSL_POSTCOND( pConnection, "KabDriver::connect: no connection has been created by the factory!" ); -++ -++ // by definition, the factory function returned an object which was acquired once -++ Reference< XConnection > xConnection = pConnection; -++ pConnection->release(); -++ -++ // late constructor call which can throw exception and allows a correct dtor call when so -++ pConnection->construct( url, info ); -++ -++ // remember it -++ m_xConnections.push_back( WeakReferenceHelper( *pConnection ) ); -++ -++ return xConnection; -++} -++// -------------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDriver::acceptsURL( const ::rtl::OUString& url ) -++ throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++ if ( !m_aImplModule.isTDEPresent() ) -++ return sal_False; -++ -++ // here we have to look whether we support this URL format -++ return (!url.compareTo(::rtl::OUString::createFromAscii("sdbc:address:kab:"), 16)); -++} -++// -------------------------------------------------------------------------------- -++Sequence< DriverPropertyInfo > SAL_CALL KabDriver::getPropertyInfo( const ::rtl::OUString&, const Sequence< PropertyValue >& ) throw(SQLException, RuntimeException) -++{ -++ // if you have something special to say, return it here :-) -++ return Sequence< DriverPropertyInfo >(); -++} -++// -------------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDriver::getMajorVersion( ) throw(RuntimeException) -++{ -++ return KAB_DRIVER_VERSION_MAJOR; -++} -++// -------------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDriver::getMinorVersion( ) throw(RuntimeException) -++{ -++ return KAB_DRIVER_VERSION_MINOR; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabDriver::queryTermination( const EventObject& ) throw (TerminationVetoException, RuntimeException) -++{ -++ // nothing to do, nothing to veto -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabDriver::notifyTermination( const EventObject& ) throw (RuntimeException) -++{ -++ m_aImplModule.shutdown(); -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabDriver::disposing( const EventObject& ) throw (RuntimeException) -++{ -++ // not interested in (this is the disposing of the desktop, if any) -++} -++// -------------------------------------------------------------------------------- -++const sal_Char* KabDriver::impl_getAsciiImplementationName() -++{ -++ return "com.sun.star.comp.sdbc.kab.Driver"; -++ // this name is referenced in the configuration and in the kab.xml -++ // Please be careful when changing it. -++} -++// -------------------------------------------------------------------------------- -++::rtl::OUString KabDriver::impl_getConfigurationSettingsPath() -++{ -++ ::rtl::OUStringBuffer aPath; -++ aPath.appendAscii( "/org.openoffice.Office.DataAccess/DriverSettings/" ); -++ aPath.appendAscii( "com.sun.star.comp.sdbc.kab.Driver" ); -++ return aPath.makeStringAndClear(); -++} -++// -------------------------------------------------------------------------------- -++Reference< XInterface > SAL_CALL KabDriver::Create( const Reference< XMultiServiceFactory >& _rxFactory ) throw( Exception ) -++{ -++ return *(new KabDriver(_rxFactory)); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KDriver.hxx connectivity/source/drivers/tdeab/KDriver.hxx -+--- connectivity/source/drivers/tdeab/KDriver.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KDriver.hxx 2011-08-17 14:27:57.178305442 -0500 -+@@ -0,0 +1,227 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_DRIVER_HXX_ -++#define _CONNECTIVITY_KAB_DRIVER_HXX_ -++ -++/** === begin UNO includes === **/ -++#include -++#include -++#include -++/** === end UNO includes === **/ -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabConnection; -++ class KabDriver; -++ -++ typedef void* (SAL_CALL * ConnectionFactoryFunction)( void* _pDriver ); -++ typedef void (SAL_CALL * ApplicationInitFunction)( void ); -++ typedef void (SAL_CALL * ApplicationShutdownFunction)( void ); -++ typedef int (SAL_CALL * TDEVersionCheckFunction)( void ); -++ -++ typedef std::vector< ::com::sun::star::uno::WeakReferenceHelper > OWeakRefArray; -++ -++ // =============================================================== -++ // = KabImplModule -++ // =============================================================== -++ class KabImplModule -++ { -++ private: -++ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > -++ m_xORB; -++ -++ /// Did we already attempt to load the module and to retrieve the symbols? -++ bool m_bAttemptedLoadModule; -++ /// Did we already check the TDE version and initialize the impl module (or at least attempted to)? -++ bool m_bAttemptedInitialize; -++ -++ oslModule m_hConnectorModule; -++ ConnectionFactoryFunction m_pConnectionFactoryFunc; -++ ApplicationInitFunction m_pApplicationInitFunc; -++ ApplicationShutdownFunction m_pApplicationShutdownFunc; -++ TDEVersionCheckFunction m_pTDEVersionCheckFunc; -++ -++ public: -++ KabImplModule( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); -++ -++ /** determines whether there is a TDE present in the environment -++ */ -++ bool isTDEPresent(); -++ -++ enum TDEVersionType -++ { -++ eTooOld, -++ eSupported, -++ eToNew -++ }; -++ /** checks whether the TDE version we're running against is supported -++ @precond -++ the module is loaded, i.e impl_loadModule has successfully been called -++ */ -++ TDEVersionType matchTDEVersion(); -++ -++ /** initializes the implementation module. -++ -++ @raises ::com::sun::star::uno::RuntimeException -++ if the module could be loaded, but required symbols are missing -++ @raises ::com::sun::star::sdbc::SQLException -++ if the TDE version we're running against is not supported, or no TDE was found at all -++ */ -++ void init(); -++ -++ /** shuts down the impl module (and the TDE application, if we own it) -++ */ -++ void shutdown(); -++ -++ /** creates a new connection -++ @precond -++ init has been called before -++ @raises ::com::sun::star::uno::RuntimeException -++ if no connection object could be created (which is a severe error, normally impossible) -++ */ -++ KabConnection* createConnection( KabDriver* _pDriver ) const; -++ -++ private: -++ /** loads the implementation module and retrieves the needed symbols -++ -++ Save against being called multiple times. -++ -++ @return if the module could be loaded successfully. -++ -++ @raises ::com::sun::star::uno::RuntimeException -++ if the module could be loaded, but required symbols are missing -++ */ -++ bool impl_loadModule(); -++ -++ /** unloads the implementation module, and resets all function pointers to -++ @precond m_hConnectorModule is not -++ */ -++ void impl_unloadModule(); -++ -++ /** throws an SQLException saying than no TDE installation was found -++ */ -++ void impl_throwNoKdeException(); -++ -++ /** throws an SQLException saying that the found TDE version is too old -++ */ -++ void impl_throwKdeTooOldException(); -++ -++ /** throws an SQLException saying that the found TDE version is too new -++ */ -++ void impl_throwKdeTooNewException(); -++ -++ /** throws a generic SQL exception with SQLState S1000 and error code 0 -++ */ -++ void impl_throwGenericSQLException( const ::rtl::OUString& _rMessage ); -++ -++ /** determines whether it's allowed to run on a too-new (not confirmed to work) version -++ */ -++ bool impl_doAllowNewTDEVersion(); -++ }; -++ -++ // =============================================================== -++ // = KabDriver -++ // =============================================================== -++ typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::sdbc::XDriver, -++ ::com::sun::star::lang::XServiceInfo, -++ ::com::sun::star::frame::XTerminateListener > KDriver_BASE; -++ class KabDriver : public KDriver_BASE -++ { -++ protected: -++ ::osl::Mutex m_aMutex; // mutex is need to control member access -++ OWeakRefArray m_xConnections; // vector containing a list of all the -++ // KabConnection objects for this Driver -++ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > -++ m_xMSFactory; // the multi-service factory -++ KabImplModule m_aImplModule; -++ -++ public: -++ static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) throw( ::com::sun::star::uno::Exception ); -++ -++ // XServiceInfo - static versions -++ static ::rtl::OUString getImplementationName_Static( ) throw(::com::sun::star::uno::RuntimeException); -++ static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static( ) throw (::com::sun::star::uno::RuntimeException); -++ -++ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& -++ getMSFactory() const { return m_xMSFactory; } -++ -++ /** returns the driver's implementation name (being pure ASCII) for reference in various places -++ */ -++ static const sal_Char* impl_getAsciiImplementationName(); -++ -++ /** returns the path of our configuration settings -++ */ -++ static ::rtl::OUString impl_getConfigurationSettingsPath(); -++ -++ protected: -++ KabDriver(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory); -++ -++ // OComponentHelper -++ virtual void SAL_CALL disposing(void); -++ -++ // XServiceInfo -++ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XDriver -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL connect( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL acceptsURL( const ::rtl::OUString& url ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMajorVersion() throw(::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMinorVersion() throw(::com::sun::star::uno::RuntimeException); -++ -++ // XTerminateListener -++ virtual void SAL_CALL queryTermination( const ::com::sun::star::lang::EventObject& Event ) throw (::com::sun::star::frame::TerminationVetoException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL notifyTermination( const ::com::sun::star::lang::EventObject& Event ) throw (::com::sun::star::uno::RuntimeException); -++ -++ // XEventListener -++ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); -++ -++ private: -++ /** shuts down the library which contains the real implementations -++ -++ This method is safe against being called multiple times -++ -++ @precond our mutex is locked -++ */ -++ void impl_shutdownImplementationModule(); -++ }; -++ } -++ -++} -++ -++#endif // _CONNECTIVITY_KAB_DRIVER_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/kfields.cxx connectivity/source/drivers/tdeab/kfields.cxx -+--- connectivity/source/drivers/tdeab/kfields.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/kfields.cxx 2011-08-17 14:27:40.557026383 -0500 -+@@ -0,0 +1,98 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "kfields.hxx" -++#include "resource/common_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++using namespace ::connectivity::kab; -++using namespace ::com::sun::star::sdbc; -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++// ----------------------------------------------------------------------------- -++// return the value of a TDE address book field, given an addressee and a field number -++TQString valueOfKabField(const ::KABC::Addressee &aAddressee, sal_Int32 nFieldNumber) -++{ -++ switch (nFieldNumber) -++ { -++ case KAB_FIELD_REVISION: -++ return aAddressee.revision().toString("yyyy-MM-dd hh:mm:ss"); -++ default: -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ return aFields[nFieldNumber - KAB_DATA_FIELDS]->value(aAddressee); -++ } -++} -++// ------------------------------------------------------------------------------ -++// search the TDE address book field number of a given column name -++sal_uInt32 findKabField(const ::rtl::OUString& columnName) throw(SQLException) -++{ -++ TQString aQtName; -++ ::rtl::OUString aName; -++ -++ aQtName = KABC::Addressee::revisionLabel(); -++ aName = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ if (columnName == aName) -++ return KAB_FIELD_REVISION; -++ -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ ::KABC::Field::List::iterator aField; -++ sal_uInt32 nResult; -++ -++ for ( aField = aFields.begin(), nResult = KAB_DATA_FIELDS; -++ aField != aFields.end(); -++ ++aField, ++nResult) -++ { -++ aQtName = (*aField)->label(); -++ aName = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ -++ if (columnName == aName) -++ return nResult; -++ } -++ -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution( -++ STR_INVALID_COLUMNNAME, -++ "$columnname$",columnName -++ ) ); -++ ::dbtools::throwGenericSQLException(sError,NULL); -++ // Unreachable: -++ OSL_ASSERT(false); -++ return 0; -++} -++// ------------------------------------------------------------------------------ -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/kfields.hxx connectivity/source/drivers/tdeab/kfields.hxx -+--- connectivity/source/drivers/tdeab/kfields.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/kfields.hxx 2011-08-17 14:27:31.926362235 -0500 -+@@ -0,0 +1,51 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_FIELDS_HXX_ -++#define _CONNECTIVITY_KAB_FIELDS_HXX_ -++ -++#include -++#include -++#include -++ -++#define KAB_FIELD_REVISION 0 -++#define KAB_DATA_FIELDS 1 -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ TQString valueOfKabField(const ::KABC::Addressee &aAddressee, sal_Int32 nFieldNumber); -++ sal_uInt32 findKabField(const ::rtl::OUString& columnName) throw(::com::sun::star::sdbc::SQLException); -++ } -++} -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/korder.cxx connectivity/source/drivers/tdeab/korder.cxx -+--- connectivity/source/drivers/tdeab/korder.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/korder.cxx 2011-08-17 14:27:22.785658823 -0500 -+@@ -0,0 +1,92 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "korder.hxx" -++#include "kfields.hxx" -++ -++using namespace ::connectivity::kab; -++ -++KabOrder::~KabOrder() -++{ -++} -++// ----------------------------------------------------------------------------- -++KabSimpleOrder::KabSimpleOrder(::rtl::OUString &sColumnName, sal_Bool bAscending) -++ : KabOrder(), -++ m_nFieldNumber(findKabField(sColumnName)), -++ m_bAscending(bAscending) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Int32 KabSimpleOrder::compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const -++{ -++ sal_Int32 result; -++ -++ result = TQString::compare( -++ valueOfKabField(aAddressee1, m_nFieldNumber), -++ valueOfKabField(aAddressee2, m_nFieldNumber)); -++// Timestamps should be compared differently than with their string value -++ -++ if (!m_bAscending) result = -result; -++ -++ return result; -++} -++// ----------------------------------------------------------------------------- -++KabComplexOrder::KabComplexOrder() -++ : KabOrder(), -++ m_aOrders() -++{ -++} -++// ----------------------------------------------------------------------------- -++KabComplexOrder::~KabComplexOrder() -++{ -++ for (sal_uInt32 i = 0; i < m_aOrders.size(); i++) -++ delete m_aOrders[i]; -++} -++// ----------------------------------------------------------------------------- -++void KabComplexOrder::addOrder(KabOrder *pOrder) -++{ -++ m_aOrders.push_back(pOrder); -++} -++// ----------------------------------------------------------------------------- -++sal_Int32 KabComplexOrder::compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const -++{ -++ for (sal_uInt32 i = 0; i < m_aOrders.size(); i++) -++ { -++ const KabOrder *pOrder = m_aOrders[i]; -++ sal_Int32 result = pOrder->compare(aAddressee1, aAddressee2); -++ -++ if (result) return result; -++ } -++ return 0; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/korder.hxx connectivity/source/drivers/tdeab/korder.hxx -+--- connectivity/source/drivers/tdeab/korder.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/korder.hxx 2011-08-17 14:27:15.825123174 -0500 -+@@ -0,0 +1,78 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_ORDER_HXX_ -++#define _CONNECTIVITY_KAB_ORDER_HXX_ -++ -++#include "rtl/ustring.hxx" -++#include -++ -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabOrder -++ { -++ public: -++ virtual ~KabOrder(); -++ -++ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const = 0; -++ }; -++ -++ class KabSimpleOrder : public KabOrder -++ { -++ sal_Int32 m_nFieldNumber; -++ sal_Bool m_bAscending; -++ -++ TQString value(const ::KABC::Addressee &aAddressee) const; -++ public: -++ KabSimpleOrder(::rtl::OUString &sColumnName, sal_Bool bAscending); -++ -++ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const; -++ }; -++ -++ class KabComplexOrder : public KabOrder -++ { -++ ::std::vector m_aOrders; -++ -++ public: -++ KabComplexOrder(); -++ virtual ~KabComplexOrder(); -++ -++ void addOrder(KabOrder *pOrder); -++ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const; -++ }; -++ } -++} -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KPreparedStatement.cxx connectivity/source/drivers/tdeab/KPreparedStatement.cxx -+--- connectivity/source/drivers/tdeab/KPreparedStatement.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KPreparedStatement.cxx 2011-08-17 14:27:09.434631390 -0500 -+@@ -0,0 +1,394 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KPreparedStatement.hxx" -++#include "propertyids.hxx" -++#include -++#include -++#include "resource/tdeab_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::util; -++ -++IMPLEMENT_SERVICE_INFO(KabPreparedStatement, "com.sun.star.sdbc.drivers.KabPreparedStatement", "com.sun.star.sdbc.PreparedStatement"); -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::checkAndResizeParameters(sal_Int32 nParams) throw(SQLException) -++{ -++ if ( !m_aParameterRow.is() ) -++ m_aParameterRow = new OValueVector(); -++ -++ if (nParams < 1) -++ ::dbtools::throwInvalidIndexException(*(KabPreparedStatement *) this,Any()); -++ -++ if (nParams >= (sal_Int32) (m_aParameterRow->get()).size()) -++ (m_aParameterRow->get()).resize(nParams); -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::setKabFields() const throw(SQLException) -++{ -++ ::rtl::Reference xColumns; // selected columns -++ -++ xColumns = m_aSQLIterator.getSelectColumns(); -++ if (!xColumns.is()) -++ { -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceString( -++ STR_INVALID_COLUMN_SELECTION -++ ) ); -++ ::dbtools::throwGenericSQLException(sError,NULL); -++ } -++ m_xMetaData->setKabFields(xColumns); -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::resetParameters() const throw(SQLException) -++{ -++ m_nParameterIndex = 0; -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::getNextParameter(::rtl::OUString &rParameter) const throw(SQLException) -++{ -++ if (m_nParameterIndex >= (sal_Int32) (m_aParameterRow->get()).size()) -++ { -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceString( -++ STR_INVALID_PARA_COUNT -++ ) ); -++ ::dbtools::throwGenericSQLException(sError,*(KabPreparedStatement *) this); -++ } // if (m_nParameterIndex >= (sal_Int32) (*m_aParameterRow).size()) -++ -++ rParameter = (m_aParameterRow->get())[m_nParameterIndex]; -++ -++ m_nParameterIndex++; -++} -++// ------------------------------------------------------------------------- -++KabPreparedStatement::KabPreparedStatement( -++ KabConnection* _pConnection, -++ const ::rtl::OUString& sql) -++ : KabPreparedStatement_BASE(_pConnection), -++ m_sSqlStatement(sql), -++ m_bPrepared(sal_False), -++ m_nParameterIndex(0), -++ m_aParameterRow() -++{ -++} -++// ------------------------------------------------------------------------- -++KabPreparedStatement::~KabPreparedStatement() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::disposing() -++{ -++ KabPreparedStatement_BASE::disposing(); -++ -++ if (m_aParameterRow.is()) -++ { -++ m_aParameterRow->get().clear(); -++ m_aParameterRow = NULL; -++ } -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSetMetaData > SAL_CALL KabPreparedStatement::getMetaData() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ if (!m_xMetaData.is()) -++ { -++ m_xMetaData = new KabResultSetMetaData(getOwnConnection()); -++ setKabFields(); -++ } -++ Reference< XResultSetMetaData > xMetaData = m_xMetaData.get(); -++ return xMetaData; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::close() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ // Reset last warning message -++ try { -++ clearWarnings (); -++ KabCommonStatement::close(); -++ } -++ catch (SQLException &) { -++ // If we get an error, ignore -++ } -++ -++ // Remove this Statement object from the Connection object's -++ // list -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabPreparedStatement::execute() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ Reference< XResultSet> xRS = KabCommonStatement::executeQuery(m_sSqlStatement); -++ -++ return xRS.is(); -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabPreparedStatement::executeUpdate() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ // same as in statement with the difference that this statement also can contain parameter -++ return 0; -++} -++// ------------------------------------------------------------------------- -++Reference< XConnection > SAL_CALL KabPreparedStatement::getConnection() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ return (Reference< XConnection >) m_pConnection; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabPreparedStatement::executeQuery() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ Reference< XResultSet > rs = KabCommonStatement::executeQuery(m_sSqlStatement); -++ -++ return rs; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setNull(sal_Int32 parameterIndex, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ checkAndResizeParameters(parameterIndex); -++ -++ (m_aParameterRow->get())[parameterIndex - 1].setNull(); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setObjectNull(sal_Int32, sal_Int32, const ::rtl::OUString&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setObjectNull", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setBoolean(sal_Int32, sal_Bool) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setBoolean", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setByte(sal_Int32, sal_Int8) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setByte", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setShort(sal_Int32, sal_Int16) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setShort", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setInt(sal_Int32, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setInt", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setLong(sal_Int32, sal_Int64) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setFloat(sal_Int32, float) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setFloat", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setDouble(sal_Int32, double) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setDouble", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setString(sal_Int32 parameterIndex, const ::rtl::OUString &x) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ checkAndResizeParameters(parameterIndex); -++ -++ (m_aParameterRow->get())[parameterIndex - 1] = x; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setBytes(sal_Int32, const Sequence< sal_Int8 >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setBytes", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setDate(sal_Int32, const Date&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setDate", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setTime(sal_Int32, const Time&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setTime", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setTimestamp(sal_Int32, const DateTime&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setTimestamp", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setBinaryStream(sal_Int32, const Reference< ::com::sun::star::io::XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setBinaryStream", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setCharacterStream(sal_Int32, const Reference< ::com::sun::star::io::XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setCharacterStream", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setObject(sal_Int32 parameterIndex, const Any& x) throw(SQLException, RuntimeException) -++{ -++ if(!::dbtools::implSetObject(this,parameterIndex,x)) -++ { -++ throw SQLException(); -++ } -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setObjectWithInfo(sal_Int32, const Any&, sal_Int32, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setObjectWithInfo", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setRef(sal_Int32, const Reference< XRef >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setRef", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setBlob(sal_Int32, const Reference< XBlob >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setBlob", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setClob(sal_Int32, const Reference< XClob >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setClob", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setArray(sal_Int32, const Reference< XArray >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setArray", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::clearParameters() throw(SQLException, RuntimeException) -++{ -++::dbtools::throwFunctionNotSupportedException("clearParameters", NULL); -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) throw (Exception) -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ break; -++ case PROPERTY_ID_RESULTSETTYPE: -++ break; -++ case PROPERTY_ID_FETCHDIRECTION: -++ break; -++ case PROPERTY_ID_USEBOOKMARKS: -++ break; -++ default: -++ KabCommonStatement::setFastPropertyValue_NoBroadcast(nHandle,rValue); -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KPreparedStatement.hxx connectivity/source/drivers/tdeab/KPreparedStatement.hxx -+--- connectivity/source/drivers/tdeab/KPreparedStatement.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KPreparedStatement.hxx 2011-08-17 14:27:04.434246577 -0500 -+@@ -0,0 +1,123 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ -++#define _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ -++ -++#include "KStatement.hxx" -++#include "KResultSetMetaData.hxx" -++#include -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ -++ class OBoundParam; -++ typedef ::cppu::ImplInheritanceHelper4< KabCommonStatement, -++ ::com::sun::star::sdbc::XPreparedStatement, -++ ::com::sun::star::sdbc::XParameters, -++ ::com::sun::star::sdbc::XResultSetMetaDataSupplier, -++ ::com::sun::star::lang::XServiceInfo> KabPreparedStatement_BASE; -++ -++ class KabPreparedStatement : public KabPreparedStatement_BASE -++ { -++ protected: -++ ::rtl::OUString m_sSqlStatement; -++ ::rtl::Reference< KabResultSetMetaData > -++ m_xMetaData; -++ sal_Bool m_bPrepared; -++ mutable sal_Int32 m_nParameterIndex; -++ OValueRow m_aParameterRow; -++ -++ void checkAndResizeParameters(sal_Int32 nParams) throw(::com::sun::star::sdbc::SQLException); -++ void setKabFields() const throw(::com::sun::star::sdbc::SQLException); -++ -++ protected: -++ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::uno::Exception); -++ -++ virtual void resetParameters() const throw(::com::sun::star::sdbc::SQLException); -++ virtual void getNextParameter(::rtl::OUString &rParameter) const throw(::com::sun::star::sdbc::SQLException); -++ virtual ~KabPreparedStatement(); -++ -++ public: -++ DECLARE_SERVICE_INFO(); -++ KabPreparedStatement(KabConnection* _pConnection, const ::rtl::OUString& sql); -++ -++ // OComponentHelper -++ virtual void SAL_CALL disposing(); -++ -++ // XPreparedStatement -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL executeQuery( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL executeUpdate( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL execute( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XParameters -++ virtual void SAL_CALL setNull( sal_Int32 parameterIndex, sal_Int32 sqlType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& typeName ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setBoolean( sal_Int32 parameterIndex, sal_Bool x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setByte( sal_Int32 parameterIndex, sal_Int8 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setShort( sal_Int32 parameterIndex, sal_Int16 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setInt( sal_Int32 parameterIndex, sal_Int32 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setLong( sal_Int32 parameterIndex, sal_Int64 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setFloat( sal_Int32 parameterIndex, float x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setDouble( sal_Int32 parameterIndex, double x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setString( sal_Int32 parameterIndex, const ::rtl::OUString& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setBytes( sal_Int32 parameterIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setDate( sal_Int32 parameterIndex, const ::com::sun::star::util::Date& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setTime( sal_Int32 parameterIndex, const ::com::sun::star::util::Time& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setTimestamp( sal_Int32 parameterIndex, const ::com::sun::star::util::DateTime& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setBinaryStream( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setCharacterStream( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setObject( sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setObjectWithInfo( sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setRef( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setBlob( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setClob( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setArray( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL clearParameters( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XCloseable -++ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XResultSetMetaDataSupplier -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KResultSet.cxx connectivity/source/drivers/tdeab/KResultSet.cxx -+--- connectivity/source/drivers/tdeab/KResultSet.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KResultSet.cxx 2011-08-17 14:26:57.383703991 -0500 -+@@ -0,0 +1,991 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KResultSet.hxx" -++#include "KResultSetMetaData.hxx" -++#include "KConnection.hxx" -++#include "kcondition.hxx" -++#include "korder.hxx" -++#include "kfields.hxx" -++#include -++#include -++#include "TConnection.hxx" -++#include -++#include "resource/tdeab_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++using namespace connectivity::kab; -++using namespace cppu; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::sdbcx; -++using namespace com::sun::star::io; -++using namespace com::sun::star::util; -++ -++IMPLEMENT_SERVICE_INFO(KabResultSet, "com.sun.star.sdbc.drivers.KabResultSet", "com.sun.star.sdbc.ResultSet"); -++// ------------------------------------------------------------------------- -++KabResultSet::KabResultSet(KabCommonStatement* pStmt) -++ : KabResultSet_BASE(m_aMutex), -++ OPropertySetHelper(KabResultSet_BASE::rBHelper), -++ m_xStatement(pStmt), -++ m_xMetaData(NULL), -++ m_aKabAddressees(), -++ m_nRowPos(-1), -++ m_bWasNull(sal_True) -++{ -++} -++// ------------------------------------------------------------------------- -++KabResultSet::~KabResultSet() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::allKabAddressees() -++{ -++ KabConnection* pConnection = static_cast< KabConnection *>(m_xStatement->getConnection().get()); -++ KABC::AddressBook* pAddressBook = pConnection->getAddressBook(); -++ -++ m_aKabAddressees = pAddressBook->allAddressees(); -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::someKabAddressees(const KabCondition *pCondition) -++{ -++ KabConnection* pConnection = static_cast< KabConnection *>(m_xStatement->getConnection().get()); -++ KABC::AddressBook* pAddressBook = pConnection->getAddressBook(); -++ -++ KABC::AddressBook::Iterator iterator; -++ -++ for (iterator = pAddressBook->begin(); -++ iterator != pAddressBook->end(); -++ ++iterator) -++ { -++ if (pCondition->eval(*iterator)) -++ m_aKabAddressees.push_back(*iterator); -++ } -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::sortKabAddressees(const KabOrder *pOrder) -++{ -++ // We do not use class KAddresseeList, which has a sorting algorithm in it, because -++ // it uses templates. It would expand to more or less the same code as the one -++ // which follows, but it would need not be called in a much less convenient way. -++ -++ KABC::Addressee::List::Iterator -++ begin = m_aKabAddressees.begin(), -++ end = m_aKabAddressees.end(), -++ iterator; -++ -++ // Bubble sort. Feel free to implement a better algorithm. -++ while (begin != end) -++ { -++ end--; -++ for (iterator = begin; iterator != end; ++iterator) -++ { -++ if (pOrder->compare(*iterator, *end) > 0) -++ qSwap(*iterator, *end); -++ } -++ } -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::disposing() -++{ -++ OPropertySetHelper::disposing(); -++ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++m_xStatement.clear(); -++m_xMetaData.clear(); -++} -++// ------------------------------------------------------------------------- -++Any SAL_CALL KabResultSet::queryInterface(const Type & rType) throw(RuntimeException) -++{ -++ Any aRet = OPropertySetHelper::queryInterface(rType); -++ if (!aRet.hasValue()) -++ aRet = KabResultSet_BASE::queryInterface(rType); -++ return aRet; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::acquire() throw() -++{ -++ KabResultSet_BASE::acquire(); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::release() throw() -++{ -++ KabResultSet_BASE::release(); -++} -++// ------------------------------------------------------------------------- -++Sequence< Type > SAL_CALL KabResultSet::getTypes() throw(RuntimeException) -++{ -++ OTypeCollection aTypes( -++ ::getCppuType( (const Reference< ::com::sun::star::beans::XMultiPropertySet >*) 0), -++ ::getCppuType( (const Reference< ::com::sun::star::beans::XFastPropertySet >*) 0), -++ ::getCppuType( (const Reference< ::com::sun::star::beans::XPropertySet >*) 0)); -++ -++ return comphelper::concatSequences(aTypes.getTypes(), KabResultSet_BASE::getTypes()); -++} -++// ------------------------------------------------------------------------- -++::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL KabResultSet::getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException) -++{ -++ return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::findColumn(const ::rtl::OUString& columnName) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // find the first column with the name columnName -++ Reference< XResultSetMetaData > xMeta = getMetaData(); -++ sal_Int32 nLen = xMeta->getColumnCount(); -++ -++ for (sal_Int32 i = 1; i <= nLen; ++i) -++ if (xMeta->isCaseSensitive(i) ? -++ columnName == xMeta->getColumnName(i) : -++ columnName.equalsIgnoreAsciiCase(xMeta->getColumnName(i))) -++ return i; -++ -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution( -++ STR_INVALID_COLUMNNAME, -++ "$columnname$",columnName -++ ) ); -++ ::dbtools::throwGenericSQLException(sError,NULL); -++ -++ // Unreachable: -++ OSL_ASSERT(false); -++ return 0; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSet::getString(sal_Int32 columnIndex) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ ::rtl::OUString aRet; -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ -++ if (m_nRowPos != -1 && m_nRowPos != nAddressees && m_xMetaData.is()) -++ { -++ sal_Int32 nFieldNumber = m_xMetaData->fieldAtColumn(columnIndex); -++ TQString aQtName; -++ -++ switch (nFieldNumber) -++ { -++ case KAB_FIELD_REVISION: -++// trigger an exception here -++m_bWasNull = true; -++return aRet; -++ default: -++ aQtName = aFields[nFieldNumber - KAB_DATA_FIELDS]->value(m_aKabAddressees[m_nRowPos]); -++ } -++// TDE address book currently does not use NULL values. -++// But it might do it someday -++ if (!aQtName.isNull()) -++ { -++ m_bWasNull = false; -++ aRet = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ return aRet; -++ } -++ } -++// Trigger an exception ? -++ m_bWasNull = true; -++ return aRet; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::getBoolean(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getBoolean", NULL); -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int8 SAL_CALL KabResultSet::getByte(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getByte", NULL); -++ -++ sal_Int8 nRet = 0; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++sal_Int16 SAL_CALL KabResultSet::getShort(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getShort", NULL); -++ -++ sal_Int16 nRet = 0; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::getInt(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getInt", NULL); -++ -++ sal_Int32 nRet = 0; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++sal_Int64 SAL_CALL KabResultSet::getLong(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getLong", NULL); -++ -++ return sal_Int64(); -++} -++// ------------------------------------------------------------------------- -++float SAL_CALL KabResultSet::getFloat(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getFloat", NULL); -++ -++ float nVal(0); -++ return nVal; -++} -++// ------------------------------------------------------------------------- -++double SAL_CALL KabResultSet::getDouble(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getDouble", NULL); -++ -++ double nRet = 0; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++Sequence< sal_Int8 > SAL_CALL KabResultSet::getBytes(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("", NULL); -++ -++ return Sequence< sal_Int8 >(); -++} -++// ------------------------------------------------------------------------- -++Date SAL_CALL KabResultSet::getDate(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getDate", NULL); -++ -++ Date aRet; -++ return aRet; -++} -++// ------------------------------------------------------------------------- -++Time SAL_CALL KabResultSet::getTime(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getTime", NULL); -++ -++ Time nRet; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++DateTime SAL_CALL KabResultSet::getTimestamp(sal_Int32 columnIndex) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ DateTime nRet; -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ -++ if (m_nRowPos != -1 && m_nRowPos != nAddressees && m_xMetaData.is()) -++ { -++ KabResultSetMetaData *pMeta = static_cast(m_xMetaData.get()); -++ sal_Int32 nFieldNumber = pMeta->fieldAtColumn(columnIndex); -++ -++ if (nFieldNumber == KAB_FIELD_REVISION) -++ { -++ TQDateTime nRevision(m_aKabAddressees[m_nRowPos].revision()); -++ -++ if (!nRevision.isNull()) -++ { -++ m_bWasNull = false; -++ nRet.Year = nRevision.date().year(); -++ nRet.Month = nRevision.date().month(); -++ nRet.Day = nRevision.date().day(); -++ nRet.Hours = nRevision.time().hour(); -++ nRet.Minutes = nRevision.time().minute(); -++ nRet.Seconds = nRevision.time().second(); -++ nRet.HundredthSeconds = nRevision.time().msec() / 10; -++ return nRet; -++ } -++ } -++ else { -++ ; -++ } -++// trigger an exception here -++ } -++// Trigger an exception ? -++ m_bWasNull = true; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++Reference< XInputStream > SAL_CALL KabResultSet::getBinaryStream(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getBinaryStream", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XInputStream > SAL_CALL KabResultSet::getCharacterStream(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getCharacterStream", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Any SAL_CALL KabResultSet::getObject(sal_Int32, const Reference< ::com::sun::star::container::XNameAccess >&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getObject", NULL); -++ -++ return Any(); -++} -++// ------------------------------------------------------------------------- -++Reference< XRef > SAL_CALL KabResultSet::getRef(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getRef", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XBlob > SAL_CALL KabResultSet::getBlob(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getBlob", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XClob > SAL_CALL KabResultSet::getClob(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getClob", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XArray > SAL_CALL KabResultSet::getArray(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getArray", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSetMetaData > SAL_CALL KabResultSet::getMetaData() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ if (!m_xMetaData.is()) -++ m_xMetaData = new KabResultSetMetaData(m_xStatement->getOwnConnection()); -++ -++ Reference< XResultSetMetaData > xMetaData = m_xMetaData.get(); -++ return xMetaData; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::isBeforeFirst() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ if (m_nRowPos == -1) -++ return sal_True; -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::isAfterLast() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (m_nRowPos == nAddressees) -++ return sal_True; -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::isFirst() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ if (m_nRowPos == 0) -++ return sal_True; -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::isLast() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (m_nRowPos == nAddressees - 1) -++ return sal_True; -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::beforeFirst() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // move before the first row -++ m_nRowPos = -1; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::afterLast() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // move after the last row -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ m_nRowPos = nAddressees; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::close() throw(SQLException, RuntimeException) -++{ -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ } -++ dispose(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::first() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (nAddressees == 0) -++ return sal_False; -++ -++ m_nRowPos = 0; -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::last() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (nAddressees == 0) -++ return sal_False; -++ -++ m_nRowPos = nAddressees - 1; -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::getRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return m_nRowPos; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::absolute(sal_Int32 row) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (row <= -1 || -++ row >= nAddressees) -++ return sal_False; -++ -++ m_nRowPos = row; -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::relative(sal_Int32 row) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return absolute(m_nRowPos + row); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::next() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return absolute(m_nRowPos + 1); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::previous() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return absolute(m_nRowPos - 1); -++} -++// ------------------------------------------------------------------------- -++Reference< XInterface > SAL_CALL KabResultSet::getStatement() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ Reference< XStatement > xStatement = m_xStatement.get(); -++ return xStatement; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::rowDeleted() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::rowInserted() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::rowUpdated() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::wasNull() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return m_bWasNull; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::cancel() throw(RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::clearWarnings() throw(SQLException, RuntimeException) -++{ -++} -++// ------------------------------------------------------------------------- -++Any SAL_CALL KabResultSet::getWarnings() throw(SQLException, RuntimeException) -++{ -++ return Any(); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::insertRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // you only have to implement this if you want to insert new rows -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // only when you allow updates -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::deleteRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::cancelRowUpdates() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::moveToInsertRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // only when you allow inserts -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::moveToCurrentRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateNull(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateBoolean(sal_Int32, sal_Bool) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateByte(sal_Int32, sal_Int8) throw(SQLException, RuntimeException) -++{ -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateShort(sal_Int32, sal_Int16) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateInt(sal_Int32, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateLong(sal_Int32, sal_Int64) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ----------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateFloat(sal_Int32, float) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateDouble(sal_Int32, double) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateString(sal_Int32, const ::rtl::OUString&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateBytes(sal_Int32, const Sequence< sal_Int8 >&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateDate(sal_Int32, const Date&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateTime(sal_Int32, const Time&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateTimestamp(sal_Int32, const DateTime&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateBinaryStream(sal_Int32, const Reference< XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateCharacterStream(sal_Int32, const Reference< XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::refreshRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateObject(sal_Int32, const Any&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateNumericObject(sal_Int32, const Any&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++// XRowLocate -++Any SAL_CALL KabResultSet::getBookmark() throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ -++ if (m_nRowPos != -1 && m_nRowPos != nAddressees) -++ { -++ TQString aQtName = m_aKabAddressees[m_nRowPos].uid(); -++ ::rtl::OUString sUniqueIdentifier = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ return makeAny(sUniqueIdentifier); -++ } -++ return Any(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::moveToBookmark(const Any& bookmark) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ ::rtl::OUString sBookmark = comphelper::getString(bookmark); -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ -++ for (sal_Int32 nRow = 0; nRow < nAddressees; nRow++) -++ { -++ TQString aQtName = m_aKabAddressees[nRow].uid(); -++ ::rtl::OUString sUniqueIdentifier = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ -++ if (sUniqueIdentifier == sBookmark) -++ { -++ m_nRowPos = nRow; -++ return sal_True; -++ } -++ } -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::moveRelativeToBookmark(const Any& bookmark, sal_Int32 rows) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nRowSave = m_nRowPos; -++ -++ if (moveToBookmark(bookmark)) -++ { -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ -++ m_nRowPos += rows; -++ -++ if (-1 < m_nRowPos && m_nRowPos < nAddressees) -++ return sal_True; -++ } -++ -++ m_nRowPos = nRowSave; -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::compareBookmarks(const Any& firstItem, const Any& secondItem) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ ::rtl::OUString sFirst = comphelper::getString(firstItem); -++ ::rtl::OUString sSecond = comphelper::getString(secondItem); -++ -++ if (sFirst < sSecond) -++ return CompareBookmark::LESS; -++ if (sFirst > sSecond) -++ return CompareBookmark::GREATER; -++ return CompareBookmark::EQUAL; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::hasOrderedBookmarks() throw( SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::hashBookmark(const Any& bookmark) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ ::rtl::OUString sBookmark = comphelper::getString(bookmark); -++ -++ return sBookmark.hashCode(); -++} -++// ------------------------------------------------------------------------- -++// XDeleteRows -++Sequence< sal_Int32 > SAL_CALL KabResultSet::deleteRows(const Sequence< Any >&) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return Sequence< sal_Int32 >(); -++} -++// ------------------------------------------------------------------------- -++IPropertyArrayHelper* KabResultSet::createArrayHelper() const -++{ -++ Sequence< Property > aProps(6); -++ Property* pProperties = aProps.getArray(); -++ sal_Int32 nPos = 0; -++ DECL_PROP1IMPL(CURSORNAME, ::rtl::OUString) PropertyAttribute::READONLY); -++ DECL_PROP0(FETCHDIRECTION, sal_Int32); -++ DECL_PROP0(FETCHSIZE, sal_Int32); -++ DECL_BOOL_PROP1IMPL(ISBOOKMARKABLE) PropertyAttribute::READONLY); -++ DECL_PROP1IMPL(RESULTSETCONCURRENCY,sal_Int32) PropertyAttribute::READONLY); -++ DECL_PROP1IMPL(RESULTSETTYPE, sal_Int32) PropertyAttribute::READONLY); -++ -++ return new OPropertyArrayHelper(aProps); -++} -++// ------------------------------------------------------------------------- -++IPropertyArrayHelper & KabResultSet::getInfoHelper() -++{ -++ return *static_cast(this)->getArrayHelper(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool KabResultSet::convertFastPropertyValue( -++ Any &, -++ Any &, -++ sal_Int32 nHandle, -++ const Any& ) -++ throw (::com::sun::star::lang::IllegalArgumentException) -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_ISBOOKMARKABLE: -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ throw ::com::sun::star::lang::IllegalArgumentException(); -++ break; -++ case PROPERTY_ID_FETCHDIRECTION: -++ case PROPERTY_ID_FETCHSIZE: -++ default: -++ ; -++ } -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::setFastPropertyValue_NoBroadcast( -++ sal_Int32 nHandle, -++ const Any& ) -++ throw (Exception) -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_ISBOOKMARKABLE: -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ throw Exception(); -++ break; -++ case PROPERTY_ID_FETCHDIRECTION: -++ break; -++ case PROPERTY_ID_FETCHSIZE: -++ break; -++ default: -++ ; -++ } -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::getFastPropertyValue( -++ Any& _rValue, -++ sal_Int32 nHandle) const -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_ISBOOKMARKABLE: -++ _rValue <<= (sal_Bool)sal_False; -++ break; -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ case PROPERTY_ID_FETCHDIRECTION: -++ case PROPERTY_ID_FETCHSIZE: -++ ; -++ } -++} -++// ----------------------------------------------------------------------------- -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KResultSet.hxx connectivity/source/drivers/tdeab/KResultSet.hxx -+--- connectivity/source/drivers/tdeab/KResultSet.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KResultSet.hxx 2011-08-17 14:26:47.312928966 -0500 -+@@ -0,0 +1,228 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_RESULTSET_HXX_ -++#define _CONNECTIVITY_KAB_RESULTSET_HXX_ -++ -++#include "KStatement.hxx" -++#include "KResultSetMetaData.hxx" -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ /* -++ ** KabResultSet -++ */ -++ typedef ::cppu::WeakComponentImplHelper12< ::com::sun::star::sdbc::XResultSet, -++ ::com::sun::star::sdbc::XRow, -++ ::com::sun::star::sdbc::XResultSetMetaDataSupplier, -++ ::com::sun::star::util::XCancellable, -++ ::com::sun::star::sdbc::XWarningsSupplier, -++ ::com::sun::star::sdbc::XResultSetUpdate, -++ ::com::sun::star::sdbc::XRowUpdate, -++ ::com::sun::star::sdbcx::XRowLocate, -++ ::com::sun::star::sdbcx::XDeleteRows, -++ ::com::sun::star::sdbc::XCloseable, -++ ::com::sun::star::sdbc::XColumnLocate, -++ ::com::sun::star::lang::XServiceInfo> KabResultSet_BASE; -++ -++ class KabResultSet : public comphelper::OBaseMutex, -++ public KabResultSet_BASE, -++ public ::cppu::OPropertySetHelper, -++ public comphelper::OPropertyArrayUsageHelper -++ { -++ protected: -++ ::rtl::Reference< KabCommonStatement > m_xStatement; // the statement that has created this result set -++ ::rtl::Reference< KabResultSetMetaData > m_xMetaData; // the description of the columns in this result set -++ ::KABC::Addressee::List m_aKabAddressees; // address book entries matching the query -++ sal_Int32 m_nRowPos; // the current row within the result set -++ sal_Bool m_bWasNull; // last entry retrieved from this result set was NULL -++ -++ // OPropertyArrayUsageHelper -++ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const; -++ -++ // OPropertySetHelper -++ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper(); -++ -++ virtual sal_Bool SAL_CALL convertFastPropertyValue( -++ ::com::sun::star::uno::Any & rConvertedValue, -++ ::com::sun::star::uno::Any & rOldValue, -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) -++ throw (::com::sun::star::lang::IllegalArgumentException); -++ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) -++ throw (::com::sun::star::uno::Exception); -++ virtual void SAL_CALL getFastPropertyValue( -++ ::com::sun::star::uno::Any& rValue, -++ sal_Int32 nHandle) const; -++ -++ // you can't delete objects of this type -++ virtual ~KabResultSet(); -++ -++ public: -++ DECLARE_SERVICE_INFO(); -++ -++ KabResultSet(KabCommonStatement *pStmt); -++ -++ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > operator *() -++ { -++ return ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >(*(KabResultSet_BASE*) this); -++ } -++ -++ void allKabAddressees(); -++ void someKabAddressees(const class KabCondition *pCondition); -++ void sortKabAddressees(const class KabOrder *pOrder); -++ -++ // ::cppu::OComponentHelper -++ virtual void SAL_CALL disposing(void); -++ -++ // XInterface -++ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL acquire() throw(); -++ virtual void SAL_CALL release() throw(); -++ -++ // XTypeProvider -++ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XPropertySet -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XResultSet -++ virtual sal_Bool SAL_CALL isBeforeFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isAfterLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL beforeFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL afterLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL first( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL last( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL next( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL previous( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL refreshRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL rowUpdated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL rowInserted( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL rowDeleted( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XRow -++ virtual sal_Bool SAL_CALL wasNull( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getString( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XResultSetMetaDataSupplier -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XCancellable -++ virtual void SAL_CALL cancel( ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XCloseable -++ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XWarningsSupplier -++ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XResultSetUpdate -++ virtual void SAL_CALL insertRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL deleteRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL cancelRowUpdates( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL moveToInsertRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL moveToCurrentRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ // XRowUpdate -++ virtual void SAL_CALL updateNull( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateBoolean( sal_Int32 columnIndex, sal_Bool x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateByte( sal_Int32 columnIndex, sal_Int8 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateShort( sal_Int32 columnIndex, sal_Int16 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateInt( sal_Int32 columnIndex, sal_Int32 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateLong( sal_Int32 columnIndex, sal_Int64 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateFloat( sal_Int32 columnIndex, float x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateDouble( sal_Int32 columnIndex, double x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateString( sal_Int32 columnIndex, const ::rtl::OUString& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateBytes( sal_Int32 columnIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateDate( sal_Int32 columnIndex, const ::com::sun::star::util::Date& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateTime( sal_Int32 columnIndex, const ::com::sun::star::util::Time& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateTimestamp( sal_Int32 columnIndex, const ::com::sun::star::util::DateTime& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateBinaryStream( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateCharacterStream( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Any& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateNumericObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Any& x, sal_Int32 scale ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XColumnLocate -++ virtual sal_Int32 SAL_CALL findColumn( const ::rtl::OUString& columnName ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XRowLocate -++ virtual ::com::sun::star::uno::Any SAL_CALL getBookmark( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL moveToBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL moveRelativeToBookmark( const ::com::sun::star::uno::Any& bookmark, sal_Int32 rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL compareBookmarks( const ::com::sun::star::uno::Any& firstItem, const ::com::sun::star::uno::Any& secondItem ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL hasOrderedBookmarks( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL hashBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XDeleteRows -++ virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL deleteRows( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_RESULTSET_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KResultSetMetaData.cxx connectivity/source/drivers/tdeab/KResultSetMetaData.cxx -+--- connectivity/source/drivers/tdeab/KResultSetMetaData.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KResultSetMetaData.cxx 2011-08-17 14:26:20.900896322 -0500 -+@@ -0,0 +1,191 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KResultSetMetaData.hxx" -++#include "kfields.hxx" -++#include "KDatabaseMetaData.hxx" -++#include -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::sdbc; -++ -++KabResultSetMetaData::KabResultSetMetaData(KabConnection* _pConnection) -++ : m_pConnection(_pConnection), -++ m_aKabFields() -++{ -++} -++// ------------------------------------------------------------------------- -++KabResultSetMetaData::~KabResultSetMetaData() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabResultSetMetaData::setKabFields(const ::rtl::Reference &xColumns) throw(SQLException) -++{ -++ OSQLColumns::Vector::const_iterator aIter; -++ static const ::rtl::OUString aName(::rtl::OUString::createFromAscii("Name")); -++ -++ for (aIter = xColumns->get().begin(); aIter != xColumns->get().end(); ++aIter) -++ { -++ ::rtl::OUString aFieldName; -++ sal_uInt32 nFieldNumber; -++ -++ (*aIter)->getPropertyValue(aName) >>= aFieldName; -++ nFieldNumber = findKabField(aFieldName); -++ m_aKabFields.push_back(nFieldNumber); -++ } -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getColumnDisplaySize(sal_Int32 column) throw(SQLException, RuntimeException) -++{ -++ return m_aKabFields[column - 1] < KAB_DATA_FIELDS? 20: 50; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getColumnType(sal_Int32 column) throw(SQLException, RuntimeException) -++{ -++ return m_aKabFields[column - 1] == KAB_FIELD_REVISION? DataType::TIMESTAMP: DataType::CHAR; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getColumnCount() throw(SQLException, RuntimeException) -++{ -++ return m_aKabFields.size(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isCaseSensitive(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getSchemaName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnName(sal_Int32 column) throw(SQLException, RuntimeException) -++{ -++ sal_uInt32 nFieldNumber = m_aKabFields[column - 1]; -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ TQString aQtName; -++ -++ switch (nFieldNumber) -++ { -++ case KAB_FIELD_REVISION: -++ aQtName = KABC::Addressee::revisionLabel(); -++ break; -++ default: -++ aQtName = aFields[nFieldNumber - KAB_DATA_FIELDS]->label(); -++ } -++ ::rtl::OUString aName((const sal_Unicode *) aQtName.ucs2()); -++ -++ return aName; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getTableName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return KabDatabaseMetaData::getAddressBookTableName(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getCatalogName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnTypeName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnLabel(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnServiceName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isCurrency(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isAutoIncrement(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isSigned(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getPrecision(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return 0; -++} -++// ----------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getScale(sal_Int32) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) -++{ -++ return 0; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::isNullable(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return (sal_Int32) sal_True; -++// TDE address book currently does not use NULL values. -++// But it might do it someday -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isSearchable(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isReadOnly(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isDefinitelyWritable(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isWritable(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KResultSetMetaData.hxx connectivity/source/drivers/tdeab/KResultSetMetaData.hxx -+--- connectivity/source/drivers/tdeab/KResultSetMetaData.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KResultSetMetaData.hxx 2011-08-17 14:26:13.350315217 -0500 -+@@ -0,0 +1,95 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ -++#define _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ -++ -++#include "KConnection.hxx" -++#include -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ /* -++ ** KabResultSetMetaData -++ */ -++ typedef ::cppu::WeakImplHelper1< ::com::sun::star::sdbc::XResultSetMetaData> KabResultSetMetaData_BASE; -++ -++ class KabResultSetMetaData : public KabResultSetMetaData_BASE -++ { -++ KabConnection* m_pConnection; -++ ::std::vector m_aKabFields; // for each selected column, contains the number -++ // of the corresponding KAddressBook field -++ -++ protected: -++ virtual ~KabResultSetMetaData(); -++ -++ public: -++ KabResultSetMetaData(KabConnection* _pConnection); -++ -++ // avoid ambigous cast error from the compiler -++ inline operator ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > () throw() -++ { return this; } -++ -++ void setKabFields( -++ const ::rtl::Reference &xColumns) throw(::com::sun::star::sdbc::SQLException); -++ inline sal_uInt32 fieldAtColumn(sal_Int32 columnIndex) const -++ { return m_aKabFields[columnIndex - 1]; } -++ -++ virtual sal_Int32 SAL_CALL getColumnCount( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isAutoIncrement( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isCaseSensitive( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isSearchable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isCurrency( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL isNullable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isSigned( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getColumnDisplaySize( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getColumnLabel( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getColumnName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSchemaName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getPrecision( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getScale( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getTableName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getCatalogName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getColumnType( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getColumnTypeName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isReadOnly( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isWritable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isDefinitelyWritable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getColumnServiceName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KServices.cxx connectivity/source/drivers/tdeab/KServices.cxx -+--- connectivity/source/drivers/tdeab/KServices.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KServices.cxx 2011-08-17 14:26:08.609950397 -0500 -+@@ -0,0 +1,180 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KDriver.hxx" -++#include -++#include -++ -++using namespace connectivity::kab; -++using ::rtl::OUString; -++using ::com::sun::star::uno::Reference; -++using ::com::sun::star::uno::Sequence; -++using ::com::sun::star::registry::XRegistryKey; -++using ::com::sun::star::lang::XSingleServiceFactory; -++using ::com::sun::star::lang::XMultiServiceFactory; -++ -++typedef Reference< XSingleServiceFactory > (SAL_CALL *createFactoryFunc) -++ ( -++ const Reference< XMultiServiceFactory > & rServiceManager, -++ const OUString & rComponentName, -++ ::cppu::ComponentInstantiation pCreateFunction, -++ const Sequence< OUString > & rServiceNames, -++ rtl_ModuleCount* _pTemp -++ ); -++ -++//*************************************************************************************** -++// -++// The following C Api must be provided! -++// It consists in three functions that must be exported by the module -++// -++ -++//--------------------------------------------------------------------------------------- -++void REGISTER_PROVIDER( -++ const OUString& aServiceImplName, -++ const Sequence< OUString>& Services, -++ const Reference< ::com::sun::star::registry::XRegistryKey > & xKey) -++{ -++ OUString aMainKeyName; -++ aMainKeyName = OUString::createFromAscii("/"); -++ aMainKeyName += aServiceImplName; -++ aMainKeyName += OUString::createFromAscii("/UNO/SERVICES"); -++ -++ Reference< ::com::sun::star::registry::XRegistryKey > xNewKey( xKey->createKey(aMainKeyName) ); -++ OSL_ENSURE(xNewKey.is(), "KAB::component_writeInfo : could not create a registry key !"); -++ -++ for (sal_Int32 i=0; icreateKey(Services[i]); -++} -++ -++ -++//--------------------------------------------------------------------------------------- -++struct ProviderRequest -++{ -++ Reference< XSingleServiceFactory > xRet; -++ Reference< XMultiServiceFactory > const xServiceManager; -++ OUString const sImplementationName; -++ -++ ProviderRequest( -++ void* pServiceManager, -++ sal_Char const* pImplementationName -++ ) -++ : xServiceManager(reinterpret_cast(pServiceManager)) -++ , sImplementationName(OUString::createFromAscii(pImplementationName)) -++ { -++ } -++ -++ inline -++ sal_Bool CREATE_PROVIDER( -++ const OUString& Implname, -++ const Sequence< OUString > & Services, -++ ::cppu::ComponentInstantiation Factory, -++ createFactoryFunc creator -++ ) -++ { -++ if (!xRet.is() && (Implname == sImplementationName)) -++ try -++ { -++ xRet = creator( xServiceManager, sImplementationName,Factory, Services,0); -++ } -++ catch(...) -++ { -++ } -++ return xRet.is(); -++ } -++ -++ void* getProvider() const { return xRet.get(); } -++}; -++ -++//--------------------------------------------------------------------------------------- -++ -++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment( -++ const sal_Char **ppEnvTypeName, -++ uno_Environment ** -++ ) -++{ -++ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -++} -++ -++//--------------------------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( -++ void*, -++ void* pRegistryKey -++ ) -++{ -++ if (pRegistryKey) -++ try -++ { -++ Reference< ::com::sun::star::registry::XRegistryKey > xKey(reinterpret_cast< ::com::sun::star::registry::XRegistryKey*>(pRegistryKey)); -++ -++ REGISTER_PROVIDER( -++ KabDriver::getImplementationName_Static(), -++ KabDriver::getSupportedServiceNames_Static(), xKey); -++ -++ return sal_True; -++ } -++ catch (::com::sun::star::registry::InvalidRegistryException& ) -++ { -++ OSL_ENSURE(sal_False, "KAB::component_writeInfo : could not create a registry key ! ## InvalidRegistryException !"); -++ } -++ -++ return sal_False; -++} -++ -++//--------------------------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory( -++ const sal_Char* pImplementationName, -++ void* pServiceManager, -++ void*) -++{ -++ void* pRet = 0; -++ if (pServiceManager) -++ { -++ ProviderRequest aReq(pServiceManager,pImplementationName); -++ -++ aReq.CREATE_PROVIDER( -++ KabDriver::getImplementationName_Static(), -++ KabDriver::getSupportedServiceNames_Static(), -++ &KabDriver::Create, -++ ::cppu::createSingleFactory) -++ ; -++ -++ if (aReq.xRet.is()) -++ aReq.xRet->acquire(); -++ -++ pRet = aReq.getProvider(); -++ } -++ -++ return pRet; -++}; -++ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KStatement.cxx connectivity/source/drivers/tdeab/KStatement.cxx -+--- connectivity/source/drivers/tdeab/KStatement.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KStatement.cxx 2011-08-17 14:26:01.429397755 -0500 -+@@ -0,0 +1,588 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KStatement.hxx" -++#include "KConnection.hxx" -++#include "KDriver.hxx" -++#include "KResultSet.hxx" -++#include "KResultSetMetaData.hxx" -++#include "kcondition.hxx" -++#include "korder.hxx" -++#include "TConnection.hxx" -++#include -++#include "resource/tdeab_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++ -++#if OSL_DEBUG_LEVEL > 0 -++# define OUtoCStr( x ) ( ::rtl::OUStringToOString ( (x), RTL_TEXTENCODING_ASCII_US).getStr()) -++#else /* OSL_DEBUG_LEVEL */ -++# define OUtoCStr( x ) ("dummy") -++#endif /* OSL_DEBUG_LEVEL */ -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::sdbcx; -++using namespace com::sun::star::container; -++using namespace com::sun::star::io; -++using namespace com::sun::star::util; -++ -++namespace -++{ -++ void lcl_throwError(sal_uInt16 _nErrorId) -++ { -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceString(_nErrorId) ); -++ ::dbtools::throwGenericSQLException(sError,NULL); -++ } -++} -++ -++IMPLEMENT_SERVICE_INFO(KabStatement, "com.sun.star.sdbc.drivers.KabStatement", "com.sun.star.sdbc.Statement"); -++//------------------------------------------------------------------------------ -++KabCommonStatement::KabCommonStatement(KabConnection* _pConnection ) -++ : KabCommonStatement_BASE(m_aMutex), -++ OPropertySetHelper(KabCommonStatement_BASE::rBHelper), -++ m_aParser(_pConnection->getDriver()->getMSFactory()), -++ m_aSQLIterator(_pConnection, _pConnection->createCatalog()->getTables(), m_aParser, NULL ), -++ m_pParseTree(NULL), -++ m_pConnection(_pConnection), -++ rBHelper(KabCommonStatement_BASE::rBHelper) -++{ -++ m_pConnection->acquire(); -++} -++// ----------------------------------------------------------------------------- -++KabCommonStatement::~KabCommonStatement() -++{ -++} -++// ----------------------------------------------------------------------------- -++void KabCommonStatement::disposing() -++{ -++ KabCommonStatement_BASE::disposing(); -++} -++// ----------------------------------------------------------------------------- -++void KabCommonStatement::resetParameters() const throw(::com::sun::star::sdbc::SQLException) -++{ -++ lcl_throwError(STR_PARA_ONLY_PREPARED); -++} -++// ----------------------------------------------------------------------------- -++void KabCommonStatement::getNextParameter(::rtl::OUString &) const throw(::com::sun::star::sdbc::SQLException) -++{ -++ lcl_throwError(STR_PARA_ONLY_PREPARED); -++} -++// ----------------------------------------------------------------------------- -++KabCondition *KabCommonStatement::analyseWhereClause(const OSQLParseNode *pParseNode) const throw(SQLException) -++{ -++ if (pParseNode->count() == 3) -++ { -++ const OSQLParseNode *pLeft = pParseNode->getChild(0), -++ *pMiddle = pParseNode->getChild(1), -++ *pRight = pParseNode->getChild(2); -++ -++ // WHERE ( ... ) ? -++ if (SQL_ISPUNCTUATION(pLeft, "(") && SQL_ISPUNCTUATION(pRight, ")")) -++ { -++ return analyseWhereClause(pMiddle); -++ } -++ else if (SQL_ISRULE(pParseNode, comparison_predicate)) -++ { -++ if (pLeft->isToken() && pRight->isToken()) -++ { -++ switch (pMiddle->getNodeType()) -++ { -++ case SQL_NODE_EQUAL: -++ // WHERE 0 = 1 -++ return new KabConditionConstant(pLeft->getTokenValue() == pRight->getTokenValue()); -++ -++ case SQL_NODE_NOTEQUAL: -++ // WHERE 0 <> 1 -++ // (might not be correct SQL... don't care, handling anyway) -++ return new KabConditionConstant(pLeft->getTokenValue() != pRight->getTokenValue()); -++ -++ default: -++ break; -++ } -++ } -++ else if (SQL_ISRULE(pLeft, column_ref)) -++ { -++ ::rtl::OUString sColumnName, -++ sTableRange; -++ -++ m_aSQLIterator.getColumnRange(pLeft, sColumnName, sTableRange); -++ -++ if (pRight->isToken() || SQL_ISRULE(pRight, parameter)) -++ { -++ ::rtl::OUString sMatchString; -++ -++ if (pRight->isToken()) // WHERE Name = 'Doe' -++ sMatchString = pRight->getTokenValue(); -++ else if (SQL_ISRULE(pRight, parameter)) // WHERE Name = ? -++ getNextParameter(sMatchString); -++ -++ switch (pMiddle->getNodeType()) -++ { -++ case SQL_NODE_EQUAL: -++ // WHERE Name = 'Smith' -++ return new KabConditionEqual(sColumnName, sMatchString); -++ -++ case SQL_NODE_NOTEQUAL: -++ // WHERE Name <> 'Jones' -++ return new KabConditionDifferent(sColumnName, sMatchString); -++ -++ default: -++ break; -++ } -++ } -++ } -++ } -++ else if (SQL_ISRULE(pParseNode, search_condition)) -++ { -++ if (SQL_ISTOKEN(pMiddle, OR)) -++ { -++ // WHERE Name = 'Smith' OR Name = 'Jones' -++ return new KabConditionOr( -++ analyseWhereClause(pLeft), -++ analyseWhereClause(pRight)); -++ } -++ } -++ else if (SQL_ISRULE(pParseNode, boolean_term)) -++ { -++ if (SQL_ISTOKEN(pMiddle, AND)) -++ { -++ // WHERE Name = 'Smith' AND "Given Name" = 'Peter' -++ return new KabConditionAnd( -++ analyseWhereClause(pLeft), -++ analyseWhereClause(pRight)); -++ } -++ } -++ } -++ else if (SQL_ISRULE(pParseNode, test_for_null) || SQL_ISRULE(pParseNode, like_predicate)) -++ { -++ const OSQLParseNode *pLeft = pParseNode->getChild(0); -++ const OSQLParseNode* pPart2 = pParseNode->getChild(1); -++ const OSQLParseNode *pMiddleLeft = pPart2->getChild(0), -++ *pMiddleRight = pPart2->getChild(1), -++ *pRight = pPart2->getChild(2); -++ -++ if (SQL_ISRULE(pParseNode, test_for_null)) -++ { -++ if (SQL_ISRULE(pLeft, column_ref) && -++ SQL_ISTOKEN(pMiddleLeft, IS) && -++ SQL_ISTOKEN(pRight, NULL)) -++ { -++ ::rtl::OUString sColumnName, -++ sTableRange; -++ -++ m_aSQLIterator.getColumnRange(pLeft, sColumnName, sTableRange); -++ -++ if (SQL_ISTOKEN(pMiddleRight, NOT)) -++ { -++ // WHERE "Mobile Phone" IS NOT NULL -++ return new KabConditionNotNull(sColumnName); -++ } -++ else -++ { -++ // WHERE "Mobile Phone" IS NULL -++ return new KabConditionNull(sColumnName); -++ } -++ } -++ } -++ else if (SQL_ISRULE(pParseNode, like_predicate)) -++ { -++ if (SQL_ISRULE(pLeft, column_ref)) -++ { -++ ::rtl::OUString sColumnName, -++ sTableRange; -++ -++ m_aSQLIterator.getColumnRange(pLeft, sColumnName, sTableRange); -++ -++ if (pMiddleRight->isToken() || SQL_ISRULE(pMiddleRight, parameter)) -++ { -++ ::rtl::OUString sMatchString; -++ -++ if (pMiddleRight->isToken()) // WHERE Name LIKE 'Sm%' -++ sMatchString = pMiddleRight->getTokenValue(); -++ else if (SQL_ISRULE(pMiddleRight, parameter)) // WHERE Name LIKE ? -++ getNextParameter(sMatchString); -++ -++ return new KabConditionSimilar(sColumnName, sMatchString); -++ } -++ } -++ } -++ } -++ -++ lcl_throwError(STR_QUERY_TOO_COMPLEX); -++ -++ // Unreachable: -++ OSL_ASSERT(false); -++ return 0; -++} -++// ----------------------------------------------------------------------------- -++KabOrder *KabCommonStatement::analyseOrderByClause(const OSQLParseNode *pParseNode) const throw(SQLException) -++{ -++ if (SQL_ISRULE(pParseNode, ordering_spec_commalist)) -++ { -++ KabComplexOrder *list = new KabComplexOrder(); -++ sal_uInt32 n = pParseNode->count(); -++ -++ // Iterate through the ordering columns -++ for (sal_uInt32 i = 0; i < n; i++) -++ { -++ list->addOrder -++ (analyseOrderByClause(pParseNode->getChild(i))); -++ } -++ -++ return list; -++ } -++ else if (SQL_ISRULE(pParseNode, ordering_spec)) -++ { -++ if (pParseNode->count() == 2) -++ { -++ OSQLParseNode* pColumnRef = pParseNode->getChild(0); -++ OSQLParseNode* pAscendingDescending = pParseNode->getChild(1); -++ -++ if (SQL_ISRULE(pColumnRef, column_ref)) -++ { -++ if (pColumnRef->count() == 3) -++ pColumnRef = pColumnRef->getChild(2); -++ -++ if (pColumnRef->count() == 1) -++ { -++ ::rtl::OUString sColumnName = -++ pColumnRef->getChild(0)->getTokenValue(); -++ sal_Bool bAscending = -++ SQL_ISTOKEN(pAscendingDescending, DESC)? -++ sal_False: -++ sal_True; -++ -++ return new KabSimpleOrder(sColumnName, bAscending); -++ } -++ } -++ } -++ } -++ lcl_throwError(STR_QUERY_TOO_COMPLEX); -++ // Unreachable: -++ OSL_ASSERT(false); -++ return 0; -++} -++//------------------------------------------------------------------------------ -++sal_Bool KabCommonStatement::isTableKnown(KabResultSet *pResult) const -++{ -++ // can handle requests like SELECT * FROM addresses addresses -++ // but cannot handle requests like SELECT * FROM addresses persons -++ if (m_aSQLIterator.getTables().size() != 1) -++ return sal_False; -++ -++ if (m_aSQLIterator.getTables().begin()->first != pResult->getMetaData()->getTableName(0)) -++ return sal_False; -++ -++ return sal_True; -++} -++//------------------------------------------------------------------------------ -++void KabCommonStatement::setKabFields(KabResultSet *pResult) const throw(SQLException) -++{ -++ ::rtl::Reference xColumns; // selected columns -++ KabResultSetMetaData *pMeta; // meta information - holds the list of KAddressBook fields -++ -++ xColumns = m_aSQLIterator.getSelectColumns(); -++ if (!xColumns.is()) -++ { -++ lcl_throwError(STR_INVALID_COLUMN_SELECTION); -++ } -++ pMeta = static_cast(pResult->getMetaData().get()); -++ pMeta->setKabFields(xColumns); -++} -++// ------------------------------------------------------------------------- -++void KabCommonStatement::selectAddressees(KabResultSet *pResult) const throw(SQLException) -++{ -++ const OSQLParseNode *pParseNode; -++ KabCondition *pCondition; -++ -++ pParseNode = m_aSQLIterator.getWhereTree(); -++ if (pParseNode != NULL) -++ { -++ if (SQL_ISRULE(pParseNode, where_clause)) -++ { -++ resetParameters(); -++ pParseNode = pParseNode->getChild(1); -++ pCondition = analyseWhereClause(pParseNode); -++ if (pCondition->isAlwaysTrue()) -++ pResult->allKabAddressees(); -++ else if (!pCondition->isAlwaysFalse()) -++ pResult->someKabAddressees(pCondition); -++ delete pCondition; -++ return; -++ } -++ } -++ -++ // no WHERE clause: get all rows -++ pResult->allKabAddressees(); -++} -++// ------------------------------------------------------------------------- -++void KabCommonStatement::sortAddressees(KabResultSet *pResult) const throw(SQLException) -++{ -++ const OSQLParseNode *pParseNode; -++ KabOrder *pOrder; -++ -++ pParseNode = m_aSQLIterator.getOrderTree(); -++ if (pParseNode != NULL) -++ { -++ if (SQL_ISRULE(pParseNode, opt_order_by_clause)) -++ { -++ pParseNode = pParseNode->getChild(2); -++ pOrder = analyseOrderByClause(pParseNode); -++ pResult->sortKabAddressees(pOrder); -++ delete pOrder; -++ } -++ } -++} -++//----------------------------------------------------------------------------- -++Any SAL_CALL KabCommonStatement::queryInterface( const Type & rType ) throw(RuntimeException) -++{ -++ Any aRet = KabCommonStatement_BASE::queryInterface(rType); -++ if (!aRet.hasValue()) -++ aRet = OPropertySetHelper::queryInterface(rType); -++ return aRet; -++} -++// ------------------------------------------------------------------------- -++Sequence< Type > SAL_CALL KabCommonStatement::getTypes( ) throw(RuntimeException) -++{ -++ ::cppu::OTypeCollection aTypes( ::getCppuType( (const Reference< XMultiPropertySet > *)0 ), -++ ::getCppuType( (const Reference< XFastPropertySet > *)0 ), -++ ::getCppuType( (const Reference< XPropertySet > *)0 )); -++ -++ return comphelper::concatSequences(aTypes.getTypes(),KabCommonStatement_BASE::getTypes()); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::cancel( ) throw(RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ // cancel the current sql statement -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::close( ) throw(SQLException, RuntimeException) -++{ -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ } -++ dispose(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabCommonStatement::execute( -++ const ::rtl::OUString& sql ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ Reference< XResultSet > xRS = executeQuery(sql); -++ -++ return xRS.is(); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabCommonStatement::executeQuery( -++ const ::rtl::OUString& sql ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++OSL_TRACE("TDE Address book - SQL Request: %s", OUtoCStr(sql)); -++ -++ KabResultSet* pResult = new KabResultSet(this); -++ Reference< XResultSet > xRS = pResult; -++ ::rtl::OUString aErr; -++ -++ m_pParseTree = m_aParser.parseTree(aErr, sql); -++ if (m_pParseTree == NULL) -++ throw SQLException(aErr, *this, aErr, 0, Any()); -++ -++ m_aSQLIterator.setParseTree(m_pParseTree); -++ m_aSQLIterator.traverseAll(); -++ switch (m_aSQLIterator.getStatementType()) -++ { -++ case SQL_STATEMENT_SELECT: -++ if (isTableKnown(pResult)) // FROM which table ? -++ { -++ setKabFields(pResult); // SELECT which columns ? -++ selectAddressees(pResult); // WHERE which condition ? -++ sortAddressees(pResult); // ORDER BY which columns ? -++// To be continued: DISTINCT -++// etc... -++ } -++ break; -++ -++ default: -++// To be continued: UPDATE -++// DELETE -++// etc... -++ lcl_throwError(STR_QUERY_TOO_COMPLEX); -++ } -++ -++ return xRS; -++} -++// ------------------------------------------------------------------------- -++Reference< XConnection > SAL_CALL KabCommonStatement::getConnection( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ // just return our connection here -++ return (Reference< XConnection >) m_pConnection; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabCommonStatement::executeUpdate( const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ // the return values gives information about how many rows are affected by executing the sql statement -++ return 0; -++} -++// ------------------------------------------------------------------------- -++Any SAL_CALL KabCommonStatement::getWarnings( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ return makeAny(m_aLastWarning); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::clearWarnings( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ m_aLastWarning = SQLWarning(); -++} -++// ------------------------------------------------------------------------- -++::cppu::IPropertyArrayHelper* KabCommonStatement::createArrayHelper( ) const -++{ -++ // this properties are defined by the service statement -++ // they must be in alphabetic order -++ Sequence< Property > aProps(10); -++ Property* pProperties = aProps.getArray(); -++ sal_Int32 nPos = 0; -++ DECL_PROP0(CURSORNAME, ::rtl::OUString); -++ DECL_BOOL_PROP0(ESCAPEPROCESSING); -++ DECL_PROP0(FETCHDIRECTION,sal_Int32); -++ DECL_PROP0(FETCHSIZE, sal_Int32); -++ DECL_PROP0(MAXFIELDSIZE,sal_Int32); -++ DECL_PROP0(MAXROWS, sal_Int32); -++ DECL_PROP0(QUERYTIMEOUT,sal_Int32); -++ DECL_PROP0(RESULTSETCONCURRENCY,sal_Int32); -++ DECL_PROP0(RESULTSETTYPE,sal_Int32); -++ DECL_BOOL_PROP0(USEBOOKMARKS); -++ -++ return new ::cppu::OPropertyArrayHelper(aProps); -++} -++// ------------------------------------------------------------------------- -++::cppu::IPropertyArrayHelper & KabCommonStatement::getInfoHelper() -++{ -++ return *const_cast(this)->getArrayHelper(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool KabCommonStatement::convertFastPropertyValue( -++ Any &, -++ Any &, -++ sal_Int32, -++ const Any&) throw (::com::sun::star::lang::IllegalArgumentException) -++{ -++ sal_Bool bConverted = sal_False; -++ // here we have to try to convert -++ return bConverted; -++} -++// ------------------------------------------------------------------------- -++void KabCommonStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any&) throw (Exception) -++{ -++ // set the value to whatever is nescessary -++ switch (nHandle) -++ { -++ case PROPERTY_ID_QUERYTIMEOUT: -++ case PROPERTY_ID_MAXFIELDSIZE: -++ case PROPERTY_ID_MAXROWS: -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ case PROPERTY_ID_FETCHDIRECTION: -++ case PROPERTY_ID_FETCHSIZE: -++ case PROPERTY_ID_ESCAPEPROCESSING: -++ case PROPERTY_ID_USEBOOKMARKS: -++ default: -++ ; -++ } -++} -++// ------------------------------------------------------------------------- -++void KabCommonStatement::getFastPropertyValue(Any&,sal_Int32 nHandle) const -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_QUERYTIMEOUT: -++ case PROPERTY_ID_MAXFIELDSIZE: -++ case PROPERTY_ID_MAXROWS: -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ case PROPERTY_ID_FETCHDIRECTION: -++ case PROPERTY_ID_FETCHSIZE: -++ case PROPERTY_ID_ESCAPEPROCESSING: -++ case PROPERTY_ID_USEBOOKMARKS: -++ default: -++ ; -++ } -++} -++// ----------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::acquire() throw() -++{ -++ KabCommonStatement_BASE::acquire(); -++} -++// ----------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::release() throw() -++{ -++ KabCommonStatement_BASE::release(); -++} -++// ----------------------------------------------------------------------------- -++Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL KabCommonStatement::getPropertySetInfo( ) throw(RuntimeException) -++{ -++ return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); -++} -++// ----------------------------------------------------------------------------- -++KabStatement::KabStatement(KabConnection* _pConnection) -++ : KabStatement_BASE(_pConnection) -++{ -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KStatement.hxx connectivity/source/drivers/tdeab/KStatement.hxx -+--- connectivity/source/drivers/tdeab/KStatement.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KStatement.hxx 2011-08-17 14:25:52.088678867 -0500 -+@@ -0,0 +1,174 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_STATEMENT_HXX_ -++#define _CONNECTIVITY_KAB_STATEMENT_HXX_ -++ -++#include "KConnection.hxx" -++#include -++#include "connectivity/sqliterator.hxx" -++#include "connectivity/sqlparse.hxx" -++#include -++#include -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ typedef ::cppu::WeakComponentImplHelper4< ::com::sun::star::sdbc::XStatement, -++ ::com::sun::star::sdbc::XWarningsSupplier, -++ ::com::sun::star::util::XCancellable, -++ ::com::sun::star::sdbc::XCloseable> KabCommonStatement_BASE; -++ -++ //************************************************************** -++ // Class KabCommonStatement -++ // is a base class for the normal statement and for the prepared statement -++ //************************************************************** -++ class KabCommonStatement : public comphelper::OBaseMutex, -++ public KabCommonStatement_BASE, -++ public ::cppu::OPropertySetHelper, -++ public comphelper::OPropertyArrayUsageHelper -++ -++ { -++ ::com::sun::star::sdbc::SQLWarning m_aLastWarning; -++ -++ protected: -++ ::std::list< ::rtl::OUString> m_aBatchList; -++ connectivity::OSQLParser m_aParser; -++ connectivity::OSQLParseTreeIterator m_aSQLIterator; -++ connectivity::OSQLParseNode* m_pParseTree; -++ KabConnection* m_pConnection; // The owning Connection object -++ -++ protected: -++ class KabCondition *analyseWhereClause( -++ const OSQLParseNode *pParseNode) const throw(::com::sun::star::sdbc::SQLException); -++ class KabOrder *analyseOrderByClause( -++ const OSQLParseNode *pParseNode) const throw(::com::sun::star::sdbc::SQLException); -++ sal_Bool isTableKnown(class KabResultSet *pResult) const; -++ void setKabFields(class KabResultSet *pResult) const throw(::com::sun::star::sdbc::SQLException); -++ void selectAddressees(KabResultSet *pResult) const throw(::com::sun::star::sdbc::SQLException); -++ void sortAddressees(KabResultSet *pResult) const throw(::com::sun::star::sdbc::SQLException); -++ -++ // OPropertyArrayUsageHelper -++ virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const; -++ -++ // OPropertySetHelper -++ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper(); -++ virtual sal_Bool SAL_CALL convertFastPropertyValue( -++ ::com::sun::star::uno::Any & rConvertedValue, -++ ::com::sun::star::uno::Any & rOldValue, -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::lang::IllegalArgumentException); -++ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::uno::Exception); -++ virtual void SAL_CALL getFastPropertyValue( -++ ::com::sun::star::uno::Any& rValue, -++ sal_Int32 nHandle) const; -++ -++ virtual void resetParameters() const throw(::com::sun::star::sdbc::SQLException); -++ virtual void getNextParameter(::rtl::OUString &rParameter) const throw(::com::sun::star::sdbc::SQLException); -++ virtual ~KabCommonStatement(); -++ -++ public: -++ ::cppu::OBroadcastHelper& rBHelper; -++ -++ KabCommonStatement(KabConnection *_pConnection); -++ using KabCommonStatement_BASE::operator ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >; -++ -++ // OComponentHelper -++ virtual void SAL_CALL disposing(); -++ -++ // XInterface -++ virtual void SAL_CALL release() throw(); -++ virtual void SAL_CALL acquire() throw(); -++ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( -++ const ::com::sun::star::uno::Type & rType -++ ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XTypeProvider -++ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( -++ ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XPropertySet -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( -++ ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XStatement -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL executeQuery( -++ const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL executeUpdate( -++ const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL execute( -++ const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( -++ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XWarningsSupplier -++ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( -++ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL clearWarnings( -++ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XCancellable -++ virtual void SAL_CALL cancel( -++ ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XCloseable -++ virtual void SAL_CALL close( -++ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // other methods -++ inline KabConnection* getOwnConnection() const { return m_pConnection; } -++ }; -++ -++ //************************************************************** -++ // Class KabStatement -++ //************************************************************** -++ typedef ::cppu::ImplInheritanceHelper1< -++ KabCommonStatement, ::com::sun::star::lang::XServiceInfo > KabStatement_BASE; -++ -++ class KabStatement : public KabStatement_BASE -++ { -++ protected: -++ virtual ~KabStatement() { } -++ -++ public: -++ KabStatement(KabConnection* _pConnection); -++ DECLARE_SERVICE_INFO(); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_STATEMENT_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KTable.cxx connectivity/source/drivers/tdeab/KTable.cxx -+--- connectivity/source/drivers/tdeab/KTable.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KTable.cxx 2011-08-17 14:25:28.396855433 -0500 -+@@ -0,0 +1,100 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KTable.hxx" -++#include "KTables.hxx" -++#include "KColumns.hxx" -++#include "KCatalog.hxx" -++ -++using namespace connectivity::kab; -++using namespace connectivity; -++using namespace ::comphelper; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::beans; -++using namespace ::com::sun::star::sdbcx; -++using namespace ::com::sun::star::sdbc; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++ -++// ------------------------------------------------------------------------- -++KabTable::KabTable( sdbcx::OCollection* _pTables, KabConnection* _pConnection) -++ : KabTable_TYPEDEF(_pTables, sal_True), -++ m_pConnection(_pConnection) -++{ -++ construct(); -++} -++// ------------------------------------------------------------------------- -++KabTable::KabTable( sdbcx::OCollection* _pTables, -++ KabConnection* _pConnection, -++ const ::rtl::OUString& _Name, -++ const ::rtl::OUString& _Type, -++ const ::rtl::OUString& _Description , -++ const ::rtl::OUString& _SchemaName, -++ const ::rtl::OUString& _CatalogName -++ ) : KabTable_TYPEDEF(_pTables,sal_True, -++ _Name, -++ _Type, -++ _Description, -++ _SchemaName, -++ _CatalogName), -++ m_pConnection(_pConnection) -++{ -++ construct(); -++} -++// ------------------------------------------------------------------------- -++void KabTable::refreshColumns() -++{ -++ TStringVector aVector; -++ -++ if (!isNew()) -++ { -++ Reference< XResultSet > xResult = m_pConnection->getMetaData()->getColumns( -++ Any(), -++ m_SchemaName, -++ m_Name, -++ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%"))); -++ -++ if (xResult.is()) -++ { -++ Reference< XRow > xRow(xResult, UNO_QUERY); -++ while (xResult->next()) -++ aVector.push_back(xRow->getString(4)); -++ } -++ } -++ -++ if (m_pColumns) -++ m_pColumns->reFill(aVector); -++ else -++ m_pColumns = new KabColumns(this,m_aMutex,aVector); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KTable.hxx connectivity/source/drivers/tdeab/KTable.hxx -+--- connectivity/source/drivers/tdeab/KTable.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KTable.hxx 2011-08-17 14:25:22.436396680 -0500 -+@@ -0,0 +1,72 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_TABLE_HXX_ -++#define _CONNECTIVITY_KAB_TABLE_HXX_ -++ -++#include "KConnection.hxx" -++#include "connectivity/sdbcx/VTable.hxx" -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ typedef connectivity::sdbcx::OTable KabTable_TYPEDEF; -++ -++ ::rtl::OUString getTypeString(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xColProp); -++ -++ class KabTable : public KabTable_TYPEDEF -++ { -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; -++ KabConnection* m_pConnection; -++ -++ public: -++ KabTable( sdbcx::OCollection* _pTables, KabConnection* _pConnection); -++ KabTable( sdbcx::OCollection* _pTables, -++ KabConnection* _pConnection, -++ const ::rtl::OUString& _Name, -++ const ::rtl::OUString& _Type, -++ const ::rtl::OUString& _Description = ::rtl::OUString(), -++ const ::rtl::OUString& _SchemaName = ::rtl::OUString(), -++ const ::rtl::OUString& _CatalogName = ::rtl::OUString() -++ ); -++ -++ KabConnection* getConnection() { return m_pConnection;} -++ -++ virtual void refreshColumns(); -++ -++ ::rtl::OUString getTableName() const { return m_Name; } -++ ::rtl::OUString getSchema() const { return m_SchemaName; } -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_TABLE_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KTables.cxx connectivity/source/drivers/tdeab/KTables.cxx -+--- connectivity/source/drivers/tdeab/KTables.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KTables.cxx 2011-08-17 14:25:16.415933304 -0500 -+@@ -0,0 +1,94 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KTables.hxx" -++#include "KTable.hxx" -++#include "KCatalog.hxx" -++#include "KConnection.hxx" -++#include -++ -++using namespace connectivity::kab; -++using namespace connectivity; -++using namespace ::comphelper; -++using namespace ::cppu; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::beans; -++using namespace ::com::sun::star::sdbcx; -++using namespace ::com::sun::star::sdbc; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++ -++sdbcx::ObjectType KabTables::createObject(const ::rtl::OUString& _rName) -++{ -++ ::rtl::OUString aName,aSchema; -++ aSchema = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")); -++ aName = _rName; -++ -++ Sequence< ::rtl::OUString > aTypes(1); -++ aTypes[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")); -++ ::rtl::OUString sEmpty; -++ -++ Reference< XResultSet > xResult = m_xMetaData->getTables(Any(), aSchema, aName, aTypes); -++ -++ sdbcx::ObjectType xRet = NULL; -++ if (xResult.is()) -++ { -++ Reference< XRow > xRow(xResult, UNO_QUERY); -++ if (xResult->next()) // there can be only one table with this name -++ { -++ KabTable* pRet = new KabTable( -++ this, -++ static_cast(m_rParent).getConnection(), -++ aName, -++ xRow->getString(4), -++ xRow->getString(5), -++ sEmpty); -++ xRet = pRet; -++ } -++ } -++ ::comphelper::disposeComponent(xResult); -++ -++ return xRet; -++} -++// ------------------------------------------------------------------------- -++void KabTables::impl_refresh( ) throw(RuntimeException) -++{ -++ static_cast(m_rParent).refreshTables(); -++} -++// ------------------------------------------------------------------------- -++void KabTables::disposing(void) -++{ -++m_xMetaData.clear(); -++ OCollection::disposing(); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KTables.hxx connectivity/source/drivers/tdeab/KTables.hxx -+--- connectivity/source/drivers/tdeab/KTables.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KTables.hxx 2011-08-17 14:24:50.933971998 -0500 -+@@ -0,0 +1,65 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_TABLES_HXX_ -++#define _CONNECTIVITY_KAB_TABLES_HXX_ -++ -++#include "connectivity/sdbcx/VCollection.hxx" -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabTables : public sdbcx::OCollection -++ { -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; -++ -++ protected: -++ virtual sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); -++ virtual void impl_refresh() throw(::com::sun::star::uno::RuntimeException); -++ -++ public: -++ KabTables( -++ const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rMetaData, -++ ::cppu::OWeakObject& _rParent, -++ ::osl::Mutex& _rMutex, -++ const TStringVector &_rVector) -++ : sdbcx::OCollection(_rParent,sal_True,_rMutex,_rVector), -++ m_xMetaData(_rMetaData) -++ { } -++ -++ virtual void SAL_CALL disposing(void); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_TABLES_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/makefile.mk connectivity/source/drivers/tdeab/makefile.mk -+--- connectivity/source/drivers/tdeab/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/makefile.mk 2011-08-17 14:24:11.740955243 -0500 -+@@ -0,0 +1,139 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/..$/.. -++PRJINC=..$/.. -++PRJNAME=connectivity -++TARGET=tdeab -++TARGET2=$(TARGET)drv -++ -++ENABLE_EXCEPTIONS=TRUE -++VISIBILITY_HIDDEN=TRUE -++ -++# --- Settings ---------------------------------- -++ -++.INCLUDE : $(PRJ)$/makefile.pmk -++.INCLUDE : $(PRJ)$/version.mk -++ -++.IF "$(GUI)" == "UNX" -++.IF "$(ENABLE_TDEAB)" == "TRUE" -++ -++CFLAGS+=$(TDE_CFLAGS) -++ -++.IF "$(TDE_ROOT)"!="" -++EXTRALIBPATHS+=-L$(TDE_ROOT)$/lib -++.ENDIF -++ -++# === TDEAB base library ========================== -++ -++# --- Files ------------------------------------- -++ -++SLOFILES= \ -++ $(SLO)$/KDriver.obj \ -++ $(SLO)$/KServices.obj -++ -++DEPOBJFILES= \ -++ $(SLO2FILES) -++ -++# --- Library ----------------------------------- -++ -++SHL1VERSIONMAP=$(SOLARENV)/src/component.map -++ -++SHL1TARGET= $(TARGET)$(TDEAB_MAJOR) -++SHL1OBJS=$(SLOFILES) -++SHL1STDLIBS=\ -++ $(CPPULIB) \ -++ $(CPPUHELPERLIB) \ -++ $(DBTOOLSLIB) \ -++ $(SALLIB) \ -++ $(SALHELPERLIB) -++ -++SHL1DEPN= -++SHL1IMPLIB= i$(TARGET) -++ -++SHL1DEF= $(MISC)$/$(SHL1TARGET).def -++ -++DEF1NAME= $(SHL1TARGET) -++ -++# === TDEAB impl library ========================== -++ -++# --- Files ------------------------------------- -++ -++SLO2FILES=\ -++ $(SLO)$/KColumns.obj \ -++ $(SLO)$/KTable.obj \ -++ $(SLO)$/KTables.obj \ -++ $(SLO)$/KCatalog.obj \ -++ $(SLO)$/KResultSet.obj \ -++ $(SLO)$/KStatement.obj \ -++ $(SLO)$/KPreparedStatement.obj \ -++ $(SLO)$/KDatabaseMetaData.obj \ -++ $(SLO)$/KConnection.obj \ -++ $(SLO)$/KResultSetMetaData.obj \ -++ $(SLO)$/kcondition.obj \ -++ $(SLO)$/korder.obj \ -++ $(SLO)$/kfields.obj \ -++ $(SLO)$/TDEInit.obj -++ -++TDEAB_LIB=$(TDE_LIBS) -lkabc -++ -++# --- Library ----------------------------------- -++ -++SHL2VERSIONMAP=$(TARGET2).map -++ -++SHL2TARGET= $(TARGET2)$(TDEAB_MAJOR) -++SHL2OBJS=$(SLO2FILES) -++SHL2LINKFLAGS+=$(TDEAB_LIB) -++SHL2STDLIBS=\ -++ $(CPPULIB) \ -++ $(CPPUHELPERLIB) \ -++ $(SALLIB) \ -++ $(SALHELPERLIB) \ -++ $(DBTOOLSLIB) \ -++ $(COMPHELPERLIB) -++ -++SHL2DEPN= -++SHL2IMPLIB= i$(TARGET2) -++ -++SHL2DEF= $(MISC)$/$(SHL2TARGET).def -++ -++DEF2NAME= $(SHL2TARGET) -++ -++# --- Targets ----------------------------------- -++.ELSE # "$(ENABLE_TDEAB)" == "TRUE" -++dummy: -++ @echo TDE Addressbook disabled - nothing to build -++.ENDIF -++ -++.ELSE # "$(GUI)" == "UNX" -++dummy: -++ @echo "Nothing to build for GUI $(GUI)" -++.ENDIF -++ -++.INCLUDE : $(PRJ)$/target.pmk -++ -+diff -urN connectivity/source/drivers/tdeab/tdeabdrv.map connectivity/source/drivers/tdeab/tdeabdrv.map -+--- connectivity/source/drivers/tdeab/tdeabdrv.map 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/tdeabdrv.map 2011-08-17 14:25:00.664720964 -0500 -+@@ -0,0 +1,9 @@ -++UDK_3_0_0 { -++ global: -++ createKabConnection; -++ initKApplication; -++ shutdownKApplication; -++ matchTDEVersion; -++ local: -++ *; -++}; -+diff -urN connectivity/source/drivers/tdeab/tdeab.xcu connectivity/source/drivers/tdeab/tdeab.xcu -+--- connectivity/source/drivers/tdeab/tdeab.xcu 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/tdeab.xcu 2011-08-17 14:29:58.077608095 -0500 -+@@ -0,0 +1,47 @@ -++ -++ -++ -++ -++ -++ -++ com.sun.star.comp.sdbc.kab.Driver -++ -++ -++ TDE Address Book -++ -++ -++ -++ -++ true -++ -++ -++ -++ -++ -++ -+diff -urN connectivity/source/drivers/tdeab/tdeab.xml connectivity/source/drivers/tdeab/tdeab.xml -+--- connectivity/source/drivers/tdeab/tdeab.xml 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/tdeab.xml 2011-08-17 14:29:44.246543923 -0500 -+@@ -0,0 +1,77 @@ -++ -++ -++ -++ kab1 -++ -++ Eric Bischoff -++ com.sun.star.comp.sdbc.kab.Driver -++ This library implements the database driver for TDE address book formats. -++ com.sun.star.loader.SharedLibrary -++ c++ -++ -++ com.sun.star.sdbc.Driver -++ ... -++ -++ cppuhelper -++ cppu -++ sal -++ -++ cppuhelper -++ cppu1 -++ sal1 -++ -++ com.sun.star.registry.XRegistryKey -++ com.sun.star.util.XCancellable -++ com.sun.star.util.XNumberFormatter -++ com.sun.star.uno.TypeClass -++ com.sun.star.uno.XWeak -++ com.sun.star.uno.XAggregation -++ com.sun.star.uno.XComponentContext -++ com.sun.star.beans.PropertyAttribute -++ com.sun.star.beans.XPropertyState -++ com.sun.star.beans.XPropertySet -++ com.sun.star.beans.PropertyValue -++ com.sun.star.beans.XMultiPropertySet -++ com.sun.star.beans.XFastPropertySet -++ com.sun.star.lang.XSingleServiceFactory -++ com.sun.star.lang.XTypeProvider -++ com.sun.star.lang.XSingleComponentFactory -++ com.sun.star.lang.EventObject -++ com.sun.star.lang.XComponent -++ com.sun.star.lang.IllegalArgumentException -++ com.sun.star.lang.DisposedException -++ com.sun.star.lang.XMultiServiceFactory -++ com.sun.star.lang.XServiceInfo -++ com.sun.star.lang.XUnoTunnel -++ com.sun.star.java.XJavaThreadRegister_11 -++ com.sun.star.java.XJavaVM -++ com.sun.star.sdbc.FetchDirection -++ com.sun.star.sdbc.XConnection -++ com.sun.star.sdbc.XStatement -++ com.sun.star.sdbc.XResultSet -++ com.sun.star.sdbc.XResultSetMetaDataSupplier -++ com.sun.star.sdbc.XColumnLocate -++ com.sun.star.sdbc.XResultSetUpdate -++ com.sun.star.sdbc.XWarningsSupplier -++ com.sun.star.sdbc.XRowUpdate -++ com.sun.star.sdbc.XMultipleResults -++ com.sun.star.sdbc.XBatchExecution -++ com.sun.star.sdbc.XPreparedBatchExecution -++ com.sun.star.sdbc.XParameters -++ com.sun.star.sdbc.XOutParameters -++ com.sun.star.sdbc.DriverPropertyInfo -++ com.sun.star.sdbc.SQLWarning -++ com.sun.star.sdbc.XRow -++ com.sun.star.sdbc.ColumnSearch -++ com.sun.star.sdbc.ColumnValue -++ com.sun.star.sdbc.DataType -++ com.sun.star.sdbc.XDriver -++ com.sun.star.sdbc.TransactionIsolation -++ com.sun.star.sdbc.ResultSetType -++ com.sun.star.sdbc.ResultSetConcurrency -++ com.sun.star.sdbcx.XRowLocate -++ com.sun.star.sdbcx.XDeleteRows -++ com.sun.star.sdbcx.CompareBookmark -++ com.sun.star.sdb.XColumnUpdate -++ com.sun.star.sdb.XColumn -++ -+diff -urN connectivity/source/drivers/tdeab/TDEInit.cxx connectivity/source/drivers/tdeab/TDEInit.cxx -+--- connectivity/source/drivers/tdeab/TDEInit.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/TDEInit.cxx 2011-08-17 14:28:21.700192397 -0500 -+@@ -0,0 +1,158 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++#include "TDEInit.h" -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ // =============================================================== -++ // = TDEInit -++ // =============================================================== -++ class TDEInit -++ { -++ private: -++ /// TDE application if we own it -++ static KApplication* s_pKApplication; -++ static bool s_bDidInsertCatalogue; -++ -++ public: -++ static void Init(); -++ static void Shutdown(); -++ }; -++ -++ // --------------------------------------------------------------- -++ KApplication* TDEInit::s_pKApplication = NULL; -++ bool TDEInit::s_bDidInsertCatalogue = false; -++ -++ // --------------------------------------------------------------- -++ void TDEInit::Init() -++ { -++ // TODO: All this is not thread-safe -++ -++ // we create a TDE application only if it is not already done -++ if (KApplication::kApplication() == NULL) -++ { -++ OSL_ENSURE(s_pKApplication == NULL, "TDEInit::Init: inconsistency in the application pointers!"); -++ -++ char *kabargs[1] = {(char*)"libkab1"}; -++ KCmdLineArgs::init(1, kabargs, "KAddressBook", *kabargs, "Address Book driver", KAB_DRIVER_VERSION); -++ -++ s_pKApplication = new KApplication(false, false); -++ } -++ -++ // set language -++ rtl_Locale *pProcessLocale; -++ osl_getProcessLocale(&pProcessLocale); -++ // sal_Unicode and TQChar are (currently) both 16 bits characters -++ TQString aLanguage( -++ (const TQChar *) pProcessLocale->Language->buffer, -++ (int) pProcessLocale->Language->length); -++ KGlobal::locale()->setLanguage(aLanguage); -++ -++ // load TDE address book's localized messages -++ KGlobal::locale()->insertCatalogue("kaddressbook"); -++ s_bDidInsertCatalogue = true; -++ } -++ -++ // --------------------------------------------------------------- -++ void TDEInit::Shutdown() -++ { -++ if ( s_bDidInsertCatalogue ) -++ // this guard is necessary, since TDE 3.3 seems to crash if we remove a catalogue -++ // which we did not previously insert -++ KGlobal::locale()->removeCatalogue("kaddressbook"); -++ -++ if ( s_pKApplication != NULL ) -++ { -++ delete s_pKApplication; -++ s_pKApplication = NULL; -++ } -++ } -++ } -++} -++ -++// ======================================================================= -++namespace -++{ -++ double normalizeVersion( unsigned int major, unsigned int minor ) -++ { -++ return major + 1.0 * minor / 1000; -++ } -++} -++ -++// ----------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL initKApplication() -++{ -++ ::connectivity::kab::TDEInit::Init(); -++} -++ -++// ----------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL shutdownKApplication() -++{ -++ ::connectivity::kab::TDEInit::Shutdown(); -++} -++// ----------------------------------------------------------------------- -++/** checks whether the TDE version on the system we're running at is supported -++ by the driver -++ -++ Has to be called before any other code from this library, in particular, -++ it has to be called before initKApplication() -++ -++ If this function returns 0, then no other code from this library -++ has to be called, else the results are unpredictable. -++ -++ @return -++
  • 0 if the TDE version is supportednon
  • -++
  • a negative value if the version is too old
  • -++
  • a positive value if the version is too new to know whether it works with this driver
  • -++
-++ -++ #i60062# / 2006-01-06 / frank.schoenheit@sun.com -++*/ -++extern "C" SAL_DLLPUBLIC_EXPORT int SAL_CALL matchTDEVersion() -++{ -++ double nMinVersion = normalizeVersion( MIN_TDE_VERSION_MAJOR, MIN_TDE_VERSION_MINOR ); -++ double nCurVersion = normalizeVersion( ::KDE::versionMajor(), ::KDE::versionMinor() ); -++ double nMaxVersion = normalizeVersion( MAX_TDE_VERSION_MAJOR, MAX_TDE_VERSION_MINOR ); -++ -++ if ( nCurVersion < nMinVersion ) -++ return -1; -++ if ( nCurVersion > nMaxVersion ) -++ return 1; -++ -++ return 0; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/TDEInit.h connectivity/source/drivers/tdeab/TDEInit.h -+--- connectivity/source/drivers/tdeab/TDEInit.h 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/TDEInit.h 2011-08-17 14:28:13.719578294 -0500 -+@@ -0,0 +1,47 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef CONNECTIVITY_KAB_TDEINIT_H -++#define CONNECTIVITY_KAB_TDEINIT_H -++ -++// the address book driver's version -++#define KAB_DRIVER_VERSION "0.2" -++#define KAB_DRIVER_VERSION_MAJOR 0 -++#define KAB_DRIVER_VERSION_MINOR 2 -++ -++// the minimum TDE version which is required at runtime -++#define MIN_TDE_VERSION_MAJOR 3 -++#define MIN_TDE_VERSION_MINOR 2 -++ -++#define MAX_TDE_VERSION_MAJOR 3 -++#define MAX_TDE_VERSION_MINOR 6 -++ -++ -++#endif // CONNECTIVITY_KAB_TDEINIT_H -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/makefile.mk fpicker/source/unx/tde/makefile.mk -+--- fpicker/source/unx/tde/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/makefile.mk 2011-08-17 14:08:00.486552458 -0500 -+@@ -0,0 +1,75 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2010 Novell, Inc. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/..$/.. -++ -++PRJNAME=fpicker -++TARGET=tdefilepicker -++LIBTARGET=NO -++ENABLE_EXCEPTIONS=TRUE -++#COMP1TYPELIST=$(TARGET) -++#COMPRDB=$(SOLARBINDIR)$/types.rdb -++ -++# --- Settings ----------------------------------------------------- -++ -++.INCLUDE : settings.mk -++ -++# ------------------------------------------------------------------ -++ -++.IF "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -++ -++dummy: -++ @echo "Nothing to build. GUIBASE == $(GUIBASE), ENABLE_TDE is not set" -++ -++.ELSE # we build for TDE -++ -++CFLAGS+= $(TDE_CFLAGS) -++ -++# --- Files -------------------------------------------------------- -++ -++SLOFILES =\ -++ $(SLO)$/tdecommandthread.obj \ -++ $(SLO)$/tdefilepicker.obj \ -++ $(SLO)$/tdefilepicker.moc.obj \ -++ $(SLO)$/tdefpmain.obj \ -++ $(SLO)$/tdemodalityfilter.obj -++ -++APP1TARGET=$(TARGET) -++APP1OBJS=$(SLOFILES) -++APP1RPATH=BRAND -++APP1LINKFLAGS=$(TDE_LIBS) -lkio -lX11 -++APP1STDLIBS=$(SALLIB) -++ -++.ENDIF # "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -++ -++# --- Targets ------------------------------------------------------ -++ -++.INCLUDE : target.mk -++ -++$(MISC)$/tdefilepicker.moc.cxx : tdefilepicker.hxx -++ $(MOC) $< -o $@ -+diff -urN fpicker/source/unx/tde/tdecommandthread.cxx fpicker/source/unx/tde/tdecommandthread.cxx -+--- fpicker/source/unx/tde/tdecommandthread.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdecommandthread.cxx 2011-08-17 14:05:05.983187311 -0500 -+@@ -0,0 +1,178 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++ -++#include -++ -++#include -++ -++#include -++ -++////////////////////////////////////////////////////////////////////////// -++// CommandEvent -++////////////////////////////////////////////////////////////////////////// -++ -++TDECommandEvent::TDECommandEvent( const TQString &qCommand, TQStringList *pStringList ) -++ : TQCustomEvent( TypeId, pStringList ), -++ m_eCommand( Unknown ) -++{ -++ struct { -++ const char *pName; -++ CommandEventType eType; -++ } *pIdx, pMapping[] = -++ { -++ { "appendControl", AppendControl }, -++ { "enableControl", EnableControl }, -++ { "getValue", GetValue }, -++ { "setValue", SetValue }, -++ { "appendFilter", AppendFilter }, -++ { "appendFilterGroup", AppendFilterGroup }, -++ { "getCurrentFilter", GetCurrentFilter }, -++ { "setCurrentFilter", SetCurrentFilter }, -++ { "getDirectory", GetDirectory }, -++ { "setDirectory", SetDirectory }, -++ { "getFiles", GetFiles }, -++ { "setTitle", SetTitle }, -++ { "setType", SetType }, -++ { "setDefaultName", SetDefaultName }, -++ { "setMultiSelection", SetMultiSelection }, -++ { "exec", Exec }, -++ { 0, Unknown } -++ }; -++ -++ for ( pIdx = pMapping; pIdx->pName && qCommand != pIdx->pName; ++pIdx ) -++ ; -++ -++ m_eCommand = pIdx->eType; -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// CommandThread -++////////////////////////////////////////////////////////////////////////// -++ -++TDECommandThread::TDECommandThread( TQWidget *pObject ) -++ : m_pObject( pObject ) -++{ -++} -++ -++TDECommandThread::~TDECommandThread() -++{ -++} -++ -++void TDECommandThread::run() -++{ -++ TQTextIStream qStream( stdin ); -++ qStream.setEncoding( TQTextStream::UnicodeUTF8 ); -++ -++ TQString qLine; -++ bool bQuit = false; -++ while ( !bQuit && !qStream.atEnd() ) -++ { -++ qLine = qStream.readLine(); -++ handleCommand( qLine, bQuit ); -++ } -++} -++ -++void TDECommandThread::handleCommand( const TQString &rString, bool &bQuit ) -++{ -++ TQMutexLocker qMutexLocker( &m_aMutex ); -++ -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "tdefilepicker received: " << rString.latin1() << ::std::endl; -++#endif -++ -++ bQuit = false; -++ TQStringList *pTokens = tokenize( rString ); -++ -++ if ( !pTokens ) -++ return; -++ if ( pTokens->empty() ) -++ { -++ delete pTokens, pTokens = NULL; -++ return; -++ } -++ -++ TQString qCommand = pTokens->front(); -++ pTokens->pop_front(); -++ -++ if ( qCommand == "exit" ) -++ { -++ bQuit = true; -++ kapp->exit(); -++ kapp->wakeUpGuiThread(); -++ } -++ else -++ kapp->postEvent( m_pObject, new TDECommandEvent( qCommand, pTokens ) ); -++} -++ -++TQStringList* TDECommandThread::tokenize( const TQString &rString ) -++{ -++ // Commands look like: -++ // command arg1 arg2 arg3 ... -++ // Args may be enclosed in '"', if they contain spaces. -++ -++ TQStringList *pList = new TQStringList(); -++ -++ TQString qBuffer; -++ qBuffer.reserve( 1024 ); -++ -++ const TQChar *pUnicode = rString.unicode(); -++ const TQChar *pEnd = pUnicode + rString.length(); -++ bool bQuoted = false; -++ -++ for ( ; pUnicode != pEnd; ++pUnicode ) -++ { -++ if ( *pUnicode == '\\' ) -++ { -++ ++pUnicode; -++ if ( pUnicode != pEnd ) -++ { -++ if ( *pUnicode == 'n' ) -++ qBuffer.append( '\n' ); -++ else -++ qBuffer.append( *pUnicode ); -++ } -++ } -++ else if ( *pUnicode == '"' ) -++ bQuoted = !bQuoted; -++ else if ( *pUnicode == ' ' && !bQuoted ) -++ { -++ pList->push_back( qBuffer ); -++ qBuffer.setLength( 0 ); -++ } -++ else -++ qBuffer.append( *pUnicode ); -++ } -++ pList->push_back( qBuffer ); -++ -++ return pList; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdecommandthread.hxx fpicker/source/unx/tde/tdecommandthread.hxx -+--- fpicker/source/unx/tde/tdecommandthread.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdecommandthread.hxx 2011-08-17 14:04:34.560780976 -0500 -+@@ -0,0 +1,98 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _TDECOMMANDTHREAD_HXX_ -++#define _TDECOMMANDTHREAD_HXX_ -++ -++#include -++#include -++#include -++ -++class TDECommandEvent : public TQCustomEvent -++{ -++public: -++ enum CommandEventType { -++ Unknown = 0, -++ -++ AppendControl, -++ EnableControl, -++ GetValue, -++ SetValue, -++ -++ AppendFilter, -++ AppendFilterGroup, -++ UpdateFilters, -++ GetCurrentFilter, -++ SetCurrentFilter, -++ -++ GetDirectory, -++ SetDirectory, -++ -++ GetFiles, -++ -++ SetTitle, -++ SetType, -++ SetDefaultName, -++ SetMultiSelection, -++ -++ Exec -++ }; -++ static const TQEvent::Type TypeId = (TQEvent::Type) ( (int) TQEvent::User + 42 /*random magic value*/ ); -++ -++protected: -++ CommandEventType m_eCommand; -++ -++public: -++ TDECommandEvent( const TQString &qCommand, TQStringList *pStringList ); -++ -++ CommandEventType command() const { return m_eCommand; } -++ TQStringList* stringList() { return static_cast< TQStringList* >( data() ); } -++}; -++ -++class TDECommandThread : public TQThread -++{ -++protected: -++ TQObject *m_pObject; -++ -++ TQMutex m_aMutex; -++ -++public: -++ TDECommandThread( TQWidget *pObject ); -++ virtual ~TDECommandThread(); -++ -++ virtual void run(); -++ -++protected: -++ void handleCommand( const TQString &rString, bool &bQuit ); -++ TQStringList* tokenize( const TQString &rString ); -++}; -++ -++#endif // _TDECOMMANDTHREAD_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdefilepicker.cxx fpicker/source/unx/tde/tdefilepicker.cxx -+--- fpicker/source/unx/tde/tdefilepicker.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdefilepicker.cxx 2011-08-17 14:05:04.073041030 -0500 -+@@ -0,0 +1,733 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++#ifdef TQT_NO_EMIT -++#define emit -++#endif -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++#include -++#include -++ -++////////////////////////////////////////////////////////////////////////// -++// TDEFileDialog -++////////////////////////////////////////////////////////////////////////// -++ -++TDEFileDialog::TDEFileDialog( const TQString &startDir, const TQString &filter, -++ TQWidget *parent, const char *name ) -++ : KFileDialog( startDir, filter, parent, name, true, m_pCustomWidget = new TQVBox() ), -++ m_pCombosAndButtons( new TQHBox( m_pCustomWidget ) ), -++ m_pLabels( new TQVBox( m_pCombosAndButtons ) ), -++ m_pComboBoxes( new TQVBox( m_pCombosAndButtons ) ), -++ m_pPushButtons( new TQVBox( m_pCombosAndButtons ) ), -++ m_pCheckBoxes( new TQGrid( 2, m_pCustomWidget ) ), -++ m_bIsSave( false ), -++ m_bIsExecuting( false ), -++ m_bCanNotifySelection( true ) -++{ -++ connect( this, SIGNAL( fileHighlighted( const TQString & ) ), -++ this, SLOT( fileHighlightedCommand( const TQString & ) ) ); -++ -++ connect( this, SIGNAL( selectionChanged() ), -++ this, SLOT( selectionChangedCommand() ) ); -++ -++ m_pCustomWidget->setSpacing( KDialog::spacingHint() ); -++ m_pCombosAndButtons->setSpacing( KDialog::spacingHint() ); -++ -++ updateCustomWidgetLayout(); -++} -++ -++TDEFileDialog::~TDEFileDialog() -++{ -++} -++ -++void TDEFileDialog::resizeEvent( TQResizeEvent *pEvent ) -++{ -++ KFileDialog::resizeEvent( pEvent ); -++ -++ updateCustomWidgetLayout(); -++} -++ -++void TDEFileDialog::showEvent( TQShowEvent *pEvent ) -++{ -++ KFileDialog::showEvent( pEvent ); -++ -++ updateCustomWidgetLayout(); -++} -++ -++void TDEFileDialog::updateCustomWidgetLayout() -++{ -++ TQPoint qReferencePoint = filterWidget->mapTo( this, TQPoint( 0, 0 ) ); -++ TQPoint qCustomPoint = m_pCustomWidget->mapTo( this, TQPoint( 0, 0 ) ); -++ -++ int nLeft = qReferencePoint.x() - qCustomPoint.x(); -++ int nRight = m_pCustomWidget->width() - filterWidget->width() - nLeft; -++ -++ nLeft -= KDialog::spacingHint(); -++ nRight -= KDialog::spacingHint(); -++ m_pLabels->setFixedWidth( ( nLeft > 0 )? nLeft: 80 ); -++ // FIXME The following call sets the width of m_pPushButtons all right, -++ // but it also increases the width of m_pComboBoxes rapidly. Can we do -++ // anything about it? -++ m_pPushButtons->setFixedWidth( ( nRight > 0 )? nRight: 100 ); -++} -++ -++void TDEFileDialog::customEvent( TQCustomEvent *pEvent ) -++{ -++ if ( pEvent && pEvent->type() == TDECommandEvent::TypeId ) -++ { -++ TDECommandEvent *pCommandEvent = static_cast< TDECommandEvent* >( pEvent ); -++ TQStringList *pStringList = pCommandEvent->stringList(); -++ -++ int nListSize = -1; -++ if ( pStringList ) -++ nListSize = pStringList->size(); -++ -++ switch ( pCommandEvent->command() ) -++ { -++ case TDECommandEvent::AppendControl: -++ if ( nListSize >= 3 ) -++ { -++ appendControl( (*pStringList)[0], (*pStringList)[1], (*pStringList)[2] ); -++ } -++ break; -++ case TDECommandEvent::EnableControl: -++ if ( nListSize >= 2 ) -++ { -++ enableControl( (*pStringList)[0], (*pStringList)[1] ); -++ } -++ break; -++ case TDECommandEvent::GetValue: -++ if ( nListSize >= 2 ) -++ { -++ getValue( (*pStringList)[0], (*pStringList)[1] ); -++ } -++ break; -++ case TDECommandEvent::SetValue: -++ if ( nListSize >= 2 ) -++ { -++ TQStringList qStringList = (*pStringList); -++ qStringList.pop_front(); -++ qStringList.pop_front(); -++ -++ setValue( (*pStringList)[0], (*pStringList)[1], qStringList ); -++ } -++ break; -++ case TDECommandEvent::AppendFilter: -++ if ( nListSize >= 2 ) -++ { -++ appendFilter( (*pStringList)[0], (*pStringList)[1] ); -++ -++ // update the filters widget -++ setFilter( filters() ); -++ } -++ break; -++ case TDECommandEvent::AppendFilterGroup: -++ if ( nListSize >= 1 ) -++ { -++ TQStringList::const_iterator it = pStringList->begin(); -++ ++it; // We ignore the filter group name -++ -++ while ( it != pStringList->end() ) -++ { -++ TQString qTitle = *it; -++ ++it; -++ if ( it != pStringList->end() ) -++ { -++ appendFilter( qTitle, (*it) ); -++ ++it; -++ } -++ } -++ -++ // update the filters widget -++ setFilter( filters() ); -++ } -++ break; -++ case TDECommandEvent::GetCurrentFilter: -++ { -++ TQString qCurrentFilter = filterWidget->currentText(); -++ sendCommand( "currentFilter " + escapeString( qCurrentFilter ) ); -++ } -++ break; -++ case TDECommandEvent::SetCurrentFilter: -++ if ( nListSize >= 1 ) -++ { -++ static_cast< TDEFileFilterComboHack* >( filterWidget )->setCurrentFilter( pStringList->front() ); -++ } -++ break; -++ case TDECommandEvent::GetDirectory: -++ { -++ TQString qDirectory = baseURL().url(); -++ if ( qDirectory.startsWith( "file:/" ) && qDirectory.mid( 6, 1 ) != "/" ) -++ qDirectory.replace( "file:/", "file:///" ); -++ sendCommand( "currentDirectory " + escapeString( qDirectory ) ); -++ } -++ break; -++ case TDECommandEvent::SetDirectory: -++ if ( nListSize >= 1 ) -++ { -++ setURL( pStringList->front() ); -++ } -++ break; -++ case TDECommandEvent::GetFiles: -++ { -++ TQString qString; -++ qString.reserve( 1024 ); -++ -++ qString.append( "files" ); -++ -++ if ( result() == TQDialog::Accepted ) -++ { -++ KURL::List qList( selectedURLs() ); -++ for ( KURL::List::const_iterator it = qList.begin(); it != qList.end(); ++it ) -++ appendURL( qString, (*it) ); -++ } -++ else -++ { -++ // we have to return the selected files anyway -++ const KFileItemList *pItems = ops->selectedItems(); -++ for ( KFileItemListIterator it( *pItems ); it.current(); ++it ) -++ appendURL( qString, (*it)->url() ); -++ } -++ -++ sendCommand( qString ); -++ setCanNotifySelection( true ); -++ } -++ break; -++ case TDECommandEvent::SetTitle: -++ if ( nListSize >= 1 ) -++ { -++ setCaption( pStringList->front() ); -++ } -++ break; -++ case TDECommandEvent::SetType: -++ if ( nListSize >= 1 ) -++ { -++ TQString qType( pStringList->front() ); -++ if ( qType == "open" ) -++ { -++ setIsSave( false ); -++ setCaption( i18n( "Open" ) ); -++ } -++ else if ( qType == "save" ) -++ { -++ setIsSave( true ); -++ setCaption( i18n( "Save As" ) ); -++ } -++ } -++ break; -++ case TDECommandEvent::SetDefaultName: -++ if ( nListSize >= 1 ) -++ { -++ setKeepLocation( true ); -++ setSelection( pStringList->front() ); -++ } -++ break; -++ case TDECommandEvent::SetMultiSelection: -++ if ( nListSize >= 1 ) -++ { -++ if ( pStringList->front() == "true" ) -++ setMode( KFile::Files ); -++ else -++ setMode( KFile::File ); -++ } -++ break; -++ case TDECommandEvent::Exec: -++ { -++ filterWidget->setEditable( false ); -++ setIsExecuting( true ); -++ bool bCanExit = false; -++ do { -++ setCanNotifySelection( true ); -++ exec(); -++ -++ KURL qLocalSelectedURL = mostLocalURL( selectedURL() ); -++ TQString qProtocol( qLocalSelectedURL.protocol() ); -++ -++ if ( isSave() && result() == TQDialog::Accepted ) -++ { -++ if ( qProtocol == "file" ) -++ { -++ TQString qFileName( addExtension( qLocalSelectedURL.path() ) ); -++ bCanExit = -++ !QFile::exists( qFileName ) || -++ ( KMessageBox::warningYesNo( 0, -++ i18n( "A file named \"%1\" already exists. " -++ "Are you sure you want to overwrite it?" ).arg( qFileName ), -++ i18n( "Overwrite File?" ), -++ i18n( "Overwrite" ), KStdGuiItem::cancel() ) == KMessageBox::Yes ); -++ } -++ else if ( !isSupportedProtocol( qProtocol ) ) -++ { -++ KMessageBox::sorry( 0, -++ i18n( "Saving using protocol \"%1\" is not supported." ).arg( qProtocol ) ); -++ bCanExit = false; -++ } -++ else -++ bCanExit = true; -++ } -++ else if ( !isSave() && result() == TQDialog::Accepted && !isSupportedProtocol( qProtocol ) ) -++ { -++ KMessageBox::information( 0, -++ i18n( "Protocol \"%1\" is supported only partially. " -++ "Local copy of the file will be created." ).arg( qProtocol ) ); -++ bCanExit = true; -++ } -++ else -++ bCanExit = true; -++ } while ( !bCanExit ); -++ setIsExecuting( false ); -++ -++ if ( result() == TQDialog::Accepted ) -++ sendCommand( "accept" ); -++ else -++ sendCommand( "reject" ); -++ } -++ break; -++ default: -++ break; -++ } -++ -++ // FIXME Some cleanup of pEvent? delete something, etc.? -++ } -++} -++ -++void TDEFileDialog::appendControl( const TQString &rId, const TQString &rType, const TQString &rTitle ) -++{ -++ TQString qLabel( rTitle ); -++ qLabel.replace( '~', '&' ); -++ -++ if ( rType == "checkbox" ) -++ { -++ TQCheckBox *pCheckBox = new TQCheckBox( qLabel, m_pCheckBoxes, rId.utf8() ); -++ -++ pCheckBox->setEnabled( true ); -++ pCheckBox->setChecked( false ); -++ } -++ else if ( rType == "listbox" ) -++ { -++ TQLabel *pComboLabel = new TQLabel( qLabel, m_pLabels ); -++ TQComboBox *pComboBox = new TQComboBox( m_pComboBoxes, rId.utf8() ); -++ -++ pComboLabel->setBuddy( pComboBox ); -++ pComboBox->setEnabled( true ); -++ } -++ else if ( rType == "pushbutton" ) -++ { -++ TQPushButton *pPushButton = new TQPushButton( qLabel, m_pPushButtons, rId.utf8() ); -++ pPushButton->setEnabled( true ); -++ } -++} -++ -++TQWidget* TDEFileDialog::findControl( const TQString &rId ) const -++{ -++ TQObjectList *pList = m_pCustomWidget->queryList(); -++ TQCString qName( rId.utf8() ); -++ TQObjectList::const_iterator it = pList->begin(); -++ -++ for ( ; it != pList->end() && qName != (*it)->name(); ++it ) -++ ; -++ -++ TQWidget *pWidget = NULL; -++ if ( it != pList->end() ) -++ pWidget = static_cast< TQWidget* >( *it ); -++ -++ delete pList; -++ -++ return pWidget; -++} -++ -++void TDEFileDialog::enableControl( const TQString &rId, const TQString &rValue ) -++{ -++ TQWidget *pWidget = findControl( rId ); -++ -++ if ( pWidget ) -++ pWidget->setEnabled( rValue.lower() == "true" ); -++} -++ -++void TDEFileDialog::getValue( const TQString &rId, const TQString &rAction ) -++{ -++ TQWidget *pWidget = findControl( rId ); -++ TQString qString; -++ qString.reserve( 1024 ); -++ qString.append( "value" ); -++ -++ if ( pWidget ) -++ { -++ TQCString qClassName = pWidget->className(); -++ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING ) -++ { -++ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget ); -++ -++ if ( pCheckBox->isChecked() ) -++ qString.append( " bool true" ); -++ else -++ qString.append( " bool false" ); -++ } -++ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING ) -++ { -++ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget ); -++ if ( rAction == "getItems" ) -++ { -++ qString.append( " stringList" ); -++ for ( int nIdx = 0; nIdx < pComboBox->count(); ++nIdx ) -++ { -++ qString.append( ' ' ); -++ appendEscaped( qString, pComboBox->text( nIdx ) ); -++ } -++ } -++ else if ( rAction == "getSelectedItem" ) -++ { -++ qString.append( " string " ); -++ appendEscaped( qString, pComboBox->currentText() ); -++ } -++ else if ( rAction == "getSelectedItemIndex" ) -++ { -++ qString.append( " int " ); -++ qString.append( TQString().setNum( pComboBox->currentItem() ) ); -++ } -++ // TODO getHelpURL -++ } -++ // TODO push button -++ } -++ -++ sendCommand( qString ); -++} -++ -++void TDEFileDialog::setValue( const TQString &rId, const TQString &rAction, const TQStringList &rValue ) -++{ -++ TQWidget *pWidget = findControl( rId ); -++ -++ if ( pWidget ) -++ { -++ TQCString qClassName = pWidget->className(); -++ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING ) -++ { -++ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget ); -++ -++ bool bValue = ( !rValue.isEmpty() ) && ( rValue.front().lower() == "true" ); -++ pCheckBox->setChecked( bValue ); -++ } -++ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING ) -++ { -++ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget ); -++ if ( rAction == "addItem" ) -++ { -++ if ( !rValue.isEmpty() ) -++ pComboBox->insertItem( rValue.front() ); -++ } -++ else if ( rAction == "addItems" ) -++ { -++ pComboBox->insertStringList( rValue ); -++ } -++ else if ( rAction == "deleteItem" ) -++ { -++ if ( !rValue.isEmpty() ) -++ pComboBox->removeItem( rValue.front().toInt() ); -++ } -++ else if ( rAction == "deleteItems" ) -++ { -++ pComboBox->clear(); -++ } -++ else if ( rAction == "setSelectedItem" ) -++ { -++ if ( !rValue.isEmpty() ) -++ pComboBox->setCurrentItem( rValue.front().toInt() ); -++ } -++ // FIXME setHelpURL is ignored -++ } -++ // TODO push button -++ } -++} -++ -++void TDEFileDialog::appendFilter( const TQString &rTitle, const TQString &rFilter ) -++{ -++ // Filters are separated by ';' -++ TQString qFilter( rFilter ); -++ qFilter.replace( TQChar( ';' ), TQChar( ' ' ) ).replace( "*.*", "*" ); -++ -++ // Workaround for too wide (*.bmp;...) entry -++ TQString qTitle( rTitle ); -++ qTitle.replace( TQRegExp( "^<([^>]*)> \\(.*" ), "<\\1>" ); -++ -++ m_aFilters.push_back( qMakePair( qTitle, qFilter ) ); -++} -++ -++TQString TDEFileDialog::filters() const -++{ -++ TQString qString, qTmp; -++ bool bFirstFilter = true; -++ -++ for ( FilterList::const_iterator it = m_aFilters.begin(); it != m_aFilters.end(); ++it ) -++ { -++ if ( bFirstFilter ) -++ bFirstFilter = false; -++ else -++ qString.append( '\n' ); -++ -++ qString.append( (*it).second ); -++ qString.append( '|' ); -++ -++ qTmp = (*it).first; -++ qString.append( qTmp.replace( '/', "\\/" ) ); -++ } -++ -++ return qString; -++} -++ -++TQString TDEFileDialog::addExtension( const TQString &rFileName ) const -++{ -++ if ( !isSave() ) -++ return rFileName; -++ -++ TQString qExtension; -++ -++ TQWidget *pExtensionWidget = findControl( "100" ); // CHECKBOX_AUTOEXTENSION -++ TQCheckBox *pExtensionCB = pExtensionWidget? static_cast< TQCheckBox* >( pExtensionWidget->qt_cast( TQCHECKBOX_OBJECT_NAME_STRING ) ): NULL; -++ if ( pExtensionCB && pExtensionCB->isChecked() ) -++ { -++ // FIXME: qFilter can be a MIME; we ignore it now... -++ TQStringList qFilterList = TQStringList::split( " ", currentFilter() ); -++ for ( TQStringList::const_iterator it = qFilterList.begin(); -++ qExtension.isEmpty() && it != qFilterList.end(); -++ ++it ) -++ { -++ int nUnwanted = (*it).findRev( '*' ); -++ if ( nUnwanted < 0 ) -++ nUnwanted = (*it).findRev( '?' ); -++ else -++ nUnwanted = ::std::max( nUnwanted, (*it).find( '?', nUnwanted ) ); -++ -++ int nIdx = (*it).find( '.', ::std::max( nUnwanted, 0 ) ); -++ if ( nIdx >= 0 ) -++ qExtension = (*it).mid( nIdx ).lower(); -++ } -++ } -++ -++ if ( qExtension.isEmpty() || qExtension == "." || rFileName.endsWith( qExtension ) ) -++ return rFileName; -++ else -++ return rFileName + qExtension; -++} -++ -++bool TDEFileDialog::isSupportedProtocol( const TQString &rProtocol ) const -++{ -++ // TODO Get this information directly from OOo -++ const char * pOOoProtocols[] = { "", "smb", "ftp", "http", "file", "mailto", -++ "vnd.sun.star.webdav", "news", "private", "vnd.sun.star.help", -++ "https", "slot", "macro", "javascript", "imap", "pop3", "data", -++ "cid", "out", "vnd.sun.star.wfs", "vnd.sun.star.hier", "vim", -++ ".uno", ".component", "vnd.sun.star.pkg", "ldap", "db", -++ "vnd.sun.star.cmd", "vnd.sun.star.script", "vnd.sun.star.odma", -++ "telnet", -++ NULL }; -++ -++ for ( const char **pIndex = pOOoProtocols; *pIndex != NULL; ++pIndex ) -++ { -++ if ( rProtocol == *pIndex ) -++ return true; -++ } -++ -++ // TODO gnome-vfs bits here -++ -++ return false; -++} -++ -++KURL TDEFileDialog::mostLocalURL( const KURL &rURL ) const -++{ -++#if KDE_IS_VERSION(3,5,0) -++ KURL qMostLocalURL( KIO::NetAccess::mostLocalURL( rURL, const_cast( this ) ) ); -++ if ( qMostLocalURL.isLocalFile() ) -++ return qMostLocalURL; -++ else -++ { -++ // Terrible hack to get even non-existing media:// files right -++ qMostLocalURL.cd( ".." ); -++ KURL qMostLocalPath( KIO::NetAccess::mostLocalURL( qMostLocalURL, const_cast( this ) ) ); -++ if ( qMostLocalPath.isLocalFile() ) -++ { -++ qMostLocalPath.addPath( rURL.fileName() ); -++ return qMostLocalPath; -++ } -++ } -++#endif -++ -++ return rURL; -++} -++ -++TQString TDEFileDialog::localCopy( const TQString &rFileName ) const -++{ -++ // 106 == MIB enum for UTF-8 -++ KURL qLocalURL = mostLocalURL( KURL( rFileName, 106 ) ); -++ if ( qLocalURL.isLocalFile() ) -++ return qLocalURL.url(); -++ -++ int nExtensionPos = rFileName.findRev( '/' ); -++ if ( nExtensionPos >= 0 ) -++ nExtensionPos = rFileName.find( '.', nExtensionPos ); -++ else -++ nExtensionPos = rFileName.find( '.' ); -++ -++ KTempFile qTempFile( TQString::null, ( nExtensionPos < 0 )? TQString(): rFileName.mid( nExtensionPos ) ); -++ KURL qDestURL; -++ qDestURL.setPath( qTempFile.name() ); -++ -++ if ( !KIO::NetAccess::file_copy( rFileName, qDestURL, 0600, true, false, NULL ) ) -++ { -++ KMessageBox::error( 0, KIO::NetAccess::lastErrorString() ); -++ return TQString::null; -++ } -++ -++ return qDestURL.url(); -++} -++ -++void TDEFileDialog::fileHighlightedCommand( const TQString & ) -++{ -++ if ( canNotifySelection() ) -++ { -++ sendCommand( "fileSelectionChanged" ); -++ setCanNotifySelection( false ); -++ } -++} -++ -++void TDEFileDialog::selectionChangedCommand() -++{ -++ if ( canNotifySelection() ) -++ { -++ sendCommand( "fileSelectionChanged" ); -++ setCanNotifySelection( false ); -++ } -++} -++ -++void TDEFileDialog::sendCommand( const TQString &rCommand ) -++{ -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "tdefilepicker sent: " << rCommand.latin1() << ::std::endl; -++#endif -++ -++ //m_aOutputStream << rCommand << endl; -++ ::std::cout << rCommand.utf8() << ::std::endl; -++} -++ -++void TDEFileDialog::appendURL( TQString &rBuffer, const KURL &rURL ) -++{ -++ // From Martin Kretzschmar: -++ // file:///path/to/test%E0.odt is not a valid URL from OOo's point of -++ // view. (?Most modern parts of?) OOo assume(s) that the URL contains only -++ // ASCII characters (which test%E0.odt does) and is UTF-8 after unescaping -++ // (which file:///path/test%E0.odt is not). -++ // Cf. the comment in sal/inc/osl/file.h. -++ // 106 == MIB enum for UTF-8 -++ TQString qUrlStr = addExtension( rURL.url( 0, 106 ) ); -++ -++ if ( !isExecuting() && !isSupportedProtocol( rURL.protocol() ) ) -++ qUrlStr = localCopy( qUrlStr ); -++ -++ if ( qUrlStr.startsWith( "file:/" ) && qUrlStr.mid( 6, 1 ) != "/" ) -++ qUrlStr.replace( "file:/", "file:///" ); -++ -++ rBuffer.append( " " ); -++ if ( !qUrlStr.isEmpty() ) -++ appendEscaped( rBuffer, qUrlStr ); -++} -++ -++void TDEFileDialog::appendEscaped( TQString &rBuffer, const TQString &rString ) -++{ -++ const TQChar *pUnicode = rString.unicode(); -++ const TQChar *pEnd = pUnicode + rString.length(); -++ -++ rBuffer.append( '"' ); -++ for ( ; pUnicode != pEnd; ++pUnicode ) -++ { -++ if ( *pUnicode == '\\' ) -++ rBuffer.append( "\\\\" ); -++ else if ( *pUnicode == '"' ) -++ rBuffer.append( "\\\"" ); -++ else if ( *pUnicode == '\n' ) -++ rBuffer.append( "\\\n" ); -++ else -++ rBuffer.append( *pUnicode ); -++ } -++ rBuffer.append( '"' ); -++} -++ -++TQString TDEFileDialog::escapeString( const TQString &rString ) -++{ -++ TQString qString; -++ qString.reserve( 2*rString.length() + 2 ); // every char escaped + quotes -++ -++ appendEscaped( qString, rString ); -++ -++ return qString; -++} -++ -++ -++void TDEFileFilterComboHack::setCurrentFilter( const TQString& filter ) -++{ -++ setCurrentText( filter ); -++ filterChanged(); -++ -++ // Workaround for 'Filter name (*.blah)' vs. 'Filter name' -++ if ( currentText() != text( currentItem() ) ) -++ { -++ int nItem = 0; -++ for ( ; nItem < count() && !text( nItem ).startsWith( filter ); ++nItem ); -++ -++ if ( nItem < count() ) -++ setCurrentItem( nItem ); -++ else -++ setCurrentItem( 0 ); -++ -++ filterChanged(); -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdefilepicker.hxx fpicker/source/unx/tde/tdefilepicker.hxx -+--- fpicker/source/unx/tde/tdefilepicker.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdefilepicker.hxx 2011-08-17 14:05:02.262902414 -0500 -+@@ -0,0 +1,126 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _TDEFILEPICKER_HXX_ -++#define _TDEFILEPICKER_HXX_ -++ -++#include -++#include -++ -++class TQGrid; -++class TQHBox; -++class TQVBox; -++ -++class TDEFileDialog : public KFileDialog -++{ -++ Q_OBJECT -++ -++protected: -++ typedef TQPair< TQString, TQString > FilterEntry; -++ typedef TQValueList< FilterEntry > FilterList; -++ -++ TQVBox *m_pCustomWidget; -++ TQHBox *m_pCombosAndButtons; -++ -++ TQVBox *m_pLabels; -++ TQVBox *m_pComboBoxes; -++ TQVBox *m_pPushButtons; -++ -++ TQGrid *m_pCheckBoxes; -++ -++ FilterList m_aFilters; -++ -++ /** Are we a "Save As" dialog? -++ * -++ * We cannot use KFileDialog::setOperationMode() here, because then -++ * it automatically adds an "Automatically select filename extension" -++ * check box, and completely destroys the dialog's layout -++ * (custom list boxes are under this check box, which looks ugly). -++ */ -++ bool m_bIsSave; -++ bool m_bIsExecuting; -++ -++ bool m_bCanNotifySelection; -++ -++public: -++ TDEFileDialog( const TQString &startDir, const TQString &filter, -++ TQWidget *parent, const char *name ); -++ virtual ~TDEFileDialog(); -++ -++protected: -++ virtual void resizeEvent( TQResizeEvent *pEvent ); -++ virtual void showEvent( TQShowEvent *pEvent ); -++ void updateCustomWidgetLayout(); -++ -++ virtual void customEvent( TQCustomEvent *pEvent ); -++ -++protected: -++ void appendControl( const TQString &rId, const TQString &rType, const TQString &rTitle ); -++ TQWidget* findControl( const TQString &rId ) const; -++ void enableControl( const TQString &rId, const TQString &rValue ); -++ void getValue( const TQString &rId, const TQString &rAction ); -++ void setValue( const TQString &rId, const TQString &rAction, const TQStringList &rValue ); -++ -++ void appendFilter( const TQString &rTitle, const TQString &rFilter ); -++ TQString filters() const; -++ TQString addExtension( const TQString &rFileName ) const; -++ -++ void setIsSave( bool bIsSave ) { m_bIsSave = bIsSave; } -++ bool isSave( void ) const { return m_bIsSave; } -++ -++ void setIsExecuting( bool bIsExecuting ) { m_bIsExecuting = bIsExecuting; } -++ bool isExecuting( void ) const { return m_bIsExecuting; } -++ -++ bool isSupportedProtocol( const TQString &rProtocol ) const; -++ KURL mostLocalURL( const KURL &rURL ) const; -++ TQString localCopy( const TQString &rFileName ) const; -++ -++ void setCanNotifySelection( bool bCanNotifySelection ) { m_bCanNotifySelection = bCanNotifySelection; } -++ bool canNotifySelection( void ) const { return m_bCanNotifySelection; } -++ -++protected slots: -++ void fileHighlightedCommand( const TQString & ); -++ void selectionChangedCommand(); -++ -++protected: -++ void sendCommand( const TQString &rCommand ); -++ void appendURL( TQString &rBuffer, const KURL &rURL ); -++ void appendEscaped( TQString &rBuffer, const TQString &rString ); -++ TQString escapeString( const TQString &rString ); -++}; -++ -++class TDEFileFilterComboHack : public KFileFilterCombo -++{ -++public: -++ void setCurrentFilter( const TQString& filter ); -++}; -++ -++#endif // _TDEFILEPICKER_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdefpmain.cxx fpicker/source/unx/tde/tdefpmain.cxx -+--- fpicker/source/unx/tde/tdefpmain.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdefpmain.cxx 2011-08-17 14:04:58.622623640 -0500 -+@@ -0,0 +1,93 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++#include -++ -++#include -++#include -++#include -++ -++#include -++#include -++ -++////////////////////////////////////////////////////////////////////////// -++// Main -++////////////////////////////////////////////////////////////////////////// -++ -++static KCmdLineOptions sOptions[] = -++{ -++ { "winid ", I18N_NOOP("Window ID to which is the fpicker modal"), "0" }, -++ KCmdLineLastOption -++}; -++ -++int main( int argc, char* argv[] ) -++{ -++ // we fake the name of the application to have "OpenOffice.org" in the -++ // title -++ KAboutData qAboutData( "tdefilepicker", I18N_NOOP( "OpenOffice.org" ), -++ "0.1", I18N_NOOP( "tdefilepicker is an implementation of the TDE file dialog for OpenOffice.org." ), -++ KAboutData::License_LGPL, -++ "(c) 2004, Jan Holesovsky" ); -++ qAboutData.addAuthor( "Jan Holesovsky", I18N_NOOP("Original author and current maintainer"), "kendy@openoffice.org" ); -++ -++ // Let the user see that this does something... -++ ::std::cerr << "tdefilepicker, an implementation of TDE file dialog for OOo." << ::std::endl -++ << "Type 'exit' and press Enter to finish." << ::std::endl; -++ -++ KCmdLineArgs::addCmdLineOptions( sOptions ); -++ KCmdLineArgs::init( argc, argv, &qAboutData ); -++ -++ KLocale::setMainCatalogue( "kdialog" ); -++ -++ KApplication kApplication; -++ -++ // Setup the modality -++ KCmdLineArgs *pArgs = KCmdLineArgs::parsedArgs(); -++ long nWinId = atol( pArgs->getOption( "winid" ) ); -++ pArgs->clear(); -++ -++ TDEModalityFilter qModalityFilter( nWinId ); -++ -++ TDEFileDialog aFileDialog( NULL, TQString(), NULL, "tdefiledialog" ); -++ -++ TDECommandThread qCommandThread( &aFileDialog ); -++ qCommandThread.start(); -++ -++ kApplication.exec(); -++ -++ qCommandThread.wait(); -++ -++ ::std::cout << "exited" << ::std::endl; -++ -++ return 0; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdemodalityfilter.cxx fpicker/source/unx/tde/tdemodalityfilter.cxx -+--- fpicker/source/unx/tde/tdemodalityfilter.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdemodalityfilter.cxx 2011-08-17 14:04:44.121513143 -0500 -+@@ -0,0 +1,68 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++ -++#include -++#include -++ -++#include -++#include -++#include -++ -++////////////////////////////////////////////////////////////////////////// -++// Modality filter -++////////////////////////////////////////////////////////////////////////// -++ -++TDEModalityFilter::TDEModalityFilter( WId nWinId ) -++ : m_nWinId( nWinId ) -++{ -++ kapp->installEventFilter( this ); -++} -++ -++TDEModalityFilter::~TDEModalityFilter() -++{ -++ kapp->removeEventFilter( this ); -++} -++ -++bool TDEModalityFilter::eventFilter( TQObject *pObject, TQEvent *pEvent ) -++{ -++ if ( pObject->isWidgetType() && pEvent->type() == TQEvent::Show ) -++ { -++ KDialogBase* pDlg = ::qt_cast< KDialogBase* >( pObject ); -++ if ( pDlg != NULL && m_nWinId != 0 ) -++ { -++ XSetTransientForHint( qt_xdisplay(), pDlg->winId(), m_nWinId ); -++ m_nWinId = 0; -++ } -++ } -++ return false; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdemodalityfilter.hxx fpicker/source/unx/tde/tdemodalityfilter.hxx -+--- fpicker/source/unx/tde/tdemodalityfilter.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdemodalityfilter.hxx 2011-08-17 14:04:27.940273979 -0500 -+@@ -0,0 +1,49 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _TDEMODALITYFILTER_HXX_ -++#define _TDEMODALITYFILTER_HXX_ -++ -++#include -++ -++class TDEModalityFilter : public TQObject -++{ -++private: -++ WId m_nWinId; -++ -++public: -++ TDEModalityFilter( WId nWinId ); -++ virtual ~TDEModalityFilter(); -++ -++ virtual bool eventFilter( TQObject *pObject, TQEvent *pEvent ); -++}; -++ -++#endif // _TDEMODALITYFILTER_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/FPServiceInfo.hxx fpicker/source/unx/tde_unx/FPServiceInfo.hxx -+--- fpicker/source/unx/tde_unx/FPServiceInfo.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/FPServiceInfo.hxx 2011-08-17 14:07:24.203772856 -0500 -+@@ -0,0 +1,48 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _FPSERVICEINFO_HXX_ -++#define _FPSERVICEINFO_HXX_ -++ -++// the service names -++#define FILE_PICKER_SERVICE_NAME "com.sun.star.ui.dialogs.TDEFilePicker" -++ -++// the implementation names -++#define FILE_PICKER_IMPL_NAME "com.sun.star.ui.dialogs.UnxFilePicker" -++ -++// the registry key names -++// a key under which this service will be registered, -++// Format: -> "/ImplName/UNO/SERVICES/ServiceName" -++// -++#define FILE_PICKER_REGKEY_NAME "/com.sun.star.ui.dialogs.UnxFilePicker/UNO/SERVICES/com.sun.star.ui.dialogs.TDEFilePicker" -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/fps-tde-ucd.txt fpicker/source/unx/tde_unx/fps-tde-ucd.txt -+--- fpicker/source/unx/tde_unx/fps-tde-ucd.txt 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/fps-tde-ucd.txt 2011-08-17 14:06:16.168562070 -0500 -+@@ -0,0 +1,6 @@ -++[ComponentDescriptor] -++ImplementationName=com.sun.star.ui.dialogs.UnxFilePicker -++ComponentName=fps_tde.uno.so -++LoaderName=com.sun.star.loader.SharedLibrary -++[SupportedServices] -++com.sun.star.ui.dialogs.TDEFilePicker -+diff -urN fpicker/source/unx/tde_unx/fps_tde.xml fpicker/source/unx/tde_unx/fps_tde.xml -+--- fpicker/source/unx/tde_unx/fps_tde.xml 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/fps_tde.xml 2011-08-17 14:07:17.433254165 -0500 -+@@ -0,0 +1,51 @@ -++ -++ -++ -++ fps_tde -++ -++ Jan Holesovsky -++ com.sun.star.comp.ui.dialogs.FilePicker -++ -++ The TDE implementation of the FilePicker service. -++ -++ com.sun.star.loader.SharedLibrary -++ c++ -++ -++ com.sun.star.ui.dialogs.FilePicker -++ ... -++ com.sun.star.ui.dialogs.XExecutableDialog -++ com.sun.star.ui.dialogs.XFilePicker -++ com.sun.star.ui.dialogs.XFilterManager -++ com.sun.star.ui.dialogs.XFilterGroupManager -++ com.sun.star.ui.dialogs.XFilePickerListener -++ com.sun.star.ui.dialogs.ExecutableDialogException -++ com.sun.star.ui.dialogs.XFilePickerNotifier -++ com.sun.star.ui.dialogs.XFilePickerControlAccess -++ com.sun.star.ui.dialogs.XFilePreview -++ com.sun.star.ui.dialogs.ExtendedFilePickerElementIds -++ com.sun.star.ui.dialogs.ExecutableDialogResults -++ com.sun.star.ui.dialogs.FilePickerEvent -++ com.sun.star.ui.dialogs.CommonFilePickerElementIds -++ com.sun.star.ui.dialogs.ListboxControlActions -++ com.sun.star.ui.dialogs.TemplateDescription -++ com.sun.star.ui.dialogs.FilePreviewImageFormats -++ com.sun.star.util.XCancellable -++ com.sun.star.lang.XComponent -++ com.sun.star.lang.XMultiServiceFactory -++ com.sun.star.lang.XSingleServiceFactory -++ com.sun.star.lang.XServiceInfo -++ com.sun.star.lang.XTypeProvider -++ com.sun.star.lang.IllegalArgumentException -++ com.sun.star.uno.TypeClass -++ com.sun.star.uno.XWeak -++ com.sun.star.uno.XAggregation -++ com.sun.star.registry.XRegistryKey -++ com.sun.star.container.XSet -++ -++ cppuhelper -++ cppu -++ sal -++ cppuhelper -++ cppu2 -++ sal2 -++ -+diff -urN fpicker/source/unx/tde_unx/makefile.mk fpicker/source/unx/tde_unx/makefile.mk -+--- fpicker/source/unx/tde_unx/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/makefile.mk 2011-08-17 14:07:11.152773020 -0500 -+@@ -0,0 +1,78 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2010 Novell, Inc. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/..$/.. -++ -++PRJNAME=fpicker -++TARGET=fps_tde.uno -++LIBTARGET=NO -++ENABLE_EXCEPTIONS=TRUE -++ -++# --- Settings ----------------------------------------------------- -++ -++.INCLUDE : settings.mk -++DLLPRE= -++ -++# ------------------------------------------------------------------ -++ -++# Currently just TDE is supported... -++.IF "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -++ -++dummy: -++ @echo "Nothing to build. GUIBASE == $(GUIBASE), ENABLE_TDE is not set" -++ -++.ELSE # we build for TDE -++ -++# --- Files -------------------------------------------------------- -++ -++SLOFILES =\ -++ $(SLO)$/UnxCommandThread.obj \ -++ $(SLO)$/UnxFilePicker.obj \ -++ $(SLO)$/UnxNotifyThread.obj \ -++ $(SLO)$/UnxFPentry.obj -++ -++SHL1NOCHECK=TRUE -++SHL1TARGET=fps_tde.uno -++SHL1STDLIBS=$(CPPULIB)\ -++ $(CPPUHELPERLIB)\ -++ $(SALLIB)\ -++ $(VCLLIB)\ -++ $(TOOLSLIB) -++ -++SHL1OBJS=$(SLOFILES) -++SHL1DEF=$(MISC)$/$(SHL1TARGET).def -++ -++DEF1NAME=$(SHL1TARGET) -++DEF1VERSIONMAP=$(SOLARENV)/src/component.map -++ -++.ENDIF # "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -++ -++# --- Targets ------------------------------------------------------ -++ -++.INCLUDE : target.mk -+diff -urN fpicker/source/unx/tde_unx/UnxCommandThread.cxx fpicker/source/unx/tde_unx/UnxCommandThread.cxx -+--- fpicker/source/unx/tde_unx/UnxCommandThread.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxCommandThread.cxx 2011-08-17 14:06:59.001842171 -0500 -+@@ -0,0 +1,315 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++ -++#include -++#include -++ -++#include -++#include -++#include -++ -++using namespace ::com::sun::star; -++ -++////////////////////////////////////////////////////////////////////////// -++// UnxFilePickerCommandThread -++////////////////////////////////////////////////////////////////////////// -++ -++UnxFilePickerCommandThread::UnxFilePickerCommandThread( UnxFilePickerNotifyThread *pNotifyThread, int nReadFD ) -++ : m_pNotifyThread( pNotifyThread ), -++ m_nReadFD( nReadFD ) -++{ -++} -++ -++UnxFilePickerCommandThread::~UnxFilePickerCommandThread() -++{ -++} -++ -++sal_Bool SAL_CALL UnxFilePickerCommandThread::result() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_aResult; -++} -++ -++::rtl::OUString SAL_CALL UnxFilePickerCommandThread::getCurrentFilter() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_aGetCurrentFilter; -++} -++ -++::rtl::OUString SAL_CALL UnxFilePickerCommandThread::getDirectory() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_aGetDirectory; -++} -++ -++uno::Sequence< ::rtl::OUString > SAL_CALL UnxFilePickerCommandThread::getFiles() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ sal_Int32 nSize = m_aGetFiles.size(); -++ uno::Sequence< ::rtl::OUString > aFiles( ( nSize > 1 )? nSize + 1: nSize ); -++ -++ if ( nSize == 1 ) -++ aFiles[0] = m_aGetFiles.front(); -++ else if ( nSize > 1 ) -++ { -++ // First entry in the sequence must be the dirname, the others are the -++ // filenames, so we have to rearrange the list... -++ -++ ::rtl::OUString aFront = m_aGetFiles.front(); -++ sal_Int32 nLastSlash = aFront.lastIndexOf( '/' ); -++ -++ aFiles[0] = ( nLastSlash >= 0 )? aFront.copy( 0, nLastSlash ): ::rtl::OUString(); -++ ++nLastSlash; -++ -++ sal_Int32 nIdx = 1; -++ for ( ::std::list< ::rtl::OUString >::const_iterator it = m_aGetFiles.begin(); -++ it != m_aGetFiles.end(); ++it, ++nIdx ) -++ { -++ sal_Int32 nLength = (*it).getLength() - nLastSlash; -++ aFiles[nIdx] = ( nLength >= 0 )? (*it).copy( nLastSlash, nLength ): ::rtl::OUString(); -++ } -++ } -++ -++ return aFiles; -++} -++ -++uno::Any SAL_CALL UnxFilePickerCommandThread::getValue() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_aGetValue; -++} -++ -++void SAL_CALL UnxFilePickerCommandThread::run() -++{ -++ if ( m_nReadFD < 0 ) -++ return; -++ -++ sal_Int32 nBufferSize = 1024; // 1 is for testing, 1024 for real use -++ sal_Char *pBuffer = new sal_Char[nBufferSize]; -++ sal_Char *pBufferEnd = pBuffer + nBufferSize; -++ -++ sal_Char *pWhereToRead = pBuffer; -++ sal_Char *pEntryBegin = pBuffer; -++ sal_Int32 nBytesRead = 0; -++ sal_Bool bShouldExit = sal_False; -++ while ( !bShouldExit && ( nBytesRead = read( m_nReadFD, pWhereToRead, pBufferEnd - pWhereToRead ) ) > 0 ) -++ { -++ sal_Bool bFoundNL = sal_False; -++ sal_Char *pWhereToReadEnd = pWhereToRead + nBytesRead; -++ sal_Char *pEntryEnd = pWhereToRead; -++ do { -++ for ( ; pEntryEnd < pWhereToReadEnd && *pEntryEnd != '\n'; ++pEntryEnd ) -++ ; -++ -++ if ( pEntryEnd < pWhereToReadEnd ) -++ { -++ bFoundNL = sal_True; -++ *pEntryEnd = 0; -++ -++ if ( strcmp( pEntryBegin, "exited" ) == 0 ) -++ bShouldExit = sal_True; -++ else -++ handleCommand( ::rtl::OUString( pEntryBegin, pEntryEnd - pEntryBegin, RTL_TEXTENCODING_UTF8 )/*, bQuit*/ ); -++ -++ pEntryBegin = pEntryEnd + 1; -++ } -++ } while ( pEntryEnd < pWhereToReadEnd ); -++ -++ if ( bFoundNL ) -++ { -++ if ( pEntryBegin < pBufferEnd ) -++ memmove( pBuffer, pEntryBegin, pWhereToReadEnd - pEntryBegin ); -++ } -++ else -++ { -++ // enlarge the buffer size -++ nBufferSize *= 2; -++ sal_Char *pNewBuffer = new sal_Char[nBufferSize]; -++ if ( pEntryBegin < pBufferEnd ) -++ memmove( pNewBuffer, pEntryBegin, pWhereToReadEnd - pEntryBegin ); -++ -++ delete[] pBuffer; -++ pBuffer = pNewBuffer; -++ pBufferEnd = pBuffer + nBufferSize; -++ } -++ -++ pWhereToRead = pBuffer + ( pWhereToReadEnd - pEntryBegin ); -++ pEntryBegin = pBuffer; -++ } -++} -++ -++void SAL_CALL UnxFilePickerCommandThread::handleCommand( const ::rtl::OUString &rCommand ) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "UnxFilePicker received: \"" << -++ OUStringToOString( rCommand, RTL_TEXTENCODING_ASCII_US ).getStr() << "\"" << ::std::endl; -++#endif -++ -++ ::std::list< ::rtl::OUString > aList = tokenize( rCommand ); -++ -++ if ( aList.size() == 0 ) -++ return; -++ -++ ::rtl::OUString aCommandName = aList.front(); -++ aList.pop_front(); -++ -++ if ( aCommandName.equalsAscii( "accept" ) ) -++ { -++ m_aResult = sal_True; -++ m_aExecCondition.set(); -++ } -++ else if ( aCommandName.equalsAscii( "reject" ) ) -++ { -++ m_aResult = sal_False; -++ m_aExecCondition.set(); -++ } -++ else if ( aCommandName.equalsAscii( "fileSelectionChanged" ) ) -++ { -++ if ( m_pNotifyThread ) -++ m_pNotifyThread->fileSelectionChanged(); -++ } -++ else if ( aCommandName.equalsAscii( "files" ) ) -++ { -++ m_aGetFiles = aList; -++ m_aGetFilesCondition.set(); -++ } -++ else if ( aCommandName.equalsAscii( "value" ) ) -++ { -++ ::rtl::OUString aType; -++ if ( !aList.empty() ) -++ { -++ aType = aList.front(); -++ aList.pop_front(); -++ } -++ -++ if ( aType.equalsAscii( "bool" ) ) -++ { -++ sal_Bool bValue = !aList.empty() && aList.front().equalsIgnoreAsciiCaseAscii( "true" ); -++ -++ m_aGetValue <<= bValue; -++ m_aGetValueCondition.set(); -++ } -++ else if ( aType.equalsAscii( "int" ) ) -++ { -++ sal_Int32 nValue = 0; -++ if ( !aList.empty() ) -++ nValue = aList.front().toInt32(); -++ -++ m_aGetValue <<= nValue; -++ m_aGetValueCondition.set(); -++ } -++ else if ( aType.equalsAscii( "string" ) ) -++ { -++ ::rtl::OUString aValue; -++ if ( !aList.empty() ) -++ aValue = aList.front(); -++ -++ m_aGetValue <<= aValue; -++ m_aGetValueCondition.set(); -++ } -++ else if ( aType.equalsAscii( "stringList" ) ) -++ { -++ uno::Sequence< ::rtl::OUString > aSequence( aList.size() ); -++ sal_Int32 nIdx = 0; -++ for ( ::std::list< ::rtl::OUString >::const_iterator it = aList.begin(); it != aList.end(); ++it, ++nIdx ) -++ aSequence[nIdx] = (*it); -++ -++ m_aGetValue <<= aSequence; -++ m_aGetValueCondition.set(); -++ } -++ else -++ { -++ m_aGetValue = uno::Any(); -++ m_aGetValueCondition.set(); -++ } -++ } -++ else if ( aCommandName.equalsAscii( "currentFilter" ) ) -++ { -++ m_aGetCurrentFilter = aList.empty()? ::rtl::OUString(): aList.front(); -++ m_aGetCurrentFilterCondition.set(); -++ } -++ else if ( aCommandName.equalsAscii( "currentDirectory" ) ) -++ { -++ m_aGetDirectory = aList.empty()? ::rtl::OUString(): aList.front(); -++ m_aGetDirectoryCondition.set(); -++ } -++ else -++ { -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "Unrecognized command: " -++ << OUStringToOString( aCommandName, RTL_TEXTENCODING_ASCII_US ).getStr() << "\"" << ::std::endl; -++#endif -++ } -++} -++ -++::std::list< ::rtl::OUString > SAL_CALL UnxFilePickerCommandThread::tokenize( const ::rtl::OUString &rCommand ) -++{ -++ ::std::list< ::rtl::OUString > aList; -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ const sal_Unicode *pUnicode = rCommand.getStr(); -++ const sal_Unicode *pEnd = pUnicode + rCommand.getLength(); -++ sal_Bool bQuoted = sal_False; -++ -++ for ( ; pUnicode != pEnd; ++pUnicode ) -++ { -++ if ( *pUnicode == '\\' ) -++ { -++ ++pUnicode; -++ if ( pUnicode != pEnd ) -++ { -++ if ( *pUnicode == 'n' ) -++ aBuffer.appendAscii( "\n", 1 ); -++ else -++ aBuffer.append( *pUnicode ); -++ } -++ } -++ else if ( *pUnicode == '"' ) -++ bQuoted = !bQuoted; -++ else if ( *pUnicode == ' ' && !bQuoted ) -++ aList.push_back( aBuffer.makeStringAndClear() ); -++ else -++ aBuffer.append( *pUnicode ); -++ } -++ aList.push_back( aBuffer.makeStringAndClear() ); -++ -++ return aList; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxCommandThread.hxx fpicker/source/unx/tde_unx/UnxCommandThread.hxx -+--- fpicker/source/unx/tde_unx/UnxCommandThread.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxCommandThread.hxx 2011-08-17 14:06:49.721131468 -0500 -+@@ -0,0 +1,136 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _UNXCOMMANDTHREAD_HXX_ -++#define _UNXCOMMANDTHREAD_HXX_ -++ -++#include -++#include -++ -++#include -++#include -++#include -++#include -++ -++#include -++ -++#include -++ -++class UnxFilePickerNotifyThread; -++ -++/** Synchronization for the 'thread-less' version of the fpicker. -++ -++ Something like osl::Condition, but calls Application::Yield() while in -++ wait(). -++*/ -++class YieldingCondition -++{ -++ ::osl::Mutex m_aMutex; -++ bool m_bValue; -++ -++ bool get() -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ return m_bValue; -++ } -++ -++public: -++ YieldingCondition() { reset(); } -++ -++ void reset() -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ m_bValue = false; -++ } -++ -++ void set() -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ m_bValue = true; -++ } -++ -++ void wait() -++ { -++ while ( !get() ) -++ Application::Yield(); -++ } -++}; -++ -++class UnxFilePickerCommandThread : public ::osl::Thread -++{ -++protected: -++ UnxFilePickerNotifyThread *m_pNotifyThread; -++ int m_nReadFD; -++ -++ ::osl::Mutex m_aMutex; -++ -++ YieldingCondition m_aExecCondition; -++ sal_Bool m_aResult; -++ -++ ::osl::Condition m_aGetCurrentFilterCondition; -++ ::rtl::OUString m_aGetCurrentFilter; -++ -++ ::osl::Condition m_aGetDirectoryCondition; -++ ::rtl::OUString m_aGetDirectory; -++ -++ ::osl::Condition m_aGetFilesCondition; -++ ::std::list< ::rtl::OUString > m_aGetFiles; -++ -++ ::osl::Condition m_aGetValueCondition; -++ ::com::sun::star::uno::Any m_aGetValue; -++ -++public: -++ UnxFilePickerCommandThread( UnxFilePickerNotifyThread *pNotifyThread, int nReadFD ); -++ ~UnxFilePickerCommandThread(); -++ -++ YieldingCondition& SAL_CALL execCondition() { return m_aExecCondition; } -++ sal_Bool SAL_CALL result(); -++ -++ ::osl::Condition& SAL_CALL getCurrentFilterCondition() { return m_aGetCurrentFilterCondition; } -++ ::rtl::OUString SAL_CALL getCurrentFilter(); -++ -++ ::osl::Condition& SAL_CALL getDirectoryCondition() { return m_aGetDirectoryCondition; } -++ ::rtl::OUString SAL_CALL getDirectory(); -++ -++ ::osl::Condition& SAL_CALL getFilesCondition() { return m_aGetFilesCondition; } -++ ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles(); -++ -++ ::osl::Condition& SAL_CALL getValueCondition() { return m_aGetValueCondition; } -++ ::com::sun::star::uno::Any SAL_CALL getValue(); -++ -++protected: -++ virtual void SAL_CALL run(); -++ -++ virtual void SAL_CALL handleCommand( const ::rtl::OUString &rCommand/*, sal_Bool &rQuit*/ ); -++ ::std::list< ::rtl::OUString > SAL_CALL tokenize( const ::rtl::OUString &rCommand ); -++}; -++ -++#endif // _UNXCOMMANDTHREAD_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxFilePicker.cxx fpicker/source/unx/tde_unx/UnxFilePicker.cxx -+--- fpicker/source/unx/tde_unx/UnxFilePicker.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxFilePicker.cxx 2011-08-17 14:07:44.765348071 -0500 -+@@ -0,0 +1,932 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++#include -++#include -++#include -++#include -++ -++#include -++ -++#include -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++ -++#include -++ -++using namespace ::com::sun::star; -++ -++using namespace ::com::sun::star::ui::dialogs; -++using namespace ::com::sun::star::ui::dialogs::TemplateDescription; -++ -++////////////////////////////////////////////////////////////////////////// -++// helper functions -++////////////////////////////////////////////////////////////////////////// -++ -++namespace -++{ -++ // controling event notifications -++ const bool STARTUP_SUSPENDED = true; -++ const bool STARTUP_ALIVE = false; -++ -++ uno::Sequence SAL_CALL FilePicker_getSupportedServiceNames() -++ { -++ uno::Sequence aRet(3); -++ aRet[0] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.FilePicker"); -++ aRet[1] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.SystemFilePicker"); -++ aRet[2] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.TDEFilePicker"); -++ return aRet; -++ } -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// UnxFilePicker -++////////////////////////////////////////////////////////////////////////// -++ -++UnxFilePicker::UnxFilePicker( const uno::Reference& xServiceMgr ) -++ : cppu::WeakComponentImplHelper8< -++ XFilterManager, -++ XFilterGroupManager, -++ XFilePickerControlAccess, -++ XFilePickerNotifier, -++// TODO XFilePreview, -++ lang::XInitialization, -++ util::XCancellable, -++ lang::XEventListener, -++ lang::XServiceInfo>( m_rbHelperMtx ), -++ m_xServiceMgr( xServiceMgr ), -++ m_nFilePickerPid( -1 ), -++ m_nFilePickerWrite( -1 ), -++ m_nFilePickerRead( -1 ), -++ m_pNotifyThread( NULL ), -++ m_pCommandThread( NULL ), -++ m_pResMgr( CREATEVERSIONRESMGR( fps_office ) ) -++{ -++} -++ -++UnxFilePicker::~UnxFilePicker() -++{ -++ if ( m_nFilePickerPid > 0 ) -++ { -++ sendCommand( ::rtl::OUString::createFromAscii( "exit" ) ); -++ waitpid( m_nFilePickerPid, NULL, 0 ); -++ } -++ -++ if ( m_pCommandThread ) -++ { -++ m_pCommandThread->join(); -++ -++ delete m_pCommandThread, m_pCommandThread = NULL; -++ } -++ -++ if ( m_pNotifyThread ) -++ { -++ m_pNotifyThread->exit(); -++ -++ m_pNotifyThread->join(); -++ -++ delete m_pNotifyThread, m_pNotifyThread = NULL; -++ } -++ -++ if ( m_nFilePickerWrite >= 0 ) -++ close( m_nFilePickerWrite ); -++ -++ if ( m_nFilePickerRead >= 0 ) -++ close( m_nFilePickerRead ); -++ -++ delete m_pResMgr, m_pResMgr = NULL; -++} -++ -++void SAL_CALL UnxFilePicker::addFilePickerListener( const uno::Reference& xListener ) -++ throw( uno::RuntimeException ) -++{ -++ OSL_ASSERT( m_pNotifyThread ); -++ osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_pNotifyThread->addFilePickerListener( xListener ); -++} -++ -++void SAL_CALL UnxFilePicker::removeFilePickerListener( const uno::Reference& xListener ) -++ throw( uno::RuntimeException ) -++{ -++ OSL_ASSERT( m_pNotifyThread ); -++ osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_pNotifyThread->removeFilePickerListener( xListener ); -++} -++ -++void SAL_CALL UnxFilePicker::setTitle( const rtl::OUString &rTitle ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setTitle " ); -++ appendEscaped( aBuffer, rTitle ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++sal_Int16 SAL_CALL UnxFilePicker::execute() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ -++ // this is _not_ an osl::Condition, see i#93366 -++ m_pCommandThread->execCondition().reset(); -++ -++ sendCommand( ::rtl::OUString::createFromAscii( "exec" ) ); -++ -++ m_pCommandThread->execCondition().wait(); -++ -++ return m_pCommandThread->result(); -++} -++ -++void SAL_CALL UnxFilePicker::setMultiSelectionMode( sal_Bool bMode ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUString aString = bMode? -++ ::rtl::OUString::createFromAscii( "setMultiSelection true" ): -++ ::rtl::OUString::createFromAscii( "setMultiSelection false" ); -++ -++ sendCommand( aString ); -++} -++ -++void SAL_CALL UnxFilePicker::setDefaultName( const ::rtl::OUString &rName ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setDefaultName " ); -++ appendEscaped( aBuffer, rName ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++void SAL_CALL UnxFilePicker::setDisplayDirectory( const rtl::OUString &rDirectory ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setDirectory " ); -++ appendEscaped( aBuffer, rDirectory ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++rtl::OUString SAL_CALL UnxFilePicker::getDisplayDirectory() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ sendCommand( ::rtl::OUString::createFromAscii( "getDirectory" ), -++ m_pCommandThread->getDirectoryCondition() ); -++ -++ return m_pCommandThread->getDirectory(); -++} -++ -++uno::Sequence< ::rtl::OUString > SAL_CALL UnxFilePicker::getFiles() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ sendCommand( ::rtl::OUString::createFromAscii( "getFiles" ), -++ m_pCommandThread->getFilesCondition() ); -++ -++ return m_pCommandThread->getFiles(); -++} -++ -++void SAL_CALL UnxFilePicker::appendFilter( const ::rtl::OUString &rTitle, const ::rtl::OUString &rFilter ) -++ throw( lang::IllegalArgumentException, uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "appendFilter " ); -++ appendEscaped( aBuffer, rTitle ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, rFilter ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++void SAL_CALL UnxFilePicker::setCurrentFilter( const rtl::OUString &rTitle ) -++ throw( lang::IllegalArgumentException, uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setCurrentFilter " ); -++ appendEscaped( aBuffer, rTitle ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++rtl::OUString SAL_CALL UnxFilePicker::getCurrentFilter() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ sendCommand( ::rtl::OUString::createFromAscii( "getCurrentFilter" ), -++ m_pCommandThread->getCurrentFilterCondition() ); -++ -++ return m_pCommandThread->getCurrentFilter(); -++} -++ -++void SAL_CALL UnxFilePicker::appendFilterGroup( const rtl::OUString &rGroupTitle, const uno::Sequence &rFilters ) -++ throw( lang::IllegalArgumentException, uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "appendFilterGroup " ); -++ appendEscaped( aBuffer, rGroupTitle ); -++ -++ for ( sal_Int32 i = 0; i < rFilters.getLength(); ++i ) -++ { -++ beans::StringPair aPair = rFilters[i]; -++ -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aPair.First ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aPair.Second ); -++ } -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++void SAL_CALL UnxFilePicker::setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const uno::Any &rValue ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUString aType; -++ ::rtl::OUString aAction; -++ sal_Int32 nTitleId; -++ -++ if ( controlIdInfo( nControlId, aType, nTitleId ) && controlActionInfo( nControlAction, aAction ) ) -++ { -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setValue " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( " ", 1 ); -++ aBuffer.append( aAction ); -++ -++ if ( aType.equalsAscii( "checkbox" ) ) -++ { -++ sal_Bool bControlValue; -++ if ( ( rValue >>= bControlValue ) && bControlValue ) -++ aBuffer.appendAscii( " true" ); -++ else -++ aBuffer.appendAscii( " false" ); -++ } -++ else if ( aType.equalsAscii( "listbox" ) ) -++ { -++ switch ( nControlAction ) -++ { -++ case ControlActions::ADD_ITEM: -++ case ControlActions::SET_HELP_URL: -++ { -++ ::rtl::OUString aString; -++ if ( rValue >>= aString ) -++ { -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aString ); -++ } -++ } -++ break; -++ -++ case ControlActions::ADD_ITEMS: -++ { -++ uno::Sequence< ::rtl::OUString > aSequence; -++ if ( rValue >>= aSequence ) -++ { -++ for ( sal_Int32 nIdx = 0; nIdx < aSequence.getLength(); ++nIdx ) -++ { -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aSequence[nIdx] ); -++ } -++ -++ } -++ } -++ break; -++ -++ case ControlActions::DELETE_ITEM: -++ case ControlActions::SET_SELECT_ITEM: -++ { -++ sal_Int32 nInt; -++ if ( rValue >>= nInt ) -++ { -++ aBuffer.appendAscii( " ", 1 ); -++ aBuffer.append( nInt ); -++ } -++ } -++ break; -++ -++ default: -++ // nothing -++ break; -++ } -++ } -++ // TODO else if push button... -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++ } -++} -++ -++uno::Any SAL_CALL UnxFilePicker::getValue( sal_Int16 nControlId, sal_Int16 nControlAction ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUString aAction; -++ -++ if ( controlActionInfo( nControlAction, aAction ) ) -++ { -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "getValue " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( " ", 1 ); -++ aBuffer.append( aAction ); -++ -++ sendCommand( aBuffer.makeStringAndClear(), -++ m_pCommandThread->getValueCondition() ); -++ -++ return m_pCommandThread->getValue(); -++ } -++ -++ return uno::Any(); -++} -++ -++void SAL_CALL UnxFilePicker::enableControl( sal_Int16 nControlId, sal_Bool bEnable ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "enableControl " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( bEnable? " true": " false" ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++void SAL_CALL UnxFilePicker::setLabel( sal_Int16 nControlId, const ::rtl::OUString &rLabel ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setLabel " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, rLabel ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++rtl::OUString SAL_CALL UnxFilePicker::getLabel(sal_Int16 /*nControlId*/) -++ throw ( uno::RuntimeException ) -++{ -++ // FIXME getLabel() is not yet implemented -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ // TODO return m_pImpl->getLabel(nControlId); -++ return ::rtl::OUString(); -++} -++ -++/* TODO -++uno::Sequence SAL_CALL UnxFilePicker::getSupportedImageFormats() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getSupportedImageFormats(); -++} -++ -++sal_Int32 SAL_CALL UnxFilePicker::getTargetColorDepth() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getTargetColorDepth(); -++} -++ -++sal_Int32 SAL_CALL UnxFilePicker::getAvailableWidth() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getAvailableWidth(); -++} -++ -++sal_Int32 SAL_CALL UnxFilePicker::getAvailableHeight() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getAvailableHeight(); -++} -++ -++void SAL_CALL UnxFilePicker::setImage( sal_Int16 aImageFormat, const uno::Any &rImage ) -++ throw( lang::IllegalArgumentException, uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_pImpl->setImage( aImageFormat, aImage ); -++} -++ -++sal_Bool SAL_CALL UnxFilePicker::setShowState( sal_Bool bShowState ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->setShowState( bShowState ); -++} -++ -++sal_Bool SAL_CALL UnxFilePicker::getShowState() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getShowState(); -++} -++*/ -++ -++void SAL_CALL UnxFilePicker::initialize( const uno::Sequence &rArguments ) -++ throw( uno::Exception, uno::RuntimeException ) -++{ -++ initFilePicker(); -++ -++ // parameter checking -++ uno::Any aAny; -++ if ( 0 == rArguments.getLength( ) ) -++ throw lang::IllegalArgumentException( -++ rtl::OUString::createFromAscii( "no arguments" ), -++ static_cast< XFilePicker* >( this ), 1 ); -++ -++ aAny = rArguments[0]; -++ -++ if ( ( aAny.getValueType() != ::getCppuType( (sal_Int16*)0 ) ) && ( aAny.getValueType() != ::getCppuType( (sal_Int8*)0 ) ) ) -++ throw lang::IllegalArgumentException( -++ rtl::OUString::createFromAscii( "invalid argument type" ), -++ static_cast< XFilePicker* >( this ), 1 ); -++ -++ sal_Int16 templateId = -1; -++ aAny >>= templateId; -++ -++ ::rtl::OUString aTypeOpen = ::rtl::OUString::createFromAscii( "setType \"open\"" ); -++ ::rtl::OUString aTypeSaveAs = ::rtl::OUString::createFromAscii( "setType \"save\"" ); -++ -++ switch ( templateId ) -++ { -++ case FILEOPEN_SIMPLE: -++ sendCommand( aTypeOpen ); -++ break; -++ -++ case FILESAVE_SIMPLE: -++ sendCommand( aTypeSaveAs ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION_PASSWORD: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PASSWORD ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PASSWORD ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION_SELECTION: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_SELECTION ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION_TEMPLATE: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::LISTBOX_TEMPLATE ); -++ break; -++ -++ case FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE: -++ sendCommand( aTypeOpen ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_LINK ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PREVIEW ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE ); -++ break; -++ -++ case FILEOPEN_PLAY: -++ sendCommand( aTypeOpen ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::PUSHBUTTON_PLAY ); -++ break; -++ -++ case FILEOPEN_READONLY_VERSION: -++ sendCommand( aTypeOpen ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_READONLY ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::LISTBOX_VERSION ); -++ break; -++ -++ case FILEOPEN_LINK_PREVIEW: -++ sendCommand( aTypeOpen ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_LINK ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PREVIEW ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ break; -++ -++ default: -++ throw lang::IllegalArgumentException( -++ rtl::OUString::createFromAscii( "Unknown template" ), -++ static_cast< XFilePicker* >( this ), -++ 1 ); -++ } -++} -++ -++void SAL_CALL UnxFilePicker::cancel() -++ throw ( uno::RuntimeException ) -++{ -++ // FIXME cancel() is not implemented -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ // TODO m_pImpl->cancel(); -++} -++ -++void SAL_CALL UnxFilePicker::disposing( const lang::EventObject &rEvent ) -++ throw( uno::RuntimeException ) -++{ -++ uno::Reference xFilePickerListener( rEvent.Source, uno::UNO_QUERY ); -++ -++ if ( xFilePickerListener.is() ) -++ removeFilePickerListener( xFilePickerListener ); -++} -++ -++rtl::OUString SAL_CALL UnxFilePicker::getImplementationName() -++ throw( uno::RuntimeException ) -++{ -++ return rtl::OUString::createFromAscii( FILE_PICKER_IMPL_NAME ); -++} -++ -++sal_Bool SAL_CALL UnxFilePicker::supportsService( const rtl::OUString& ServiceName ) -++ throw( uno::RuntimeException ) -++{ -++ uno::Sequence< ::rtl::OUString > SupportedServicesNames = FilePicker_getSupportedServiceNames(); -++ -++ for ( sal_Int32 n = SupportedServicesNames.getLength(); n--; ) -++ { -++ if ( SupportedServicesNames[n].compareTo( ServiceName ) == 0 ) -++ return sal_True; -++ } -++ -++ return sal_False; -++} -++ -++uno::Sequence< ::rtl::OUString > SAL_CALL UnxFilePicker::getSupportedServiceNames() -++ throw( uno::RuntimeException ) -++{ -++ return FilePicker_getSupportedServiceNames(); -++} -++ -++void UnxFilePicker::initFilePicker() -++{ -++ int aFiledesStdin[2], aFiledesStdout[2]; -++ if ( pipe( aFiledesStdin ) < 0 || pipe( aFiledesStdout ) < 0 ) -++ return; -++ -++ m_nFilePickerPid = fork(); -++ if ( m_nFilePickerPid < 0 ) -++ return; -++ -++ if ( m_nFilePickerPid == 0 ) -++ { -++ // Child... -++ close( aFiledesStdin[1] ); // write end of the pipe -++ dup2( aFiledesStdin[0], 0 ); -++ close( aFiledesStdin[0] ); -++ -++ close( aFiledesStdout[0] ); // read end of the pipe -++ dup2( aFiledesStdout[1], 1 ); -++ close( aFiledesStdout[1] ); -++ -++#if OSL_DEBUG_LEVEL == 0 -++ int nRedirect = open( "/dev/null", O_WRONLY ); -++ if( nRedirect != -1 ) -++ { -++ dup2( nRedirect, 2 ); -++ } -++#endif -++ -++ // The executable name -++ char pFname[1024]; snprintf(pFname, sizeof pFname, "%s/%s", getenv("OLDPWD"), "tdefilepicker"); -++ -++ // ID of the main window -++ const int nIdLen = 20; -++ char pWinId[nIdLen] = "0"; -++ -++ // TODO pass here the real parent (not possible for system dialogs -++ // yet), and default to GetDefDialogParent() only when the real parent -++ // is NULL -++ Window *pParentWin = Application::GetDefDialogParent(); -++ if ( pParentWin ) -++ { -++ const SystemEnvData* pSysData = ((SystemWindow *)pParentWin)->GetSystemData(); -++ if ( pSysData ) -++ { -++ snprintf( pWinId, nIdLen, "%ld", pSysData->aWindow ); // unx only -++ pWinId[nIdLen-1] = 0; -++ } -++ } -++ -++ // Execute the fpicker implementation -++ execlp( pFname, pFname, "--winid", pWinId, NULL ); -++ -++ // Error, finish the child -++ exit( -1 ); -++ } -++ -++ // Parent continues -++ close( aFiledesStdin[0] ); -++ m_nFilePickerWrite = aFiledesStdin[1]; -++ -++ close( aFiledesStdout[1] ); -++ m_nFilePickerRead = aFiledesStdout[0]; -++ -++ // Create the notify thread -++ if ( !m_pNotifyThread ) -++ m_pNotifyThread = new UnxFilePickerNotifyThread( this ); -++ -++ // Create the command thread -++ if ( !m_pCommandThread ) -++ m_pCommandThread = new UnxFilePickerCommandThread( m_pNotifyThread, m_nFilePickerRead ); -++ -++ // Start the threads -++ m_pNotifyThread->create(); -++ m_pCommandThread->create(); -++ -++ return; -++} -++ -++void UnxFilePicker::checkFilePicker() throw( ::com::sun::star::uno::RuntimeException ) -++{ -++ if ( m_nFilePickerPid > 0 ) -++ { -++ // TODO check if external file picker is runnning -++ } -++ else -++ { -++ throw uno::RuntimeException( -++ ::rtl::OUString::createFromAscii( "the external file picker does not run" ), -++ *this ); -++ } -++} -++ -++void UnxFilePicker::sendCommand( const ::rtl::OUString &rCommand ) -++{ -++ if ( m_nFilePickerWrite < 0 ) -++ return; -++ -++ ::rtl::OString aUtfString = OUStringToOString( rCommand + ::rtl::OUString::createFromAscii( "\n" ), RTL_TEXTENCODING_UTF8 ); -++ -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "UnxFilePicker sent: \"" << aUtfString.getStr() << "\"" << ::std::endl; -++#endif -++ -++ write( m_nFilePickerWrite, aUtfString.getStr(), aUtfString.getLength() ); -++} -++ -++void UnxFilePicker::sendCommand( const ::rtl::OUString &rCommand, ::osl::Condition &rCondition ) -++{ -++ rCondition.reset(); -++ -++ sendCommand( rCommand ); -++ -++ rCondition.wait(); -++} -++ -++void UnxFilePicker::appendEscaped( ::rtl::OUStringBuffer &rBuffer, const ::rtl::OUString &rString ) -++{ -++ const sal_Unicode *pUnicode = rString.getStr(); -++ const sal_Unicode *pEnd = pUnicode + rString.getLength(); -++ -++ rBuffer.appendAscii( "\"" , 1 ); -++ -++ for ( ; pUnicode != pEnd; ++pUnicode ) -++ { -++ if ( *pUnicode == '\\' ) -++ rBuffer.appendAscii( "\\\\", 2 ); -++ else if ( *pUnicode == '"' ) -++ rBuffer.appendAscii( "\\\"", 2 ); -++ else if ( *pUnicode == '\n' ) -++ rBuffer.appendAscii( "\\n", 2 ); -++ else -++ rBuffer.append( *pUnicode ); -++ } -++ -++ rBuffer.appendAscii( "\"", 1 ); -++} -++ -++sal_Bool UnxFilePicker::controlIdInfo( sal_Int16 nControlId, ::rtl::OUString &rType, sal_Int32 &rTitleId ) -++{ -++ typedef struct { -++ sal_Int16 nId; -++ const ::rtl::OUString *pType; -++ sal_Int32 nTitle; -++ } ElementToName; -++ -++ const ::rtl::OUString aCheckBox( RTL_CONSTASCII_USTRINGPARAM( "checkbox" ) ); -++ const ::rtl::OUString aControl( RTL_CONSTASCII_USTRINGPARAM( "control" ) ); -++ const ::rtl::OUString aEdit( RTL_CONSTASCII_USTRINGPARAM( "edit" ) ); -++ const ::rtl::OUString aLabel( RTL_CONSTASCII_USTRINGPARAM( "label" ) ); -++ const ::rtl::OUString aListBox( RTL_CONSTASCII_USTRINGPARAM( "listbox" ) ); -++ const ::rtl::OUString aPushButton( RTL_CONSTASCII_USTRINGPARAM( "pushbutton" ) ); -++ -++ const ElementToName *pPtr; -++ const ElementToName pArray[] = -++ { -++ { CommonFilePickerElementIds::PUSHBUTTON_OK, &aPushButton, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::PUSHBUTTON_CANCEL, &aPushButton, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::LISTBOX_FILTER, &aListBox, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::CONTROL_FILEVIEW, &aControl, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::EDIT_FILEURL, &aEdit, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::LISTBOX_FILTER_LABEL, &aLabel, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::EDIT_FILEURL_LABEL, &aLabel, 0/*FIXME?*/ }, -++ -++ { ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, &aCheckBox, STR_SVT_FILEPICKER_AUTO_EXTENSION }, -++ { ExtendedFilePickerElementIds::CHECKBOX_PASSWORD, &aCheckBox, STR_SVT_FILEPICKER_PASSWORD }, -++ { ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS, &aCheckBox, STR_SVT_FILEPICKER_FILTER_OPTIONS }, -++ { ExtendedFilePickerElementIds::CHECKBOX_READONLY, &aCheckBox, STR_SVT_FILEPICKER_READONLY }, -++ { ExtendedFilePickerElementIds::CHECKBOX_LINK, &aCheckBox, STR_SVT_FILEPICKER_INSERT_AS_LINK }, -++ { ExtendedFilePickerElementIds::CHECKBOX_PREVIEW, &aCheckBox, STR_SVT_FILEPICKER_SHOW_PREVIEW }, -++ { ExtendedFilePickerElementIds::PUSHBUTTON_PLAY, &aPushButton, STR_SVT_FILEPICKER_PLAY }, -++ { ExtendedFilePickerElementIds::LISTBOX_VERSION, &aListBox, STR_SVT_FILEPICKER_VERSION }, -++ { ExtendedFilePickerElementIds::LISTBOX_TEMPLATE, &aListBox, STR_SVT_FILEPICKER_TEMPLATES }, -++ { ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE, &aListBox, STR_SVT_FILEPICKER_IMAGE_TEMPLATE }, -++ { ExtendedFilePickerElementIds::CHECKBOX_SELECTION, &aCheckBox, STR_SVT_FILEPICKER_SELECTION }, -++ { 0, 0, 0 } -++ }; -++ -++ for ( pPtr = pArray; pPtr->nId && ( pPtr->nId != nControlId ); ++pPtr ) -++ ; -++ -++ if ( pPtr->nId == nControlId ) -++ { -++ rType = *(pPtr->pType); -++ rTitleId = pPtr->nTitle; -++ -++ return sal_True; -++ } -++ -++ return sal_False; -++} -++ -++sal_Bool UnxFilePicker::controlActionInfo( sal_Int16 nControlAction, ::rtl::OUString &rType ) -++{ -++ typedef struct { -++ sal_Int16 nId; -++ const ::rtl::OUString pType; -++ } ElementToName; -++ -++ const ElementToName *pPtr; -++ const ElementToName pArray[] = -++ { -++ { ControlActions::ADD_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "addItem" ) ) }, -++ { ControlActions::ADD_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "addItems" ) ) }, -++ { ControlActions::DELETE_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "deleteItem" ) ) }, -++ { ControlActions::DELETE_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "deleteItems" ) ) }, -++ { ControlActions::SET_SELECT_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setSelectedItem" ) ) }, -++ { ControlActions::GET_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getItems" ) ) }, -++ { ControlActions::GET_SELECTED_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getSelectedItem" ) ) }, -++ { ControlActions::GET_SELECTED_ITEM_INDEX, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getSelectedItemIndex" ) ) }, -++ { ControlActions::SET_HELP_URL, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setHelpURL" ) ) }, -++ { ControlActions::GET_HELP_URL, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getHelpURL" ) ) }, -++ { 0, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "noAction" ) ) } -++ }; -++ -++ for ( pPtr = pArray; pPtr->nId && ( pPtr->nId != nControlAction ); ++pPtr ) -++ ; -++ -++ rType = pPtr->pType; -++ -++ return sal_True; -++} -++ -++void UnxFilePicker::sendAppendControlCommand( sal_Int16 nControlId ) -++{ -++ ::rtl::OUString aType; -++ sal_Int32 nTitleId; -++ -++ if ( controlIdInfo( nControlId, aType, nTitleId ) ) -++ { -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "appendControl " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aType ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, m_pResMgr? String( ResId( nTitleId, *m_pResMgr ) ): String() ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxFilePicker.hxx fpicker/source/unx/tde_unx/UnxFilePicker.hxx -+--- fpicker/source/unx/tde_unx/UnxFilePicker.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxFilePicker.hxx 2011-08-17 14:07:41.705113628 -0500 -+@@ -0,0 +1,178 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _UNXFILEPICKER_HXX_ -++#define _UNXFILEPICKER_HXX_ -++ -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++#include -++ -++class UnxFilePickerCommandThread; -++class UnxFilePickerNotifyThread; -++class ResMgr; -++ -++class UnxFilePickerDummy -++{ -++protected: -++ osl::Mutex m_aMutex; -++ osl::Mutex m_rbHelperMtx; -++}; -++ -++class UnxFilePicker : -++ public UnxFilePickerDummy, -++ public cppu::WeakComponentImplHelper8< -++ ::com::sun::star::ui::dialogs::XFilterManager, -++ ::com::sun::star::ui::dialogs::XFilterGroupManager, -++ ::com::sun::star::ui::dialogs::XFilePickerControlAccess, -++ ::com::sun::star::ui::dialogs::XFilePickerNotifier, -++// TODO ::com::sun::star::ui::dialogs::XFilePreview, -++ ::com::sun::star::lang::XInitialization, -++ ::com::sun::star::util::XCancellable, -++ ::com::sun::star::lang::XEventListener, -++ ::com::sun::star::lang::XServiceInfo > -++{ -++protected: -++ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xServiceMgr; // to instanciate own services -++ -++ pid_t m_nFilePickerPid; -++ int m_nFilePickerWrite; // (tde|...)filepicker gets it as stdin -++ int m_nFilePickerRead; // (tde|...)filepicker gets it as stdout -++ -++ UnxFilePickerNotifyThread *m_pNotifyThread; -++ UnxFilePickerCommandThread *m_pCommandThread; -++ -++ ResMgr *m_pResMgr; -++ -++public: -++ UnxFilePicker( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceMgr ); -++ virtual ~UnxFilePicker(); -++ -++ // XFilePickerNotifier -++ -++ virtual void SAL_CALL addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XExecutableDialog functions -++ -++ virtual void SAL_CALL setTitle( const ::rtl::OUString &rTitle ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual sal_Int16 SAL_CALL execute() throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XFilePicker functions -++ -++ virtual void SAL_CALL setMultiSelectionMode( sal_Bool bMode ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL setDefaultName( const ::rtl::OUString &rName ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL setDisplayDirectory( const ::rtl::OUString &rDirectory ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual ::rtl::OUString SAL_CALL getDisplayDirectory() throw( ::com::sun::star::uno::RuntimeException ); -++ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles() throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XFilterManager functions -++ -++ virtual void SAL_CALL appendFilter( const ::rtl::OUString &rTitle, const ::rtl::OUString &rFilter ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL setCurrentFilter( const ::rtl::OUString &rTitle ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); -++ virtual ::rtl::OUString SAL_CALL getCurrentFilter() throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XFilterGroupManager functions -++ -++ virtual void SAL_CALL appendFilterGroup( const ::rtl::OUString &rGroupTitle, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > &rFilters ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); -++ -++ // XFilePickerControlAccess functions -++ -++ virtual void SAL_CALL setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const ::com::sun::star::uno::Any &rValue ) throw (::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Any SAL_CALL getValue( sal_Int16 nControlId, sal_Int16 nControlAction ) throw (::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL enableControl( sal_Int16 nControlId, sal_Bool bEnable ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL setLabel( sal_Int16 nControlId, const ::rtl::OUString &rLabel ) throw (::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getLabel( sal_Int16 nControlId ) throw (::com::sun::star::uno::RuntimeException); -++ -++ /* TODO XFilePreview -++ -++ virtual ::com::sun::star::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats( ) throw (::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getTargetColorDepth( ) throw (::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getAvailableWidth( ) throw (::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getAvailableHeight( ) throw (::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setImage( sal_Int16 aImageFormat, const ::com::sun::star::uno::Any &rImage ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL setShowState( sal_Bool bShowState ) throw (::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL getShowState( ) throw (::com::sun::star::uno::RuntimeException); -++ */ -++ -++ // XInitialization -++ -++ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > &rArguments ) throw( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException ); -++ -++ // XCancellable -++ -++ virtual void SAL_CALL cancel( ) throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XEventListener -++ -++ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject &rEvent ) throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XServiceInfo -++ -++ virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); -++ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString &rServiceName ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException ); -++ -++private: -++ // prevent copy and assignment -++ UnxFilePicker( const UnxFilePicker& ); -++ UnxFilePicker& operator=( const UnxFilePicker& ); -++ -++protected: -++ void initFilePicker(); -++ void checkFilePicker() throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // Async sendCommand -++ void sendCommand( const ::rtl::OUString &rCommand ); -++ // Synchronized sendCommand -++ void sendCommand( const ::rtl::OUString &rCommand, ::osl::Condition &rCondition ); -++ void appendEscaped( ::rtl::OUStringBuffer &rBuffer, const ::rtl::OUString &rString ); -++ -++private: -++ sal_Bool controlIdInfo( sal_Int16 nControlId, ::rtl::OUString &rType, sal_Int32 &rTitleId ); -++ sal_Bool controlActionInfo( sal_Int16 nControlId, ::rtl::OUString &rType ); -++ void sendAppendControlCommand( sal_Int16 nControlId ); -++}; -++ -++#endif // _UNXFILEPICKER_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxFPentry.cxx fpicker/source/unx/tde_unx/UnxFPentry.cxx -+--- fpicker/source/unx/tde_unx/UnxFPentry.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxFPentry.cxx 2011-08-17 14:06:26.059319485 -0500 -+@@ -0,0 +1,128 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++ -++#include -++#include -++ -++#include "UnxFilePicker.hxx" -++#include "FPServiceInfo.hxx" -++ -++using namespace ::rtl; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++using namespace ::com::sun::star::registry; -++using namespace ::cppu; -++using ::com::sun::star::ui::dialogs::XFilePicker; -++ -++////////////////////////////////////////////////////////////////////////// -++// -++////////////////////////////////////////////////////////////////////////// -++ -++static Reference< XInterface > SAL_CALL createInstance( const Reference< XMultiServiceFactory >& rServiceManager ) -++{ -++ return Reference< XInterface >( -++ static_cast< XFilePicker* >( new UnxFilePicker( rServiceManager ) ) ); -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// the three uno functions that will be exported -++////////////////////////////////////////////////////////////////////////// -++ -++extern "C" -++{ -++ -++////////////////////////////////////////////////////////////////////////// -++// component_getImplementationEnvironment -++////////////////////////////////////////////////////////////////////////// -++ -++void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv ) -++{ -++ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// -++////////////////////////////////////////////////////////////////////////// -++ -++sal_Bool SAL_CALL component_writeInfo( void* pServiceManager, void* pRegistryKey ) -++{ -++ sal_Bool bRetVal = sal_True; -++ -++ if ( pRegistryKey ) -++ { -++ try -++ { -++ Reference< XRegistryKey > pXNewKey( static_cast< XRegistryKey* >( pRegistryKey ) ); -++ pXNewKey->createKey( OUString::createFromAscii( FILE_PICKER_REGKEY_NAME ) ); -++ } -++ catch( InvalidRegistryException& ) -++ { -++ OSL_ENSURE( sal_False, "InvalidRegistryException caught" ); -++ bRetVal = sal_False; -++ } -++ } -++ -++ return bRetVal; -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// -++////////////////////////////////////////////////////////////////////////// -++ -++void* SAL_CALL component_getFactory( const sal_Char* pImplName, uno_Interface* pSrvManager, uno_Interface* pRegistryKey ) -++{ -++ void* pRet = 0; -++ -++ if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FILE_PICKER_IMPL_NAME ) ) ) -++ { -++ Sequence< OUString > aSNS( 1 ); -++ aSNS.getArray( )[0] = OUString::createFromAscii( FILE_PICKER_SERVICE_NAME ); -++ -++ Reference< XSingleServiceFactory > xFactory ( createSingleFactory( -++ reinterpret_cast< XMultiServiceFactory* > ( pSrvManager ), -++ OUString::createFromAscii( pImplName ), -++ createInstance, -++ aSNS ) ); -++ if ( xFactory.is() ) -++ { -++ xFactory->acquire(); -++ pRet = xFactory.get(); -++ } -++ } -++ -++ return pRet; -++} -++ -++} // extern "C" -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxNotifyThread.cxx fpicker/source/unx/tde_unx/UnxNotifyThread.cxx -+--- fpicker/source/unx/tde_unx/UnxNotifyThread.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxNotifyThread.cxx 2011-08-17 14:06:06.307806939 -0500 -+@@ -0,0 +1,116 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++ -++using namespace ::com::sun::star; -++ -++////////////////////////////////////////////////////////////////////////// -++// UnxFilePickerNotifyThread -++////////////////////////////////////////////////////////////////////////// -++ -++UnxFilePickerNotifyThread::UnxFilePickerNotifyThread( UnxFilePicker *pUnxFilePicker ) -++ : m_pUnxFilePicker( pUnxFilePicker ), -++ m_bExit( sal_False ), -++ m_eNotifyType( Nothing ), -++ m_nControlId( 0 ) -++{ -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::addFilePickerListener( const uno::Reference< ui::dialogs::XFilePickerListener >& xListener ) -++ throw( uno::RuntimeException ) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_xListener = xListener; -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::removeFilePickerListener( const uno::Reference< ui::dialogs::XFilePickerListener >& xListener ) -++ throw( uno::RuntimeException ) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_xListener.clear(); -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::exit() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_bExit = sal_True; -++ -++ m_aExitCondition.reset(); -++ m_aNotifyCondition.set(); -++ -++ m_aExitCondition.wait(); -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::fileSelectionChanged() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_eNotifyType = FileSelectionChanged; -++ m_nControlId = 0; -++ -++ m_aNotifyCondition.set(); -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::run() -++{ -++ do { -++ m_aNotifyCondition.reset(); -++ m_aNotifyCondition.wait(); -++ -++ if ( m_xListener.is() && m_pUnxFilePicker ) -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ui::dialogs::FilePickerEvent aEvent( *m_pUnxFilePicker, m_nControlId ); -++ -++ switch ( m_eNotifyType ) -++ { -++ case FileSelectionChanged: -++ m_xListener->fileSelectionChanged( aEvent ); -++ break; -++ -++ // TODO More to come... -++ -++ default: -++ // nothing -++ break; -++ } -++ } -++ } while ( !m_bExit ); -++ -++ m_aExitCondition.set(); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxNotifyThread.hxx fpicker/source/unx/tde_unx/UnxNotifyThread.hxx -+--- fpicker/source/unx/tde_unx/UnxNotifyThread.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxNotifyThread.hxx 2011-08-17 14:05:56.737074019 -0500 -+@@ -0,0 +1,90 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _UNXNOTIFYTHREAD_HXX_ -++#define _UNXNOTIFYTHREAD_HXX_ -++ -++#include -++#include -++ -++#include -++#include -++#include -++ -++class UnxFilePicker; -++ -++class UnxFilePickerNotifyThread : public ::osl::Thread -++{ -++protected: -++ enum NotifyType -++ { -++ Nothing = 0, -++ FileSelectionChanged -++ // TODO More to come... -++ }; -++ -++ UnxFilePicker *m_pUnxFilePicker; -++ -++ ::osl::Mutex m_aMutex; -++ -++ ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener > m_xListener; -++ -++ sal_Bool m_bExit; -++ ::osl::Condition m_aExitCondition; -++ -++ NotifyType m_eNotifyType; -++ ::osl::Condition m_aNotifyCondition; -++ sal_Int16 m_nControlId; -++ -++public: -++ UnxFilePickerNotifyThread( UnxFilePicker *pUnxFilePicker ); -++ -++ virtual void SAL_CALL addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) -++ throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) -++ throw( ::com::sun::star::uno::RuntimeException ); -++ -++ void SAL_CALL exit(); -++ -++ void SAL_CALL fileSelectionChanged(); -++ /* TODO -++ void SAL_CALL directoryChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ); -++ rtl::OUString SAL_CALL helpRequested( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ) const; -++ void SAL_CALL controlStateChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ); -++ void SAL_CALL dialogSizeChanged( ); -++ */ -++ -++protected: -++ virtual void SAL_CALL run(); -++}; -++ -++#endif // _UNXNOTIFYTHREAD_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN shell/source/backends/tdebe/makefile.mk shell/source/backends/tdebe/makefile.mk -+--- shell/source/backends/tdebe/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/makefile.mk 2011-08-17 14:16:06.283767347 -0500 -+@@ -0,0 +1,82 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++PRJ=..$/..$/.. -++ -++PRJNAME=shell -++TARGET=tdebe -++ -++LIBTARGET=NO -++ENABLE_EXCEPTIONS=TRUE -++VISIBILITY_HIDDEN=TRUE -++ -++# --- Settings --- -++ -++.INCLUDE : settings.mk -++ -++# For some of the included external TDE headers, GCC complains about shadowed -++# symbols in instantiated template code only at the end of a compilation unit, -++# so the only solution is to disable that warning here: -++.IF "$(COM)" == "GCC" -++CFLAGSCXX+=-Wno-shadow -++.ENDIF -++ -++UNIXTEXT=$(MISC)/$(TARGET)1-ucd.txt -++ -++# no "lib" prefix -++DLLPRE = -++ -++.IF "$(ENABLE_TDE)" == "TRUE" -++ -++CFLAGS+=$(TDE_CFLAGS) -++ -++# --- Files --- -++ -++SLOFILES=\ -++ $(SLO)$/tdeaccess.obj \ -++ $(SLO)$/tdebackend.obj -++ -++SHL1NOCHECK=TRUE -++SHL1TARGET=$(TARGET)1.uno -++SHL1OBJS=$(SLOFILES) -++SHL1DEF=$(MISC)$/$(SHL1TARGET).def -++ -++SHL1IMPLIB=i$(SHL1TARGET) -++SHL1LINKFLAGS+=$(TDE_LIBS) -lkio -++SHL1STDLIBS= \ -++ $(CPPUHELPERLIB) \ -++ $(CPPULIB) \ -++ $(SALLIB) -++ -++SHL1DEF=$(MISC)$/$(SHL1TARGET).def -++DEF1NAME=$(SHL1TARGET) -++ -++.ENDIF # "$(ENABLE_TDE)" == "TRUE" -++ -++# --- Targets --- -++ -++.INCLUDE : target.mk -+diff -urN shell/source/backends/tdebe/tdeaccess.cxx shell/source/backends/tdebe/tdeaccess.cxx -+--- shell/source/backends/tdebe/tdeaccess.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/tdeaccess.cxx 2011-08-17 14:16:46.426842396 -0500 -+@@ -0,0 +1,319 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++* -++* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++* -++* Copyright 2000, 2010 Oracle and/or its affiliates. -++* Copyright 2011 Timothy Pearson -++* -++* OpenOffice.org - a multi-platform office productivity suite -++* -++* This file is part of OpenOffice.org. -++* -++* OpenOffice.org is free software: you can redistribute it and/or modify -++* it under the terms of the GNU Lesser General Public License version 3 -++* only, as published by the Free Software Foundation. -++* -++* OpenOffice.org 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 Lesser General Public License version 3 for more details -++* (a copy is included in the LICENSE file that accompanied this code). -++* -++* You should have received a copy of the GNU Lesser General Public License -++* version 3 along with OpenOffice.org. If not, see -++* -++* for a copy of the LGPLv3 License. -++* -++************************************************************************/ -++ -++#include "precompiled_shell.hxx" -++#include "sal/config.h" -++ -++#include "com/sun/star/uno/Any.hxx" -++#include "cppu/unotype.hxx" -++#include "osl/diagnose.h" -++#include "osl/file.h" -++#include "rtl/string.h" -++#include "rtl/ustring.hxx" -++ -++#include "tde_headers.h" -++ -++#include "tdeaccess.hxx" -++ -++#define SPACE ' ' -++#define COMMA ',' -++#define SEMI_COLON ';' -++ -++namespace tdeaccess { -++ -++namespace { -++ -++namespace css = com::sun::star ; -++namespace uno = css::uno ; -++ -++} -++ -++css::beans::Optional< css::uno::Any > getValue(rtl::OUString const & id) { -++ if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ExternalMailer"))) { -++ KEMailSettings aEmailSettings; -++ TQString aClientProgram; -++ ::rtl::OUString sClientProgram; -++ -++ aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram ); -++ if ( aClientProgram.isEmpty() ) -++ aClientProgram = "kmail"; -++ else -++ aClientProgram = aClientProgram.section(SPACE, 0, 0); -++ sClientProgram = (const sal_Unicode *) aClientProgram.ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sClientProgram ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight"))) -++ { -++ TQFont aFixedFont; -++ short nFontHeight; -++ -++ aFixedFont = KGlobalSettings::fixedFont(); -++ nFontHeight = aFixedFont.pointSize(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( nFontHeight ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName"))) -++ { -++ TQFont aFixedFont; -++ TQString aFontName; -++ :: rtl::OUString sFontName; -++ -++ aFixedFont = KGlobalSettings::fixedFont(); -++ aFontName = aFixedFont.family(); -++ sFontName = (const sal_Unicode *) aFontName.ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sFontName ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport"))) -++ { -++ /* does not make much sense without an accessibility bridge */ -++ sal_Bool ATToolSupport = sal_False; -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( rtl::OUString::valueOf( ATToolSupport ) ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable"))) -++ { -++ TQString aDocumentsDir( KGlobalSettings::documentPath() ); -++ rtl::OUString sDocumentsDir; -++ rtl::OUString sDocumentsURL; -++ if ( aDocumentsDir.endsWith(TQChar('/')) ) -++ aDocumentsDir.truncate ( aDocumentsDir.length() - 1 ); -++ sDocumentsDir = (const sal_Unicode *) aDocumentsDir.ucs2(); -++ osl_getFileURLFromSystemPath( sDocumentsDir.pData, &sDocumentsURL.pData ); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sDocumentsURL ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName"))) -++ { -++ TQString aFTPProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aFTPProxy = KProtocolManager::proxyFor( "FTP" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aFTPProxy.isEmpty() ) -++ { -++ KURL aProxy(aFTPProxy); -++ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sProxy ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort"))) -++ { -++ TQString aFTPProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aFTPProxy = KProtocolManager::proxyFor( "FTP" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aFTPProxy.isEmpty() ) -++ { -++ KURL aProxy(aFTPProxy); -++ sal_Int32 nPort = aProxy.port(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( nPort ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName"))) -++ { -++ TQString aHTTPProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aHTTPProxy.isEmpty() ) -++ { -++ KURL aProxy(aHTTPProxy); -++ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sProxy ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort"))) -++ { -++ TQString aHTTPProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aHTTPProxy.isEmpty() ) -++ { -++ KURL aProxy(aHTTPProxy); -++ sal_Int32 nPort = aProxy.port(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( nPort ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName"))) -++ { -++ TQString aHTTPSProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aHTTPSProxy.isEmpty() ) -++ { -++ KURL aProxy(aHTTPSProxy); -++ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sProxy ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort"))) -++ { -++ TQString aHTTPSProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aHTTPSProxy.isEmpty() ) -++ { -++ KURL aProxy(aHTTPSProxy); -++ sal_Int32 nPort = aProxy.port(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( nPort ) ); -++ } -++ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy"))) { -++ TQString aNoProxyFor; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++ aNoProxyFor = KProtocolManager::noProxyFor(); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aNoProxyFor.isEmpty() ) -++ { -++ ::rtl::OUString sNoProxyFor; -++ -++ aNoProxyFor = aNoProxyFor.replace( COMMA, SEMI_COLON ); -++ sNoProxyFor = (const sal_Unicode *) aNoProxyFor.ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sNoProxyFor ) ); -++ } -++ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) { -++ int nProxyType; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++ nProxyType = 1; -++ break; -++ default: // No proxy is used -++ nProxyType = 0; -++ } -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( (sal_Int32) nProxyType ) ); -++ } else { -++ OSL_ASSERT(false); // this cannot happen -++ } -++ return css::beans::Optional< css::uno::Any >(); -++} -++ -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN shell/source/backends/tdebe/tdeaccess.hxx shell/source/backends/tdebe/tdeaccess.hxx -+--- shell/source/backends/tdebe/tdeaccess.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/tdeaccess.hxx 2011-08-17 14:16:31.565704001 -0500 -+@@ -0,0 +1,51 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++* -++* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++* -++* Copyright 2000, 2010 Oracle and/or its affiliates. -++* Copyright 2011 Timothy Pearson -++* -++* OpenOffice.org - a multi-platform office productivity suite -++* -++* This file is part of OpenOffice.org. -++* -++* OpenOffice.org is free software: you can redistribute it and/or modify -++* it under the terms of the GNU Lesser General Public License version 3 -++* only, as published by the Free Software Foundation. -++* -++* OpenOffice.org 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 Lesser General Public License version 3 for more details -++* (a copy is included in the LICENSE file that accompanied this code). -++* -++* You should have received a copy of the GNU Lesser General Public License -++* version 3 along with OpenOffice.org. If not, see -++* -++* for a copy of the LGPLv3 License. -++* -++************************************************************************/ -++ -++#ifndef INCLUDED_SHELL_SOURCE_BACKENDS_TDEBE_TDEACCESS_HXX -++#define INCLUDED_SHELL_SOURCE_BACKENDS_TDEBE_TDEACCESS_HXX -++ -++#include "sal/config.h" -++ -++#include "com/sun/star/beans/Optional.hpp" -++ -++namespace com { namespace sun { namespace star { namespace uno { -++ class Any; -++} } } } -++namespace rtl { class OUString; } -++ -++namespace tdeaccess { -++ -++com::sun::star::beans::Optional< com::sun::star::uno::Any > getValue( -++ rtl::OUString const & id); -++ -++} -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN shell/source/backends/tdebe/tdebackend.cxx shell/source/backends/tdebe/tdebackend.cxx -+--- shell/source/backends/tdebe/tdebackend.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/tdebackend.cxx 2011-08-17 14:16:42.136513747 -0500 -+@@ -0,0 +1,262 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++* -++* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++* -++* Copyright 2000, 2010 Oracle and/or its affiliates. -++* Copyright 2011 Timothy Pearson -++* -++* OpenOffice.org - a multi-platform office productivity suite -++* -++* This file is part of OpenOffice.org. -++* -++* OpenOffice.org is free software: you can redistribute it and/or modify -++* it under the terms of the GNU Lesser General Public License version 3 -++* only, as published by the Free Software Foundation. -++* -++* OpenOffice.org 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 Lesser General Public License version 3 for more details -++* (a copy is included in the LICENSE file that accompanied this code). -++* -++* You should have received a copy of the GNU Lesser General Public License -++* version 3 along with OpenOffice.org. If not, see -++* -++* for a copy of the LGPLv3 License. -++* -++************************************************************************/ -++ -++#include "precompiled_shell.hxx" -++#include "sal/config.h" -++ -++#include "boost/noncopyable.hpp" -++#include "com/sun/star/beans/Optional.hpp" -++#include "com/sun/star/beans/PropertyVetoException.hpp" -++#include "com/sun/star/beans/UnknownPropertyException.hpp" -++#include "com/sun/star/beans/XPropertyChangeListener.hpp" -++#include "com/sun/star/beans/XPropertySet.hpp" -++#include "com/sun/star/beans/XPropertySetInfo.hpp" -++#include "com/sun/star/beans/XVetoableChangeListener.hpp" -++#include "com/sun/star/lang/IllegalArgumentException.hpp" -++#include "com/sun/star/lang/WrappedTargetException.hpp" -++#include "com/sun/star/lang/XMultiComponentFactory.hpp" -++#include "com/sun/star/lang/XServiceInfo.hpp" -++#include "com/sun/star/lang/WrappedTargetException.hpp" -++#include "com/sun/star/uno/Any.hxx" -++#include "com/sun/star/uno/Reference.hxx" -++#include "com/sun/star/uno/RuntimeException.hpp" -++#include "com/sun/star/uno/Sequence.hxx" -++#include "com/sun/star/uno/XComponentContext.hpp" -++#include "com/sun/star/uno/XCurrentContext.hpp" -++#include "cppuhelper/factory.hxx" -++#include "cppuhelper/implbase2.hxx" -++#include "cppuhelper/implementationentry.hxx" -++#include "cppuhelper/weak.hxx" -++#include "rtl/string.h" -++#include "rtl/ustring.h" -++#include "rtl/ustring.hxx" -++#include "sal/types.h" -++#include "uno/current_context.hxx" -++#include "uno/lbnames.h" -++ -++#include "tde_headers.h" -++ -++#include "tdeaccess.hxx" -++ -++namespace { -++ -++namespace css = com::sun::star; -++ -++rtl::OUString SAL_CALL getServiceImplementationName() { -++ return rtl::OUString( -++ RTL_CONSTASCII_USTRINGPARAM( -++ "com.sun.star.comp.configuration.backend.TDEBackend")); -++} -++ -++css::uno::Sequence< rtl::OUString > SAL_CALL getServiceSupportedServiceNames() { -++ rtl::OUString name( -++ RTL_CONSTASCII_USTRINGPARAM( -++ "com.sun.star.configuration.backend.TDEBackend")); -++ return css::uno::Sequence< rtl::OUString >(&name, 1); -++} -++ -++class Service: -++ public cppu::WeakImplHelper2< -++ css::lang::XServiceInfo, css::beans::XPropertySet >, -++ private boost::noncopyable -++{ -++public: -++ Service(); -++ -++private: -++ virtual ~Service() {} -++ -++ virtual rtl::OUString SAL_CALL getImplementationName() -++ throw (css::uno::RuntimeException) -++ { return getServiceImplementationName(); } -++ -++ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName) -++ throw (css::uno::RuntimeException) -++ { return ServiceName == getSupportedServiceNames()[0]; } -++ -++ virtual css::uno::Sequence< rtl::OUString > SAL_CALL -++ getSupportedServiceNames() throw (css::uno::RuntimeException) -++ { return getServiceSupportedServiceNames(); } -++ -++ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL -++ getPropertySetInfo() throw (css::uno::RuntimeException) -++ { return css::uno::Reference< css::beans::XPropertySetInfo >(); } -++ -++ virtual void SAL_CALL setPropertyValue( -++ rtl::OUString const &, css::uno::Any const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::beans::PropertyVetoException, -++ css::lang::IllegalArgumentException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException); -++ -++ virtual css::uno::Any SAL_CALL getPropertyValue( -++ rtl::OUString const & PropertyName) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException); -++ -++ virtual void SAL_CALL addPropertyChangeListener( -++ rtl::OUString const &, -++ css::uno::Reference< css::beans::XPropertyChangeListener > const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException) -++ {} -++ -++ virtual void SAL_CALL removePropertyChangeListener( -++ rtl::OUString const &, -++ css::uno::Reference< css::beans::XPropertyChangeListener > const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException) -++ {} -++ -++ virtual void SAL_CALL addVetoableChangeListener( -++ rtl::OUString const &, -++ css::uno::Reference< css::beans::XVetoableChangeListener > const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException) -++ {} -++ -++ virtual void SAL_CALL removeVetoableChangeListener( -++ rtl::OUString const &, -++ css::uno::Reference< css::beans::XVetoableChangeListener > const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException) -++ {} -++ -++ bool enabled_; -++}; -++ -++Service::Service(): enabled_(false) { -++ css::uno::Reference< css::uno::XCurrentContext > context( -++ css::uno::getCurrentContext()); -++ if (context.is()) { -++ rtl::OUString desktop; -++ context->getValueByName( -++ rtl::OUString( -++ RTL_CONSTASCII_USTRINGPARAM("system.desktop-environment"))) >>= -++ desktop; -++ enabled_ = desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("TDE")) && -++ KApplication::kApplication() != 0; -++ } -++} -++ -++void Service::setPropertyValue(rtl::OUString const &, css::uno::Any const &) -++ throw ( -++ css::beans::UnknownPropertyException, css::beans::PropertyVetoException, -++ css::lang::IllegalArgumentException, css::lang::WrappedTargetException, -++ css::uno::RuntimeException) -++{ -++ throw css::lang::IllegalArgumentException( -++ rtl::OUString( -++ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")), -++ static_cast< cppu::OWeakObject * >(this), -1); -++} -++ -++css::uno::Any Service::getPropertyValue(rtl::OUString const & PropertyName) -++ throw ( -++ css::beans::UnknownPropertyException, css::lang::WrappedTargetException, -++ css::uno::RuntimeException) -++{ -++ if (PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ExternalMailer")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) -++ { -++ return css::uno::makeAny( -++ enabled_ -++ ? tdeaccess::getValue(PropertyName) -++ : css::beans::Optional< css::uno::Any >()); -++ } -++ throw css::beans::UnknownPropertyException( -++ PropertyName, static_cast< cppu::OWeakObject * >(this)); -++} -++ -++css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance( -++ css::uno::Reference< css::uno::XComponentContext > const &) -++{ -++ return static_cast< cppu::OWeakObject * >(new Service); -++} -++ -++static cppu::ImplementationEntry const services[] = { -++ { &createInstance, &getServiceImplementationName, -++ &getServiceSupportedServiceNames, &cppu::createSingleComponentFactory, 0, -++ 0 }, -++ { 0, 0, 0, 0, 0, 0 } -++}; -++ -++} -++ -++extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( -++ char const * pImplName, void * pServiceManager, void * pRegistryKey) -++{ -++ return cppu::component_getFactoryHelper( -++ pImplName, pServiceManager, pRegistryKey, services); -++} -++ -++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL -++component_getImplementationEnvironment( -++ char const ** ppEnvTypeName, uno_Environment **) -++{ -++ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -++} -++ -++extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( -++ void * pServiceManager, void * pRegistryKey) -++{ -++ return component_writeInfoHelper(pServiceManager, pRegistryKey, services); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN shell/source/backends/tdebe/tdebe1-ucd.txt shell/source/backends/tdebe/tdebe1-ucd.txt -+--- shell/source/backends/tdebe/tdebe1-ucd.txt 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/tdebe1-ucd.txt 2011-08-17 14:16:36.266064060 -0500 -+@@ -0,0 +1,6 @@ -++[ComponentDescriptor] -++ImplementationName=com.sun.star.comp.configuration.backend.TDEBackend -++ComponentName=tdebe1.uno.so -++LoaderName=com.sun.star.loader.SharedLibrary -++[SupportedServices] -++com.sun.star.configuration.backend.TDEBackend -+--- fpicker/prj/build.lst 2010-11-11 09:30:08.000000000 -0600 -++++ fpicker/prj/build.lst 2011-08-17 19:28:07.578452546 -0500 -+@@ -7,8 +7,10 @@ -+ fp fpicker\source\unx\kde4 nmake - u fp_kde4_filepicker fp_inc NULL -+ fp fpicker\source\unx\kde_unx nmake - u fp_unx_common fp_inc NULL -+ fp fpicker\source\unx\kde nmake - u fp_unx_kde_filepicker fp_inc NULL -++fp fpicker\source\unx\tde_unx nmake - u fp_unx_tdecommon fp_inc NULL -++fp fpicker\source\unx\tde nmake - u fp_unx_tde_filepicker fp_inc NULL -+ fp fpicker\source\aqua nmake - u fp_macosx_filepicker NULL -+ fp fpicker\source\win32\filepicker nmake - w fp_win32_filepicker fp_inc NULL -+ fp fpicker\source\win32\folderpicker nmake - w fp_win32_folderpicker fp_inc NULL -+ fp fpicker\source\win32\misc nmake - w fp_win32_misc fp_win32_filepicker.w fp_win32_folderpicker.w fp_inc NULL -+-fp fpicker\util nmake - all fp_util fp_gnome_filepicker.u fp_unx_common.u fp_unx_kde_filepicker.u fp_win32_filepicker.w fp_win32_misc.w fp_win32_folderpicker.w NULL -++fp fpicker\util nmake - all fp_util fp_gnome_filepicker.u fp_unx_common.u fp_unx_kde_filepicker.u fp_unx_tdecommon.u fp_unx_tde_filepicker.u fp_win32_filepicker.w fp_win32_misc.w fp_win32_folderpicker.w NULL -+--- shell/prj/build.lst 2010-11-11 09:30:08.000000000 -0600 -++++ shell/prj/build.lst 2011-08-17 19:29:38.835371237 -0500 -+@@ -30,5 +30,6 @@ -+ sl shell\source\backends\gconfbe nmake - u sl_backends_gconfbe sl_inc NULL -+ sl shell\source\backends\kdebe nmake - u sl_backends_kdebe sl_inc NULL -+ sl shell\source\backends\kde4be nmake - u sl_backends_kde4be sl_inc NULL -++sl shell\source\backends\tdebe nmake - u sl_backends_tdebe sl_inc NULL -+ sl shell\source\backends\desktopbe nmake - u sl_backends_desktopbe sl_inc NULL -+ sl shell\source\win32\shlxthandler\ooofilt nmake - w sl_win32_shlxthandler_ooofilt sl_all_zipfile.w sl_all_ooofilereader.w sl_win32_shlxthandler_util.w sl_all sl_inc NULL -+--- connectivity/prj/build.lst 2010-11-11 13:08:58.000000000 -0600 -++++ connectivity/prj/build.lst 2011-08-17 19:31:47.795150674 -0500 -+@@ -12,6 +12,7 @@ -+ cn connectivity\source\drivers\mozab\bootstrap nmake - all cn_mozab_bootstrap cn_mozab_mozillasrc cn_inc NULL -+ cn connectivity\source\drivers\mozab nmake - all cn_mozab cn_mozab_bootstrap cn_dbtools cn_inc NULL -+ cn connectivity\source\drivers\kab nmake - all cn_kab cn_dbtools cn_inc NULL -++cn connectivity\source\drivers\tdeab nmake - all cn_tdeab cn_dbtools cn_inc NULL -+ cn connectivity\source\drivers\macab nmake - all cn_macab cn_dbtools cn_inc NULL -+ cn connectivity\source\drivers\evoab2 nmake - all cn_evoab2 cn_dbtools cn_file cn_inc NULL -+ cn connectivity\source\drivers\calc nmake - all cn_calc cn_file cn_inc NULL -+@@ -28,5 +29,5 @@ -+ cn connectivity\source\simpledbt nmake - all cn_simpledbt cn_cmtools cn_inc NULL -+ cn connectivity\source\dbtools nmake - all cn_dbtools cn_simpledbt cn_cmtools cn_parse cn_res cn_sdbcx cn_inc cn_res NULL -+ cn connectivity\qa\connectivity\tools nmake - all cn_qa_tools cn_inc NULL -+-cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_adabas cn_flat cn_dbase cn_hsqldb cn_macab NULL -++cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_tdeab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_adabas cn_flat cn_dbase cn_hsqldb cn_macab NULL -+ -+--- set_soenv.in 2011-03-08 12:51:39.000000000 -0600 -++++ set_soenv.in 2011-08-17 22:19:40.994282148 -0500 -+@@ -1732,6 +1732,10 @@ -+ ToFile( "KDE_GLIB_LIBS", "@KDE_GLIB_LIBS@", "e" ); -+ ToFile( "KDE_HAVE_GLIB", "@KDE_HAVE_GLIB@", "e" ); -+ ToFile( "ENABLE_KAB", "@ENABLE_KAB@", "e" ); -++ToFile( "ENABLE_TDE", "@ENABLE_TDE@", "e" ); -++ToFile( "TDE_CFLAGS", "@TDE_CFLAGS@", "e" ); -++ToFile( "TDE_LIBS", "@TDE_LIBS@", "e" ); -++ToFile( "ENABLE_TDEAB", "@ENABLE_TDEAB@", "e" ); -+ ToFile( "PSPRINT", "TRUE", "e" ); -+ ToFile( "MKDEPENDSOLVER", "TRUE", "e" ); -+ ToFile( "nodep", "@nodep@", "e" ); -+diff -urN shell/inc/tde_headers.h shell/inc/tde_headers.h -+--- shell/inc/tde_headers.h 1969-12-31 18:00:00.000000000 -0600 -++++ shell/inc/tde_headers.h 2011-08-18 00:00:30.118955481 -0500 -+@@ -0,0 +1,98 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef INCLUDED_VCL_TDE_HEADERS_H -++#define INCLUDED_VCL_TDE_HEADERS_H -++ -++/* ********* Suppress warnings if needed */ -++#include "sal/config.h" -++ -++#if defined __GNUC__ -++#pragma GCC system_header -++#endif -++ -++ -++/* ********* Hack, but needed because of conflicting types... */ -++#define Region QtXRegion -++ -++ -++/* ********* TQt headers */ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++/* ********* See hack on top of this file */ -++#undef Region -++ -++ -++/* ********* TDE base headers */ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++ -++/* ********* TDE address book connectivity headers */ -++#include -++#include -++#include -++#include -++ -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/inc/resource/tdeab_res.hrc connectivity/source/inc/resource/tdeab_res.hrc -+--- connectivity/source/inc/resource/tdeab_res.hrc 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/inc/resource/tdeab_res.hrc 2011-08-18 00:42:41.185561810 -0500 -+@@ -0,0 +1,44 @@ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef CONNECTIVITY_RESOURCE_KAB_HRC -++#define CONNECTIVITY_RESOURCE_KAB_HRC -++ -++#include "resource/conn_shared_res.hrc" -++#include "resource/common_res.hrc" -++// ============================================================================ -++// = the tdeab driver's resource strings -++// ============================================================================ -++ -++#define STR_NO_TDE_INST ( STR_KAB_BASE + 0 ) -++#define STR_TDE_VERSION_TOO_OLD ( STR_KAB_BASE + 1 ) -++#define STR_TDE_VERSION_TOO_NEW ( STR_KAB_BASE + 2 ) -++#define STR_TDE_VERSION_TOO_NEW_WORK_AROUND ( STR_KAB_BASE + 3 ) -++ -++#endif // CONNECTIVITY_RESOURCE_KAB_HRC -++ -+diff -urN shell/prj/d.lst shell/prj/d.lst -+--- shell/prj/d.lst 2010-11-11 09:30:08.000000000 -0600 -++++ shell/prj/d.lst 2011-08-18 00:54:55.072395417 -0500 -+@@ -14,6 +14,7 @@ -+ ..\%__SRC%\bin\open-url %_DEST%\bin%_EXT%\open-url -+ ..\%__SRC%\bin\cde-open-url %_DEST%\bin%_EXT%\cde-open-url -+ ..\%__SRC%\bin\kde-open-url %_DEST%\bin%_EXT%\kde-open-url -++..\%__SRC%\bin\tde-open-url %_DEST%\bin%_EXT%\tde-open-url -+ ..\%__SRC%\bin\gnome-open-url %_DEST%\bin%_EXT%\gnome-open-url -+ ..\%__SRC%\bin\gnome-open-url.bin %_DEST%\bin%_EXT%\gnome-open-url.bin -+ ..\%__SRC%\bin\senddoc %_DEST%\bin%_EXT%\senddoc -+@@ -23,3 +24,4 @@ -+ -+ ..\%__SRC%\misc\*-ucd.txt %_DEST%\bin%_EXT%\*-ucd.txt -+ ..\inc\kde_headers.h %_DEST%\inc%_EXT%\shell\kde_headers.h -++..\inc\tde_headers.h %_DEST%\inc%_EXT%\shell\tde_headers.h -+diff -urN fpicker/prj/d.lst fpicker/prj/d.lst -+--- fpicker/prj/d.lst 2010-11-11 09:30:08.000000000 -0600 -++++ fpicker/prj/d.lst 2011-08-18 00:57:05.532528127 -0500 -+@@ -5,6 +5,7 @@ -+ ..\%__SRC%\bin\f*.res %_DEST%\bin%_EXT%\ -+ ..\%__SRC%\bin\f*.dll %_DEST%\bin%_EXT%\ -+ ..\%__SRC%\bin\kdefilepicker %_DEST%\bin%_EXT%\kdefilepicker -++..\%__SRC%\bin\tdefilepicker %_DEST%\bin%_EXT%\tdefilepicker -+ ..\%__SRC%\lib\f*.so %_DEST%\lib%_EXT%\ -+ ..\%__SRC%\lib\*.dylib %_DEST%\lib%_EXT%\*.dylib -+ -+@@ -14,3 +15,4 @@ -+ ..\source\unx\kde4\fps-kde4-ucd.txt %_DEST%\bin%_EXT%\fps-kde4-ucd.txt -+ ..\source\aqua\fps-aqua-ucd.txt %_DEST%\bin%_EXT%\fps-aqua-ucd.txt -+ ..\source\unx\kde_unx\fps-kde-ucd.txt %_DEST%\bin%_EXT%\fps-kde-ucd.txt -++..\source\unx\tde_unx\fps-tde-ucd.txt %_DEST%\bin%_EXT%\fps-tde-ucd.txt -+diff -urN connectivity/prj/d.lst connectivity/prj/d.lst -+--- connectivity/prj/d.lst 2010-11-11 09:30:07.000000000 -0600 -++++ connectivity/prj/d.lst 2011-08-18 00:58:04.797146865 -0500 -+@@ -8,6 +8,7 @@ -+ ..\source\drivers\adabas\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\ado\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\kab\*.xml %_DEST%\xml%_EXT%\*.xml -++..\source\drivers\tdeab\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\macab\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\file\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\flat\*.xml %_DEST%\xml%_EXT%\*.xml -+diff -urN scp2/prj/build.lst scp2/prj/build.lst -+--- scp2/prj/build.lst 2010-11-30 14:17:23.000000000 -0600 -++++ scp2/prj/build.lst 2011-08-18 11:36:10.411551109 -0500 -+@@ -14,6 +14,7 @@ -+ cp scp2\source\impress nmake - all cp_impress cp_langmacros cp_langtemplates NULL -+ cp scp2\source\javafilter nmake - all cp_javafilter cp_langmacros cp_langtemplates NULL -+ cp scp2\source\kde nmake - all cp_kde cp_langmacros cp_langtemplates NULL -++cp scp2\source\tde nmake - all cp_tde cp_langmacros cp_langtemplates NULL -+ cp scp2\source\layout nmake - all cp_layout cp_langmacros NULL -+ cp scp2\source\math nmake - all cp_math cp_langmacros cp_langtemplates NULL -+ cp scp2\source\ooo nmake - all cp_ooo cp_langmacros cp_langtemplates NULL -+@@ -27,4 +28,4 @@ -+ cp scp2\source\winexplorerext nmake - all cp_winexplorerext cp_langmacros cp_langtemplates NULL -+ cp scp2\source\onlineupdate nmake - all cp_update cp_langmacros cp_langtemplates NULL -+ cp scp2\source\accessories nmake - all cp_accessories cp_langmacros NULL -+-cp scp2\util nmake - all cp_util cp_activex cp_binfilter cp_calc cp_canvas cp_crashrep cp_draw cp_extensions cp_gnome cp_graphicfilter cp_impress cp_javafilter cp_kde cp_layout cp_math cp_ooo cp_python cp_quickstart cp_testtool cp_writer cp_base cp_xsltfilter cp_winexplorerext cp_sdkoo cp_update cp_accessories NULL -++cp scp2\util nmake - all cp_util cp_activex cp_binfilter cp_calc cp_canvas cp_crashrep cp_draw cp_extensions cp_gnome cp_graphicfilter cp_impress cp_javafilter cp_kde cp_tde cp_layout cp_math cp_ooo cp_python cp_quickstart cp_testtool cp_writer cp_base cp_xsltfilter cp_winexplorerext cp_sdkoo cp_update cp_accessories NULL -+diff -urN scp2/source/ooo/file_library_ooo.scp scp2/source/ooo/file_library_ooo.scp -+--- scp2/source/ooo/file_library_ooo.scp 2010-11-11 09:08:07.000000000 -0600 -++++ scp2/source/ooo/file_library_ooo.scp 2011-08-18 11:42:28.890516734 -0500 -+@@ -590,6 +590,25 @@ -+ End -+ #endif -+ #endif -++#ifdef ENABLE_TDE -++#ifndef MACOSX -++File gid_File_Lib_Fps_Tde -++ TXT_FILE_BODY; -++ Styles = (PACKED,UNO_COMPONENT); -++ RegistryID = gid_Starregistry_Services_Rdb; -++ Dir = gid_Dir_Program; -++ Name = SPECIAL_COMPONENT_LIB_NAME(fps_tde.uno); -++ Regmergefile = "fps-tde-ucd.txt"; -++End -++File gid_File_Bin_TdeFilePicker -++ BIN_FILE_BODY; -++ Styles = (PACKED); -++ Dir = gid_Brand_Dir_Program; -++ Name = "tdefilepicker"; -++End -++#endif -++#endif -++ -+ #endif -+ -+ #ifdef MACOSX -+@@ -1207,6 +1226,17 @@ -+ End -+ #endif -+ #endif -++#ifdef ENABLE_TDE -++#ifndef MACOSX -++File gid_File_Lib_Vclplug_Tde -++ Name = LIBNAME(vclplug_tde); -++ TXT_FILE_BODY; -++ Styles = (PACKED); -++ Dir = SCP2_OOO_BIN_DIR; -++End -++#endif -++#endif -++ -+ #endif -+ -+ #if defined(QUARTZ) -+diff -urN scp2/source/ooo/file_ooo.scp scp2/source/ooo/file_ooo.scp -+--- scp2/source/ooo/file_ooo.scp 2011-03-08 13:12:46.000000000 -0600 -++++ scp2/source/ooo/file_ooo.scp 2011-08-18 11:40:40.942257980 -0500 -+@@ -209,6 +209,13 @@ -+ Styles = (PACKED); -+ End -+ -++File gid_File_Bin_Tde_Open_Url -++ BIN_FILE_BODY; -++ Dir = gid_Dir_Program; -++ Name = "tde-open-url"; -++ Styles = (PACKED); -++End -++ -+ File gid_File_Bin_Cde_Open_Url -+ BIN_FILE_BODY; -+ Dir = gid_Dir_Program; -+diff -urN scp2/source/ooo/module_hidden_ooo.scp scp2/source/ooo/module_hidden_ooo.scp -+--- scp2/source/ooo/module_hidden_ooo.scp 2010-12-14 09:40:37.000000000 -0600 -++++ scp2/source/ooo/module_hidden_ooo.scp 2011-08-18 11:44:02.297661319 -0500 -+@@ -40,6 +40,7 @@ -+ gid_File_Bin_Gnome_Open_Url, -+ gid_File_Bin_Gnome_Open_Url_Bin, -+ gid_File_Bin_Kde_Open_Url, -++ gid_File_Bin_Tde_Open_Url, -+ gid_File_Bin_Open_Url, -+ gid_File_Bin_Pagein, -+ gid_File_Bin_Pluginapp, -+@@ -239,6 +240,7 @@ -+ gid_File_Lib_Vclplug_Gtk, -+ gid_File_Lib_Vclplug_Kde, -+ gid_File_Lib_Vclplug_Kde4, -++ gid_File_Lib_Vclplug_Tde, -+ gid_File_Lib_Vclplug_Svp, -+ gid_File_Lib_Basctl, -+ gid_File_Lib_CanvasTools, -+diff -urN scp2/source/tde/file_tde.scp scp2/source/tde/file_tde.scp -+--- scp2/source/tde/file_tde.scp 1969-12-31 18:00:00.000000000 -0600 -++++ scp2/source/tde/file_tde.scp 2011-08-18 11:38:30.302260303 -0500 -+@@ -0,0 +1,39 @@ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++#include "macros.inc" -++ -++#ifdef ENABLE_TDE -++File gid_File_Lib_Tdebe -++ TXT_FILE_BODY; -++ Styles = (PACKED); -++ Dir = SCP2_OOO_BIN_DIR; -++ Name = STRING(CONCAT2(tdebe1.uno,UNXSUFFIX)); -++ RegistryID = gid_Starregistry_Services_Rdb; -++ Regmergefile = "tdebe1-ucd.txt"; -++End -++#endif -+diff -urN scp2/source/tde/makefile.mk scp2/source/tde/makefile.mk -+--- scp2/source/tde/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ scp2/source/tde/makefile.mk 2011-08-18 11:37:33.667925169 -0500 -+@@ -0,0 +1,59 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/.. -++ -++PRJPCH= -++ -++PRJNAME=scp2 -++TARGET=tde -++TARGETTYPE=CUI -++ -++# --- Settings ----------------------------------------------------- -++ -++.INCLUDE : settings.mk -++ -++SCP_PRODUCT_TYPE=osl -++ -++.IF "$(ENABLE_TDE)" == "TRUE" -++ -++.IF "$(ENABLE_TDE)" != "" -++SCPDEFS+=-DENABLE_TDE -++.ENDIF -++ -++PARFILES = \ -++ module_tde.par \ -++ file_tde.par -++ -++ULFFILES= \ -++ module_tde.ulf -++.ENDIF -++ -++# --- File --------------------------------------------------------- -++ -++.INCLUDE : target.mk -+diff -urN scp2/source/tde/module_tde.scp scp2/source/tde/module_tde.scp -+--- scp2/source/tde/module_tde.scp 1969-12-31 18:00:00.000000000 -0600 -++++ scp2/source/tde/module_tde.scp 2011-08-18 11:38:07.870543319 -0500 -+@@ -0,0 +1,45 @@ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * Copyright 2011 Timothy Pearson -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include "macros.inc" -++ -++#if defined( ENABLE_TDE ) -++Module gid_Module_Optional_Tde -++ ParentID = gid_Module_Optional; -++ Default = YES; -++ PackageInfo = "packinfo_office.txt"; -++ MOD_NAME_DESC(MODULE_OPTIONAL_TDE); -++ Styles = (DONTSHOWINUSERINSTALL); -++ Files = ( -++#ifdef ENABLE_TDE -++ gid_File_Lib_Tdebe -++#endif // ENABLE_TDE -++ ); -++End -++#endif -++ -+diff -urN scp2/source/tde/module_tde.ulf scp2/source/tde/module_tde.ulf -+--- scp2/source/tde/module_tde.ulf 1969-12-31 18:00:00.000000000 -0600 -++++ scp2/source/tde/module_tde.ulf 2011-08-18 11:37:03.345603863 -0500 -+@@ -0,0 +1,34 @@ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++[STR_NAME_MODULE_OPTIONAL_TDE] -++en-US = "TDE Integration" -++ -++[STR_DESC_MODULE_OPTIONAL_TDE] -++en-US = "System integration of %PRODUCTNAME %PRODUCTVERSION into TDE." -++ -+diff -urN scp2/util/makefile.mk scp2/util/makefile.mk -+--- scp2/util/makefile.mk 2010-12-16 07:54:12.000000000 -0600 -++++ scp2/util/makefile.mk 2011-08-18 11:39:59.419080617 -0500 -+@@ -197,6 +197,12 @@ -+ module_kde.par \ -+ file_kde.par -+ .ENDIF -++ -++.IF "$(ENABLE_TDE)" == "TRUE" -++SCP1FILES += \ -++ module_tde.par \ -++ file_tde.par -++.ENDIF -+ .ENDIF -+ -+ .IF "$(ENABLE_CRASHDUMP)" != "" -+@@ -380,6 +386,12 @@ -+ module_kde.par \ -+ file_kde.par -+ .ENDIF -++ -++.IF "$(ENABLE_TDE)" == "TRUE" -++SCP2FILES += \ -++ module_tde.par \ -++ file_tde.par -++.ENDIF -+ .ENDIF -+ -+ .IF "$(ENABLE_CRASHDUMP)" != "" -+diff -urN shell/source/unix/misc/makefile.mk shell/source/unix/misc/makefile.mk -+--- shell/source/unix/misc/makefile.mk 2010-11-11 09:30:08.000000000 -0600 -++++ shell/source/unix/misc/makefile.mk 2011-08-18 14:27:51.206440704 -0500 -+@@ -45,7 +45,8 @@ -+ $(BIN)$/open-url \ -+ $(BIN)$/cde-open-url \ -+ $(BIN)$/gnome-open-url \ -+- $(BIN)$/kde-open-url -++ $(BIN)$/kde-open-url \ -++ $(BIN)$/tde-open-url -+ -+ .IF "$(GUI)" == "OS2" -+ -+diff -urN shell/source/unix/misc/tde-open-url.sh shell/source/unix/misc/tde-open-url.sh -+--- shell/source/unix/misc/tde-open-url.sh 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/unix/misc/tde-open-url.sh 2010-11-11 09:30:08.000000000 -0600 -+@@ -0,0 +1,10 @@ -++#!/bin/sh -++ -++# special handling for mailto: uris -++if echo $1 | grep '^mailto:' > /dev/null; then -++ kmailservice "$1" & -++else -++ kfmclient openURL "$1" & -++fi -++ -++exit 0 -+diff -urN setup_native/source/packinfo/packinfo_office.txt setup_native/source/packinfo/packinfo_office.txt -+--- setup_native/source/packinfo/packinfo_office.txt 2011-03-08 13:12:46.000000000 -0600 -++++ setup_native/source/packinfo/packinfo_office.txt 2011-08-18 14:46:02.820250783 -0500 -+@@ -48,6 +48,21 @@ -+ End -+ -+ Start -++module = "gid_Module_Optional_Tde" -++solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-tde-integration" -++solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01" -++packagename = "%BASISPACKAGEPREFIX%OOOBASEVERSION-tde-integration" -++freebsdrequires = "%BASISPACKAGEPREFIX%OOOBASEVERSION-core01" -++requires = "%BASISPACKAGEPREFIX%OOOBASEVERSION-core01" -++copyright = "1999-2009 by OpenOffice.org" -++solariscopyright = "solariscopyrightfile" -++vendor = "The Document Foundation" -++description = "TDE integration module for LibreOffice %OOOBASEVERSION" -++destpath = "/opt" -++packageversion = "%OOOPACKAGEVERSION" -++End -++ -++Start -+ module = "gid_Module_Root" -+ # script = "shellscripts_core01.txt" -+ solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01" -+diff -urN scp2/source/ooo/makefile.mk scp2/source/ooo/makefile.mk -+--- scp2/source/ooo/makefile.mk 2010-12-16 05:06:55.000000000 -0600 -++++ scp2/source/ooo/makefile.mk 2011-08-18 15:49:48.543071983 -0500 -+@@ -88,6 +88,14 @@ -+ SCPDEFS+=-DENABLE_KAB -+ .ENDIF -+ -++.IF "$(ENABLE_TDE)" != "" -++SCPDEFS+=-DENABLE_TDE -++.ENDIF -++ -++.IF "$(ENABLE_TDEAB)" != "" -++SCPDEFS+=-DENABLE_TDEAB -++.ENDIF -++ -+ .IF "$(ENABLE_EVOAB2)" != "" -+ SCPDEFS+=-DENABLE_EVOAB2 -+ .ENDIF -+diff -urN solenv/config/sooo330.ini solenv/config/sooo330.ini -+--- solenv/config/sooo330.ini 2010-11-11 09:08:07.000000000 -0600 -++++ solenv/config/sooo330.ini 2011-08-18 19:37:01.865529222 -0500 -+@@ -646,6 +646,8 @@ -+ CVER C432 -+ ENABLE_KAB TRUE -+ ENABLE_KDE TRUE -++ ENABLE_TDEAB TRUE -++ ENABLE_TDE TRUE -+ ENABLE_EVOAB2 TRUE -+ ENV_TOOLS %SOLARROOT%/et_linux_libc2.5/%WORK_STAMP%/bin -+ GUI UNX -+@@ -656,6 +658,7 @@ -+ JDK14PATH %SOLAR_JDK14PATH% -+ JDK15PATH %SOLAR_JDK15PATH% -+ KDE_ROOT /so/env/kde/linux/kde-3.2.2 -++ TDE_ROOT /so/env/tde/linux/tde-3.2.2 -+ LIBMYSQL_PATH %SOLAR_ENV_ROOT%/mysql-connector-c-6.0.2/unxlngi6 -+ NO_BSYMBOLIC True -+ OJDK16PATH %SOLAR_OJDK16PATH% -+@@ -921,6 +924,8 @@ -+ CVER C341 -+ ENABLE_KAB TRUE -+ ENABLE_KDE TRUE -++ ENABLE_TDEAB TRUE -++ ENABLE_TDE TRUE -+ ENV_TOOLS %SOLARROOT%/et_linux_libc2.32/%WORK_STAMP%/bin -+ GUI UNX -+ GUIBASE unx -+@@ -930,6 +935,7 @@ -+ JDK14PATH %SOLAR_JDK14PATH% -+ JDK15PATH %SOLAR_JDK15PATH% -+ KDE_ROOT /so/env/kde/linux/kde-3.2.2 -++ TDE_ROOT /so/env/tde/linux/tde-3.2.2 -+ LIBMYSQL_PATH %SOLAR_ENV_ROOT%/mysql-connector-c-6.0.2/unxlngx6 -+ NO_BSYMBOLIC True -+ OJDK16PATH %SOLAR_OJDK16PATH% -+diff -urN solenv/config/ssolar.cmn solenv/config/ssolar.cmn -+--- solenv/config/ssolar.cmn 2010-11-11 09:08:07.000000000 -0600 -++++ solenv/config/ssolar.cmn 2011-08-18 19:37:26.207387814 -0500 -+@@ -89,6 +89,7 @@ -+ ENABLE_GCONF -+ ENABLE_GNOMEVFS -+ ENABLE_KDE -++ ENABLE_TDE -+ ENABLE_MEDIAWIKI -+ ENABLE_MINIMIZER -+ ENABLE_NSS_MODULE -+diff -urN solenv/inc/unx.mk solenv/inc/unx.mk -+--- solenv/inc/unx.mk 2010-11-11 09:08:07.000000000 -0600 -++++ solenv/inc/unx.mk 2011-08-18 19:35:33.868809472 -0500 -+@@ -206,4 +206,13 @@ -+ .ENDIF # "$(KDE_ROOT)"!="" -+ .ENDIF # "$(ENABLE_KDE)" != "" -+ -++# enable building/linking TDE-dependent code in both OOo and SO build environment -++.IF "$(ENABLE_TDE)" != "" -++.IF "$(TDE_ROOT)"!="" -++TDE_CFLAGS:=-I$(TDE_ROOT)/include -I/usr/include/tqt -DQT_CLEAN_NAMESPACE -++TDE_LIBS:=-lkdeui -lkdecore -ltqt -lqt-mt -++SOLARLIB+=-L$(TDE_ROOT)/lib -++.ENDIF # "$(TDE_ROOT)"!="" -++.ENDIF # "$(ENABLE_TDE)" != "" -++ -+ OOO_LIBRARY_PATH_VAR *= LD_LIBRARY_PATH -+diff -urN svx/util/makefile.pmk svx/util/makefile.pmk -+--- svx/util/makefile.pmk 2010-11-11 09:30:08.000000000 -0600 -++++ svx/util/makefile.pmk 2011-08-18 19:40:05.809571436 -0500 -+@@ -40,4 +40,8 @@ -+ CFLAGS+=-DENABLE_KDE4 -+ .ENDIF -+ -++.IF "$(ENABLE_TDE)" != "" -++CFLAGS+=-DENABLE_TDE -++.ENDIF -++ -+ VISIBILITY_HIDDEN=TRUE -+diff -urN cui/source/options/optgdlg.cxx cui/source/options/optgdlg.cxx -+--- cui/source/options/optgdlg.cxx 2011-01-05 12:03:17.000000000 -0600 -++++ cui/source/options/optgdlg.cxx 2011-08-18 19:41:16.134938506 -0500 -+@@ -157,6 +157,14 @@ -+ return rtl::OUString(); -+ #endif -+ } -++ else if ( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "tde" ) ) -++ { -++ #ifdef ENABLE_TDE -++ return ::rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.TDEFilePicker" ); -++ #else -++ return rtl::OUString(); -++ #endif -++ } -+ #if defined WNT -+ return ::rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.SystemFilePicker" ); -+ #elif (defined MACOSX && defined QUARTZ) -+diff -urN cui/util/makefile.pmk cui/util/makefile.pmk -+--- cui/util/makefile.pmk 2010-11-11 09:12:41.000000000 -0600 -++++ cui/util/makefile.pmk 2011-08-18 19:40:36.291897881 -0500 -+@@ -37,4 +37,8 @@ -+ CFLAGS+=-DENABLE_KDE4 -+ .ENDIF -+ -++.IF "$(ENABLE_TDE)" != "" -++CFLAGS+=-DENABLE_TDE -++.ENDIF -++ -+ VISIBILITY_HIDDEN=TRUE -+diff -urN desktop/source/pagein/makefile.mk desktop/source/pagein/makefile.mk -+--- desktop/source/pagein/makefile.mk 2010-11-11 09:30:07.000000000 -0600 -++++ desktop/source/pagein/makefile.mk 2011-08-18 19:41:55.037907135 -0500 -+@@ -129,6 +129,9 @@ -+ .IF "$(ENABLE_KDE)" != "" -+ @-echo $(DLLPRE)vclplug_kde$(DFTDLLPOST) >> $@ -+ .ENDIF # ENABLE_KDE -++.IF "$(ENABLE_TDE)" != "" -++ @-echo $(DLLPRE)vclplug_tde$(DFTDLLPOST) >> $@ -++.ENDIF # ENABLE_TDE -+ # -+ @-echo $(DLLPRE)basegfx$(DFTDLLPOST) >> $@ -+ @-echo $(DLLPRE)sot$(DFTDLLPOST) >> $@ -+diff -urN toolkit/source/layout/core/dialogbuttonhbox.cxx toolkit/source/layout/core/dialogbuttonhbox.cxx -+--- toolkit/source/layout/core/dialogbuttonhbox.cxx 2010-11-11 09:22:48.000000000 -0600 -++++ toolkit/source/layout/core/dialogbuttonhbox.cxx 2011-08-18 19:46:04.396929494 -0500 -+@@ -57,6 +57,8 @@ -+ DialogButtonHBox::WINDOWS; -+ #elif defined( ENABLE_KDE ) -+ DialogButtonHBox::KDE; -++#elif defined( ENABLE_TDE ) -++DialogButtonHBox::TDE; -+ #else /* !MACOSX && !SAL_W32 && !ENABLE_KDE */ -+ DialogButtonHBox::GNOME; -+ #endif /* !MACOSX && !SAL_W32 && !ENABLE_KDE */ -+@@ -84,6 +86,8 @@ -+ mnOrdering = GNOME; -+ else if ( ordering.equalsIgnoreAsciiCaseAscii( "KDE" ) ) -+ mnOrdering = KDE; -++ else if ( ordering.equalsIgnoreAsciiCaseAscii( "TDE" ) ) -++ mnOrdering = TDE; -+ else if ( ordering.equalsIgnoreAsciiCaseAscii( "MacOS" ) ) -+ mnOrdering = MACOS; -+ else if ( ordering.equalsIgnoreAsciiCaseAscii( "Windows" ) ) -+@@ -144,6 +148,8 @@ -+ macosOrdering(); -+ else if ( mnOrdering == KDE ) -+ kdeOrdering(); -++ else if ( mnOrdering == TDE ) -++ tdeOrdering(); -+ else if ( 1 || mnOrdering == GNOME ) -+ gnomeOrdering(); -+ } -+@@ -218,6 +224,30 @@ -+ { -+ std::list< Box_Base::ChildData * > ordered; -+ if ( mpHelp ) -++ ordered.push_back( mpHelp ); -++ if ( mpReset ) -++ ordered.push_back( mpReset ); -++ if ( mpFlow && ( mpHelp || mpReset ) ) -++ ordered.push_back( mpFlow ); -++ ordered.insert( ordered.end(), maOther.begin(), maOther.end() ); -++ if ( mpAction ) -++ ordered.push_back( mpAction ); -++ if ( mpAffirmative ) -++ ordered.push_back( mpAffirmative ); -++ if ( mpApply ) -++ ordered.push_back( mpApply ); -++ if ( mpAlternate ) -++ ordered.push_back( mpAlternate ); -++ if ( mpCancel ) -++ ordered.push_back( mpCancel ); -++ maChildren = ordered; -++} -++ -++void -++DialogButtonHBox::tdeOrdering() -++{ -++ std::list< Box_Base::ChildData * > ordered; -++ if ( mpHelp ) -+ ordered.push_back( mpHelp ); -+ if ( mpReset ) -+ ordered.push_back( mpReset ); -+diff -urN toolkit/source/layout/core/dialogbuttonhbox.hxx toolkit/source/layout/core/dialogbuttonhbox.hxx -+--- toolkit/source/layout/core/dialogbuttonhbox.hxx 2010-11-11 09:22:48.000000000 -0600 -++++ toolkit/source/layout/core/dialogbuttonhbox.hxx 2011-08-18 19:46:17.897959152 -0500 -+@@ -45,11 +45,12 @@ -+ void SAL_CALL removeChild( css::uno::Reference< css::awt::XLayoutConstrains > const& xChild ) throw ( css::uno::RuntimeException ); -+ -+ private: -+- enum Ordering { PLATFORM, GNOME, KDE, MACOS, WINDOWS }; -++ enum Ordering { PLATFORM, GNOME, KDE, TDE, MACOS, WINDOWS }; -+ -+ void orderChildren(); -+ void gnomeOrdering(); -+ void kdeOrdering(); -++ void tdeOrdering(); -+ void macosOrdering(); -+ void windowsOrdering(); -+ -+diff -urN vcl/util/makefile.mk vcl/util/makefile.mk -+--- vcl/util/makefile.mk 2011-03-08 12:51:41.000000000 -0600 -++++ vcl/util/makefile.mk 2011-08-18 19:55:25.649710040 -0500 -+@@ -420,6 +420,35 @@ -+ -+ .ENDIF # "$(ENABLE_KDE)" != "" -+ -++# TDE plugin -++.IF "$(ENABLE_TDE)" != "" -++.IF "$(TDE_ROOT)"!="" -++EXTRALIBPATHS+=-L$(TDE_ROOT)$/lib -++.ENDIF -++LIB5TARGET=$(SLB)$/itde_plug_ -++LIB5FILES=$(SLB)$/tdeplug.lib -++SHL5TARGET=vclplug_tde$(DLLPOSTFIX) -++SHL5IMPLIB=itde_plug_ -++SHL5LIBS=$(LIB5TARGET) -++SHL5DEPN=$(SHL2TARGETN) -++# libs for TDE plugin -++SHL5STDLIBS+=-l$(SHL2TARGET) -++SHL5STDLIBS+=\ -++ $(VCLLIB) \ -++ $(TOOLSLIB) \ -++ $(SALLIB) \ -++ $(X11LINK_DYNAMIC) -++ -++.IF "$(ENABLE_RANDR)" != "" -++.IF "$(XRANDR_DLOPEN)" == "FALSE" -++SHL5STDLIBS+= $(XRANDR_LIBS) -++.ENDIF -++.ENDIF -++ -++SHL5LINKFLAGS+=$(TDE_LIBS) -++ -++.ENDIF # "$(ENABLE_TDE)" != "" -++ -+ # KDE4 plugin -+ .IF "$(ENABLE_KDE4)" != "" -+ .IF "$(KDE4_ROOT)"!="" -+diff -urN vcl/unx/tde/makefile.mk vcl/unx/tde/makefile.mk -+--- vcl/unx/tde/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ vcl/unx/tde/makefile.mk 2011-08-18 20:13:01.750097435 -0500 -+@@ -0,0 +1,82 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/.. -++ -++PRJNAME=vcl -++TARGET=tdeplug -++.INCLUDE : $(PRJ)$/util$/makefile.pmk -++ -++# workaround for makedepend hang -++MTDEPENDSOLVER= -++ -++# --- Settings ----------------------------------------------------- -++ -++.INCLUDE : settings.mk -++.INCLUDE : $(PRJ)$/util$/makefile2.pmk -++ -++# For some of the included external TDE headers, GCC complains about shadowed -++# symbols in instantiated template code only at the end of a compilation unit, -++# so the only solution is to disable that warning here: -++.IF "$(COM)" == "GCC" -++CFLAGSCXX+=-Wno-shadow -++.ENDIF -++ -++# --- Files -------------------------------------------------------- -++ -++.IF "$(GUIBASE)"!="unx" -++ -++dummy: -++ @echo "Nothing to build for GUIBASE $(GUIBASE)" -++ -++.ELSE # "$(GUIBASE)"!="unx" -++ -++.IF "$(ENABLE_TDE)" != "" -++ -++CFLAGS+=$(TDE_CFLAGS) -++ -++.IF "$(ENABLE_RANDR)" != "" -++CDEFS+=-DUSE_RANDR -++.ENDIF -++ -++SLOFILES=\ -++ $(SLO)$/tdedata.obj \ -++ $(SLO)$/salnativewidgets-tde.obj -++ -++.ELSE # "$(ENABLE_TDE)" != "" -++ -++dummy: -++ @echo TDE disabled - nothing to build -++.ENDIF -++.ENDIF # "$(GUIBASE)"!="unx" -++ -++# --- Targets ------------------------------------------------------ -++ -++.INCLUDE : target.mk -++ -++.INCLUDE : $(PRJ)$/util$/target.pmk -+diff -urN vcl/unx/tde/salnativewidgets-tde.cxx vcl/unx/tde/salnativewidgets-tde.cxx -+--- vcl/unx/tde/salnativewidgets-tde.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ vcl/unx/tde/salnativewidgets-tde.cxx 2011-08-18 20:13:46.133472981 -0500 -+@@ -0,0 +1,2119 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_vcl.hxx" -++ -++#define _SV_SALNATIVEWIDGETS_TDE_CXX -++#include -++ -++#include -++#include -++#include -++ -++#include -++ -++#include -++#include -++#include -++#include -++#include -++ -++#include -++ -++using namespace ::rtl; -++ -++/** Cached native widgets. -++ -++ A class which caches and paints the native widgets. -++*/ -++class WidgetPainter -++{ -++ protected: -++ /** Cached push button. -++ -++ It is necessary for the TQStyle::drawControl(). The buttons are created -++ on demand and they are still hidden (no TQWidget::show() is called). -++ */ -++ TQPushButton *m_pPushButton; -++ -++ /** Cached radio button. -++ -++ @see m_pPushButton -++ */ -++ TQRadioButton *m_pRadioButton; -++ -++ /** Cached check box. -++ -++ @see m_pPushButton -++ */ -++ TQCheckBox *m_pCheckBox; -++ -++ /** Cached combo box. -++ -++ @see m_pPushButton -++ */ -++ TQComboBox *m_pComboBox; -++ -++ /** Cached editable combo box. -++ -++ Needed, because some styles do not like dynamic changes -++ (TQComboBox::setEditable()). -++ -++ @see m_pPushButton -++ */ -++ TQComboBox *m_pEditableComboBox; -++ -++ /** Cached line edit box. -++ -++ @see m_pPushButton -++ */ -++ TQLineEdit *m_pLineEdit; -++ -++ /** Cached spin box. -++ -++ @see m_pPushButton -++ */ -++ TQSpinWidget *m_pSpinWidget; -++ -++ /** Cached spin box'es line edit. -++ -++ @see m_pPushButton -++ */ -++ TQLineEdit *m_pSpinEdit; -++ -++ /** Cached tab. -++ -++ Left, middle, right tab and a tab which is alone. -++ -++ @see m_pPushButton -++ */ -++ TQTab *m_pTabLeft, *m_pTabMiddle, *m_pTabRight, *m_pTabAlone; -++ -++ /** Cached tab bar's parent widget. -++ -++ Needed, because the Qt windows style checks for the availability -++ of tab bar's parent. We cannot use m_pTabWidget, because -++ TabWidget::setTabBar() and TabWidget::tabBar() methods are -++ protected. -++ -++ @see m_pPushButton, m_pTabWidget -++ */ -++ TQWidget *m_pTabBarParent; -++ -++ /** Cached tab bar widget. -++ -++ @see m_pPushButton -++ */ -++ TQTabBar *m_pTabBar; -++ -++ /** Cached tab widget. -++ -++ We need it to draw the tab page. It cannot be used to draw the -++ tabs themselves, because the drawing has to be tweaked a little -++ due to not enough information from VCL. -++ -++ @see m_pPushButton, m_pTabBarParent -++ */ -++ TQTabWidget *m_pTabWidget; -++ -++ /** Cached list view. -++ -++ @see m_pPushButton -++ */ -++ TQListView *m_pListView; -++ -++ /** Cached scroll bar. -++ -++ @see m_pPushButton -++ */ -++ TQScrollBar *m_pScrollBar; -++ -++ /** Cached dock area. Needed for proper functionality of tool bars. -++ -++ @see m_pPushButton -++ */ -++ TQMainWindow *m_pMainWindow; -++ -++ /** Cached tool bar. -++ -++ @see m_pPushButton -++ */ -++ TQToolBar *m_pToolBarHoriz, *m_pToolBarVert; -++ -++ /** Cached tool button. -++ -++ @see m_pPushButton -++ */ -++ TQToolButton *m_pToolButton; -++ -++ /** Cached menu bar. -++ -++ @see m_pPushButton -++ */ -++ TQMenuBar *m_pMenuBar; -++ -++ /** Identifiers of menu bar items. -++ */ -++ int m_nMenuBarEnabledItem, m_nMenuBarDisabledItem; -++ -++ /** Cached popup menu. -++ -++ @see m_pPushButton -++ */ -++ TQPopupMenu *m_pPopupMenu; -++ -++ /** Identifiers of popup menu items. -++ */ -++ int m_nPopupMenuEnabledItem, m_nPopupMenuDisabledItem; -++ -++ /** cached progress bar -++ */ -++ TQProgressBar *m_pProgressBar; -++ -++ // TODO other widgets -++ -++ public: -++ /** Implicit constructor. -++ -++ It creates an empty WidgetPainter with all the cached widgets initialized -++ to NULL. The widgets are created on demand and they are still hidden -++ (no TQWidget::show()), because they are needed just as a parameter for -++ TQStyle::drawControl(). -++ -++ @see m_pPushButton -++ */ -++ WidgetPainter( void ); -++ -++ /** Destructor. -++ -++ Destruct all the cached widgets. -++ */ -++ virtual ~WidgetPainter( void ); -++ -++ /** Paints the specified widget to the X window. -++ -++ Use X calls to bitblt (bit block transfer) the widget qWidget to -++ the window specified by drawable with the style defined by nStyle. -++ -++ @param qWidget -++ A pointer to the cached widget. -++ -++ @param nState -++ The state of the control (focused, on/off, ...) -++ -++ @param aValue -++ The value (true/false, ...) -++ -++ @param dpy -++ The display to be used by the X calls. -++ -++ @param drawable -++ The destination X window. -++ -++ @param gc -++ The graphics context. -++ */ -++ BOOL drawStyledWidget( TQWidget *pWidget, -++ ControlState nState, const ImplControlValue& aValue, -++ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc, -++ ControlPart nPart = PART_ENTIRE_CONTROL ); -++ -++ /** 'Get' method for push button. -++ -++ The method returns the cached push button. It is constructed if it -++ does not exist. It has NULL as a parent and it stays hidden, but it -++ is necessary for the drawStyledWidget() method. -++ -++ @return valid push button. -++ */ -++ TQPushButton *pushButton( const Rectangle& rControlRegion, BOOL bDefault ); -++ -++ /** 'Get' method for radio button. -++ -++ @see pushButton() -++ */ -++ TQRadioButton *radioButton( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for check box. -++ -++ @see pushButton() -++ */ -++ TQCheckBox *checkBox( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for combo box. -++ -++ It returns m_pComboBox or m_pEditableComboBox according to -++ bEditable. -++ -++ @see pushButton(), m_pEditableComboBox -++ */ -++ TQComboBox *comboBox( const Rectangle& rControlRegion, BOOL bEditable ); -++ -++ /** 'Get' method for line edit box. -++ -++ @see pushButton() -++ */ -++ TQLineEdit *lineEdit( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for spin box. -++ -++ @see pushButton() -++ */ -++ TQSpinWidget *spinWidget( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for tab bar. -++ -++ @see pushButton() -++ */ -++ TQTabBar *tabBar( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for tab widget. -++ -++ @see pushButton() -++ */ -++ TQTabWidget *tabWidget( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for list view. -++ -++ @see pushButton() -++ */ -++ TQListView *listView( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for scroll bar. -++ -++ @see pushButton() -++ */ -++ TQScrollBar *scrollBar( const Rectangle& rControlRegion, -++ BOOL bHorizontal, const ImplControlValue& aValue ); -++ -++ /** 'Get' method for tool bar. -++ -++ @see pushButton() -++ */ -++ TQToolBar *toolBar( const Rectangle& rControlRegion, BOOL bHorizontal ); -++ -++ /** 'Get' method for tool button. -++ -++ @see pushButton() -++ */ -++ TQToolButton *toolButton( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for menu bar. -++ -++ @see pushButton() -++ */ -++ TQMenuBar *menuBar( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for popup menu. -++ -++ @see pushButton() -++ */ -++ TQPopupMenu *popupMenu( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for progress bar -++ -++ @see pushButton() -++ */ -++ TQProgressBar *progressBar( const Rectangle& rControlRegion ); -++ -++ // TODO other widgets -++ -++ protected: -++ /** Style conversion function. -++ -++ Conversion function between VCL ControlState together with -++ ImplControlValue and Qt state flags. -++ -++ @param nState -++ State of the widget (default, focused, ...) as defined in Native -++ Widget Framework. -++ -++ @param aValue -++ Value held by the widget (on, off, ...) -++ */ -++ TQStyle::SFlags vclStateValue2SFlags( ControlState nState, const ImplControlValue& aValue ); -++ -++ public: -++ /** Convert VCL Rectangle to TQRect. -++ -++ @param rControlRegion -++ The region to convert. -++ -++ @return -++ The bounding box of the region. -++ */ -++ static TQRect region2TQRect( const Rectangle& rControlRegion ); -++}; -++ -++WidgetPainter::WidgetPainter( void ) -++ : m_pPushButton( NULL ), -++ m_pRadioButton( NULL ), -++ m_pCheckBox( NULL ), -++ m_pComboBox( NULL ), -++ m_pEditableComboBox( NULL ), -++ m_pLineEdit( NULL ), -++ m_pSpinWidget( NULL ), -++ m_pSpinEdit( NULL ), -++ m_pTabLeft( NULL ), -++ m_pTabMiddle( NULL ), -++ m_pTabRight( NULL ), -++ m_pTabAlone( NULL ), -++ m_pTabBarParent( NULL ), -++ m_pTabBar( NULL ), -++ m_pTabWidget( NULL ), -++ m_pListView( NULL ), -++ m_pScrollBar( NULL ), -++ m_pMainWindow( NULL ), -++ m_pToolBarHoriz( NULL ), -++ m_pToolBarVert( NULL ), -++ m_pToolButton( NULL ), -++ m_pMenuBar( NULL ), -++ m_pPopupMenu( NULL ), -++ m_pProgressBar( NULL ) -++{ -++} -++ -++WidgetPainter::~WidgetPainter( void ) -++{ -++ delete m_pPushButton, m_pPushButton = NULL; -++ delete m_pRadioButton, m_pRadioButton = NULL; -++ delete m_pCheckBox, m_pCheckBox = NULL; -++ delete m_pComboBox, m_pComboBox = NULL; -++ delete m_pEditableComboBox, m_pEditableComboBox = NULL; -++ delete m_pLineEdit, m_pLineEdit = NULL; -++ delete m_pSpinWidget, m_pSpinWidget = NULL; -++ m_pSpinEdit = NULL; // Deleted in m_pSpinWidget's destructor -++ delete m_pTabAlone, m_pTabAlone = NULL; -++ delete m_pTabBarParent, m_pTabBarParent = NULL; -++ m_pTabBar = NULL; // Deleted in m_pTabBarParent's destructor -++ m_pTabLeft = NULL; -++ m_pTabMiddle = NULL; -++ m_pTabRight = NULL; -++ delete m_pTabWidget, m_pTabWidget = NULL; -++ delete m_pListView, m_pListView = NULL; -++ delete m_pScrollBar, m_pScrollBar = NULL; -++ delete m_pToolBarHoriz, m_pToolBarHoriz = NULL; -++ delete m_pToolBarVert, m_pToolBarVert = NULL; -++ delete m_pMainWindow, m_pMainWindow = NULL; -++ delete m_pToolButton, m_pToolButton = NULL; -++ delete m_pMenuBar, m_pMenuBar = NULL; -++ delete m_pPopupMenu, m_pPopupMenu = NULL; -++ delete m_pProgressBar, m_pProgressBar = NULL; -++} -++ -++BOOL WidgetPainter::drawStyledWidget( TQWidget *pWidget, -++ ControlState nState, const ImplControlValue& aValue, -++ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc, -++ ControlPart nPart ) -++{ -++ if ( !pWidget ) -++ return FALSE; -++ -++ // Normalize the widget -++ TQPoint qWidgetPos( pWidget->pos() ); -++ pWidget->move( 0, 0 ); -++ -++ // Enable/disable the widget -++ pWidget->setEnabled( nState & CTRL_STATE_ENABLED ); -++ -++ // Create pixmap to paint to -++ TQPixmap qPixmap( pWidget->width(), pWidget->height() ); -++ TQPainter qPainter( &qPixmap ); -++ TQRect qRect( 0, 0, pWidget->width(), pWidget->height() ); -++ -++ // Use the background of the widget -++ qPixmap.fill( pWidget, TQPoint(0, 0) ); -++ -++ // Convert the flags -++ TQStyle::SFlags nStyle = vclStateValue2SFlags( nState, aValue ); -++ -++ // Store the widget class -++ const char *pClassName = pWidget->className(); -++ -++ // Draw the widget to the pixmap -++ if ( strcmp( TQPUSHBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ // Workaround for the Platinum style. -++ // Platinum takes the state directly from the widget, not from SFlags. -++ TQPushButton *pPushButton = static_cast( pWidget->qt_cast( TQPUSHBUTTON_OBJECT_NAME_STRING ) ); -++ if ( pPushButton ) -++ { -++ pPushButton->setDown ( nStyle & TQStyle::Style_Down ); -++ pPushButton->setOn ( nStyle & TQStyle::Style_On ); -++ pPushButton->setEnabled( nStyle & TQStyle::Style_Enabled ); -++ } -++ -++ kapp->style().drawControl( TQStyle::CE_PushButton, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( strcmp( TQRADIOBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ // Bitblt from the screen, because the radio buttons are usually not -++ // rectangular, and there could be a bitmap under them -++ GC aTmpGC = XCreateGC( dpy, qPixmap.handle(), 0, NULL ); -++ X11SalGraphics::CopyScreenArea( dpy, -++ drawable, nScreen, nDepth, -++ qPixmap.handle(), qPixmap.x11Screen(), qPixmap.x11Depth(), -++ aTmpGC, -++ qWidgetPos.x(), qWidgetPos.y(), qRect.width(), qRect.height(), -++ 0, 0 ); -++ XFreeGC( dpy, aTmpGC ); -++ -++ kapp->style().drawControl( TQStyle::CE_RadioButton, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( strcmp( TQCHECKBOX_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawControl( TQStyle::CE_CheckBox, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( strcmp( TQCOMBOBOX_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawComplexControl( TQStyle::CC_ComboBox, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ -++ // Editable combo box uses the background of the associated edit box -++ TQComboBox *pComboBox = static_cast( pWidget->qt_cast( TQCOMBOBOX_OBJECT_NAME_STRING ) ); -++ if ( pComboBox && pComboBox->editable() && pComboBox->lineEdit() ) -++ { -++ TQColorGroup::ColorRole eColorRole = ( pComboBox->isEnabled() )? -++ TQColorGroup::Base: TQColorGroup::Background; -++ qPainter.fillRect( -++ kapp->style().querySubControlMetrics( TQStyle::CC_ComboBox, -++ pComboBox, TQStyle::SC_ComboBoxEditField ), -++ pComboBox->lineEdit()->colorGroup().brush( eColorRole ) ); -++ } -++ } -++ else if ( strcmp( TQLINEEDIT_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawPrimitive( TQStyle::PE_PanelLineEdit, -++ &qPainter, qRect, -++ pWidget->colorGroup(), nStyle | TQStyle::Style_Sunken ); -++ } -++ else if ( strcmp( TQSPINWIDGET_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ const SpinbuttonValue *pValue = static_cast ( &aValue ); -++ -++ // Is any of the buttons pressed? -++ TQStyle::SCFlags eActive = TQStyle::SC_None; -++ if ( pValue ) -++ { -++ if ( pValue->mnUpperState & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_SpinWidgetUp; -++ else if ( pValue->mnLowerState & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_SpinWidgetDown; -++ -++ // Update the enable/disable state of the widget -++ if ( ( nState & CTRL_STATE_ENABLED ) || -++ ( pValue->mnUpperState & CTRL_STATE_ENABLED ) || -++ ( pValue->mnLowerState & CTRL_STATE_ENABLED ) ) -++ { -++ pWidget->setEnabled( true ); -++ nStyle |= TQStyle::Style_Enabled; -++ } -++ else -++ pWidget->setEnabled( false ); -++ -++ // Mouse-over effect -++ if ( (pValue->mnUpperState & CTRL_STATE_ROLLOVER) || -++ (pValue->mnLowerState & CTRL_STATE_ROLLOVER) ) -++ nStyle |= TQStyle::Style_MouseOver; -++ } -++ -++ // Spin widget uses the background of the associated edit box -++ TQSpinWidget *pSpinWidget = static_cast( pWidget->qt_cast( TQSPINWIDGET_OBJECT_NAME_STRING ) ); -++ if ( pSpinWidget && pSpinWidget->editWidget() ) -++ { -++ TQColorGroup::ColorRole eColorRole = ( pSpinWidget->isEnabled() )? -++ TQColorGroup::Base: TQColorGroup::Background; -++ qPainter.fillRect( -++ kapp->style().querySubControlMetrics( TQStyle::CC_SpinWidget, -++ pSpinWidget, TQStyle::SC_SpinWidgetEditField ), -++ pSpinWidget->editWidget()->colorGroup().brush( eColorRole ) ); -++ } -++ -++ // Adjust the frame (needed for Motif Plus style) -++ TQRect qFrameRect = kapp->style().querySubControlMetrics( TQStyle::CC_SpinWidget, -++ pWidget, TQStyle::SC_SpinWidgetFrame ); -++ -++ kapp->style().drawComplexControl( TQStyle::CC_SpinWidget, -++ &qPainter, pWidget, qFrameRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyle::SC_All, eActive ); -++ } -++ else if ( strcmp( TQTABBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ const TabitemValue *pValue = static_cast ( &aValue ); -++ -++ TQTab *pTab = NULL; -++ if ( pValue ) -++ { -++ if ( ( pValue->isFirst() || pValue->isLeftAligned() ) && ( pValue->isLast() || pValue->isRightAligned() ) ) -++ pTab = m_pTabAlone; -++ else if ( pValue->isFirst() || pValue->isLeftAligned() ) -++ pTab = m_pTabLeft; -++ else if ( pValue->isLast() || pValue->isRightAligned() ) -++ pTab = m_pTabRight; -++ else -++ pTab = m_pTabMiddle; -++ } -++ if ( !pTab ) -++ return FALSE; -++ -++ pTab->setRect( qRect ); -++ -++ kapp->style().drawControl( TQStyle::CE_TabBarTab, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyleOption( pTab ) ); -++ } -++ else if ( strcmp( TQTABWIDGET_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawPrimitive( TQStyle::PE_PanelTabWidget, -++ &qPainter, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( strcmp( TQLISTVIEW_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawPrimitive( TQStyle::PE_Panel, -++ &qPainter, qRect, -++ pWidget->colorGroup(), nStyle | TQStyle::Style_Sunken ); -++ } -++ else if ( strcmp( TQSCROLLBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ const ScrollbarValue *pValue = static_cast ( &aValue ); -++ -++ TQStyle::SCFlags eActive = TQStyle::SC_None; -++ if ( pValue ) -++ { -++ // Workaround for Style_MouseOver-aware themes. -++ // Quite ugly, but I do not know about a better solution. -++ const char *pStyleName = kapp->style().className(); -++ if ( strcmp( "QMotifPlusStyle", pStyleName ) == 0 ) -++ { -++ nStyle |= TQStyle::Style_MouseOver; -++ if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER ) -++ eActive = TQStyle::SC_ScrollBarSlider; -++ } -++ else if ( strcmp( "QSGIStyle", pStyleName ) == 0 ) -++ { -++ nStyle |= TQStyle::Style_MouseOver; -++ if ( pValue->mnButton1State & CTRL_STATE_ROLLOVER ) -++ eActive = TQStyle::SC_ScrollBarSubLine; -++ else if ( pValue->mnButton2State & CTRL_STATE_ROLLOVER ) -++ eActive = TQStyle::SC_ScrollBarAddLine; -++ else if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER ) -++ eActive = TQStyle::SC_ScrollBarSlider; -++ } -++ -++ if ( pValue->mnButton1State & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarSubLine; -++ else if ( pValue->mnButton2State & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarAddLine; -++ else if ( pValue->mnThumbState & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarSlider; -++ else if ( pValue->mnPage1State & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarSubPage; -++ else if ( pValue->mnPage2State & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarAddPage; -++ -++ // Update the enable/disable state of the widget -++ if ( ( nState & CTRL_STATE_ENABLED ) || -++ ( pValue->mnButton1State & CTRL_STATE_ENABLED ) || -++ ( pValue->mnButton2State & CTRL_STATE_ENABLED ) || -++ ( pValue->mnThumbState & CTRL_STATE_ENABLED ) || -++ ( pValue->mnPage1State & CTRL_STATE_ENABLED ) || -++ ( pValue->mnPage2State & CTRL_STATE_ENABLED ) ) -++ { -++ pWidget->setEnabled( true ); -++ nStyle |= TQStyle::Style_Enabled; -++ } -++ else -++ pWidget->setEnabled( false ); -++ } -++ -++ // Is it a horizontal scroll bar? -++ TQScrollBar *pScrollBar = static_cast ( pWidget->qt_cast( TQSCROLLBAR_OBJECT_NAME_STRING ) ); -++ TQStyle::StyleFlags eHoriz = TQStyle::Style_Default; -++ if ( pScrollBar && pScrollBar->orientation() == Qt::Horizontal ) -++ eHoriz = TQStyle::Style_Horizontal; -++ -++ kapp->style().drawComplexControl( TQStyle::CC_ScrollBar, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle | eHoriz, -++ TQStyle::SC_All, eActive ); -++ } -++ else if ( strcmp( TQTOOLBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ TQToolBar *pToolBar = static_cast< TQToolBar * >( pWidget->qt_cast( TQTOOLBAR_OBJECT_NAME_STRING ) ); -++ bool bIsHorizontal = false; -++ if ( pToolBar && pToolBar->orientation() == Qt::Horizontal ) -++ { -++ nStyle |= TQStyle::Style_Horizontal; -++ bIsHorizontal = true; -++ } -++ -++ kapp->style().drawControl( TQStyle::CE_DockWindowEmptyArea, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ -++ kapp->style().drawPrimitive( TQStyle::PE_PanelDockWindow, -++ &qPainter, qRect, pWidget->colorGroup(), nStyle ); -++ -++ if ( nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT ) -++ { -++ const ToolbarValue *pValue = static_cast< const ToolbarValue * >( &aValue ); -++ -++ TQRect qThumbRect = region2TQRect( pValue->maGripRect ); -++ qThumbRect.moveBy( -qWidgetPos.x(), -qWidgetPos.y() ); -++ if ( bIsHorizontal ) -++ qThumbRect.addCoords( 0, 2, 0, -3 ); // make the thumb a bit nicer -++ else -++ qThumbRect.addCoords( 2, 0, -3, 0 ); // make the thumb a bit nicer -++ -++ if ( kapp->style().inherits( "HighColorStyle" ) || -++ kapp->style().inherits( "HighContrastStyle" ) || -++ kapp->style().inherits( "KeramikStyle" ) || -++ kapp->style().inherits( "KThemeStyle" ) || -++ kapp->style().inherits( "ThinKeramikStyle" ) ) -++ { -++ // Workaround for the workaround in KStyle::drawPrimitive() -++ KStyle *pStyle = static_cast< KStyle * >( &kapp->style() ); -++ pStyle->drawKStylePrimitive( KStyle::KPE_ToolBarHandle, -++ &qPainter, pToolBar, qThumbRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else -++ kapp->style().drawPrimitive( TQStyle::PE_DockWindowHandle, -++ &qPainter, qThumbRect, pWidget->colorGroup(), nStyle ); -++ } -++ } -++ else if ( strcmp( TQTOOLBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ if( (nStyle & TQStyle::Style_MouseOver) ) -++ nStyle &= ~TQStyle::Style_Off; -++ kapp->style().drawComplexControl( TQStyle::CC_ToolButton, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyle::SC_ToolButton ); -++ } -++ else if ( strcmp( TQMENUBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ if ( nPart == PART_ENTIRE_CONTROL ) -++ { -++ kapp->style().drawControl( TQStyle::CE_MenuBarEmptyArea, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( nPart == PART_MENU_ITEM ) -++ { -++ int nMenuItem = ( nStyle & TQStyle::Style_Enabled )? m_nMenuBarEnabledItem: m_nMenuBarDisabledItem; -++ TQMenuItem *pMenuItem = static_cast( pWidget )->findItem( nMenuItem ); -++ -++ if ( nStyle & TQStyle::Style_Selected ) -++ nStyle |= TQStyle::Style_Active | TQStyle::Style_Down | TQStyle::Style_HasFocus; -++ -++ kapp->style().drawControl( TQStyle::CE_MenuBarItem, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyleOption( pMenuItem ) ); -++ } -++ } -++ else if ( strcmp( TQPOPUPMENU_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ int nMenuItem = ( nStyle & TQStyle::Style_Enabled )? m_nPopupMenuEnabledItem: m_nPopupMenuDisabledItem; -++ TQMenuItem *pMenuItem = static_cast( pWidget )->findItem( nMenuItem ); -++ -++ if ( nStyle & TQStyle::Style_Selected ) -++ nStyle |= TQStyle::Style_Active; -++ -++ kapp->style().drawControl( TQStyle::CE_PopupMenuItem, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyleOption( pMenuItem, 0, 0 ) ); -++ } -++ else if ( strcmp( TQPROGRESSBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ long nProgressWidth = aValue.getNumericVal(); -++ TQProgressBar* pProgress = static_cast(pWidget); -++ pProgress->setProgress( nProgressWidth, qRect.width() ); -++ -++ kapp->style().drawControl( TQStyle::CE_ProgressBarGroove, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ kapp->style().drawControl( TQStyle::CE_ProgressBarContents, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else -++ return FALSE; -++ -++ // Bitblt it to the screen -++ X11SalGraphics::CopyScreenArea( dpy, -++ qPixmap.handle(), qPixmap.x11Screen(), qPixmap.x11Depth(), -++ drawable, nScreen, nDepth, -++ gc, -++ 0, 0, qRect.width(), qRect.height(), -++ qWidgetPos.x(), qWidgetPos.y() ); -++ -++ // Restore widget's position -++ pWidget->move( qWidgetPos ); -++ -++ return TRUE; -++} -++ -++TQPushButton *WidgetPainter::pushButton( const Rectangle& rControlRegion, -++ BOOL bDefault ) -++{ -++ if ( !m_pPushButton ) -++ m_pPushButton = new TQPushButton( NULL, "push_button" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ // Workaround for broken styles which do not add -++ // TQStyle::PM_ButtonDefaultIndicator to the size of the default button -++ // (for example Keramik) -++ // FIXME Fix Keramik style to be consistant with Qt built-in styles. Aargh! -++ if ( bDefault ) -++ { -++ TQSize qContentsSize( 50, 50 ); -++ m_pPushButton->setDefault( false ); -++ TQSize qNormalSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton, -++ m_pPushButton, qContentsSize ); -++ m_pPushButton->setDefault( true ); -++ TQSize qDefSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton, -++ m_pPushButton, qContentsSize ); -++ -++ int nIndicatorSize = kapp->style().pixelMetric( -++ TQStyle::PM_ButtonDefaultIndicator, m_pPushButton ); -++ if ( qNormalSize.width() == qDefSize.width() ) -++ qRect.addCoords( nIndicatorSize, 0, -nIndicatorSize, 0 ); -++ if ( qNormalSize.height() == qDefSize.height() ) -++ qRect.addCoords( 0, nIndicatorSize, 0, -nIndicatorSize ); -++ } -++ -++ m_pPushButton->move( qRect.topLeft() ); -++ m_pPushButton->resize( qRect.size() ); -++ m_pPushButton->setDefault( bDefault ); -++ -++ return m_pPushButton; -++} -++ -++TQRadioButton *WidgetPainter::radioButton( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pRadioButton ) -++ m_pRadioButton = new TQRadioButton( NULL, "radio_button" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ // Workaround for broken themes which do not honor the given size. -++ // Quite ugly, but I do not know about a better solution. -++ const char *pStyleName = kapp->style().className(); -++ if ( strcmp( "KThemeStyle", pStyleName ) == 0 ) -++ { -++ TQRect qOldRect( qRect ); -++ -++ qRect.setWidth( kapp->style().pixelMetric( -++ TQStyle::PM_ExclusiveIndicatorWidth, m_pRadioButton ) ); -++ qRect.setHeight( kapp->style().pixelMetric( -++ TQStyle::PM_ExclusiveIndicatorHeight, m_pRadioButton ) ); -++ -++ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2, -++ ( qOldRect.height() - qRect.height() ) / 2 ); -++ } -++ -++ m_pRadioButton->move( qRect.topLeft() ); -++ m_pRadioButton->resize( qRect.size() ); -++ -++ return m_pRadioButton; -++} -++ -++TQCheckBox *WidgetPainter::checkBox( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pCheckBox ) -++ m_pCheckBox = new TQCheckBox( NULL, "check_box" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ // Workaround for broken themes which do not honor the given size. -++ // Quite ugly, but I do not know about a better solution. -++ const char *pStyleName = kapp->style().className(); -++ if ( strcmp( "KThemeStyle", pStyleName ) == 0 ) -++ { -++ TQRect qOldRect( qRect ); -++ -++ qRect.setWidth( kapp->style().pixelMetric( -++ TQStyle::PM_IndicatorWidth, m_pCheckBox ) ); -++ qRect.setHeight( kapp->style().pixelMetric( -++ TQStyle::PM_IndicatorHeight, m_pCheckBox ) ); -++ -++ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2, -++ ( qOldRect.height() - qRect.height() ) / 2 ); -++ } -++ -++ m_pCheckBox->move( qRect.topLeft() ); -++ m_pCheckBox->resize( qRect.size() ); -++ -++ return m_pCheckBox; -++} -++ -++TQComboBox *WidgetPainter::comboBox( const Rectangle& rControlRegion, -++ BOOL bEditable ) -++{ -++ TQComboBox *pComboBox = NULL; -++ if ( bEditable ) -++ { -++ if ( !m_pEditableComboBox ) -++ m_pEditableComboBox = new TQComboBox( true, NULL, "combo_box_edit" ); -++ pComboBox = m_pEditableComboBox; -++ } -++ else -++ { -++ if ( !m_pComboBox ) -++ m_pComboBox = new TQComboBox( false, NULL, "combo_box" ); -++ pComboBox = m_pComboBox; -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ pComboBox->move( qRect.topLeft() ); -++ pComboBox->resize( qRect.size() ); -++ -++ return pComboBox; -++} -++ -++TQLineEdit *WidgetPainter::lineEdit( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pLineEdit ) -++ m_pLineEdit = new TQLineEdit( NULL, "line_edit" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pLineEdit->move( qRect.topLeft() ); -++ m_pLineEdit->resize( qRect.size() ); -++ -++ return m_pLineEdit; -++} -++ -++TQSpinWidget *WidgetPainter::spinWidget( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pSpinWidget ) -++ { -++ m_pSpinWidget = new TQSpinWidget( NULL, "spin_widget" ); -++ -++ m_pSpinEdit = new TQLineEdit( NULL, "line_edit_spin" ); -++ m_pSpinWidget->setEditWidget( m_pSpinEdit ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pSpinWidget->move( qRect.topLeft() ); -++ m_pSpinWidget->resize( qRect.size() ); -++ m_pSpinWidget->arrange(); -++ -++ return m_pSpinWidget; -++} -++ -++TQTabBar *WidgetPainter::tabBar( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pTabBar ) -++ { -++ if ( !m_pTabBarParent ) -++ m_pTabBarParent = new TQWidget( NULL, "tab_bar_parent" ); -++ -++ m_pTabBar = new TQTabBar( m_pTabBarParent, "tab_bar" ); -++ -++ m_pTabLeft = new TQTab(); -++ m_pTabMiddle = new TQTab(); -++ m_pTabRight = new TQTab(); -++ m_pTabAlone = new TQTab(); -++ -++ m_pTabBar->addTab( m_pTabLeft ); -++ m_pTabBar->addTab( m_pTabMiddle ); -++ m_pTabBar->addTab( m_pTabRight ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pTabBar->move( qRect.topLeft() ); -++ m_pTabBar->resize( qRect.size() ); -++ -++ m_pTabBar->setShape( TQTabBar::RoundedAbove ); -++ -++ return m_pTabBar; -++} -++ -++TQTabWidget *WidgetPainter::tabWidget( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pTabWidget ) -++ m_pTabWidget = new TQTabWidget( NULL, "tab_widget" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ --qRect.rTop(); -++ -++ m_pTabWidget->move( qRect.topLeft() ); -++ m_pTabWidget->resize( qRect.size() ); -++ -++ return m_pTabWidget; -++} -++ -++TQListView *WidgetPainter::listView( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pListView ) -++ m_pListView = new TQListView( NULL, "list_view" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pListView->move( qRect.topLeft() ); -++ m_pListView->resize( qRect.size() ); -++ -++ return m_pListView; -++} -++ -++TQScrollBar *WidgetPainter::scrollBar( const Rectangle& rControlRegion, -++ BOOL bHorizontal, const ImplControlValue& aValue ) -++{ -++ if ( !m_pScrollBar ) -++ { -++ m_pScrollBar = new TQScrollBar( NULL, "scroll_bar" ); -++ m_pScrollBar->setTracking( false ); -++ m_pScrollBar->setLineStep( 1 ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pScrollBar->move( qRect.topLeft() ); -++ m_pScrollBar->resize( qRect.size() ); -++ m_pScrollBar->setOrientation( bHorizontal? Qt::Horizontal: Qt::Vertical ); -++ -++ const ScrollbarValue *pValue = static_cast ( &aValue ); -++ if ( pValue ) -++ { -++ m_pScrollBar->setMinValue( pValue->mnMin ); -++ m_pScrollBar->setMaxValue( pValue->mnMax - pValue->mnVisibleSize ); -++ m_pScrollBar->setValue( pValue->mnCur ); -++ m_pScrollBar->setPageStep( pValue->mnVisibleSize ); -++ } -++ -++ return m_pScrollBar; -++} -++ -++TQToolBar *WidgetPainter::toolBar( const Rectangle& rControlRegion, BOOL bHorizontal ) -++{ -++ if ( !m_pMainWindow ) -++ m_pMainWindow = new TQMainWindow( NULL, "main_window" ); -++ -++ TQToolBar *pToolBar; -++ if ( bHorizontal ) -++ { -++ if ( !m_pToolBarHoriz ) -++ { -++ m_pToolBarHoriz = new TQToolBar( m_pMainWindow, "tool_bar_horiz" ); -++ m_pMainWindow->moveDockWindow( m_pToolBarHoriz, Qt::DockTop ); -++ } -++ pToolBar = m_pToolBarHoriz; -++ } -++ else -++ { -++ if ( !m_pToolBarVert ) -++ { -++ m_pToolBarVert = new TQToolBar( m_pMainWindow, "tool_bar_horiz" ); -++ m_pMainWindow->moveDockWindow( m_pToolBarVert, Qt::DockLeft ); -++ } -++ pToolBar = m_pToolBarVert; -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ pToolBar->move( qRect.topLeft() ); -++ pToolBar->resize( qRect.size() ); -++ -++ return pToolBar; -++} -++ -++TQToolButton *WidgetPainter::toolButton( const Rectangle& rControlRegion) -++{ -++ if ( !m_pToolButton ) -++ m_pToolButton = new TQToolButton( NULL, "tool_button" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pToolButton->move( qRect.topLeft() ); -++ m_pToolButton->resize( qRect.size() ); -++ -++ return m_pToolButton; -++} -++ -++TQMenuBar *WidgetPainter::menuBar( const Rectangle& rControlRegion) -++{ -++ if ( !m_pMenuBar ) -++ { -++ m_pMenuBar = new TQMenuBar( NULL, "menu_bar" ); -++ -++ m_nMenuBarEnabledItem = m_pMenuBar->insertItem( "" ); -++ m_nMenuBarDisabledItem = m_pMenuBar->insertItem( "" ); -++ -++ m_pMenuBar->setItemEnabled( m_nMenuBarEnabledItem, true ); -++ m_pMenuBar->setItemEnabled( m_nMenuBarDisabledItem, false ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pMenuBar->move( qRect.topLeft() ); -++ m_pMenuBar->resize( qRect.size() ); -++ -++ return m_pMenuBar; -++} -++ -++TQPopupMenu *WidgetPainter::popupMenu( const Rectangle& rControlRegion) -++{ -++ if ( !m_pPopupMenu ) -++ { -++ m_pPopupMenu = new TQPopupMenu( NULL, "popup_menu" ); -++ -++ m_nPopupMenuEnabledItem = m_pPopupMenu->insertItem( "" ); -++ m_nPopupMenuDisabledItem = m_pPopupMenu->insertItem( "" ); -++ -++ m_pPopupMenu->setItemEnabled( m_nPopupMenuEnabledItem, true ); -++ m_pPopupMenu->setItemEnabled( m_nPopupMenuDisabledItem, false ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pPopupMenu->move( qRect.topLeft() ); -++ m_pPopupMenu->resize( qRect.size() ); -++ -++ return m_pPopupMenu; -++} -++ -++TQProgressBar *WidgetPainter::progressBar( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pProgressBar ) -++ m_pProgressBar = new TQProgressBar( NULL, "progress_bar" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pProgressBar->move( qRect.topLeft() ); -++ m_pProgressBar->resize( qRect.size() ); -++ -++ return m_pProgressBar; -++} -++ -++TQStyle::SFlags WidgetPainter::vclStateValue2SFlags( ControlState nState, -++ const ImplControlValue& aValue ) -++{ -++ TQStyle::SFlags nStyle = -++ ( (nState & CTRL_STATE_DEFAULT)? TQStyle::Style_ButtonDefault: TQStyle::Style_Default ) | -++ ( (nState & CTRL_STATE_ENABLED)? TQStyle::Style_Enabled: TQStyle::Style_Default ) | -++ ( (nState & CTRL_STATE_FOCUSED)? TQStyle::Style_HasFocus: TQStyle::Style_Default ) | -++ ( (nState & CTRL_STATE_PRESSED)? TQStyle::Style_Down: TQStyle::Style_Raised ) | -++ ( (nState & CTRL_STATE_SELECTED)? TQStyle::Style_Selected : TQStyle::Style_Default ) | -++ ( (nState & CTRL_STATE_ROLLOVER)? TQStyle::Style_MouseOver: TQStyle::Style_Default ); -++ //TODO ( (nState & CTRL_STATE_HIDDEN)? TQStyle::Style_: TQStyle::Style_Default ) | -++ -++ switch ( aValue.getTristateVal() ) -++ { -++ case BUTTONVALUE_ON: nStyle |= TQStyle::Style_On; break; -++ case BUTTONVALUE_OFF: nStyle |= TQStyle::Style_Off; break; -++ case BUTTONVALUE_MIXED: nStyle |= TQStyle::Style_NoChange; break; -++ default: break; -++ } -++ -++ return nStyle; -++} -++ -++TQRect WidgetPainter::region2TQRect( const Rectangle& rControlRegion ) -++{ -++ return TQRect( TQPoint( rControlRegion.Left(), rControlRegion.Top() ), -++ TQPoint( rControlRegion.Right(), rControlRegion.Bottom() ) ); -++} -++ -++/** Instance of WidgetPainter. -++ -++ It is used to paint the widgets requested by NWF. -++*/ -++static WidgetPainter *pWidgetPainter; -++ -++class TDESalGraphics : public X11SalGraphics -++{ -++ public: -++ TDESalGraphics() {} -++ virtual ~TDESalGraphics() {} -++ virtual BOOL IsNativeControlSupported( ControlType nType, ControlPart nPart ); -++ virtual BOOL hitTestNativeControl( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, const Point& aPos, -++ BOOL& rIsInside ); -++ virtual BOOL drawNativeControl( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue& aValue, -++ const OUString& aCaption ); -++ virtual BOOL drawNativeControlText( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue& aValue, -++ const OUString& aCaption ); -++ virtual BOOL getNativeControlRegion( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue& aValue, -++ const OUString& aCaption, -++ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ); -++}; -++ -++/** What widgets can be drawn the native way. -++ -++ @param nType -++ Type of the widget. -++ -++ @param nPart -++ Specification of the widget's part if it consists of more than one. -++ -++ @return TRUE if the platform supports native drawing of the widget nType -++ defined by nPart. -++*/ -++BOOL TDESalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nPart ) -++{ -++ return -++ ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) || -++ ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) || -++ ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) ) || -++ ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) || -++ ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) || -++ ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_WINDOW || nPart == HAS_BACKGROUND_TEXTURE ) ) || -++ ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) || -++ // no CTRL_SPINBUTTONS for TDE -++ ( (nType == CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) ) || -++ ( (nType == CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) ) || -++ // no CTRL_TAB_BODY for TDE -++ ( (nType == CTRL_SCROLLBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) ) || -++ ( (nType == CTRL_SCROLLBAR) && (nPart == HAS_THREE_BUTTONS) ) || // TODO small optimization is possible here: return this only if the style really has 3 buttons -++ // CTRL_GROUPBOX not supported -++ // CTRL_FIXEDLINE not supported -++ // CTRL_FIXEDBORDER not supported -++ ( (nType == CTRL_TOOLBAR) && (nPart == PART_ENTIRE_CONTROL || -++ nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT || -++ nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT || -++ nPart == PART_BUTTON) ) || -++ ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) || -++ ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) || -++ ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) ) -++ ; -++} -++ -++ -++/** Test whether the position is in the native widget. -++ -++ If the return value is TRUE, bIsInside contains information whether -++ aPos was or was not inside the native widget specified by the -++ nType/nPart combination. -++*/ -++BOOL TDESalGraphics::hitTestNativeControl( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, const Point& rPos, -++ BOOL& rIsInside ) -++{ -++ if ( nType == CTRL_SCROLLBAR ) -++ { -++ // make position relative to rControlRegion -++ Point aPos = rPos - rControlRegion.TopLeft(); -++ rIsInside = FALSE; -++ -++ BOOL bHorizontal = ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT ); -++ -++ TQScrollBar *pScrollBar = pWidgetPainter->scrollBar( rControlRegion, -++ bHorizontal, ImplControlValue() ); -++ TQRect qRectSubLine = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubLine ); -++ TQRect qRectAddLine = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarAddLine ); -++ -++ // There are 2 buttons on the right/bottom side of the scrollbar -++ BOOL bTwoSubButtons = FALSE; -++ -++ // It is a Platinum style scroll bar -++ BOOL bPlatinumStyle = FALSE; -++ -++ // Workaround for Platinum and 3 button style scroll bars. -++ // It makes the right/down button bigger. -++ if ( bHorizontal ) -++ { -++ qRectAddLine.setLeft( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pScrollBar, -++ TQStyle::SC_ScrollBarAddPage ).right() + 1 ); -++ if ( qRectAddLine.width() > qRectSubLine.width() ) -++ bTwoSubButtons = TRUE; -++ if ( qRectSubLine.left() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).left() ) -++ bPlatinumStyle = TRUE; -++ } -++ else -++ { -++ qRectAddLine.setTop( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pScrollBar, -++ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 ); -++ if ( qRectAddLine.height() > qRectSubLine.height() ) -++ bTwoSubButtons = TRUE; -++ if ( qRectSubLine.top() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).top() ) -++ bPlatinumStyle = TRUE; -++ } -++ -++ switch ( nPart ) -++ { -++ case PART_BUTTON_LEFT: -++ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) ) -++ rIsInside = TRUE; -++ else if ( bTwoSubButtons ) -++ { -++ qRectAddLine.setWidth( qRectAddLine.width() / 2 ); -++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -++ } -++ break; -++ -++ case PART_BUTTON_UP: -++ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) ) -++ rIsInside = TRUE; -++ else if ( bTwoSubButtons ) -++ { -++ qRectAddLine.setHeight( qRectAddLine.height() / 2 ); -++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -++ } -++ break; -++ -++ case PART_BUTTON_RIGHT: -++ if ( bTwoSubButtons ) -++ qRectAddLine.setLeft( qRectAddLine.left() + qRectAddLine.width() / 2 ); -++ -++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -++ break; -++ -++ case PART_BUTTON_DOWN: -++ if ( bTwoSubButtons ) -++ qRectAddLine.setTop( qRectAddLine.top() + qRectAddLine.height() / 2 ); -++ -++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -++ break; -++ -++ // cases PART_TRACK_HORZ_AREA and PART_TRACK_VERT_AREA -++ default: -++ return FALSE; -++ } -++ -++ return TRUE; -++ } -++ -++ return FALSE; -++} -++ -++ -++/** Draw the requested control described by nPart/nState. -++ -++ @param rControlRegion -++ The bounding region of the complete control in VCL frame coordinates. -++ -++ @param aValue -++ An optional value (tristate/numerical/string). -++ -++ @param aCaption -++ A caption or title string (like button text etc.) -++*/ -++BOOL TDESalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue& aValue, -++ const OUString& ) -++{ -++ BOOL bReturn = FALSE; -++ -++ Display *dpy = GetXDisplay(); -++ XLIB_Window drawable = GetDrawable(); -++ GC gc = SelectPen(); //SelectFont(); // GC with current clipping region set -++ -++ if ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->pushButton( rControlRegion, (nState & CTRL_STATE_DEFAULT) ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->radioButton( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->checkBox( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->comboBox( rControlRegion, TRUE ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->lineEdit( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->comboBox( rControlRegion, FALSE ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_WINDOW) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->listView( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->spinWidget( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType==CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->tabBar( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType==CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->tabWidget( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_SCROLLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->scrollBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ, aValue ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT || nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->toolBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_THUMB_VERT ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart ); -++ } -++ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_BUTTON) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->toolButton( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart ); -++ } -++ else if ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->menuBar( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart ); -++ } -++ else if ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->popupMenu( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->progressBar( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ -++ return bReturn; -++} -++ -++ -++/** Draw text on the widget. -++ -++ OPTIONAL. Draws the requested text for the control described by nPart/nState. -++ Used if text is not drawn by DrawNativeControl(). -++ -++ @param rControlRegion -++ The bounding region of the complete control in VCL frame coordinates. -++ -++ @param aValue -++ An optional value (tristate/numerical/string) -++ -++ @param aCaption -++ A caption or title string (like button text etc.) -++*/ -++BOOL TDESalGraphics::drawNativeControlText( ControlType, ControlPart, -++ const Rectangle&, ControlState, -++ const ImplControlValue&, -++ const OUString& ) -++{ -++ return FALSE; -++} -++ -++/** Check if the bounding regions match. -++ -++ If the return value is TRUE, rNativeBoundingRegion -++ contains the true bounding region covered by the control -++ including any adornment, while rNativeContentRegion contains the area -++ within the control that can be safely drawn into without drawing over -++ the borders of the control. -++ -++ @param rControlRegion -++ The bounding region of the control in VCL frame coordinates. -++ -++ @param aValue -++ An optional value (tristate/numerical/string) -++ -++ @param aCaption -++ A caption or title string (like button text etc.) -++*/ -++BOOL TDESalGraphics::getNativeControlRegion( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue&, -++ const OUString&, -++ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ) -++{ -++ BOOL bReturn = FALSE; -++ TQRect qBoundingRect = WidgetPainter::region2TQRect( rControlRegion ); -++ TQRect qRect; -++ -++ TQWidget *pWidget = NULL; -++ switch ( nType ) -++ { -++ // Metrics of the push button -++ case CTRL_PUSHBUTTON: -++ pWidget = pWidgetPainter->pushButton( rControlRegion, ( nState & CTRL_STATE_DEFAULT ) ); -++ -++ switch ( nPart ) -++ { -++ case PART_ENTIRE_CONTROL: -++ qRect = qBoundingRect; -++ -++ if ( nState & CTRL_STATE_DEFAULT ) -++ { -++ int nIndicatorSize = kapp->style().pixelMetric( -++ TQStyle::PM_ButtonDefaultIndicator, pWidget ); -++ qBoundingRect.addCoords( -nIndicatorSize, -nIndicatorSize, -++ nIndicatorSize, nIndicatorSize ); -++ bReturn = TRUE; -++ } -++ break; -++ } -++ break; -++ -++ // Metrics of the radio button -++ case CTRL_RADIOBUTTON: -++ pWidget = pWidgetPainter->radioButton( rControlRegion ); -++ -++ if ( nPart == PART_ENTIRE_CONTROL ) -++ { -++ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorWidth, pWidget ) ); -++ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorHeight, pWidget ) ); -++ -++ bReturn = TRUE; -++ } -++ break; -++ -++ // Metrics of the check box -++ case CTRL_CHECKBOX: -++ pWidget = pWidgetPainter->checkBox( rControlRegion ); -++ -++ if ( nPart == PART_ENTIRE_CONTROL ) -++ { -++ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_IndicatorWidth, pWidget ) ); -++ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_IndicatorHeight, pWidget ) ); -++ -++ bReturn = TRUE; -++ } -++ break; -++ -++ // Metrics of the combo box -++ case CTRL_COMBOBOX: -++ case CTRL_LISTBOX: -++ pWidget = pWidgetPainter->comboBox( rControlRegion, ( nType == CTRL_COMBOBOX ) ); -++ switch ( nPart ) -++ { -++ case PART_BUTTON_DOWN: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxArrow ); -++ qRect.setLeft( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ComboBox, pWidget, -++ TQStyle::SC_ComboBoxEditField ).right() + 1 ); -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ bReturn = TRUE; -++ break; -++ -++ case PART_SUB_EDIT: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxEditField ); -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ bReturn = TRUE; -++ break; -++ } -++ break; -++ -++ // Metrics of the spin box -++ case CTRL_SPINBOX: -++ pWidget = pWidgetPainter->spinWidget( rControlRegion ); -++ switch ( nPart ) -++ { -++ case PART_BUTTON_UP: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetUp ); -++ bReturn = TRUE; -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ break; -++ -++ case PART_BUTTON_DOWN: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetDown ); -++ bReturn = TRUE; -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ break; -++ -++ case PART_SUB_EDIT: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetEditField ); -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ bReturn = TRUE; -++ break; -++ } -++ break; -++ -++ // Metrics of the scroll bar -++ case CTRL_SCROLLBAR: -++ pWidget = pWidgetPainter->scrollBar( rControlRegion, -++ ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT ), -++ ImplControlValue() ); -++ switch ( nPart ) -++ { -++ case PART_BUTTON_LEFT: -++ case PART_BUTTON_UP: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarSubLine ); -++ -++ // Workaround for Platinum style scroll bars. It makes the -++ // left/up button invisible. -++ if ( nPart == PART_BUTTON_LEFT ) -++ { -++ if ( qRect.left() > kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, -++ TQStyle::SC_ScrollBarSubPage ).left() ) -++ { -++ qRect.setLeft( 0 ); -++ qRect.setRight( 0 ); -++ } -++ } -++ else -++ { -++ if ( qRect.top() > kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, -++ TQStyle::SC_ScrollBarSubPage ).top() ) -++ { -++ qRect.setTop( 0 ); -++ qRect.setBottom( 0 ); -++ } -++ } -++ -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ -++ bReturn = TRUE; -++ break; -++ -++ case PART_BUTTON_RIGHT: -++ case PART_BUTTON_DOWN: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarAddLine ); -++ -++ // Workaround for Platinum and 3 button style scroll bars. -++ // It makes the right/down button bigger. -++ if ( nPart == PART_BUTTON_RIGHT ) -++ qRect.setLeft( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, -++ TQStyle::SC_ScrollBarAddPage ).right() + 1 ); -++ else -++ qRect.setTop( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, -++ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 ); -++ -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ -++ bReturn = TRUE; -++ break; -++ } -++ break; -++ } -++ -++ // Fill rNativeBoundingRegion and rNativeContentRegion -++ if ( bReturn ) -++ { -++ // Bounding region -++ Point aBPoint( qBoundingRect.x(), qBoundingRect.y() ); -++ Size aBSize( qBoundingRect.width(), qBoundingRect.height() ); -++ rNativeBoundingRegion = Rectangle( aBPoint, aBSize ); -++ -++ // Region of the content -++ Point aPoint( qRect.x(), qRect.y() ); -++ Size aSize( qRect.width(), qRect.height() ); -++ rNativeContentRegion = Rectangle( aPoint, aSize ); -++ } -++ -++ return bReturn; -++} -++ -++// ----------------------------------------------------------------------- -++// TDESalFrame implementation -++// ----------------------------------------------------------------------- -++ -++TDESalFrame::TDESalFrame( SalFrame* pParent, ULONG nStyle ) : -++ X11SalFrame( pParent, nStyle ) -++{ -++} -++ -++void TDESalFrame::Show( BOOL bVisible, BOOL bNoActivate ) -++{ -++ if ( !GetParent() && ! (GetStyle() & SAL_FRAME_STYLE_INTRO) ) -++ { -++ TDEXLib* pXLib = static_cast(GetDisplay()->GetXLib()); -++ pXLib->doStartup(); -++ } -++ X11SalFrame::Show( bVisible, bNoActivate ); -++} -++ -++/** Helper function to convert colors. -++*/ -++static Color toColor( const TQColor &rColor ) -++{ -++ return Color( rColor.red(), rColor.green(), rColor.blue() ); -++} -++ -++/** Helper function to read untranslated text entry from KConfig configuration repository. -++*/ -++static OUString readEntryUntranslated( KConfig *pConfig, const char *pKey ) -++{ -++ return OUString::createFromAscii( pConfig->readEntryUntranslated( pKey ).ascii() ); -++} -++ -++/** Helper function to read color from KConfig configuration repository. -++*/ -++static Color readColor( KConfig *pConfig, const char *pKey ) -++{ -++ return toColor( pConfig->readColorEntry( pKey ) ); -++} -++ -++/** Helper function to add information to Font from TQFont. -++ -++ Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx). -++*/ -++static Font toFont( const TQFont &rTQFont, const ::com::sun::star::lang::Locale& rLocale ) -++{ -++ psp::FastPrintFontInfo aInfo; -++ TQFontInfo qFontInfo( rTQFont ); -++ -++ // set family name -++ aInfo.m_aFamilyName = String( rTQFont.family().utf8(), RTL_TEXTENCODING_UTF8 ); -++ -++ // set italic -++ aInfo.m_eItalic = ( qFontInfo.italic()? psp::italic::Italic: psp::italic::Upright ); -++ -++ // set weight -++ int nWeight = qFontInfo.weight(); -++ if ( nWeight <= TQFont::Light ) -++ aInfo.m_eWeight = psp::weight::Light; -++ else if ( nWeight <= TQFont::Normal ) -++ aInfo.m_eWeight = psp::weight::Normal; -++ else if ( nWeight <= TQFont::DemiBold ) -++ aInfo.m_eWeight = psp::weight::SemiBold; -++ else if ( nWeight <= TQFont::Bold ) -++ aInfo.m_eWeight = psp::weight::Bold; -++ else -++ aInfo.m_eWeight = psp::weight::UltraBold; -++ -++ // set width -++ int nStretch = rTQFont.stretch(); -++ if ( nStretch <= TQFont::UltraCondensed ) -++ aInfo.m_eWidth = psp::width::UltraCondensed; -++ else if ( nStretch <= TQFont::ExtraCondensed ) -++ aInfo.m_eWidth = psp::width::ExtraCondensed; -++ else if ( nStretch <= TQFont::Condensed ) -++ aInfo.m_eWidth = psp::width::Condensed; -++ else if ( nStretch <= TQFont::SemiCondensed ) -++ aInfo.m_eWidth = psp::width::SemiCondensed; -++ else if ( nStretch <= TQFont::Unstretched ) -++ aInfo.m_eWidth = psp::width::Normal; -++ else if ( nStretch <= TQFont::SemiExpanded ) -++ aInfo.m_eWidth = psp::width::SemiExpanded; -++ else if ( nStretch <= TQFont::Expanded ) -++ aInfo.m_eWidth = psp::width::Expanded; -++ else if ( nStretch <= TQFont::ExtraExpanded ) -++ aInfo.m_eWidth = psp::width::ExtraExpanded; -++ else -++ aInfo.m_eWidth = psp::width::UltraExpanded; -++ -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "font name BEFORE system match: \"%s\"\n", OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() ); -++#endif -++ -++ // match font to e.g. resolve "Sans" -++ psp::PrintFontManager::get().matchFont( aInfo, rLocale ); -++ -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "font match %s, name AFTER: \"%s\"\n", -++ aInfo.m_nID != 0 ? "succeeded" : "failed", -++ OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() ); -++#endif -++ -++ // font height -++ int nPointHeight = qFontInfo.pointSize(); -++ if ( nPointHeight <= 0 ) -++ nPointHeight = rTQFont.pointSize(); -++ -++ // Create the font -++ Font aFont( aInfo.m_aFamilyName, Size( 0, nPointHeight ) ); -++ if( aInfo.m_eWeight != psp::weight::Unknown ) -++ aFont.SetWeight( PspGraphics::ToFontWeight( aInfo.m_eWeight ) ); -++ if( aInfo.m_eWidth != psp::width::Unknown ) -++ aFont.SetWidthType( PspGraphics::ToFontWidth( aInfo.m_eWidth ) ); -++ if( aInfo.m_eItalic != psp::italic::Unknown ) -++ aFont.SetItalic( PspGraphics::ToFontItalic( aInfo.m_eItalic ) ); -++ if( aInfo.m_ePitch != psp::pitch::Unknown ) -++ aFont.SetPitch( PspGraphics::ToFontPitch( aInfo.m_ePitch ) ); -++ -++ return aFont; -++} -++ -++/** Implementation of TDE integration's main method. -++*/ -++void TDESalFrame::UpdateSettings( AllSettings& rSettings ) -++{ -++ StyleSettings aStyleSettings( rSettings.GetStyleSettings() ); -++ bool bSetTitleFont = false; -++ -++ aStyleSettings.SetToolbarIconSize( STYLE_TOOLBAR_ICONSIZE_LARGE ); -++ -++ // WM settings -++ KConfig *pConfig = KGlobal::config(); -++ if ( pConfig ) -++ { -++ pConfig->setGroup( "WM" ); -++ const char *pKey; -++ -++ pKey = "activeBackground"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetActiveColor( readColor( pConfig, pKey ) ); -++ -++ pKey = "activeBlend"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetActiveColor2( readColor( pConfig, pKey ) ); -++ -++ pKey = "inactiveBackground"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetDeactiveColor( readColor( pConfig, pKey ) ); -++ -++ pKey = "inactiveBlend"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetDeactiveColor2( readColor( pConfig, pKey ) ); -++ -++ pKey = "inactiveForeground"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetDeactiveTextColor( readColor( pConfig, pKey ) ); -++ -++ pKey = "activeForeground"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetActiveTextColor( readColor( pConfig, pKey ) ); -++ -++ pKey = "titleFont"; -++ if ( pConfig->hasKey( pKey ) ) -++ { -++ Font aFont = toFont( pConfig->readFontEntry( pKey ), rSettings.GetUILocale() ); -++ aStyleSettings.SetTitleFont( aFont ); -++ bSetTitleFont = true; -++ } -++ -++ pConfig->setGroup( "Icons" ); -++ -++ pKey = "Theme"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetPreferredSymbolsStyleName( readEntryUntranslated( pConfig, pKey ) ); -++ } -++ -++ // General settings -++ TQColorGroup qColorGroup = kapp->palette().active(); -++ -++ Color aFore = toColor( qColorGroup.foreground() ); -++ Color aBack = toColor( qColorGroup.background() ); -++ Color aText = toColor( qColorGroup.text() ); -++ Color aBase = toColor( qColorGroup.base() ); -++ -++ // Foreground -++ aStyleSettings.SetRadioCheckTextColor( aFore ); -++ aStyleSettings.SetLabelTextColor( aFore ); -++ aStyleSettings.SetInfoTextColor( aFore ); -++ aStyleSettings.SetDialogTextColor( aFore ); -++ aStyleSettings.SetGroupTextColor( aFore ); -++ -++ // Text -++ aStyleSettings.SetFieldTextColor( aText ); -++ aStyleSettings.SetFieldRolloverTextColor( aText ); -++ aStyleSettings.SetWindowTextColor( aText ); -++ aStyleSettings.SetHelpTextColor( aText ); -++ -++ // Base -++ aStyleSettings.SetFieldColor( aBase ); -++ aStyleSettings.SetHelpColor( aBase ); -++ aStyleSettings.SetWindowColor( aBase ); -++ aStyleSettings.SetActiveTabColor( aBase ); -++ -++ // Buttons -++ aStyleSettings.SetButtonTextColor( toColor( qColorGroup.buttonText() ) ); -++ aStyleSettings.SetButtonRolloverTextColor( toColor( qColorGroup.buttonText() ) ); -++ -++ // Disable color -++ aStyleSettings.SetDisableColor( toColor( qColorGroup.mid() ) ); -++ -++ // Workspace -++ aStyleSettings.SetWorkspaceColor( toColor( qColorGroup.mid() ) ); -++ -++ // Background -++ aStyleSettings.Set3DColors( aBack ); -++ aStyleSettings.SetFaceColor( aBack ); -++ aStyleSettings.SetInactiveTabColor( aBack ); -++ aStyleSettings.SetDialogColor( aBack ); -++ if( aBack == COL_LIGHTGRAY ) -++ aStyleSettings.SetCheckedColor( Color( 0xCC, 0xCC, 0xCC ) ); -++ else -++ { -++ Color aColor2 = aStyleSettings.GetLightColor(); -++ aStyleSettings. -++ SetCheckedColor( Color( (BYTE)(((USHORT)aBack.GetRed()+(USHORT)aColor2.GetRed())/2), -++ (BYTE)(((USHORT)aBack.GetGreen()+(USHORT)aColor2.GetGreen())/2), -++ (BYTE)(((USHORT)aBack.GetBlue()+(USHORT)aColor2.GetBlue())/2) -++ ) ); -++ } -++ -++ // Selection -++ aStyleSettings.SetHighlightColor( toColor( qColorGroup.highlight() ) ); -++ aStyleSettings.SetHighlightTextColor( toColor( qColorGroup.highlightedText() ) ); -++ -++ // Font -++ Font aFont = toFont( kapp->font(), rSettings.GetUILocale() ); -++ -++ aStyleSettings.SetAppFont( aFont ); -++ aStyleSettings.SetHelpFont( aFont ); -++ aStyleSettings.SetMenuFont( aFont ); // will be changed according to pMenuBar -++ aStyleSettings.SetToolFont( aFont ); // will be changed according to pToolBar -++ aStyleSettings.SetLabelFont( aFont ); -++ aStyleSettings.SetInfoFont( aFont ); -++ aStyleSettings.SetRadioCheckFont( aFont ); -++ aStyleSettings.SetPushButtonFont( aFont ); -++ aStyleSettings.SetFieldFont( aFont ); -++ aStyleSettings.SetIconFont( aFont ); -++ aStyleSettings.SetGroupFont( aFont ); -++ -++ aFont.SetWeight( WEIGHT_BOLD ); -++ if( !bSetTitleFont ) -++ aStyleSettings.SetTitleFont( aFont ); -++ aStyleSettings.SetFloatTitleFont( aFont ); -++ -++ int flash_time = TQApplication::cursorFlashTime(); -++ aStyleSettings.SetCursorBlinkTime( flash_time != 0 ? flash_time/2 : STYLE_CURSOR_NOBLINKTIME ); -++ -++ KMainWindow qMainWindow; -++ qMainWindow.createGUI( "/dev/null" ); // hack -++ -++ // Menu -++ aStyleSettings.SetSkipDisabledInMenus( TRUE ); -++ KMenuBar *pMenuBar = qMainWindow.menuBar(); -++ if ( pMenuBar ) -++ { -++ // Color -++ TQColorGroup qMenuCG = pMenuBar->colorGroup(); -++ -++ // Menu text and background color, theme specific -++ Color aMenuFore = toColor( qMenuCG.foreground() ); -++ Color aMenuBack = toColor( qMenuCG.background() ); -++ if ( kapp->style().inherits( "LightStyleV2" ) || -++ kapp->style().inherits( "LightStyleV3" ) || -++ ( kapp->style().inherits( "QMotifStyle" ) && !kapp->style().inherits( "QSGIStyle" ) ) || -++ kapp->style().inherits( "QWindowsStyle" ) ) -++ { -++ aMenuFore = toColor( qMenuCG.buttonText() ); -++ aMenuBack = toColor( qMenuCG.button() ); -++ } -++ -++ aStyleSettings.SetMenuTextColor( aMenuFore ); -++ aStyleSettings.SetMenuBarTextColor( aMenuFore ); -++ aStyleSettings.SetMenuColor( aMenuBack ); -++ aStyleSettings.SetMenuBarColor( aMenuBack ); -++ -++ aStyleSettings.SetMenuHighlightColor( toColor ( qMenuCG.highlight() ) ); -++ -++ // Menu items higlight text color, theme specific -++ if ( kapp->style().inherits( "HighContrastStyle" ) || -++ kapp->style().inherits( "KeramikStyle" ) || -++ kapp->style().inherits( "QWindowsStyle" ) || -++ kapp->style().inherits( "ThinKeramikStyle" ) || -++ kapp->style().inherits( "PlastikStyle" ) ) -++ { -++ aStyleSettings.SetMenuHighlightTextColor( toColor ( qMenuCG.highlightedText() ) ); -++ } -++ else -++ aStyleSettings.SetMenuHighlightTextColor( aMenuFore ); -++ -++ // set special menubar higlight text color -++ if ( kapp->style().inherits( "HighContrastStyle" ) ) -++ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = toColor( qMenuCG.highlightedText() ); -++ else -++ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = aMenuFore; -++ -++ // Font -++ aFont = toFont( pMenuBar->font(), rSettings.GetUILocale() ); -++ aStyleSettings.SetMenuFont( aFont ); -++ } -++ -++ // Tool bar -++ KToolBar *pToolBar = qMainWindow.toolBar(); -++ if ( pToolBar ) -++ { -++ aFont = toFont( pToolBar->font(), rSettings.GetUILocale() ); -++ aStyleSettings.SetToolFont( aFont ); -++ } -++ -++ // Scroll bar size -++ aStyleSettings.SetScrollBarSize( kapp->style().pixelMetric( TQStyle::PM_ScrollBarExtent ) ); -++ -++ rSettings.SetStyleSettings( aStyleSettings ); -++} -++ -++SalGraphics* TDESalFrame::GetGraphics() -++{ -++ if( GetWindow() ) -++ { -++ for( int i = 0; i < nMaxGraphics; i++ ) -++ { -++ if( ! m_aGraphics[i].bInUse ) -++ { -++ m_aGraphics[i].bInUse = true; -++ if( ! m_aGraphics[i].pGraphics ) -++ { -++ m_aGraphics[i].pGraphics = new TDESalGraphics(); -++ m_aGraphics[i].pGraphics->Init( this, GetWindow(), GetScreenNumber() ); -++ } -++ return m_aGraphics[i].pGraphics; -++ } -++ } -++ } -++ -++ return NULL; -++} -++ -++void TDESalFrame::ReleaseGraphics( SalGraphics *pGraphics ) -++{ -++ for( int i = 0; i < nMaxGraphics; i++ ) -++ { -++ if( m_aGraphics[i].pGraphics == pGraphics ) -++ { -++ m_aGraphics[i].bInUse = false; -++ break; -++ } -++ } -++} -++ -++void TDESalFrame::updateGraphics( bool bClear ) -++{ -++ Drawable aDrawable = bClear ? None : GetWindow(); -++ for( int i = 0; i < nMaxGraphics; i++ ) -++ { -++ if( m_aGraphics[i].bInUse ) -++ m_aGraphics[i].pGraphics->SetDrawable( aDrawable, GetScreenNumber() ); -++ } -++} -++ -++TDESalFrame::~TDESalFrame() -++{ -++} -++ -++TDESalFrame::GraphicsHolder::~GraphicsHolder() -++{ -++ delete pGraphics; -++} -++ -++// ----------------------------------------------------------------------- -++// TDESalInstance implementation -++// ----------------------------------------------------------------------- -++ -++SalFrame * -++TDESalInstance::CreateFrame( SalFrame *pParent, ULONG nStyle ) -++{ -++ return new TDESalFrame( pParent, nStyle ); -++} -++ -++// ----------------------------------------------------------------------- -++// TDESalData pieces -++// ----------------------------------------------------------------------- -++ -++// Create the widget painter so we have some control over -++// the destruction sequence, so Qt doesn't die in action. -++ -++void TDEData::initNWF() -++{ -++ ImplSVData *pSVData = ImplGetSVData(); -++ // draw toolbars on separate lines -++ pSVData->maNWFData.mbDockingAreaSeparateTB = true; -++ -++ pWidgetPainter = new WidgetPainter(); -++} -++ -++void TDEData::deInitNWF() -++{ -++ delete pWidgetPainter; -++ pWidgetPainter = NULL; -++ -++ // We have to destroy the style early -++ kapp->setStyle( NULL ); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN vcl/unx/tde/tdedata.cxx vcl/unx/tde/tdedata.cxx -+--- vcl/unx/tde/tdedata.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ vcl/unx/tde/tdedata.cxx 2011-08-18 20:14:26.186519004 -0500 -+@@ -0,0 +1,274 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_vcl.hxx" -++ -++#define _SV_SALDATA_CXX -++#include -++ -++#include -++#include -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#ifdef FREEBSD -++#include -++#include -++#include -++#endif -++#include -++#include -++#include -++#include -++#include -++ -++#include -++#include "i18n_im.hxx" -++#include "i18n_xkb.hxx" -++ -++/* #i59042# override KApplications method for session management -++ * since it will interfere badly with our own. -++ */ -++class VCLTDEApplication : public KApplication -++{ -++ public: -++ VCLTDEApplication() : KApplication() {} -++ -++ virtual void commitData(QSessionManager &sm); -++}; -++ -++void VCLTDEApplication::commitData(QSessionManager&) -++{ -++} -++ -++/*************************************************************************** -++ * class SalTDEDisplay * -++ ***************************************************************************/ -++ -++SalTDEDisplay::SalTDEDisplay( Display* pDisp ) -++ : SalX11Display( pDisp ) -++{ -++} -++ -++SalTDEDisplay::~SalTDEDisplay() -++{ -++ // in case never a frame opened -++ static_cast(GetXLib())->doStartup(); -++ // clean up own members -++ doDestruct(); -++ // prevent SalDisplay from closing KApplication's display -++ pDisp_ = NULL; -++} -++ -++/*************************************************************************** -++ * class TDEXLib * -++ ***************************************************************************/ -++ -++TDEXLib::~TDEXLib() -++{ -++ // #158056# on 64 bit linux using libXRandr.so.2 will crash in -++ // XCloseDisplay when freeing extension data -++ // no known work around, therefor currently leak. Hopefully -++ // this does not make problems since we're shutting down anyway -++ // should we ever get a real tde plugin that uses the TDE event loop -++ // we should use tde's method to signal screen changes similar -++ // to the gtk plugin -++ #if ! defined USE_RANDR || ! (defined LINUX && defined X86_64) -++ // properly deinitialize KApplication -++ delete (VCLTDEApplication*)m_pApplication; -++ #endif -++ // free the faked cmdline arguments no longer needed by KApplication -++ for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) -++ free( m_pFreeCmdLineArgs[i] ); -++ delete [] m_pFreeCmdLineArgs; -++ delete [] m_pAppCmdLineArgs; -++} -++ -++void TDEXLib::Init() -++{ -++ SalI18N_InputMethod* pInputMethod = new SalI18N_InputMethod; -++ pInputMethod->SetLocale(); -++ XrmInitialize(); -++ -++ KAboutData *kAboutData = new KAboutData( "LibreOffice", -++ I18N_NOOP( "LibreOffice" ), -++ "1.1.0", -++ I18N_NOOP( "LibreOffice with TDE Native Widget Support." ), -++ KAboutData::License_LGPL, -++ "(c) 2003, 2004 Novell, Inc", -++ I18N_NOOP( "LibreOffice is an office suite.\n" ), -++ "http://libreoffice.org", -++ "libreoffice@lists.freedesktop.org"); -++ kAboutData->addAuthor( "Jan Holesovsky", -++ I18N_NOOP( "Original author and maintainer of the TDE NWF." ), -++ "kendy@artax.karlin.mff.cuni.cz", -++ "http://artax.karlin.mff.cuni.cz/~kendy" ); -++ -++ m_nFakeCmdLineArgs = 1; -++ USHORT nIdx; -++ int nParams = osl_getCommandArgCount(); -++ rtl::OString aDisplay; -++ rtl::OUString aParam, aBin; -++ -++ for ( nIdx = 0; nIdx < nParams; ++nIdx ) -++ { -++ osl_getCommandArg( nIdx, &aParam.pData ); -++ if ( !m_pFreeCmdLineArgs && aParam.equalsAscii( "-display" ) && nIdx + 1 < nParams ) -++ { -++ osl_getCommandArg( nIdx + 1, &aParam.pData ); -++ aDisplay = rtl::OUStringToOString( aParam, osl_getThreadTextEncoding() ); -++ -++ m_nFakeCmdLineArgs = 3; -++ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; -++ m_pFreeCmdLineArgs[ 1 ] = strdup( "-display" ); -++ m_pFreeCmdLineArgs[ 2 ] = strdup( aDisplay.getStr() ); -++ } -++ } -++ if ( !m_pFreeCmdLineArgs ) -++ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; -++ -++ osl_getExecutableFile( &aParam.pData ); -++ osl_getSystemPathFromFileURL( aParam.pData, &aBin.pData ); -++ rtl::OString aExec = rtl::OUStringToOString( aBin, osl_getThreadTextEncoding() ); -++ m_pFreeCmdLineArgs[0] = strdup( aExec.getStr() ); -++ -++ // make a copy of the string list for freeing it since -++ // KApplication manipulates the pointers inside the argument vector -++ // note: KApplication bad ! -++ m_pAppCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; -++ for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) -++ m_pAppCmdLineArgs[i] = m_pFreeCmdLineArgs[i]; -++ -++ KCmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData ); -++ -++ KApplication::disableAutoDcopRegistration(); -++ m_pApplication = new VCLTDEApplication(); -++ kapp->disableSessionManagement(); -++ -++ Display* pDisp = TQPaintDevice::x11AppDisplay(); -++ -++ SalDisplay *pSalDisplay = new SalTDEDisplay( pDisp ); -++ -++ pInputMethod->CreateMethod( pDisp ); -++ pInputMethod->AddConnectionWatch( pDisp, (void*)this ); -++ pSalDisplay->SetInputMethod( pInputMethod ); -++ -++ PushXErrorLevel( true ); -++ SalI18N_KeyboardExtension *pKbdExtension = new SalI18N_KeyboardExtension( pDisp ); -++ XSync( pDisp, False ); -++ -++ pKbdExtension->UseExtension( ! HasXErrorOccured() ); -++ PopXErrorLevel(); -++ -++ pSalDisplay->SetKbdExtension( pKbdExtension ); -++} -++ -++void TDEXLib::doStartup() -++{ -++ if( ! m_bStartupDone ) -++ { -++ KStartupInfo::appStarted(); -++ m_bStartupDone = true; -++ #if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "called KStartupInfo::appStarted()\n" ); -++ #endif -++ } -++} -++ -++/********************************************************************** -++ * class TDEData * -++ **********************************************************************/ -++ -++TDEData::~TDEData() -++{ -++} -++ -++void TDEData::Init() -++{ -++ pXLib_ = new TDEXLib(); -++ pXLib_->Init(); -++} -++ -++/********************************************************************** -++ * plugin entry point * -++ **********************************************************************/ -++ -++extern "C" { -++ VCL_DLLPUBLIC SalInstance* create_SalInstance( oslModule ) -++ { -++ /* #i92121# workaround deadlocks in the X11 implementation -++ */ -++ static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" ); -++ /* #i90094# -++ from now on we know that an X connection will be -++ established, so protect X against itself -++ */ -++ if( ! ( pNoXInitThreads && *pNoXInitThreads ) ) -++ XInitThreads(); -++ -++ rtl::OString aVersion( qVersion() ); -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "qt version string is \"%s\"\n", aVersion.getStr() ); -++#endif -++ sal_Int32 nIndex = 0, nMajor = 0, nMinor = 0, nMicro = 0; -++ nMajor = aVersion.getToken( 0, '.', nIndex ).toInt32(); -++ if( nIndex > 0 ) -++ nMinor = aVersion.getToken( 0, '.', nIndex ).toInt32(); -++ if( nIndex > 0 ) -++ nMicro = aVersion.getToken( 0, '.', nIndex ).toInt32(); -++ if( nMajor != 3 || nMinor < 2 || (nMinor == 2 && nMicro < 2) ) -++ { -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "unsuitable qt version %d.%d.%d\n", (int)nMajor, (int)nMinor, (int)nMicro ); -++#endif -++ return NULL; -++ } -++ -++ TDESalInstance* pInstance = new TDESalInstance( new SalYieldMutex() ); -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "created TDESalInstance 0x%p\n", pInstance ); -++#endif -++ -++ // initialize SalData -++ TDEData *pSalData = new TDEData(); -++ SetSalData( pSalData ); -++ pSalData->m_pInstance = pInstance; -++ pSalData->Init(); -++ pSalData->initNWF(); -++ -++ return pInstance; -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN vcl/prj/build.lst vcl/prj/build.lst -+--- vcl/prj/build.lst 2010-11-11 13:09:00.000000000 -0600 -++++ vcl/prj/build.lst 2011-08-18 20:31:51.496382806 -0500 -+@@ -35,6 +35,7 @@ -+ vc vcl\unx\headless nmake - u vc__hl vc_inc NULL -+ vc vcl\unx\kde nmake - u vc__kde vc_inc NULL -+ vc vcl\unx\kde4 nmake - u vc__kde4 vc_inc NULL -++vc vcl\unx\tde nmake - u vc__tde vc_inc NULL -+ vc vcl\aqua\source\a11y nmake - u vc__aquy vc_inc NULL -+ vc vcl\aqua\source\app nmake - u vc__appa vc_inc NULL -+ vc vcl\aqua\source\dtrans nmake - u vc__dtra vc_inc NULL -+@@ -45,6 +46,6 @@ -+ vc vcl\mac\source\gdi nmake - m vc__gdim vc_inc NULL -+ vc vcl\mac\source\window nmake - m vc__winm vc_inc NULL -+ vc vcl\mac\source\src nmake - m vc__srcm vc_inc NULL -+-vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL -++vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__tde.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL -+ vc vcl\util\linksvp nmake - u vc_lsvp vc_util NULL -+ vc vcl\workben nmake - all vc_wrkb vc_util vc_salmain NULL -+diff -urN vcl/prj/d.lst vcl/prj/d.lst -+--- vcl/prj/d.lst 2010-11-11 09:22:48.000000000 -0600 -++++ vcl/prj/d.lst 2011-08-18 20:30:59.772430360 -0500 -+@@ -62,6 +62,7 @@ -+ ..\inc\vcl\javachild.hxx %_DEST%\inc%_EXT%\vcl\javachild.hxx -+ ..\inc\vcl\jobset.hxx %_DEST%\inc%_EXT%\vcl\jobset.hxx -+ ..\unx\inc\kde_headers.h %_DEST%\inc%_EXT%\vcl\kde_headers.h -++..\unx\inc\tde_headers.h %_DEST%\inc%_EXT%\vcl\tde_headers.h -+ ..\inc\vcl\keycod.hxx %_DEST%\inc%_EXT%\vcl\keycod.hxx -+ ..\inc\vcl\keycodes.hxx %_DEST%\inc%_EXT%\vcl\keycodes.hxx -+ ..\inc\vcl\lineinfo.hxx %_DEST%\inc%_EXT%\vcl\lineinfo.hxx -+diff -urN vcl/source/app/settings.cxx vcl/source/app/settings.cxx -+--- vcl/source/app/settings.cxx 2011-03-08 12:51:41.000000000 -0600 -++++ vcl/source/app/settings.cxx 2011-08-18 20:32:39.820075101 -0500 -+@@ -830,6 +830,8 @@ -+ nRet = STYLE_SYMBOLS_CRYSTAL; -+ else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "kde4" ) ) -+ nRet = STYLE_SYMBOLS_OXYGEN; -++ else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "tde" ) ) -++ nRet = STYLE_SYMBOLS_CRYSTAL; -+ } -+ -+ // falback to any existing style -+diff -urN vcl/unx/source/gdi/dtint.cxx vcl/unx/source/gdi/dtint.cxx -+--- vcl/unx/source/gdi/dtint.cxx 2010-11-11 09:22:48.000000000 -0600 -++++ vcl/unx/source/gdi/dtint.cxx 2011-08-18 20:35:34.753448320 -0500 -+@@ -96,7 +96,7 @@ -+ /* -+ * #i22061# override desktop detection -+ * if environment variable OOO_FORCE_DESKTOP is set -+- * to one of "cde" "kde" "gnome" then autodetection -++ * to one of "cde" "kde" "tde" "gnome" then autodetection -+ * is overridden. -+ */ -+ static const char* pOverride = getenv( "OOO_FORCE_DESKTOP" ); -+diff -urN vcl/unx/source/plugadapt/salplug.cxx vcl/unx/source/plugadapt/salplug.cxx -+--- vcl/unx/source/plugadapt/salplug.cxx 2010-11-11 13:09:00.000000000 -0600 -++++ vcl/unx/source/plugadapt/salplug.cxx 2011-08-18 20:35:23.512588295 -0500 -+@@ -55,10 +55,11 @@ -+ DESKTOP_GNOME, -+ DESKTOP_KDE, -+ DESKTOP_KDE4, -++ DESKTOP_TDE, -+ DESKTOP_CDE -+ }; -+ -+-static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4", "CDE" }; -++static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4", "TDE", "CDE" }; -+ -+ static SalInstance* tryInstance( const OUString& rModuleBase ) -+ { -+@@ -162,7 +166,7 @@ -+ { -+ static const char* pKDEFallbackList[] = -+ { -+- "kde4", "kde", "gtk", "gen", 0 -++ "kde4", "kde", "tde", "gtk", "gen", 0 -+ }; -+ -+ static const char* pStandardFallbackList[] = -+@@ -191,6 +195,11 @@ -+ } -+ else if( desktop.equalsAscii( desktop_strings[DESKTOP_KDE4] ) ) -+ pList = pKDEFallbackList; -++ else if( desktop.equalsAscii( desktop_strings[DESKTOP_TDE] ) ) -++ { -++ pList = pKDEFallbackList; -++ nListEntry = 1; -++ } -+ -+ SalInstance* pInst = NULL; -+ while( pList[nListEntry] && pInst == NULL ) -+@@ -235,7 +244,7 @@ -+ pInst = autodetect_plugin(); -+ -+ // fallback, try everything -+- const char* pPlugin[] = { "gtk", "kde", "gen", 0 }; -++ const char* pPlugin[] = { "gtk", "kde", "tde", "gen", 0 }; -+ -+ for ( int i = 0; !pInst && pPlugin[ i ]; ++i ) -+ pInst = tryInstance( OUString::createFromAscii( pPlugin[ i ] ) ); -+diff -urN vcl/unx/inc/plugins/tde/tdedata.hxx vcl/unx/inc/plugins/tde/tdedata.hxx -+--- vcl/unx/inc/plugins/tde/tdedata.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ vcl/unx/inc/plugins/tde/tdedata.hxx 2011-08-18 20:45:32.009117227 -0500 -+@@ -0,0 +1,114 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _VCL_TDEDATA_HXX -++#define _VCL_TDEDATA_HXX -++ -++#include -++#include -++#include -++ -++class TDEData : public X11SalData -++{ -++public: -++ TDEData() {} -++ virtual ~TDEData(); -++ -++ virtual void Init(); -++ virtual void initNWF(); -++ virtual void deInitNWF(); -++}; -++ -++class SalTDEDisplay : public SalX11Display -++{ -++public: -++ SalTDEDisplay( Display* pDisp ); -++ virtual ~SalTDEDisplay(); -++}; -++ -++class TDESalFrame : public X11SalFrame -++{ -++ static const int nMaxGraphics = 2; -++ -++ struct GraphicsHolder -++ { -++ X11SalGraphics* pGraphics; -++ bool bInUse; -++ GraphicsHolder() -++ : pGraphics( NULL ), -++ bInUse( false ) -++ {} -++ ~GraphicsHolder(); -++ }; -++ GraphicsHolder m_aGraphics[ nMaxGraphics ]; -++ -++public: -++ TDESalFrame( SalFrame* pParent, ULONG nStyle ); -++ virtual ~TDESalFrame(); -++ -++ virtual SalGraphics* GetGraphics(); -++ virtual void ReleaseGraphics( SalGraphics *pGraphics ); -++ virtual void updateGraphics( bool bClear ); -++ virtual void UpdateSettings( AllSettings& rSettings ); -++ virtual void Show( BOOL bVisible, BOOL bNoActivate ); -++}; -++ -++class TDESalInstance : public X11SalInstance -++{ -++public: -++ TDESalInstance( SalYieldMutex* pMutex ) -++ : X11SalInstance( pMutex ) {} -++ virtual ~TDESalInstance() {} -++ virtual SalFrame* CreateFrame( SalFrame* pParent, ULONG nStyle ); -++}; -++ -++class TDEXLib : public SalXLib -++{ -++ bool m_bStartupDone; -++ void* m_pApplication; -++ char** m_pFreeCmdLineArgs; -++ char** m_pAppCmdLineArgs; -++ int m_nFakeCmdLineArgs; -++public: -++ TDEXLib() : SalXLib(), -++ m_bStartupDone( false ), -++ m_pApplication( NULL ), -++ m_pFreeCmdLineArgs( NULL ), -++ m_pAppCmdLineArgs( NULL ), -++ m_nFakeCmdLineArgs( 0 ) -++ {} -++ virtual ~TDEXLib(); -++ virtual void Init(); -++ -++ void doStartup(); -++}; -++ -++#endif // _VCL_TDEDATA_HXX -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN scp2/source/ooo/file_library_ooo.scp scp2/source/ooo/file_library_ooo.scp -+--- scp2/source/ooo/file_library_ooo.scp 2010-11-11 09:08:07.000000000 -0600 -++++ scp2/source/ooo/file_library_ooo.scp 2011-08-19 03:12:08.329491869 -0500 -+@@ -463,6 +463,24 @@ -+ -+ #endif -+ -++#ifdef ENABLE_TDEAB -++File gid_File_Lib_Tdeab_1 -++ TXT_FILE_BODY; -++ Styles = (PACKED,UNO_COMPONENT); -++ RegistryID = gid_Starregistry_Services_Rdb; -++ Dir = SCP2_OOO_BIN_DIR; -++ Name = STRING(CONCAT2(libtdeab1,UNXSUFFIX)); -++End -++ -++File gid_File_Lib_Tdeab_Drv_1 -++ TXT_FILE_BODY; -++ Styles = (PACKED); -++ Dir = SCP2_OOO_BIN_DIR; -++ Name = STRING(CONCAT2(libtdeabdrv1,UNXSUFFIX)); -++End -++ -++#endif -++ -+ #ifdef MACOSX -+ File gid_File_Lib_Macab_1 -+ TXT_FILE_BODY; -+diff -urN scp2/source/ooo/module_hidden_ooo.scp scp2/source/ooo/module_hidden_ooo.scp -+--- scp2/source/ooo/module_hidden_ooo.scp 2010-12-14 09:40:37.000000000 -0600 -++++ scp2/source/ooo/module_hidden_ooo.scp 2011-08-19 03:13:34.946155129 -0500 -+@@ -285,6 +285,8 @@ -+ gid_File_Lib_Evoab_2, -+ gid_File_Lib_Kab_1, -+ gid_File_Lib_Kab_Drv_1, -++ gid_File_Lib_Tdeab_1, -++ gid_File_Lib_Tdeab_Drv_1, -+ gid_File_Lib_Macab_1, -+ gid_File_Lib_Macab_Drv_1, -+ gid_File_Lib_Evtatt, -+diff -urN postprocess/packregistry/makefile.mk postprocess/packregistry/makefile.mk -+--- postprocess/packregistry/makefile.mk 2010-12-01 12:05:07.000000000 -0600 -++++ postprocess/packregistry/makefile.mk 2011-08-19 03:54:29.454469572 -0500 -+@@ -336,6 +336,9 @@ -+ .IF "$(ENABLE_KAB)" == "TRUE" -+ MY_FILES_main += $(MY_MOD)/DataAccess/kab.xcu -+ .END -++.IF "$(ENABLE_TDEAB)" == "TRUE" -++MY_FILES_main += $(MY_MOD)/DataAccess/tdeab.xcu -++.END -+ .IF "$(SYSTEM_MOZILLA)" != "YES" && "$(WITH_MOZILLA)" != "NO" && \ -+ "$(OS)" != "MACOSX" -+ .IF "$(OS)" == "WNT" -+diff -urN connectivity/version.mk connectivity/version.mk -+--- connectivity/version.mk 2010-11-11 09:30:07.000000000 -0600 -++++ connectivity/version.mk 2011-08-19 03:55:43.470147349 -0500 -+@@ -101,6 +101,16 @@ -+ # the micro -+ KAB_MICRO=0 -+ -++# ----------------------------Tdeab settings-------------------------------------# -++# target -++TDEAB_TARGET=tdeab -++ -++# the major -++TDEAB_MAJOR=1 -++# the minor -++TDEAB_MINOR=0 -++# the micro -++TDEAB_MICRO=0 -+ -+ # ----------------------------Macab settings-------------------------------------# -+ # target -+diff -urN fpicker/source/generic/fpicker.cxx fpicker/source/generic/fpicker.cxx -+--- fpicker/source/generic/fpicker.cxx 2010-11-11 09:30:08.000000000 -0600 -++++ fpicker/source/generic/fpicker.cxx 2011-08-19 19:55:13.344690587 -0500 -+@@ -64,6 +64,8 @@ -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDEFilePicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde4")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDE4FilePicker")); -++ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("tde")) -++ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.TDEFilePicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("macosx")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.AquaFilePicker")); -+ #endif -+@@ -139,6 +141,8 @@ -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.GtkFolderPicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDEFolderPicker")); -++ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("tde")) -++ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.TDEFolderPicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("macosx")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.AquaFolderPicker")); -+ #endif -+diff -urN vcl/unx/source/desktopdetect/desktopdetector.cxx vcl/unx/source/desktopdetect/desktopdetector.cxx -+--- vcl/unx/source/desktopdetect/desktopdetector.cxx 2010-11-11 09:22:48.000000000 -0600 -++++ vcl/unx/source/desktopdetect/desktopdetector.cxx 2011-08-19 21:10:45.481110576 -0500 -+@@ -49,12 +49,13 @@ -+ DESKTOP_NONE = 0, -+ DESKTOP_UNKNOWN, -+ DESKTOP_GNOME, -++ DESKTOP_TDE, -+ DESKTOP_KDE, -+ DESKTOP_KDE4, -+ DESKTOP_CDE -+ }; -+ -+-static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4", "CDE" }; -++static const char * desktop_strings[] = { "none", "unknown", "GNOME", "TDE", "KDE", "KDE4", "CDE" }; -+ -+ static bool is_gnome_desktop( Display* pDisplay ) -+ { -+@@ -218,6 +219,15 @@ -+ return false; -+ } -+ -++static bool is_tde_desktop( Display* pDisplay ) -++{ -++ if ( NULL != getenv( "TDE_FULL_SESSION" ) ) -++ { -++ return true; -++ } -++ return false; -++} -++ -+ static bool is_kde4_desktop( Display* pDisplay ) -+ { -+ if ( NULL != getenv( "KDE_FULL_SESSION" ) ) -+@@ -265,6 +275,8 @@ -+ -+ if ( aOver.equalsIgnoreAsciiCase( "cde" ) ) -+ aRet.appendAscii( desktop_strings[DESKTOP_CDE] ); -++ if ( aOver.equalsIgnoreAsciiCase( "tde" ) ) -++ aRet.appendAscii( desktop_strings[DESKTOP_TDE] ); -+ if ( aOver.equalsIgnoreAsciiCase( "kde4" ) ) -+ aRet.appendAscii( desktop_strings[DESKTOP_KDE4] ); -+ if ( aOver.equalsIgnoreAsciiCase( "gnome" ) ) -+@@ -319,7 +331,9 @@ -+ { -+ XErrorHandler pOldHdl = XSetErrorHandler( autodect_error_handler ); -+ -+- if ( is_kde4_desktop( pDisplay ) ) -++ if ( is_tde_desktop( pDisplay ) ) -++ aRet.appendAscii( desktop_strings[DESKTOP_TDE] ); -++ else if ( is_kde4_desktop( pDisplay ) ) -+ aRet.appendAscii( desktop_strings[DESKTOP_KDE4] ); -+ else if ( is_gnome_desktop( pDisplay ) ) -+ aRet.appendAscii( desktop_strings[DESKTOP_GNOME] ); -diff -urN libreoffice-build/patches/unittesting/unittesting-vcl.diff libreoffice-build/patches/unittesting/unittesting-vcl.diff ---- libreoffice-build/patches/unittesting/unittesting-vcl.diff 2010-11-11 08:41:39.000000000 -0600 -+++ libreoffice-build/patches/unittesting/unittesting-vcl.diff 2011-08-21 16:24:42.000000000 -0500 -@@ -10,7 +10,7 @@ - +++ vcl/prj/build.lst - @@ -47,4 +47,3 @@ vc vcl\mac\source\window nmake - m vc__winm vc_inc NULL - vc vcl\mac\source\src nmake - m vc__srcm vc_inc NULL -- vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL -+ vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__tde.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL - vc vcl\util\linksvp nmake - u vc_lsvp vc_util NULL - -vc vcl\workben nmake - all vc_wrkb vc_util vc_salmain NULL - diff --git vcl/prj/tests.lst vcl/prj/tests.lst diff --git a/main/thirdparty/libreoffice/3.3.3/patches/NOTES b/main/thirdparty/libreoffice/3.3.3/patches/NOTES deleted file mode 100644 index 15a4f25d6..000000000 --- a/main/thirdparty/libreoffice/3.3.3/patches/NOTES +++ /dev/null @@ -1,3 +0,0 @@ -This patchset is intended for Debian and has not been tested on other systems, however the patch libreoffice-trinity.diff should apply cleanly to a stock LibreOffice source tree and function properly if enabled. - -After patch application, you will need to rerun autoconf from within the libreoffice-build directory in order to apply the changes made to configure.in diff --git a/main/thirdparty/libreoffice/3.3.3/patches/libreoffice-trinity-debian.diff b/main/thirdparty/libreoffice/3.3.3/patches/libreoffice-trinity-debian.diff deleted file mode 100644 index 46b04d4f2..000000000 --- a/main/thirdparty/libreoffice/3.3.3/patches/libreoffice-trinity-debian.diff +++ /dev/null @@ -1,368 +0,0 @@ -diff -urN debian/changelog debian/changelog ---- debian/changelog 2011-07-21 02:13:49.000000000 -0500 -+++ debian/changelog 2011-09-19 11:37:12.650300701 -0500 -@@ -1,3 +1,9 @@ -+libreoffice (1:3.3.3-1ubuntu2~build0~natty) natty; urgency=low -+ -+ * Enable TDE module -+ -+ -- Timothy Pearson Sat, 20 Aug 2011 15:14:00 -0600 -+ - libreoffice (1:3.3.3-1ubuntu2) natty-proposed; urgency=medium - - * move icons back to 3.3 location after unpacking (LP: #813148) -diff -urN debian/control debian/control ---- debian/control 2011-07-21 02:15:18.000000000 -0500 -+++ debian/control 2011-09-19 11:55:20.684872566 -0500 -@@ -4,9 +4,9 @@ - Maintainer: Ubuntu Core Developers - XSBC-Original-Maintainer: Debian LibreOffice Maintainers - Uploaders: Rene Engelhard --Build-Depends: lsb-release, bzip2, bison, flex | flex-old, libxaw7-dev, unzip, zip, autoconf, automake, sharutils, pkg-config, libfontconfig1-dev, libc0.1 (>= 2.10.2-7) [kfreebsd-i386 kfreebsd-amd64], zlib1g-dev, libfreetype6-dev, libx11-dev, libsm-dev, libxt-dev, libxext-dev, libxtst-dev, libice-dev, libsane-dev, libxrender-dev, libcups2-dev, libarchive-zip-perl, libpng12-dev, libjpeg-dev, libxml2-dev, libexpat1-dev, fastjar, xsltproc, libxkbfile-dev, libxinerama-dev, x11proto-render-dev, unixodbc-dev (>= 2.2.11), libxml-parser-perl, gperf, libpq-dev, po-debconf, bc, wget | curl, dpkg-dev (>= 1.15.1), libgl1-mesa-dev [!armel !mips !mipsel], libglu1-mesa-dev [!armel !mips !mipsel], libpoppler-dev (>= 0.8.0), libgraphite-dev, libtextcat-dev (>= 2.2-8), libcurl4-gnutls-dev, libssl-dev, libdb-dev, python (>= 2.6.6-3+squeeze4), python-dev, debhelper (>= 7.2.3~), libcppunit-dev (>= 1.12), openjdk-6-jdk [alpha amd64 armel armhf i386 powerpc powerpcspe ppc64 s390 s390x sparc], gcj-native-helper [!powerpc !powerpcspe !ppc64], libgcj-common (>= 1:4.4.1) [!powerpc !powerpcspe !ppc64], ant (>= 1.7.0), ant-optional (>= 1.7.0), libcommons-codec-java, libcommons-httpclient-java, libcommons-lang-java, libcommons-logging-java, libservlet2.5-java, libbase-java-openoffice.org [!armel], libsac-java [!armel], libxml-java-openoffice.org [!armel], libflute-java-openoffice.org [!armel], libpentaho-reporting-flow-engine-java-openoffice.org [!armel], liblayout-java-openoffice.org [!armel], libloader-java-openoffice.org [!armel], libformula-java-openoffice.org [!armel], librepository-java-openoffice.org [!armel], libfonts-java-openoffice.org [!armel], libserializer-java-openoffice.org [!armel], libcommons-logging-java, libservlet2.5-java, javahelper, xulrunner-dev | firefox-dev, libnss3-dev (>= 3.12.3), dmake (>= 1:4.11), mono-devel (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], libmono-dev (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], mono-utils (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], cli-common-dev (>= 0.5.7) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], libhunspell-dev (>= 1.1.5-2), libhyphen-dev (>= 2.4), libstlport4.6-dev (>= 4.6.2-3) [i386], libboost-dev (>= 1.38), libmdds-dev, libvigraimpex-dev, libwpd-dev (>= 0.9.0), libmythes-dev (>= 2:1.2), libwps-dev (>= 0.2.0), libwpg-dev (>= 0.2.0), libicu-dev (>= 4.0), libxslt1-dev, libcairo2-dev, kdelibs5-dev (>= 4:4.3.4), libqt4-dev (>= 4.5), libmysqlclient-dev, libmysqlcppconn-dev (>= 1.1.0~r791), libebook1.2-dev [!armel], libxrandr-dev, libhsqldb-java (>> 1.8.0.10), bsh (>= 2.0b4), liblpsolve55-dev (>= 5.5.0.13-5+b1), lp-solve (>= 5.5.0.13-5+b1), libsuitesparse-dev (>= 1:3.4.0), libdbus-glib-1-dev (>= 0.60), libgstreamer-plugins-base0.10-dev, libneon27-gnutls-dev, librdf0-dev (>= 1.0.8), libgtk2.0-dev (>= 2.10), libgnomevfs2-dev, libgconf2-dev, libldap2-dev -+Build-Depends: lsb-release, bzip2, bison, flex | flex-old, libxaw7-dev, unzip, zip, autoconf, automake, sharutils, pkg-config, libfontconfig1-dev, libc0.1 (>= 2.10.2-7) [kfreebsd-i386 kfreebsd-amd64], zlib1g-dev, libfreetype6-dev, libx11-dev, libsm-dev, libxt-dev, libxext-dev, libxtst-dev, libice-dev, libsane-dev, libxrender-dev, libcups2-dev, libarchive-zip-perl, libpng12-dev, libjpeg-dev, libxml2-dev, libexpat1-dev, fastjar, xsltproc, libxkbfile-dev, libxinerama-dev, x11proto-render-dev, unixodbc-dev (>= 2.2.11), libxml-parser-perl, gperf, libpq-dev, po-debconf, bc, wget | curl, dpkg-dev (>= 1.15.1), libgl1-mesa-dev [!armel !mips !mipsel], libglu1-mesa-dev [!armel !mips !mipsel], libpoppler-dev (>= 0.8.0), libgraphite-dev, libtextcat-dev (>= 2.2-8), libcurl4-gnutls-dev, libssl-dev, libdb-dev, python (>= 2.6.6-3+squeeze4), python-dev, debhelper (>= 7.2.3~), libcppunit-dev (>= 1.12), openjdk-6-jdk [alpha amd64 armel armhf i386 powerpc powerpcspe ppc64 s390 s390x sparc], gcj-native-helper [!powerpc !powerpcspe !ppc64], libgcj-common (>= 1:4.4.1) [!powerpc !powerpcspe !ppc64], ant (>= 1.7.0), ant-optional (>= 1.7.0), libcommons-codec-java, libcommons-httpclient-java, libcommons-lang-java, libcommons-logging-java, libservlet2.5-java, libbase-java-openoffice.org [!armel], libsac-java [!armel], libxml-java-openoffice.org [!armel], libflute-java-openoffice.org [!armel], libpentaho-reporting-flow-engine-java-openoffice.org [!armel], liblayout-java-openoffice.org [!armel], libloader-java-openoffice.org [!armel], libformula-java-openoffice.org [!armel], librepository-java-openoffice.org [!armel], libfonts-java-openoffice.org [!armel], libserializer-java-openoffice.org [!armel], libcommons-logging-java, libservlet2.5-java, javahelper, xulrunner-dev | firefox-dev, libnss3-dev (>= 3.12.3), dmake (>= 1:4.11), mono-devel (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], libmono-dev (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], mono-utils (>= 2.4.2.3) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], cli-common-dev (>= 0.5.7) [amd64 i386 ia64 kfreebsd-amd64 kfreebsd-i386], libhunspell-dev (>= 1.1.5-2), libhyphen-dev (>= 2.4), libstlport4.6-dev (>= 4.6.2-3) [i386], libboost-dev (>= 1.38), libmdds-dev, libvigraimpex-dev, libwpd-dev (>= 0.9.0), libmythes-dev (>= 2:1.2), libwps-dev (>= 0.2.0), libwpg-dev (>= 0.2.0), libicu-dev (>= 4.0), libxslt1-dev, libcairo2-dev, kdelibs4-trinity-dev, libqt4-dev (>= 4.5), libmysqlclient-dev, libmysqlcppconn-dev (>= 1.1.0~r791), libebook1.2-dev [!armel], libxrandr-dev, libhsqldb-java (>> 1.8.0.10), bsh (>= 2.0b4), liblpsolve55-dev (>= 5.5.0.13-5+b1), lp-solve (>= 5.5.0.13-5+b1), libsuitesparse-dev (>= 1:3.4.0), libdbus-glib-1-dev (>= 0.60), libgstreamer-plugins-base0.10-dev, libneon27-gnutls-dev, librdf0-dev (>= 1.0.8), libgtk2.0-dev (>= 2.10), libgnomevfs2-dev, libgconf2-dev, libldap2-dev - Build-Depends-Indep: fdupes, xml-core, imagemagick, fontforge --Build-Conflicts: libcairo2 (= 1.4.8-1), libxul-dev (= 1.8.0.13~pre070720-0etch1), gjdoc (= 0.7.8-2), libc6-dev (= 2.6.1-3) [i386 amd64], libc6-dev (= 2.6.1-4) [i386 amd64], nvidia-glx-dev, nvidia-glx-legacy-dev, libmono-dev (= 1.2.6+dfsg-1), libmono-dev (= 1.2.6+dfsg-2), libmono-dev (= 1.2.6+dfsg-3), libmono-dev (= 1.2.6+dfsg-4), libmono-dev (= 2.4+dfsg-2) [sparc], gcj-4.2 (= 4.2.2-6), flex (= 2.5.34-1) [amd64], libboost1.39-dev (<< 1.39.0-2), graphicsmagick-imagemagick-compat (<< 1.3.9~), qt3-dev-tools, ant (= 1.8.0-1) [hppa ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel], ant (= 1.8.0-2) [hppa ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel], ant (= 1.8.0-3) [hppa ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel], libmdds-dev (>= 0.4.0), base-files (= 6.0), base-files (= 6.0squeeze1), libhsqldb-java (>= 1.8.1~) -+Build-Conflicts: libcairo2 (= 1.4.8-1), libxul-dev (= 1.8.0.13~pre070720-0etch1), gjdoc (= 0.7.8-2), libc6-dev (= 2.6.1-3) [i386 amd64], libc6-dev (= 2.6.1-4) [i386 amd64], nvidia-glx-dev, nvidia-glx-legacy-dev, libmono-dev (= 1.2.6+dfsg-1), libmono-dev (= 1.2.6+dfsg-2), libmono-dev (= 1.2.6+dfsg-3), libmono-dev (= 1.2.6+dfsg-4), libmono-dev (= 2.4+dfsg-2) [sparc], gcj-4.2 (= 4.2.2-6), flex (= 2.5.34-1) [amd64], libboost1.39-dev (<< 1.39.0-2), graphicsmagick-imagemagick-compat (<< 1.3.9~), ant (= 1.8.0-1) [hppa ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel], ant (= 1.8.0-2) [hppa ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel], ant (= 1.8.0-3) [hppa ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel], libmdds-dev (>= 0.4.0), base-files (= 6.0), base-files (= 6.0squeeze1), libhsqldb-java (>= 1.8.1~) - Standards-Version: 3.9.1 - XS-Python-Version: current - Vcs-Git: https://alioth.debian.org/anonscm/git/pkg-openoffice/libreoffice.git -@@ -18,7 +18,7 @@ - Architecture: alpha amd64 armel armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 - Depends: libreoffice-core (= ${binary:Version}), libreoffice-writer, libreoffice-calc, libreoffice-impress, libreoffice-draw, libreoffice-math, libreoffice-base [!armel], libreoffice-report-builder-bin [!armel], ttf-dejavu, ttf-sil-gentium-basic, libreoffice-filter-mobiledev, ${lucene-depends}, ${java-common-depends}, ${misc:Depends} - Recommends: ttf-liberation | ttf-mscorefonts-installer --Suggests: hunspell-dictionary, myspell-dictionary, libreoffice-help-${help-l10n-virtual-version}, menu, unixodbc, cups-bsd, libsane, hyphen-hyphenation-patterns, mythes-thesaurus, libxrender1, libgl1, libreoffice-gnome | libreoffice-kde, iceweasel | firefox | icedove | thunderbird | iceape-browser | mozilla-browser, ${java-runtime-depends}, openclipart-libreoffice, pstoedit, imagemagick | graphicsmagick-imagemagick-compat, libpaper-utils, ${gstreamer-plugins-suggests}, ${libldap-suggests}, ${ooo-binfilter-dep}, ${ooo-officebean-dep} -+Suggests: hunspell-dictionary, myspell-dictionary, libreoffice-help-${help-l10n-virtual-version}, menu, unixodbc, cups-bsd, libsane, hyphen-hyphenation-patterns, mythes-thesaurus, libxrender1, libgl1, libreoffice-gnome | libreoffice-kde | libreoffice-trinity, iceweasel | firefox | icedove | thunderbird | iceape-browser | mozilla-browser, ${java-runtime-depends}, openclipart-libreoffice, pstoedit, imagemagick | graphicsmagick-imagemagick-compat, libpaper-utils, ${gstreamer-plugins-suggests}, ${libldap-suggests}, ${ooo-binfilter-dep}, ${ooo-officebean-dep} - Description: office productivity suite - LibreOffice is a full-featured office productivity suite that provides - a near drop-in replacement for Microsoft(R) Office. -@@ -45,6 +45,7 @@ - QuickStarter for GNOMEs notification are - * libreoffice-gnome: GNOME VFS, GConf backend - * libreoffice-kde: KDE UI Plugin and KDE File Picker support -+ * libreoffice-trinity: TDE UI Plugin and TDE File Picker support - * menu: Will add libreoffice menu entries for every Debian window manager. - * unixodbc: ODBC database support - * cups-bsd: Allows LibreOffice to detect your CUPS printer queues -@@ -91,7 +92,7 @@ - Package: libreoffice-core - Architecture: alpha amd64 armel armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 - Depends: libreoffice-common (>> ${base-version}), ttf-opensymbol (>= 1:3.0), ${shlibs:Depends}, ure (>= 1.5.1+OOo3.1.1-15), fontconfig, ${mozilla-nss-depends}, ${misc:Depends} --Conflicts: libreoffice-calc (<< ${binary:Version}), libreoffice-writer (<< ${binary:Version}), libreoffice-impress (<< ${binary:Version}), libreoffice-draw (<< ${binary:Version}), libreoffice-base (<< ${binary:Version}), libreoffice-gtk (<< ${binary:Version}), libreoffice-gnome (<< ${binary:Version}), libreoffice-kde (<< ${binary:Version}), libreoffice-evolution (<< ${binary:Version}), libreoffice-filter-so52 (<< ${binary:Version}), libreoffice-officebean (<< ${binary:Version}), libreoffice-dev (<< ${binary:Version}), libcairo2 (= 1.4.8-1), libicu38 (= 3.8~d01-1), cli-uno-bridge (<< 1:3.0.0~dev300m22), cacao-oj6-jre, mozilla-plugin-vlc (<< 1.0) -+Conflicts: libreoffice-calc (<< ${binary:Version}), libreoffice-writer (<< ${binary:Version}), libreoffice-impress (<< ${binary:Version}), libreoffice-draw (<< ${binary:Version}), libreoffice-base (<< ${binary:Version}), libreoffice-gtk (<< ${binary:Version}), libreoffice-gnome (<< ${binary:Version}), libreoffice-kde (<< ${binary:Version}), libreoffice-trinity (<< ${binary:Version}), libreoffice-evolution (<< ${binary:Version}), libreoffice-filter-so52 (<< ${binary:Version}), libreoffice-officebean (<< ${binary:Version}), libreoffice-dev (<< ${binary:Version}), libcairo2 (= 1.4.8-1), libicu38 (= 3.8~d01-1), cli-uno-bridge (<< 1:3.0.0~dev300m22), cacao-oj6-jre, mozilla-plugin-vlc (<< 1.0) - Breaks: myspell-ru (<< 0.99g5-8.1), myspell-lv (<< 0.7.3-3.1), myspell-et (<< 1:20030606-12.1), myspell-fi (<< 0.7-17.2), myspell-cs-cz (<< 20040229-4.1), myspell-el-gr (<< 0.3-1.1), myspell-nn (<< 2.0.10-3.1), myspell-nb (<< 2.0.10-3.1), hunspell-ar (<< 0.0.0+20080110-1.1), myspell-hu (<< 0.99.4-1.2), hunspell-gl-es (<< 2.2a-6), myspell-gv (<< 0.50-8), myspell-en-au (<< 2.1-5), myspell-fa (<< 0.20070816-2), hunspell-uz (<< 0.6-3.1), hunspell-ko (<< 0.3.3-1), hunspell-se (<< 1.0~beta6.20081222-1.1), hunspell-de-med (<< 20090825-1), hunspell-en-us (<< 20070829-3), myspell-sv-se (<< 1.3.8-6-2.2), myspell-sk (<< 0.5.5a-2.1), myspell-fo (<< 0.2.36-3), myspell-nl (<< 1:1.10-3), myspell-pt-br (<< 2009.03.30-1.1), myspell-pl (<< 20090830-1), myspell-pt-pt (<< 20090309-1.1), myspell-ga (<< 2.0-19), myspell-gd (<< 0.50-7), myspell-ku (<< 0.20.0-1.1), myspell-hr (<< 20060617-2), myspell-fr-gut (<< 1:1.0-26.1), myspell-eo (<< 2.1.2000.02.25-41), myspell-de-de-oldspell (<< 1:2-25.1), myspell-da (<< 1.6.18-1.1), myspell-es (<< 1.10-7), myspell-de-at (<< 20071211-2), myspell-de-ch (<< 20071211-2), myspell-de-de (<< 20071211-2), hunspell-de-at (<< 20071211-2), hunspell-de-ch (<< 20071211-2), hunspell-de-de (<< 20071211-2), myspell-ca (<< 0.6-8), myspell-tl (<< 0.4-0-5), myspell-ne (<< 1.0-4.1), myspell-fr (<< 1.4-25), myspell-hy (<< 0.10.1-1.1), myspell-en-us (<< 1:3.1.0-3), myspell-en-gb (<< 1:3.1.0-3), myspell-en-za (<< 1:3.1.0-3), myspell-af (<< 1:3.1.0-3), myspell-it (<< 1:3.1.0-3), myspell-sw (<< 1:3.1.0-3), myspell-th (<< 1:3.1.0-3), hunspell-en-ca (<< 1:3.1.0-3), hunspell-ne (<< 1:3.1.0-3), hunspell-da (<< 1:3.1.0-3), hunspell-fr (<< 1:3.1.0-3), hunspell-vi (<< 1:3.1.0-3), hunspell-hu (<< 1:3.1.0-3), hunspell-sr (<< 1:3.1.0-3), hunspell-sh (<< 1:3.1.0-3), myspell-lv (<< 0.7.3-3.1), myspell-et (<< 1:20030606-12.1), myspell-nn (<< 2.0.10-3.1), myspell-nb (<< 2.0.10-3.1) - Provides: libreoffice-bundled - Replaces: libreoffice-calc (<< 1:3.3.2-5) -@@ -775,7 +776,7 @@ - Section: debug - Architecture: alpha amd64 armel armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 - Priority: extra --Depends: libreoffice-core (= ${binary:Version}) | libreoffice-gcj (= ${binary:Version}) | libreoffice-dev (= ${binary:Version}) | libreoffice-gnome (= ${binary:Version}) | libreoffice-kde (= ${binary:Version}) | libreoffice-calc (= ${binary:Version}) | libreoffice-base-core (= ${binary:Version}) | libreoffice-base (= ${binary:Version}) | libreoffice-impress (= ${binary:Version}) | libreoffice-filter-binfilter (= ${binary:Version}) | libreoffice-draw (= ${binary:Version}) | libreoffice-writer (= ${binary:Version}) | python-uno (= ${binary:Version}) | cli-uno-bridge (= ${binary:Version}) | mozilla-libreoffice (= ${binary:Version}) | libreoffice-ogltrans (= ${binary:Version}), ${misc:Depends} -+Depends: libreoffice-core (= ${binary:Version}) | libreoffice-gcj (= ${binary:Version}) | libreoffice-dev (= ${binary:Version}) | libreoffice-gnome (= ${binary:Version}) | libreoffice-kde (= ${binary:Version}) | libreoffice-trinity (= ${binary:Version}) | libreoffice-calc (= ${binary:Version}) | libreoffice-base-core (= ${binary:Version}) | libreoffice-base (= ${binary:Version}) | libreoffice-impress (= ${binary:Version}) | libreoffice-filter-binfilter (= ${binary:Version}) | libreoffice-draw (= ${binary:Version}) | libreoffice-writer (= ${binary:Version}) | python-uno (= ${binary:Version}) | cli-uno-bridge (= ${binary:Version}) | mozilla-libreoffice (= ${binary:Version}) | libreoffice-ogltrans (= ${binary:Version}), ${misc:Depends} - Recommends: ure-dbg - Suggests: ${dbg-dbg-suggests} - Description: office productivity suite -- debug symbols -@@ -837,6 +838,25 @@ - * konqueror / kmail - * libreoffice-kab: KDE Addressbook support - -+Package: libreoffice-trinity -+Architecture: alpha amd64 armel armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 -+Depends: libreoffice-core (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} -+Recommends: ${tde-iconset-dep} -+Suggests: konqueror-trinity, kmail-trinity, libreoffice-kab-trinity -+Section: kde -+Enhances: libreoffice -+Replaces: openoffice.org-trinity (<< 1:3.3.0~) -+Description: office productivity suite -- TDE integration -+ LibreOffice is a full-featured office productivity suite that provides -+ a near drop-in replacement for Microsoft(R) Office. -+ . -+ This package contains the TDE plugin for drawing OOo's widgets with -+ TDE/Qt and a TDEish File Picker when running under TDE. -+ You can extend the functionality of this by installing these packages: -+ . -+ * konqueror-trinity / kmail-trinity -+ * libreoffice-kab-trinity: TDE Addressbook support -+ - Package: libreoffice-sdbc-postgresql - Section: misc - Architecture: alpha amd64 armhf hppa i386 ia64 mips mipsel powerpc powerpcspe ppc64 s390 s390x sparc kfreebsd-amd64 kfreebsd-i386 -diff -urN debian/control.in debian/control.in ---- debian/control.in 2011-07-21 02:13:49.000000000 -0500 -+++ debian/control.in 2011-09-19 11:36:44.782768358 -0500 -@@ -180,6 +180,7 @@ - libreofficeVER-gtk (<< ${binary:Version}), - libreofficeVER-gnome (<< ${binary:Version}), - libreofficeVER-kde (<< ${binary:Version}), -+ libreofficeVER-trinity (<< ${binary:Version}), - libreofficeVER-evolution (<< ${binary:Version}), - libreofficeVER-filter-so52 (<< ${binary:Version}), - libreofficeVER-officebean (<< ${binary:Version}), -diff -urN debian/control.tdeab.in debian/control.tdeab.in ---- debian/control.tdeab.in 1969-12-31 18:00:00.000000000 -0600 -+++ debian/control.tdeab.in 2011-09-19 11:36:44.790768076 -0500 -@@ -0,0 +1,14 @@ -+Package: libreofficeVER-kab-trinity -+Architecture: %OOO_BASE_ARCHS% -+Depends: libreofficeVER-core (= ${binary:Version}), -+ ${shlibs:Depends}, -+ ${misc:Depends} -+Recommends: kaddressbook-trinity -+Conflicts: ure (<< 1.5.1+OOo3.1.1-15) -+Description: office productivity suite -- TDE adressbook support -+ LibreOffice is a full-featured office productivity suite that provides -+ a near drop-in replacement for Microsoft(R) Office. -+ . -+ This package allows LibreOffice to access the TDE Addressbook. -+ You need to install kaddressbook-trinity separately. -+ -diff -urN debian/control.tde.in debian/control.tde.in ---- debian/control.tde.in 1969-12-31 18:00:00.000000000 -0600 -+++ debian/control.tde.in 2011-09-19 11:36:44.794767989 -0500 -@@ -0,0 +1,23 @@ -+Package: libreofficeVER-trinity -+Architecture: %OOO_ARCHS% -+Depends: libreofficeVER-core (= ${binary:Version}), -+ ${shlibs:Depends}, -+ ${misc:Depends} -+Recommends: ${tde-iconset-dep} -+Suggests: konqueror-trinity, -+ kmail-trinity, -+ libreofficeVER-kab-trinity -+Section: kde -+Enhances: libreofficeVER -+Replaces: openoffice.org-trinity (<< 1:3.3.0~) -+Description: office productivity suite -- TDE integration -+ LibreOffice is a full-featured office productivity suite that provides -+ a near drop-in replacement for Microsoft(R) Office. -+ . -+ This package contains the TDE plugin for drawing OOo's widgets with -+ TDE/TQt and a TDEish File Picker when running under TDE. -+ You can extend the functionality of this by installing these packages: -+ . -+ * konqueror-trinity / kmail-trinity -+ * libreoffice-kab-trinity: TDE Addressbook support -+ -diff -urN debian/rules debian/rules ---- debian/rules 2011-07-21 02:13:49.000000000 -0500 -+++ debian/rules 2011-09-19 11:39:32.611849416 -0500 -@@ -175,11 +175,18 @@ - BUILD_CAIROCANVAS=y - SYSTEM_STUFF += cairo - CAIRO_FONTS_PATCH=y --BUILD_KDE=y -+BUILD_KDE=n -+BUILD_TDE=y - # not ported to KDE 4 - ENABLE_KDEAB=n - QT_MINVER= (>= 4.5) - KDELIBS_MINVER= (>= 4:4.3.4) -+ifeq "$(BUILD_TDE)" "y" -+ ENABLE_TDEAB=y -+endif -+ifeq "$(BUILD_TDE)" "y" -+ TDELIBS_MINVER= (>= 4:3.5.12) -+endif - BUILD_DBG_PACKAGE=y - SYSTEM_STUFF += beanshell - SYSTEM_STUFF += hsqldb -@@ -376,6 +383,7 @@ - ENABLE_MYSQLNATIVE=n - ENABLE_EVO2=n - ENABLE_KDEAB=n -+ ENABLE_TDEAB=n - ENABLE_REPORTDESIGN=n - DEBHELPER_OPTIONS += -Nlibreoffice$(VER)-base libreoffice$(VER)-base-core - DEBHELPER_OPTIONS += -Nlibreoffice$(VER)-evolution -Nlibreoffice$(VER)-kab -@@ -1001,6 +1009,25 @@ - endif - endif - -+ifeq "$(BUILD_TDE)" "n" -+ CONFIGURE_FLAGS+= --disable-tde -+ CONFIGURE_FLAGS+= --with-images="$(IMAGES)" -+else -+ CONFIGURE_FLAGS+= --disable-kde -+ CONFIGURE_FLAGS+= --disable-kde4 -+ CONFIGURE_FLAGS+= --enable-tde -+ TDE_ICONSET_DEP=libreoffice$(VER)-style-crystal -+ BUILD_DEPS += , kdelibs4-trinity-dev -+ -+ DBG_DBG_SUGGESTS+= , kdelibs-trinity-dbg, libtqtinterface-dbg -+ -+ ifeq "$(ENABLE_TDEAB)" "y" -+ BUILD_DEPS += , kdepim-trinity-dev -+ else -+ CONFIGURE_FLAGS+= --disable-tdeab -+ endif -+endif -+ - ifeq "$(ENABLE_MYSQLNATIVE)" "y" - CONFIGURE_FLAGS += --enable-mysql-connector - ifneq (,$(filter mysql, $(SYSTEM_STUFF))) -@@ -1542,6 +1569,11 @@ - >> debian/control < debian/control.kde.in - perl -pi -e 's/ libreoffice$(VER)-gnome,/ libreoffice-gnome | libreoffice$(VER)-kde,/' debian/control - endif -+ifeq "$(BUILD_TDE)" "y" -+ sed -e "s|libreofficeVER|libreoffice$(VER)|g" \ -+ >> debian/control < debian/control.tde.in -+ perl -pi -e 's/ libreoffice$(VER)-gnome,/ libreoffice-gnome | libreoffice$(VER)-trinity,/' debian/control -+endif - ifeq "$(ENABLE_SDBC_POSTGRESQL)" "y" - sed -e "s|libreofficeVER|libreoffice$(VER)|g" \ - >> debian/control < debian/control.postgresql.in -@@ -1558,6 +1590,10 @@ - sed -e "s|libreofficeVER|libreoffice$(VER)|g" \ - >> debian/control < debian/control.kab.in - endif -+ifeq "$(ENABLE_TDEAB)" "y" -+ sed -e "s|libreofficeVER|libreoffice$(VER)|g" \ -+ >> debian/control < debian/control.tdeab.in -+endif - endif # ifeq "$(PKGSOURCE)" "libreoffice$(VER)" - - perl -pi -e "s,%OOO_ARCHS%,$(OOO_ARCHS),g" debian/control -@@ -1625,6 +1661,10 @@ - perl -pi -e 's/GConf backend$$/GConf backend\n * libreoffice$(VER)-kde: KDE UI Plugin and KDE File Picker support/' debian/control - endif - -+ifeq "$(BUILD_TDE)" "y" -+ perl -pi -e 's/GConf backend$$/GConf backend\n * libreoffice$(VER)-trinity: TDE UI Plugin and TDE File Picker support/' debian/control -+endif -+ - ifeq "$(ENABLE_LDAP)" "y" - perl -pi -e 's/paperconf$$/paperconf\n * $(LDAP_LIB): LDAP client library; needed for LibreOffice getting its\n profiles from LDAP/' debian/control - endif -@@ -1702,6 +1742,12 @@ - endif - endif - -+ifeq "$(BUILD_TDE)" "y" -+ # be sure we use the right moc, FIXME: Trinity uses its own moc -+ mkdir -p $(CURDIR)/debian/usr/bin -+ ln -sf /usr/bin/moc-qt$(KDE_VER) $(CURDIR)/debian/usr/bin/moc -+endif -+ - ifeq "$(USE_STLPORT)" "y" - ifeq "$(USE_SYSTEM_STLPORT)" "y" - # stlport home -@@ -1778,6 +1824,7 @@ - dh_testdir - - ifeq "$(BUILD_KDE)" "n" -+ ifeq "$(BUILD_TDE)" "n" - # hack to tell we want crystal icons nevertheless and they should be - # extracted... - if ! grep -q crystal $(OOO_BUILD_TREE)/bin/setup; then \ -@@ -1786,6 +1833,7 @@ - | sed -e s/\'industrial/\'industrial\ crystal/ \ - > $(OOO_BUILD_TREE)/bin/setup && rm $(OOO_BUILD_TREE)/bin/setup.bak; \ - fi -+ endif - endif - - cd $(OOO_BUILD_TREE) ; \ -@@ -2297,6 +2345,12 @@ - -br $(PKGDIR)-core/$(OODIR)/program/services.rdb \ - -c 'vnd.sun.star.expand:$$OOO_BASE_DIR/program/libkab1.so' - endif -+ifeq "$(ENABLE_TDEAB)" "y" -+ debian/ure/$(OOBRANDDIR)/ure/bin/regcomp -revoke \ -+ -r $(PKGDIR)-core/$(OODIR)/program/services.rdb \ -+ -br $(PKGDIR)-core/$(OODIR)/program/services.rdb \ -+ -c 'vnd.sun.star.expand:$$OOO_BASE_DIR/program/libtdeab1.so' -+endif - ifeq "$(BUILD_BINFILTERS)" "y" - debian/ure/$(OOBRANDDIR)/ure/bin/regcomp -revoke \ - -r $(PKGDIR)-core/$(OODIR)/program/services.rdb \ -@@ -2383,6 +2437,49 @@ - done - endif - -+ifeq "$(BUILD_TDE)" "y" -+ mkdir -p -m755 $(PKGDIR)-trinity/$(OODIR)/program -+ mkdir -p -m755 $(PKGDIR)-trinity/$(OOBRANDDIR)/program -+ for f in fps_tde*.uno.so libvclplug_tde*.so; do \ -+ mv $(PKGDIR)-core/$(OODIR)/program/$$f $(PKGDIR)-trinity/$(OODIR)/program || exit 1 ;\ -+ done -+ mv $(PKGDIR)-common/$(OOBRANDDIR)/program/tdefilepicker \ -+ $(PKGDIR)-trinity/$(OOBRANDDIR)/program -+ -+ # install files for TDEs "create new" ... -+ mkdir -p $(PKGDIR)-trinity/usr/share/templates/.source -+ for i in $(SOURCE_TREE)/extras/source/shellnew/*; do \ -+ cp $$i $(PKGDIR)-trinity/usr/share/templates/.source/`basename $$i`; \ -+ done -+ cat debian/templates/soffice-template.desktop.in \ -+ | sed -e "s/@APP@/Writer/" \ -+ | sed -e "s/@EXT@/odt/" \ -+ | sed -e "s/@TYPE@/text/" \ -+ > $(PKGDIR)-trinity/usr/share/templates/soffice.odt.desktop -+ cat debian/templates/soffice-template.desktop.in \ -+ | sed -e "s/@APP@/Calc/" \ -+ | sed -e "s/@EXT@/ods/" \ -+ | sed -e "s/@TYPE@/spreadsheet/" \ -+ > $(PKGDIR)-trinity/usr/share/templates/soffice.ods.desktop -+ cat debian/templates/soffice-template.desktop.in \ -+ | sed -e "s/@APP@/Impress/" \ -+ | sed -e "s/@EXT@/odp/" \ -+ | sed -e "s/@TYPE@/presentation/" \ -+ > $(PKGDIR)-trinity/usr/share/templates/soffice.odp.desktop -+ cat debian/templates/soffice-template.desktop.in \ -+ | sed -e "s/@APP@/Draw/" \ -+ | sed -e "s/@EXT@/odg/" \ -+ | sed -e "s/@TYPE@/drawing/" \ -+ > $(PKGDIR)-trinity/usr/share/templates/soffice.odg.desktop -+endif -+ifeq "$(ENABLE_TDEAB)" "y" -+ rm -rf $(PKGDIR)-kab-trinity -+ mkdir -p -m755 $(PKGDIR)-kab-trinity/$(OODIR)/program -+ for f in libtdeab*so; do \ -+ mv $(PKGDIR)-core/$(OODIR)/program/$$f $(PKGDIR)-kab-trinity/$(OODIR)/program || exit 1 ;\ -+ done -+endif -+ - # move the GNOME stuff which are *not* in gid_Module_Optional_Gnome - # (which is moved into -gnome in package-ooo) into -gnome - mkdir -p -m755 $(PKGDIR)-gnome/$(OODIR)/program -@@ -3473,6 +3570,7 @@ - -V'ooo-binfilter-dep=$(OOO_BINFILTER_DEP)' \ - -V'ooo-officebean-dep=$(OOO_OFFICEBEAN_DEP)' \ - -V'kde-iconset-dep=$(KDE_ICONSET_DEP)' \ -+ -V'tde-iconset-dep=$(TDE_ICONSET_DEP)' \ - -V'lpsolve-dep=$(LPSOLVE_DEP)' \ - -V'gstreamer-plugins-suggests=$(GSTREAMER_PLUGINS_SUGGESTS)' \ - -V'libebook-dep=$(shell debian/scripts/get_libebook_dep.sh)' \ -diff -urN libreoffice-build/configure.in libreoffice-build/configure.in ---- libreoffice-build/configure.in 2011-05-31 10:43:15.000000000 -0500 -+++ libreoffice-build/configure.in 2011-09-19 11:36:44.850767094 -0500 -@@ -81,6 +81,11 @@ - --disable-kde4 Disables KDE4 native widgets.], - ,) - -+AC_ARG_ENABLE(tde, -+[ -+ --disable-tde Disables TDE native widgets.], -+,) -+ - AC_ARG_ENABLE(mono, - [ - --enable-mono Enables the compilation of the Mono bindings.], -@@ -928,6 +933,16 @@ - OOO_WIDGET_FLAGS="$OOO_WIDGET_FLAGS --disable-kde4" - fi - -+OOO_WIDGET_FLAGS= -+if test "$enable_tde" != "no"; then -+ if test "z$with_win32" = "z" -a "z`uname -s`" != "zDarwin" -a "z$with_distro" != "zCrossWin32"; then -+ OOO_WIDGET_FLAGS="--enable-tde" -+ widget_sets="tde" -+ fi -+else -+ OOO_WIDGET_FLAGS="--disable-tde" -+fi -+ - if test "$enable_gtk" != "no"; then - if test "z$with_win32" = "z" -a "z`uname -s`" != "zDarwin" -a "z$with_distro" != "zCrossWin32"; then - OOO_WIDGET_FLAGS="--enable-gtk $OOO_WIDGET_FLAGS" \ No newline at end of file diff --git a/main/thirdparty/libreoffice/3.3.3/patches/libreoffice-trinity.diff b/main/thirdparty/libreoffice/3.3.3/patches/libreoffice-trinity.diff deleted file mode 100644 index 65658e809..000000000 --- a/main/thirdparty/libreoffice/3.3.3/patches/libreoffice-trinity.diff +++ /dev/null @@ -1,15796 +0,0 @@ -diff -urN libreoffice-build/patches/dev300/apply libreoffice-build/patches/dev300/apply ---- libreoffice-build/patches/dev300/apply 2011-09-19 11:41:11.000000000 -0500 -+++ libreoffice-build/patches/dev300/apply 2011-09-19 11:36:17.051219826 -0500 -@@ -22,7 +22,7 @@ - - LinuxCommon : Common, Defaults, FontConfigTemporaryHacks, \ - FedoraLinuxOnlyFixes, LinuxOnly, msaccess, OpenGLTransitions, \ -- CliMonoCommon, Mono, MonoComp, AddressBooks, QuickStarter, KDE4, Netbook, \ -+ CliMonoCommon, Mono, MonoComp, AddressBooks, QuickStarter, KDE4, TDE, Netbook, \ - GlobalNSPluginSupport, Gcc46 - MacOSXCommon : Common, Defaults - Win32Common : Common, Defaults, Win32Only, CliMonoCommon, CliComponent, NotDebian -@@ -184,8 +184,6 @@ - # pass $ORIGIN correctly to RPATH - icu-4.2.1-rpath.diff. pmladek - --[ TemporaryHacks ] -- - # add idl target to toplevel makefile - makefile-idl-build.diff, noelpwer - -@@ -1500,6 +1498,10 @@ - # we need a good plan before, though ;-) - split-icons-search-usr-share.diff, n#296502, pmladek - -+[ TDE ] -+# add trinity integration -+trinity-modules.diff -+ - [ ArkOnly ] - SectionOwner => brosenk - -diff -urN libreoffice-build/patches/dev300/trinity-modules.diff libreoffice-build/patches/dev300/trinity-modules.diff ---- libreoffice-build/patches/dev300/trinity-modules.diff 1969-12-31 18:00:00.000000000 -0600 -+++ libreoffice-build/patches/dev300/trinity-modules.diff 2011-09-19 11:35:33.699926859 -0500 -@@ -0,0 +1,15748 @@ -+diff -urN configure.in configure.in -+--- configure.in 2011-03-08 12:51:39.000000000 -0600 -++++ configure.in 2011-08-17 16:40:04.716144357 -0500 -+@@ -233,6 +233,15 @@ -+ [ --disable-kdeab Disable the KDE3 address book support -+ ],,if test "$enable_kde" = "yes"; then enable_kdeab=yes; fi) -+ -++AC_ARG_ENABLE(tde, -++[ --enable-tde Determines whether to use TQt3/TDE vclplug on platforms -++ where TQt and TDE are available. -++],,) -++ -++AC_ARG_ENABLE(tdeab, -++[ --disable-tdeab Disable the TDE address book support -++],,if test "$enable_tde" = "yes"; then enable_tdeab=yes; fi) -++ -+ AC_ARG_ENABLE(kde4, -+ [ --enable-kde4 Determines whether to use Qt4/KDE4 vclplug on platforms -+ where Qt4 and KDE4 are available. May be used with --enable-kde -+@@ -1350,6 +1359,7 @@ -+ test_cairo=yes -+ build_gstreamer=yes -+ test_kde=yes -++ test_tde=yes -+ test_cups=yes -+ test_randr=yes -+ test_freetype=yes -+@@ -1385,6 +1395,7 @@ -+ build_gstreamer=yes -+ test_kde=yes -+ test_kde4=yes -++ test_tde=yes -+ test_cups=yes -+ test_randr=yes -+ test_freetype=yes -+@@ -1428,6 +1439,7 @@ -+ build_gstreamer=yes -+ test_kde=yes -+ test_kde4=yes -++ test_tde=yes -+ test_cups=yes -+ test_randr=yes -+ test_freetype=yes -+@@ -1463,6 +1475,7 @@ -+ build_gstreamer=yes -+ test_kde=yes -+ test_kde4=yes -++ test_tde=yes -+ test_cups=yes -+ test_randr=yes -+ test_freetype=yes -+@@ -1482,6 +1495,7 @@ -+ test_gtk=yes -+ build_cairo=yes -+ test_kde=yes -++ test_tde=yes -+ test_cups=yes -+ test_freetype=yes -+ test_randr=yes -+@@ -6141,6 +6155,13 @@ -+ fi -+ AC_SUBST(ENABLE_KDE4) -+ -++ENABLE_TDE="" -++if test "x$enable_tde" = "xyes"; then -++ ENABLE_TDE="TRUE" -++ R="$R tde" -++fi -++AC_SUBST(ENABLE_TDE) -++ -+ if test -z "$R"; then -+ AC_MSG_RESULT([none]) -+ else -+@@ -7044,6 +7065,129 @@ -+ AC_SUBST(KDE_HAVE_GLIB) -+ -+ dnl =================================================================== -++dnl Check whether the Qt3 and TDE libraries are available. -++dnl =================================================================== -++ -++TDE_CFLAGS="" -++TDE_LIBS="" -++if test "$_os" != "OpenBSD"; then -++ MOC="moc" -++fi -++if test "$test_tde" = "yes" -a "$ENABLE_TDE" = "TRUE" ; then -++ dnl Search paths for Qt3 and TDE -++ if test "$build_cpu" != "x86_64" ; then -++ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib/qt3/include /usr/lib/qt/include /usr/share/qt3/include /usr/local/include/X11/qt3 $x_includes" -++ qt_libdirs="$QTLIB /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries" -++ else -++ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib64/qt3/include /usr/lib64/qt/include /usr/share/qt3/include /usr/lib/qt3/include /usr/lib/qt/include /usr/local/include/X11/qt3 $x_includes" -++ qt_libdirs="$QTLIB /usr/local/qt/lib64 /usr/lib64/qt /usr/lib64 /usr/X11R6/lib64/X11/qt /usr/X11R6/lib64/qt /usr/lib64/qt3/lib64 /usr/lib64/qt/lib64 /usr/share/qt3/lib64 /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries" -++ fi -++ if test -n "$QTDIR" ; then -++ qt_incdirs="$QTDIR/include $qt_incdirs" -++ if test "$build_cpu" != "x86_64" ; then -++ qt_libdirs="$QTDIR/lib $qt_libdirs" -++ else -++ qt_libdirs="$QTDIR/lib64 $QTDIR/lib $qt_libdirs" -++ fi -++ fi -++ if test "$build_cpu" != "x86_64" ; then -++ tde_incdirs="/opt/trinity/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes" -++ tde_libdirs="/opt/trinity/lib /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib/kde4/lib /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries" -++ else -++ tde_incdirs="/opt/trinity/include /usr/lib64/kde/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes" -++ tde_libdirs="/opt/trinity/lib /usr/lib64/kde/lib64 /usr/local/kde/lib64 /usr/kde/lib64 /usr/lib64/kde /usr/lib64/kde3 /usr/lib64 /usr/X11R6/lib64 /usr/local/lib64 /opt/trinity/lib64 /opt/kde/lib64 /usr/X11R6/kde/lib64 /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries" -++ fi -++ if test -n "$TDEDIR" ; then -++ tde_incdirs="$TDEDIR/include $tde_incdirs" -++ if test "$build_cpu" != "x86_64" ; then -++ tde_libdirs="$TDEDIR/lib $tde_libdirs" -++ else -++ tde_libdirs="$TDEDIR/lib64 $TDEDIR/lib $tde_libdirs" -++ fi -++ fi -++ -++ dnl What to test -++ qt_test_include="qstyle.h" -++ qt_test_library="libqt-mt.so*" -++ tde_test_include="kapp.h" -++ tde_test_library="libDCOP.so*" -++ -++ dnl Check for Qt3 headers -++ AC_MSG_CHECKING([for Qt3 headers]) -++ qt_incdir="no" -++ for tde_check in $qt_incdirs ; do -++ if test -r "$tde_check/$qt_test_include" ; then -++ qt_incdir="$tde_check" -++ break -++ fi -++ done -++ AC_MSG_RESULT([$qt_incdir]) -++ if test "x$qt_incdir" = "xno" ; then -++ AC_MSG_ERROR([Qt3 headers not found. Please specify the root of -++your Qt3 installation by exporting QTDIR before running "configure".]) -++ fi -++ -++ dnl Check for Qt3 libraries -++ AC_MSG_CHECKING([for Qt3 libraries]) -++ qt_libdir="no" -++ for qt_check in $qt_libdirs ; do -++ if test -r "`ls $qt_check/$qt_test_library 2>/dev/null | head -1`" ; then -++ qt_libdir="$qt_check" -++ break -++ fi -++ done -++ AC_MSG_RESULT([$qt_libdir]) -++ if test "x$qt_libdir" = "xno" ; then -++ AC_MSG_ERROR([Qt3 libraries not found. Please specify the root of -++your Qt3 installation by exporting QTDIR before running "configure".]) -++ fi -++ -++ dnl Check for Meta Object Compiler -++ AC_PATH_PROG( MOC, moc, no, [`dirname $qt_libdir`/bin:$QTDIR/bin:$PATH] ) -++ if test "$MOC" = "no" ; then -++ AC_MSG_ERROR([Qt3 Meta Object Compiler not found. Please specify -++the root of your Qt3 installation by exporting QTDIR before running "configure".]) -++ fi -++ -++ dnl Check for TDE headers -++ AC_MSG_CHECKING([for TDE headers]) -++ tde_incdir="no" -++ for tde_check in $tde_incdirs ; do -++ if test -r "$tde_check/$tde_test_include" ; then -++ tde_incdir="$tde_check" -++ break -++ fi -++ done -++ AC_MSG_RESULT([$tde_incdir]) -++ if test "x$tde_incdir" = "xno" ; then -++ AC_MSG_ERROR([TDE headers not found. Please specify the root of -++your TDE installation by exporting TDEDIR before running "configure".]) -++ fi -++ -++ dnl Check for TDE libraries -++ AC_MSG_CHECKING([for TDE libraries]) -++ tde_libdir="no" -++ for tde_check in $tde_libdirs ; do -++ if test -r "`ls $tde_check/$tde_test_library 2>/dev/null | head -1`" ; then -++ tde_libdir="$tde_check" -++ break -++ fi -++ done -++ AC_MSG_RESULT([$tde_libdir]) -++ if test "x$tde_libdir" = "xno" ; then -++ AC_MSG_ERROR([TDE libraries not found. Please specify the root of -++your TDE installation by exporting TDEDIR before running "configure".]) -++ fi -++ -++ dnl Set the variables -++ TDE_CFLAGS="-I$qt_incdir -I$tde_incdir -I/usr/include/tqt -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT" -++ TDE_LIBS="-L$tde_libdir -L$qt_libdir -lkdeui -lkdecore -ltqt -lqt-mt" -++fi -++AC_SUBST(TDE_CFLAGS) -++AC_SUBST(TDE_LIBS) -++AC_SUBST(MOC) -++ -++dnl =================================================================== -+ dnl Test for the enabling the lockdown pieces -+ dnl =================================================================== -+ AC_MSG_CHECKING([whether to enable the lockdown pieces]) -+@@ -7100,6 +7244,33 @@ -+ AC_SUBST(ENABLE_KAB) -+ -+ dnl =================================================================== -++dnl Test whether to include TDE AB support -++dnl =================================================================== -++AC_MSG_CHECKING([whether to enable TDE address book support]) -++if test "$enable_tdeab" = "yes" && test "$enable_tde" = "yes"; then -++ AC_MSG_RESULT([yes]) -++ AC_LANG_PUSH([C++]) -++ save_CXXFLAGS=$CXXFLAGS -++ CXXFLAGS="$CXXFLAGS $TDE_CFLAGS" -++ AC_MSG_CHECKING([whether TDE is between 3.2 and 3.6]) -++ AC_TRY_RUN([ -++#include -++ -++int main(int argc, char **argv) { -++ if (KDE_VERSION_MAJOR == 3 && 2 <= KDE_VERSION_MINOR && KDE_VERSION_MINOR <= 6) return 0; -++ else return 1; -++} -++ ], [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([TDE version too old or too recent, please use another version of TDE or disable TDE address book support])]) -++ CXXFLAGS=$save_CXXFLAGS -++ AC_LANG_POP([C++]) -++ ENABLE_TDEAB=TRUE -++else -++ AC_MSG_RESULT([no]) -++ ENABLE_TDEAB= -++fi -++AC_SUBST(ENABLE_TDEAB) -++ -++dnl =================================================================== -+ dnl Test whether to include MathMLDTD -+ dnl =================================================================== -+ AC_MSG_CHECKING([whether to include MathMLDTD]) -+diff -urN connectivity/source/drivers/tdeab/exports.dxp connectivity/source/drivers/tdeab/exports.dxp -+--- connectivity/source/drivers/tdeab/exports.dxp 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/exports.dxp 2011-08-17 14:23:01.735590880 -0500 -+@@ -0,0 +1,3 @@ -++component_getImplementationEnvironment -++component_writeInfo -++component_getFactory -+diff -urN connectivity/source/drivers/tdeab/KCatalog.cxx connectivity/source/drivers/tdeab/KCatalog.cxx -+--- connectivity/source/drivers/tdeab/KCatalog.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KCatalog.cxx 2011-08-17 14:29:39.766199199 -0500 -+@@ -0,0 +1,128 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KCatalog.hxx" -++#include "KConnection.hxx" -++#include "KTables.hxx" -++ -++using namespace connectivity::kab; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::beans; -++using namespace ::com::sun::star::sdbcx; -++using namespace ::com::sun::star::sdbc; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++using namespace ::cppu; -++ -++// ------------------------------------------------------------------------- -++KabCatalog::KabCatalog(KabConnection* _pCon) -++ : connectivity::sdbcx::OCatalog(_pCon), -++ m_pConnection(_pCon), -++ m_xMetaData(m_pConnection->getMetaData()) -++{ -++} -++// ------------------------------------------------------------------------- -++void KabCatalog::refreshTables() -++{ -++ TStringVector aVector; -++ Sequence< ::rtl::OUString > aTypes(1); -++ aTypes[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%")); -++ Reference< XResultSet > xResult = m_xMetaData->getTables( -++ Any(), -++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")), -++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")), -++ aTypes); -++ -++ if (xResult.is()) -++ { -++ Reference< XRow > xRow(xResult,UNO_QUERY); -++ ::rtl::OUString aName; -++ // const ::rtl::OUString& sDot = KabCatalog::getDot(); -++ -++ while (xResult->next()) -++ { -++ // aName = xRow->getString(2); -++ // aName += sDot; -++ aName = xRow->getString(3); -++ aVector.push_back(aName); -++ } -++ } -++ if (m_pTables) -++ m_pTables->reFill(aVector); -++ else -++ m_pTables = new KabTables(m_xMetaData,*this,m_aMutex,aVector); -++} -++// ------------------------------------------------------------------------- -++void KabCatalog::refreshViews() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabCatalog::refreshGroups() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabCatalog::refreshUsers() -++{ -++} -++// ------------------------------------------------------------------------- -++const ::rtl::OUString& KabCatalog::getDot() -++{ -++ static const ::rtl::OUString sDot = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(".")); -++ return sDot; -++} -++// ----------------------------------------------------------------------------- -++ -++// XTablesSupplier -++Reference< XNameAccess > SAL_CALL KabCatalog::getTables( ) throw(RuntimeException) -++{ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ checkDisposed(rBHelper.bDisposed); -++ -++ try -++ { -++ if (!m_pTables) -++ refreshTables(); -++ } -++ catch( const RuntimeException& ) -++ { -++ // allowed to leave this method -++ throw; -++ } -++ catch( const Exception& ) -++ { -++ // allowed -++ } -++ -++ return m_pTables; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KCatalog.hxx connectivity/source/drivers/tdeab/KCatalog.hxx -+--- connectivity/source/drivers/tdeab/KCatalog.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KCatalog.hxx 2011-08-17 14:29:32.345628247 -0500 -+@@ -0,0 +1,68 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_CATALOG_HXX_ -++#define _CONNECTIVITY_KAB_CATALOG_HXX_ -++ -++#include "connectivity/sdbcx/VCatalog.hxx" -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabConnection; -++ -++ class KabCatalog : public connectivity::sdbcx::OCatalog -++ { -++ KabConnection* m_pConnection; // used to get the metadata -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; // just to make things easier -++ -++ public: -++ KabCatalog(KabConnection* _pCon); -++ -++ inline KabConnection* getConnection() const { return m_pConnection; } -++ -++ static const ::rtl::OUString& getDot(); -++ -++ // implementation of the pure virtual methods -++ virtual void refreshTables(); -++ virtual void refreshViews(); -++ virtual void refreshGroups(); -++ virtual void refreshUsers(); -++ -++ // XTablesSupplier -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTables( -++ ) throw(::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_CATALOG_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KColumns.cxx connectivity/source/drivers/tdeab/KColumns.cxx -+--- connectivity/source/drivers/tdeab/KColumns.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KColumns.cxx 2011-08-17 14:29:23.634958020 -0500 -+@@ -0,0 +1,102 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KColumns.hxx" -++#include "KTable.hxx" -++#include "KTables.hxx" -++#include "KCatalog.hxx" -++#include "connectivity/sdbcx/VColumn.hxx" -++ -++using namespace connectivity::kab; -++using namespace connectivity::sdbcx; -++using namespace connectivity; -++using namespace ::comphelper; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::beans; -++using namespace ::com::sun::star::sdbc; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++ -++// ------------------------------------------------------------------------- -++sdbcx::ObjectType KabColumns::createObject(const ::rtl::OUString& _rName) -++{ -++ Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns( -++ Any(), -++ m_pTable->getSchema(), -++ m_pTable->getTableName(), -++ _rName); -++ -++ sdbcx::ObjectType xRet = NULL; -++ if (xResult.is()) -++ { -++ Reference< XRow > xRow(xResult,UNO_QUERY); -++ -++ while (xResult->next()) -++ { -++ if (xRow->getString(4) == _rName) -++ { -++ OColumn* pRet = new OColumn( -++ _rName, -++ xRow->getString(6), -++ xRow->getString(13), -++ xRow->getString(12), -++ xRow->getInt(11), -++ xRow->getInt(7), -++ xRow->getInt(9), -++ xRow->getInt(5), -++ sal_False, -++ sal_False, -++ sal_False, -++ sal_True); -++ xRet = pRet; -++ break; -++ } -++ } -++ } -++ -++ return xRet; -++} -++// ------------------------------------------------------------------------- -++void KabColumns::impl_refresh() throw(RuntimeException) -++{ -++ m_pTable->refreshColumns(); -++} -++// ------------------------------------------------------------------------- -++KabColumns::KabColumns( KabTable* _pTable, -++ ::osl::Mutex& _rMutex, -++ const TStringVector &_rVector) -++ : sdbcx::OCollection(*_pTable, sal_True, _rMutex, _rVector), -++ m_pTable(_pTable) -++{ -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KColumns.hxx connectivity/source/drivers/tdeab/KColumns.hxx -+--- connectivity/source/drivers/tdeab/KColumns.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KColumns.hxx 2011-08-17 14:29:13.974214692 -0500 -+@@ -0,0 +1,58 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_COLUMNS_HXX_ -++#define _CONNECTIVITY_KAB_COLUMNS_HXX_ -++ -++#include "KTable.hxx" -++#include "connectivity/sdbcx/VCollection.hxx" -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabColumns : public sdbcx::OCollection -++ { -++ protected: -++ KabTable* m_pTable; -++ -++ virtual sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); -++ virtual void impl_refresh() throw(::com::sun::star::uno::RuntimeException); -++ -++ public: -++ KabColumns( KabTable* _pTable, -++ ::osl::Mutex& _rMutex, -++ const TStringVector &_rVector); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_COLUMNS_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/kcondition.cxx connectivity/source/drivers/tdeab/kcondition.cxx -+--- connectivity/source/drivers/tdeab/kcondition.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/kcondition.cxx 2011-08-17 14:29:06.863667577 -0500 -+@@ -0,0 +1,233 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "kcondition.hxx" -++#include "kfields.hxx" -++#include "connectivity/CommonTools.hxx" -++ -++using namespace ::connectivity::kab; -++using namespace ::com::sun::star::sdbc; -++// ----------------------------------------------------------------------------- -++KabCondition::~KabCondition() -++{ -++} -++// ----------------------------------------------------------------------------- -++KabConditionConstant::KabConditionConstant(const sal_Bool bValue) -++ : KabCondition(), -++ m_bValue(bValue) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionConstant::isAlwaysTrue() const -++{ -++ return m_bValue; -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionConstant::isAlwaysFalse() const -++{ -++ return !m_bValue; -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionConstant::eval(const ::KABC::Addressee &) const -++{ -++ return m_bValue; -++} -++// ----------------------------------------------------------------------------- -++KabConditionColumn::KabConditionColumn(const ::rtl::OUString &sColumnName) throw(SQLException) -++ : KabCondition(), -++ m_nFieldNumber(findKabField(sColumnName)) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionColumn::isAlwaysTrue() const -++{ -++ // Sometimes true, sometimes false -++ return sal_False; -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionColumn::isAlwaysFalse() const -++{ -++ // Sometimes true, sometimes false -++ return sal_False; -++} -++// ----------------------------------------------------------------------------- -++KabConditionNull::KabConditionNull(const ::rtl::OUString &sColumnName) throw(SQLException) -++ : KabConditionColumn(sColumnName) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionNull::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++ -++ return aQtName.isNull(); -++// TDE address book currently does not use NULL values. -++// But it might do it someday -++} -++// ----------------------------------------------------------------------------- -++KabConditionNotNull::KabConditionNotNull(const ::rtl::OUString &sColumnName) throw(SQLException) -++ : KabConditionColumn(sColumnName) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionNotNull::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++ -++ return !aQtName.isNull(); -++// TDE address book currently does not use NULL values. -++// But it might do it someday -++} -++// ----------------------------------------------------------------------------- -++KabConditionCompare::KabConditionCompare(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -++ : KabConditionColumn(sColumnName), -++ m_sMatchString(sMatchString) -++{ -++} -++// ----------------------------------------------------------------------------- -++KabConditionEqual::KabConditionEqual(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -++ : KabConditionCompare(sColumnName, sMatchString) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionEqual::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++// Timestamps should not be compared according to their string value -++// The syntax for such queries should be like -++// {ts '2004-03-29 12:55:00.000000'} -++// They should also support operators like '<' or '>=' -++ -++ if (aQtName.isNull()) return sal_False; -++ -++ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2()); -++ return sValue == m_sMatchString; -++} -++// ----------------------------------------------------------------------------- -++KabConditionDifferent::KabConditionDifferent(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -++ : KabConditionCompare(sColumnName, sMatchString) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionDifferent::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++ -++ if (aQtName.isNull()) return sal_False; -++ -++ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2()); -++ return sValue != m_sMatchString; -++} -++// ----------------------------------------------------------------------------- -++KabConditionSimilar::KabConditionSimilar(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -++ : KabConditionCompare(sColumnName, sMatchString) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionSimilar::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -++ -++ if (aQtName.isNull()) return sal_False; -++ -++ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2()); -++ return match(m_sMatchString, sValue, '\0'); -++} -++// ----------------------------------------------------------------------------- -++KabConditionBoolean::KabConditionBoolean(KabCondition *pLeft, KabCondition *pRight) -++ : KabCondition(), -++ m_pLeft(pLeft), -++ m_pRight(pRight) -++{ -++} -++// ----------------------------------------------------------------------------- -++KabConditionBoolean::~KabConditionBoolean() -++{ -++ delete m_pLeft; -++ delete m_pRight; -++} -++// ----------------------------------------------------------------------------- -++KabConditionOr::KabConditionOr(KabCondition *pLeft, KabCondition *pRight) -++ : KabConditionBoolean(pLeft, pRight) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionOr::isAlwaysTrue() const -++{ -++ return m_pLeft->isAlwaysTrue() || m_pRight->isAlwaysTrue(); -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionOr::isAlwaysFalse() const -++{ -++ return m_pLeft->isAlwaysFalse() && m_pRight->isAlwaysFalse(); -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionOr::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ // We avoid evaluating terms as much as we can -++ if (m_pLeft->isAlwaysTrue() || m_pRight->isAlwaysTrue()) return sal_True; -++ if (m_pLeft->isAlwaysFalse() && m_pRight->isAlwaysFalse()) return sal_False; -++ -++ if (m_pLeft->eval(aAddressee)) return sal_True; -++ if (m_pRight->eval(aAddressee)) return sal_True; -++ -++ return sal_False; -++} -++// ----------------------------------------------------------------------------- -++KabConditionAnd::KabConditionAnd(KabCondition *pLeft, KabCondition *pRight) -++ : KabConditionBoolean(pLeft, pRight) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionAnd::isAlwaysTrue() const -++{ -++ return m_pLeft->isAlwaysTrue() && m_pRight->isAlwaysTrue(); -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionAnd::isAlwaysFalse() const -++{ -++ return m_pLeft->isAlwaysFalse() || m_pRight->isAlwaysFalse(); -++} -++// ----------------------------------------------------------------------------- -++sal_Bool KabConditionAnd::eval(const ::KABC::Addressee &aAddressee) const -++{ -++ // We avoid evaluating terms as much as we can -++ if (m_pLeft->isAlwaysFalse() || m_pRight->isAlwaysFalse()) return sal_False; -++ if (m_pLeft->isAlwaysTrue() && m_pRight->isAlwaysTrue()) return sal_True; -++ -++ if (!m_pLeft->eval(aAddressee)) return sal_False; -++ if (!m_pRight->eval(aAddressee)) return sal_False; -++ -++ return sal_True; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/kcondition.hxx connectivity/source/drivers/tdeab/kcondition.hxx -+--- connectivity/source/drivers/tdeab/kcondition.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/kcondition.hxx 2011-08-17 14:28:59.403093526 -0500 -+@@ -0,0 +1,164 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_CONDITION_HXX_ -++#define _CONNECTIVITY_KAB_CONDITION_HXX_ -++ -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++// ----------------------------------------------------------------------------- -++class KabCondition -++{ -++ public: -++ virtual ~KabCondition(); -++ virtual sal_Bool isAlwaysTrue() const = 0; -++ virtual sal_Bool isAlwaysFalse() const = 0; -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const = 0; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionConstant : public KabCondition -++{ -++ protected: -++ sal_Bool m_bValue; -++ -++ public: -++ KabConditionConstant(const sal_Bool bValue); -++ virtual sal_Bool isAlwaysTrue() const; -++ virtual sal_Bool isAlwaysFalse() const; -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionColumn : public KabCondition -++{ -++ protected: -++ sal_Int32 m_nFieldNumber; -++ -++ TQString value(const ::KABC::Addressee &aAddressee) const; -++ -++ public: -++ KabConditionColumn( -++ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool isAlwaysTrue() const; -++ virtual sal_Bool isAlwaysFalse() const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionNull : public KabConditionColumn -++{ -++ public: -++ KabConditionNull( -++ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionNotNull : public KabConditionColumn -++{ -++ public: -++ KabConditionNotNull( -++ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionCompare : public KabConditionColumn -++{ -++ protected: -++ const ::rtl::OUString m_sMatchString; -++ -++ public: -++ KabConditionCompare( -++ const ::rtl::OUString &sColumnName, -++ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionEqual : public KabConditionCompare -++{ -++ public: -++ KabConditionEqual( -++ const ::rtl::OUString &sColumnName, -++ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionDifferent : public KabConditionCompare -++{ -++ public: -++ KabConditionDifferent( -++ const ::rtl::OUString &sColumnName, -++ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionSimilar : public KabConditionCompare -++{ -++ public: -++ KabConditionSimilar( -++ const ::rtl::OUString &sColumnName, -++ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionBoolean : public KabCondition -++{ -++ protected: -++ KabCondition *m_pLeft, *m_pRight; -++ -++ public: -++ KabConditionBoolean(KabCondition *pLeft, KabCondition *pRight); -++ virtual ~KabConditionBoolean(); -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionOr : public KabConditionBoolean -++{ -++ public: -++ KabConditionOr(KabCondition *pLeft, KabCondition *pRight); -++ virtual sal_Bool isAlwaysTrue() const; -++ virtual sal_Bool isAlwaysFalse() const; -++ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -++}; -++// ----------------------------------------------------------------------------- -++class KabConditionAnd : public KabConditionBoolean -++{ -++ public: -++ KabConditionAnd(KabCondition *pLeft, KabCondition *pRight); -++ virtual sal_Bool isAlwaysTrue() const; -++ virtual sal_Bool isAlwaysFalse() const; -++ virtual sal_Bool eval(const ::KABC::Addressee &addressee) const; -++}; -++// ----------------------------------------------------------------------------- -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_CONDITION_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KConnection.cxx connectivity/source/drivers/tdeab/KConnection.cxx -+--- connectivity/source/drivers/tdeab/KConnection.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KConnection.cxx 2011-08-17 14:28:53.822664134 -0500 -+@@ -0,0 +1,332 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KConnection.hxx" -++#include "KDatabaseMetaData.hxx" -++#include "KStatement.hxx" -++#include "KPreparedStatement.hxx" -++#include "KDriver.hxx" -++#include "KCatalog.hxx" -++#include -++#include -++#include -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::sdbcx; -++ -++IMPLEMENT_SERVICE_INFO(KabConnection, "com.sun.star.sdbc.drivers.KabConnection", "com.sun.star.sdbc.Connection") -++//----------------------------------------------------------------------------- -++KabConnection::KabConnection(KabDriver* _pDriver) -++ : OMetaConnection_BASE(m_aMutex), -++ OSubComponent((::cppu::OWeakObject*)_pDriver, this), -++ m_xMetaData(NULL), -++ m_pAddressBook(NULL), -++ m_pDriver(_pDriver) -++{ -++ m_pDriver->acquire(); -++} -++//----------------------------------------------------------------------------- -++KabConnection::~KabConnection() -++{ -++ if (!isClosed()) -++ close(); -++ -++ m_pDriver->release(); -++ m_pDriver = NULL; -++} -++//----------------------------------------------------------------------------- -++void SAL_CALL KabConnection::release() throw() -++{ -++ relase_ChildImpl(); -++} -++// ----------------------------------------------------------------------------- -++void KabConnection::construct(const ::rtl::OUString&, const Sequence< PropertyValue >&) throw(SQLException) -++{ -++ osl_incrementInterlockedCount( &m_refCount ); -++ -++ // create a TDE address book object -++ m_pAddressBook = KABC::StdAddressBook::self(); -++ m_pAddressBook->setAutomaticSave(false); -++// perharps we should analyze the URL to know whether the addressbook is local, over LDAP, etc... -++// perharps we should get some user and password information from "info" properties -++ -++ osl_decrementInterlockedCount( &m_refCount ); -++} -++// XServiceInfo -++// -------------------------------------------------------------------------------- -++Reference< XStatement > SAL_CALL KabConnection::createStatement( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // create a statement -++ // the statement can only be executed once -++ Reference< XStatement > xReturn = new KabStatement(this); -++ m_aStatements.push_back(WeakReferenceHelper(xReturn)); -++ return xReturn; -++} -++// -------------------------------------------------------------------------------- -++Reference< XPreparedStatement > SAL_CALL KabConnection::prepareStatement( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // create a statement -++ // the statement can only be executed more than once -++ Reference< XPreparedStatement > xReturn = new KabPreparedStatement(this, _sSql); -++ m_aStatements.push_back(WeakReferenceHelper(xReturn)); -++ return xReturn; -++} -++// -------------------------------------------------------------------------------- -++Reference< XPreparedStatement > SAL_CALL KabConnection::prepareCall( const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // not implemented yet :-) a task to do -++ return NULL; -++} -++// -------------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabConnection::nativeSQL( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ // when you need to transform SQL92 to you driver specific you can do it here -++ -++ return _sSql; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setAutoCommit( sal_Bool ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ // here you have to set your commit mode please have a look at the jdbc documentation to get a clear explanation -++} -++// -------------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabConnection::getAutoCommit( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ // you have to distinguish which if you are in autocommit mode or not -++ // at normal case true should be fine here -++ -++ return sal_True; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::commit( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // when you database does support transactions you should commit here -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::rollback( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // same as commit but for the other case -++} -++// -------------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabConnection::isClosed( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ // just simple -> we are closed when we are disposed, that means someone called dispose(); (XComponent) -++ return KabConnection_BASE::rBHelper.bDisposed; -++} -++// -------------------------------------------------------------------------------- -++Reference< XDatabaseMetaData > SAL_CALL KabConnection::getMetaData( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // here we have to create the class with biggest interface -++ // The answer is 42 :-) -++ Reference< XDatabaseMetaData > xMetaData = m_xMetaData; -++ if (!xMetaData.is()) -++ { -++ xMetaData = new KabDatabaseMetaData(this); // need the connection because it can return it -++ m_xMetaData = xMetaData; -++ } -++ -++ return xMetaData; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setReadOnly( sal_Bool ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // set you connection to readonly -++} -++// -------------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabConnection::isReadOnly( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // return if your connection to readonly -++ return sal_False; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setCatalog( const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // if your database doesn't work with catalogs you go to next method otherwise you kjnow what to do -++} -++// -------------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabConnection::getCatalog( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ -++ // return your current catalog -++ return ::rtl::OUString(); -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setTransactionIsolation( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // set your isolation level -++ // please have a look at @see com.sun.star.sdbc.TransactionIsolation -++} -++// -------------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabConnection::getTransactionIsolation( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ -++ // please have a look at @see com.sun.star.sdbc.TransactionIsolation -++ return TransactionIsolation::NONE; -++} -++// -------------------------------------------------------------------------------- -++Reference< ::com::sun::star::container::XNameAccess > SAL_CALL KabConnection::getTypeMap( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ -++ // if your driver has special database types you can return it here -++ -++ return NULL; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::setTypeMap( const Reference< ::com::sun::star::container::XNameAccess >& ) throw(SQLException, RuntimeException) -++{ -++ // the other way around -++} -++// -------------------------------------------------------------------------------- -++// XCloseable -++void SAL_CALL KabConnection::close( ) throw(SQLException, RuntimeException) -++{ -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -++ } -++ dispose(); -++} -++// -------------------------------------------------------------------------------- -++// XWarningsSupplier -++Any SAL_CALL KabConnection::getWarnings( ) throw(SQLException, RuntimeException) -++{ -++ // when you collected some warnings -> return it -++ return Any(); -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabConnection::clearWarnings( ) throw(SQLException, RuntimeException) -++{ -++ // you should clear your collected warnings here -++} -++//------------------------------------------------------------------------------ -++void KabConnection::disposing() -++{ -++ // we noticed that we should be destroied in near future so we have to dispose our statements -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++ for (OWeakRefArray::iterator i = m_aStatements.begin(); m_aStatements.end() != i; ++i) -++ { -++ Reference< XComponent > xComp(i->get(), UNO_QUERY); -++ if (xComp.is()) -++ xComp->dispose(); -++ } -++ m_aStatements.clear(); -++ -++ if (m_pAddressBook != NULL) -++ { -++ m_pAddressBook->close(); -++ m_pAddressBook = NULL; -++ } -++ -++ m_xMetaData = ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XDatabaseMetaData>(); -++ -++ dispose_ChildImpl(); -++ KabConnection_BASE::disposing(); -++} -++// ----------------------------------------------------------------------------- -++Reference< XTablesSupplier > SAL_CALL KabConnection::createCatalog() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ Reference< XTablesSupplier > xTab = m_xCatalog; -++ if (!m_xCatalog.is()) -++ { -++ KabCatalog *pCat = new KabCatalog(this); -++ xTab = pCat; -++ m_xCatalog = xTab; -++ } -++ return xTab; -++} -++// ----------------------------------------------------------------------------- -++::KABC::AddressBook* KabConnection::getAddressBook() const -++{ -++ return m_pAddressBook; -++} -++// ----------------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL createKabConnection( void* _pDriver ) -++{ -++ KabConnection* pConnection = new KabConnection( static_cast< KabDriver* >( _pDriver ) ); -++ // by definition, the pointer crossing library boundaries as void ptr is acquired once -++ pConnection->acquire(); -++ return pConnection; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KConnection.hxx connectivity/source/drivers/tdeab/KConnection.hxx -+--- connectivity/source/drivers/tdeab/KConnection.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KConnection.hxx 2011-08-17 14:28:47.592184720 -0500 -+@@ -0,0 +1,142 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_CONNECTION_HXX_ -++#define _CONNECTIVITY_KAB_CONNECTION_HXX_ -++ -++#include -++#include "OSubComponent.hxx" -++#include "connectivity/CommonTools.hxx" -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++namespace KABC -++{ -++ class StdAddressBook; -++ class AddressBook; -++} -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ -++ typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::sdbc::XConnection, -++ ::com::sun::star::sdbc::XWarningsSupplier, -++ ::com::sun::star::lang::XServiceInfo -++ > OMetaConnection_BASE; -++ -++ class KabStatement_Base; -++ class KabDriver; -++ class KabDatabaseMetaData; -++ -++ typedef OMetaConnection_BASE KabConnection_BASE; // implements basics and text encoding -++ typedef std::vector< ::com::sun::star::uno::WeakReferenceHelper > OWeakRefArray; -++ -++ class KabConnection : public comphelper::OBaseMutex, -++ public KabConnection_BASE, -++ public OSubComponent -++ { -++ friend class OSubComponent; -++ -++ protected: -++ //==================================================================== -++ // Data attributes -++ //==================================================================== -++ ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; -++ -++ OWeakRefArray m_aStatements; // vector containing a list of all the Statement objects -++ // for this Connection -++ -++ ::KABC::StdAddressBook* m_pAddressBook; // the address book -++ KabDriver* m_pDriver; // pointer to the owning driver object -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier> -++ m_xCatalog; // needed for the SQL interpreter -++ -++ public: -++ virtual void construct( const ::rtl::OUString& url,const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info) throw(::com::sun::star::sdbc::SQLException); -++ -++ KabConnection(KabDriver* _pDriver); -++ virtual ~KabConnection(); -++ -++ void closeAllStatements () throw( ::com::sun::star::sdbc::SQLException); -++ -++ // OComponentHelper -++ virtual void SAL_CALL disposing(void); -++ -++ // XInterface -++ virtual void SAL_CALL release() throw(); -++ -++ // XServiceInfo -++ DECLARE_SERVICE_INFO(); -++ -++ // XConnection -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement > SAL_CALL createStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareCall( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL nativeSQL( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL getAutoCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL commit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL rollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isClosed( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setCatalog( const ::rtl::OUString& catalog ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getCatalog( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getTransactionIsolation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTypeMap( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setTypeMap( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XCloseable -++ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XWarningsSupplier -++ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // needed for the SQL interpreter -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > SAL_CALL createCatalog(); -++ -++ // accessors -++ inline KabDriver* getDriver() const { return m_pDriver;} -++ ::KABC::AddressBook* getAddressBook() const; -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_CONNECTION_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx -+--- connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx 2011-08-17 14:28:44.171921542 -0500 -+@@ -0,0 +1,1084 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KDatabaseMetaData.hxx" -++#include "kfields.hxx" -++#include "TDEInit.h" -++#include -++#include "FDatabaseMetaDataResultSet.hxx" -++#include "OTypeInfo.hxx" -++#include -++#include -++#include -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++ -++KabDatabaseMetaData::KabDatabaseMetaData(KabConnection* _pCon) -++ : m_xConnection(_pCon), -++ m_bUseCatalog(sal_True) -++{ -++ OSL_ENSURE(_pCon,"KabDatabaseMetaData::KabDatabaseMetaData: No connection set!"); -++ -++ osl_incrementInterlockedCount( &m_refCount ); -++ m_bUseCatalog = !(usesLocalFiles() || usesLocalFilePerTable()); -++ osl_decrementInterlockedCount( &m_refCount ); -++} -++// ------------------------------------------------------------------------- -++KabDatabaseMetaData::~KabDatabaseMetaData() -++{ -++} -++// ------------------------------------------------------------------------- -++const ::rtl::OUString & KabDatabaseMetaData::getAddressBookTableName() -++{ -++ static const ::rtl::OUString aAddressBookTableName -++ (::rtl::OUString::createFromAscii( i18n("Address Book") )); -++ -++ return aAddressBookTableName; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getCatalogSeparator( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aVal; -++ if (m_bUseCatalog) -++ { // do some special here for you database -++ } -++ -++ return aVal; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxBinaryLiteralLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxRowSize( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxCatalogNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxCharLiteralLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInIndex( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxCursorNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxConnections( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInTable( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxStatementLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxTableNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxTablesInSelect( ) throw(SQLException, RuntimeException) -++{ -++ // MaxTablesInSelect describes how many tables can participate in the FROM part of a given SELECT statement, -++ // currently, the resultset/statement implementations can cope with one table only -++ sal_Int32 nValue = 1; -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::doesMaxRowSizeIncludeBlobs( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesLowerCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesLowerCaseIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesMixedCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesMixedCaseIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesUpperCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::storesUpperCaseIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsAlterTableWithAddColumn( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsAlterTableWithDropColumn( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxIndexLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsNonNullableColumns( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getCatalogTerm( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aVal; -++ if (m_bUseCatalog) -++ { -++ } -++ return aVal; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getIdentifierQuoteString( ) throw(SQLException, RuntimeException) -++{ -++ // normally this is " -++ ::rtl::OUString aVal = ::rtl::OUString::createFromAscii("\""); -++ return aVal; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getExtraNameCharacters( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aVal; -++ return aVal; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsDifferentTableCorrelationNames( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::isCatalogAtStart( ) throw(SQLException, RuntimeException) -++{ -++ sal_Bool bValue = sal_False; -++ if (m_bUseCatalog) -++ { -++ } -++ return bValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::dataDefinitionIgnoredInTransactions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::dataDefinitionCausesTransactionCommit( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsDataManipulationTransactionsOnly( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsPositionedDelete( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsPositionedUpdate( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenStatementsAcrossRollback( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenStatementsAcrossCommit( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenCursorsAcrossCommit( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenCursorsAcrossRollback( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsTransactionIsolationLevel( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInDataManipulation( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsANSI92FullSQL( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsANSI92EntryLevelSQL( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; // should be supported at least -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsIntegrityEnhancementFacility( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInIndexDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInTableDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInTableDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInIndexDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInDataManipulation( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOuterJoins( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxStatements( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxProcedureNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxSchemaNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsTransactions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::allProceduresAreCallable( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsStoredProcedures( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSelectForUpdate( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::allTablesAreSelectable( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::isReadOnly( ) throw(SQLException, RuntimeException) -++{ -++ // for the moment, we have read-only addresses, but this might change in the future -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::usesLocalFiles( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::usesLocalFilePerTable( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsTypeConversion( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullPlusNonNullIsNull( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsColumnAliasing( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsTableCorrelationNames( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsConvert( sal_Int32, sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsExpressionsInOrderBy( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsGroupBy( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsGroupByBeyondSelect( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsGroupByUnrelated( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMultipleTransactions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMultipleResultSets( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsLikeEscapeClause( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsOrderByUnrelated( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsUnion( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsUnionAll( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMixedCaseIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMixedCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedAtEnd( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedAtStart( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedHigh( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedLow( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInProcedureCalls( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInPrivilegeDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInProcedureCalls( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInPrivilegeDefinitions( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCorrelatedSubqueries( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInComparisons( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInExists( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInIns( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInQuantifieds( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsANSI92IntermediateSQL( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getURL( ) throw(SQLException, RuntimeException) -++{ -++ // if someday we support more than the default address book, -++ // this method should return the URL which was used to create it -++ ::rtl::OUString aValue = ::rtl::OUString::createFromAscii("sdbc:address:kab:"); -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getUserName( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getDriverName( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue = ::rtl::OUString::createFromAscii("kab"); -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getDriverVersion() throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue = ::rtl::OUString::createFromAscii(KAB_DRIVER_VERSION); -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getDatabaseProductVersion( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getDatabaseProductName( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getProcedureTerm( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getSchemaTerm( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getDriverMajorVersion( ) throw(RuntimeException) -++{ -++ return KAB_DRIVER_VERSION_MAJOR; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getDefaultTransactionIsolation( ) throw(SQLException, RuntimeException) -++{ -++ return TransactionIsolation::NONE; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getDriverMinorVersion( ) throw(RuntimeException) -++{ -++ return KAB_DRIVER_VERSION_MINOR; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getSQLKeywords( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getSearchStringEscape( ) throw(SQLException, RuntimeException) -++{ -++ ::rtl::OUString aValue; -++ return aValue; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getStringFunctions( ) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getTimeDateFunctions( ) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getSystemFunctions( ) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabDatabaseMetaData::getNumericFunctions( ) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsExtendedSQLGrammar( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsCoreSQLGrammar( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsMinimumSQLGrammar( ) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsFullOuterJoins( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsLimitedOuterJoins( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInGroupBy( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInOrderBy( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInSelect( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxUserNameLength( ) throw(SQLException, RuntimeException) -++{ -++ sal_Int32 nValue = 0; // 0 means no limit -++ return nValue; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsResultSetType( sal_Int32 setType ) throw(SQLException, RuntimeException) -++{ -++ switch (setType) -++ { -++ case ResultSetType::FORWARD_ONLY: -++ case ResultSetType::SCROLL_INSENSITIVE: -++ return sal_True; -++ } -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ switch (setType) -++ { -++ case ResultSetType::FORWARD_ONLY: -++ case ResultSetType::SCROLL_INSENSITIVE: -++ return sal_True; -++ } -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::ownUpdatesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::ownDeletesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::ownInsertsAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::othersUpdatesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::othersDeletesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::othersInsertsAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::updatesAreDetected( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::deletesAreDetected( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::insertsAreDetected( sal_Int32 ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDatabaseMetaData::supportsBatchUpdates( ) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++Reference< XConnection > SAL_CALL KabDatabaseMetaData::getConnection( ) throw(SQLException, RuntimeException) -++{ -++ return (Reference< XConnection >) m_xConnection.get(); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTableTypes( ) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTableTypes); -++ Reference< XResultSet > xRef = pResult; -++ -++ static ODatabaseMetaDataResultSet::ORows aRows; -++ static const ::rtl::OUString aTable(::rtl::OUString::createFromAscii("TABLE")); -++ -++ if (aRows.empty()) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow(2); -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = new ORowSetValueDecorator(aTable); -++ aRows.push_back(aRow); -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTypeInfo( ) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); -++ Reference< XResultSet > xRef = pResult; -++ -++ static ODatabaseMetaDataResultSet::ORows aRows; -++ if (aRows.empty()) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow(19); -++ -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("CHAR")); -++ aRow[2] = new ORowSetValueDecorator(DataType::CHAR); -++ aRow[3] = new ORowSetValueDecorator((sal_Int32) 254); -++ aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue(); -++ aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue(); -++ aRow[6] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[7] = new ORowSetValueDecorator((sal_Int32) ColumnValue::NULLABLE); -++ aRow[8] = ODatabaseMetaDataResultSet::get1Value(); -++ aRow[9] = new ORowSetValueDecorator((sal_Int32) ColumnSearch::CHAR); -++ aRow[10] = ODatabaseMetaDataResultSet::get1Value(); -++ aRow[11] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[12] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[13] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[16] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[17] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[18] = new ORowSetValueDecorator((sal_Int32) 10); -++ aRows.push_back(aRow); -++// Much more types might appear in TDE address books -++// To be completed -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getCatalogs( ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eCatalogs ); -++} -++// ----------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getSchemas( ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eSchemas ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getColumnPrivileges( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, -++ const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eColumnPrivileges ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getColumns( -++ const Any&, -++ const ::rtl::OUString&, -++ const ::rtl::OUString& tableNamePattern, -++ const ::rtl::OUString& columnNamePattern) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); -++ Reference< XResultSet > xRef = pResult; -++ -++ ODatabaseMetaDataResultSet::ORows aRows; -++ -++ if (match(tableNamePattern, getAddressBookTableName(), '\0')) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow(19); -++ -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[3] = new ORowSetValueDecorator(getAddressBookTableName()); -++ aRow[8] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[9] = ODatabaseMetaDataResultSet::get0Value(); -++ aRow[10] = new ORowSetValueDecorator((sal_Int32) 10); -++ aRow[11] = ODatabaseMetaDataResultSet::get1Value(); -++ aRow[12] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[13] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[14] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[15] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[16] = new ORowSetValueDecorator((sal_Int32) 254); -++ aRow[18] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("YES")); -++ -++ sal_Int32 nPosition = 1; -++ TQString aQtName; -++ ::rtl::OUString sName; -++ -++ aQtName = ::KABC::Addressee::revisionLabel(); -++ sName = (const sal_Unicode *) aQtName.ucs2(); -++ if (match(columnNamePattern, sName, '\0')) -++ { -++ aRow[4] = new ORowSetValueDecorator(sName); -++ aRow[5] = new ORowSetValueDecorator(DataType::TIMESTAMP); -++ aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP")); -++ aRow[17] = new ORowSetValueDecorator(nPosition++); -++ aRows.push_back(aRow); -++ } -++ -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ ::KABC::Field::List::iterator aField; -++ -++ for ( aField = aFields.begin(); -++ aField != aFields.end(); -++ ++aField, ++nPosition) -++ { -++ aQtName = (*aField)->label(); -++ sName = (const sal_Unicode *) aQtName.ucs2(); -++ if (match(columnNamePattern, sName, '\0')) -++ { -++ aRow[4] = new ORowSetValueDecorator(sName); -++ aRow[5] = new ORowSetValueDecorator(DataType::CHAR); -++ aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("CHAR")); -++ aRow[7] = new ORowSetValueDecorator((sal_Int32) 256); -++// Might be VARCHAR and not CHAR[256]... -++ aRow[17] = new ORowSetValueDecorator(nPosition); -++ aRows.push_back(aRow); -++ } -++ } -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTables( -++ const Any&, -++ const ::rtl::OUString&, -++ const ::rtl::OUString&, -++ const Sequence< ::rtl::OUString >& types) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTables); -++ Reference< XResultSet > xRef = pResult; -++ -++ // check whether we have tables in the requested types -++ // for the moment, we answer only the "TABLE" table type -++ // when no types are given at all, we return all the tables -++ static const ::rtl::OUString aTable(::rtl::OUString::createFromAscii("TABLE")); -++ sal_Bool bTableFound = sal_False; -++ const ::rtl::OUString* p = types.getConstArray(), -++ * pEnd = p + types.getLength(); -++ -++ if (p == pEnd) -++ { -++ bTableFound = sal_True; -++ } -++ else while (p < pEnd) -++ { -++ if (match(*p, aTable, '\0')) -++ { -++ bTableFound = sal_True; -++ break; -++ } -++ p++; -++ } -++ if (!bTableFound) -++ return xRef; -++ -++ static ODatabaseMetaDataResultSet::ORows aRows; -++ -++ if (aRows.empty()) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow(6); -++ -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[3] = new ORowSetValueDecorator(getAddressBookTableName()); -++ aRow[4] = new ORowSetValueDecorator(aTable); -++ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRows.push_back(aRow); -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedureColumns( -++ const Any&, const ::rtl::OUString&, -++ const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedureColumns ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedures( -++ const Any&, const ::rtl::OUString&, -++ const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedures ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getVersionColumns( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& table ) throw(SQLException, RuntimeException) -++{ -++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eVersionColumns); -++ -++ Reference< XResultSet > xRef = pResult; -++ -++ ODatabaseMetaDataResultSet::ORows aRows; -++ -++ if (table == getAddressBookTableName()) -++ { -++ ODatabaseMetaDataResultSet::ORow aRow( 9 ); -++ TQString aQtName = ::KABC::Addressee::revisionLabel(); -++ ::rtl::OUString sName = (const sal_Unicode *) aQtName.ucs2(); -++ -++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ -++ aRow[2] = new ORowSetValueDecorator(sName); -++ aRow[3] = new ORowSetValueDecorator(DataType::TIMESTAMP); -++ aRow[4] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP")); -++ -++ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[6] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[7] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ aRow[8] = ODatabaseMetaDataResultSet::getEmptyValue(); -++ -++ aRows.push_back(aRow); -++ } -++ pResult->setRows(aRows); -++ return xRef; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getExportedKeys( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eExportedKeys ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getImportedKeys( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eImportedKeys ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getPrimaryKeys( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::ePrimaryKeys ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getIndexInfo( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, -++ sal_Bool, sal_Bool ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eIndexInfo ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getBestRowIdentifier( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, sal_Int32, -++ sal_Bool ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eBestRowIdentifier ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTablePrivileges( -++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTablePrivileges ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getCrossReference( -++ const Any&, const ::rtl::OUString&, -++ const ::rtl::OUString&, const Any&, -++ const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eCrossReference ); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getUDTs( const Any&, const ::rtl::OUString&, const ::rtl::OUString&, const Sequence< sal_Int32 >& ) throw(SQLException, RuntimeException) -++{ -++ OSL_ENSURE(0,"Not implemented yet!"); -++ throw SQLException(); -++} -++// ----------------------------------------------------------------------------- -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx -+--- connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx 2011-08-17 14:28:31.880975797 -0500 -+@@ -0,0 +1,217 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ -++#define _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ -++ -++#include "KConnection.hxx" -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ //************************************************************** -++ //************ Class: KabDatabaseMetaData -++ //************************************************************** -++ -++ typedef ::cppu::WeakImplHelper1< ::com::sun::star::sdbc::XDatabaseMetaData> KabDatabaseMetaData_BASE; -++ -++ class KabDatabaseMetaData : public KabDatabaseMetaData_BASE -++ { -++ ::com::sun::star::uno::Reference< KabConnection > m_xConnection; -++ sal_Bool m_bUseCatalog; -++ -++ public: -++ -++ inline KabConnection* getOwnConnection() const { return m_xConnection.get(); } -++ -++ KabDatabaseMetaData(KabConnection* _pCon); -++ static const ::rtl::OUString & getAddressBookTableName(); -++ virtual ~KabDatabaseMetaData(); -++ -++ // this interface is really BIG -++ // XDatabaseMetaData -++ virtual sal_Bool SAL_CALL allProceduresAreCallable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL allTablesAreSelectable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getURL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getUserName( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullsAreSortedHigh( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullsAreSortedLow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullsAreSortedAtStart( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullsAreSortedAtEnd( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getDatabaseProductName( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getDatabaseProductVersion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getDriverName( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getDriverVersion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getDriverMajorVersion( ) throw(::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getDriverMinorVersion( ) throw(::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL usesLocalFiles( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL usesLocalFilePerTable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getIdentifierQuoteString( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSQLKeywords( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getNumericFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getStringFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSystemFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getTimeDateFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSearchStringEscape( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getExtraNameCharacters( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsAlterTableWithAddColumn( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsAlterTableWithDropColumn( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsColumnAliasing( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL nullPlusNonNullIsNull( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsTypeConversion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsTableCorrelationNames( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOrderByUnrelated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsGroupBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsGroupByUnrelated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsLikeEscapeClause( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMultipleResultSets( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMultipleTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsNonNullableColumns( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCoreSQLGrammar( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsANSI92FullSQL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOuterJoins( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsFullOuterJoins( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsLimitedOuterJoins( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSchemaTerm( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getProcedureTerm( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getCatalogTerm( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isCatalogAtStart( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getCatalogSeparator( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInDataManipulation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInTableDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInDataManipulation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInTableDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsPositionedDelete( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsPositionedUpdate( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSelectForUpdate( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsStoredProcedures( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSubqueriesInExists( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSubqueriesInIns( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsUnion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsUnionAll( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxCharLiteralLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInIndex( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInSelect( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxColumnsInTable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxConnections( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxCursorNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxIndexLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxSchemaNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxProcedureNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxCatalogNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxRowSize( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxStatementLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxStatements( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxTableNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxTablesInSelect( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMaxUserNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getProcedures( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& procedureNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getProcedureColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& procedureNamePattern, const ::rtl::OUString& columnNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTables( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& types ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getSchemas( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getCatalogs( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTableTypes( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const ::rtl::OUString& columnNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getColumnPrivileges( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, const ::rtl::OUString& columnNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTablePrivileges( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getBestRowIdentifier( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, sal_Int32 scope, sal_Bool nullable ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getVersionColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getPrimaryKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getImportedKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getExportedKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getCrossReference( const ::com::sun::star::uno::Any& primaryCatalog, const ::rtl::OUString& primarySchema, const ::rtl::OUString& primaryTable, const ::com::sun::star::uno::Any& foreignCatalog, const ::rtl::OUString& foreignSchema, const ::rtl::OUString& foreignTable ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTypeInfo( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getIndexInfo( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, sal_Bool unique, sal_Bool approximate ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsBatchUpdates( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getUDTs( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& typeNamePattern, const ::com::sun::star::uno::Sequence< sal_Int32 >& types ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KDriver.cxx connectivity/source/drivers/tdeab/KDriver.cxx -+--- connectivity/source/drivers/tdeab/KDriver.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KDriver.cxx 2011-08-17 14:28:05.938979574 -0500 -+@@ -0,0 +1,476 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KDriver.hxx" -++#include "TDEInit.h" -++#include "KConnection.hxx" -++ -++/** === begin UNO includes === **/ -++#include -++#include -++#include -++/** === end UNO includes === **/ -++#include -++#include -++#include "resource/tdeab_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::sdb; -++using namespace com::sun::star::frame; -++using namespace connectivity::kab; -++ -++// ======================================================================= -++// = KabImplModule -++// ======================================================================= -++// -------------------------------------------------------------------------------- -++KabImplModule::KabImplModule( const Reference< XMultiServiceFactory >& _rxFactory ) -++ :m_xORB(_rxFactory) -++ ,m_bAttemptedLoadModule(false) -++ ,m_bAttemptedInitialize(false) -++ ,m_hConnectorModule(NULL) -++ ,m_pConnectionFactoryFunc(NULL) -++ ,m_pApplicationInitFunc(NULL) -++ ,m_pApplicationShutdownFunc(NULL) -++ ,m_pTDEVersionCheckFunc(NULL) -++{ -++ if ( !m_xORB.is() ) -++ throw NullPointerException(); -++} -++ -++// -------------------------------------------------------------------------------- -++bool KabImplModule::isTDEPresent() -++{ -++ if ( !impl_loadModule() ) -++ return false; -++ -++ return true; -++} -++ -++// -------------------------------------------------------------------------------- -++KabImplModule::TDEVersionType KabImplModule::matchTDEVersion() -++{ -++ OSL_PRECOND( m_pTDEVersionCheckFunc, "KabImplModule::matchTDEVersion: module not loaded!" ); -++ -++ int nVersionInfo = (*m_pTDEVersionCheckFunc)(); -++ if ( nVersionInfo < 0 ) -++ return eTooOld; -++ if ( nVersionInfo > 0 ) -++ return eToNew; -++ return eSupported; -++} -++ -++// -------------------------------------------------------------------------------- -++namespace -++{ -++ template< typename FUNCTION > -++ void lcl_getFunctionFromModuleOrUnload( oslModule& _rModule, const sal_Char* _pAsciiSymbolName, FUNCTION& _rFunction ) -++ { -++ _rFunction = NULL; -++ if ( _rModule ) -++ { -++ // -++ const ::rtl::OUString sSymbolName = ::rtl::OUString::createFromAscii( _pAsciiSymbolName ); -++ _rFunction = (FUNCTION)( osl_getSymbol( _rModule, sSymbolName.pData ) ); -++ -++ if ( !_rFunction ) -++ { // did not find the symbol -++ OSL_ENSURE( false, ::rtl::OString( "lcl_getFunctionFromModuleOrUnload: could not find the symbol " ) + ::rtl::OString( _pAsciiSymbolName ) ); -++ osl_unloadModule( _rModule ); -++ _rModule = NULL; -++ } -++ } -++ } -++} -++ -++// -------------------------------------------------------------------------------- -++extern "C" { void SAL_CALL thisModule() {} } -++ -++bool KabImplModule::impl_loadModule() -++{ -++ if ( m_bAttemptedLoadModule ) -++ return ( m_hConnectorModule != NULL ); -++ m_bAttemptedLoadModule = true; -++ -++ OSL_ENSURE( !m_hConnectorModule && !m_pConnectionFactoryFunc && !m_pApplicationInitFunc && !m_pApplicationShutdownFunc && !m_pTDEVersionCheckFunc, -++ "KabImplModule::impl_loadModule: inconsistence: inconsistency (never attempted load before, but some values already set)!"); -++ -++ const ::rtl::OUString sModuleName = ::rtl::OUString::createFromAscii( SAL_MODULENAME( "kabdrv1" ) ); -++ m_hConnectorModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, SAL_LOADMODULE_NOW ); // LAZY! #i61335# -++ OSL_ENSURE( m_hConnectorModule, "KabImplModule::impl_loadModule: could not load the implementation library!" ); -++ if ( !m_hConnectorModule ) -++ return false; -++ -++ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "createKabConnection", m_pConnectionFactoryFunc ); -++ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "initKApplication", m_pApplicationInitFunc ); -++ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "shutdownKApplication", m_pApplicationShutdownFunc ); -++ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "matchTDEVersion", m_pTDEVersionCheckFunc ); -++ -++ if ( !m_hConnectorModule ) -++ // one of the symbols did not exist -++ throw RuntimeException(); -++ -++ return true; -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_unloadModule() -++{ -++ OSL_PRECOND( m_hConnectorModule != NULL, "KabImplModule::impl_unloadModule: no module!" ); -++ -++ osl_unloadModule( m_hConnectorModule ); -++ m_hConnectorModule = NULL; -++ -++ m_pConnectionFactoryFunc = NULL; -++ m_pApplicationInitFunc = NULL; -++ m_pApplicationShutdownFunc = NULL; -++ m_pTDEVersionCheckFunc = NULL; -++ -++ m_bAttemptedLoadModule = false; -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::init() -++{ -++ if ( !impl_loadModule() ) -++ impl_throwNoKdeException(); -++ -++ // if we're not running on a supported version, throw -++ KabImplModule::TDEVersionType eTDEVersion = matchTDEVersion(); -++ -++ if ( eTDEVersion == eTooOld ) -++ impl_throwKdeTooOldException(); -++ -++ if ( ( eTDEVersion == eToNew ) && !impl_doAllowNewTDEVersion() ) -++ impl_throwKdeTooNewException(); -++ -++ if ( !m_bAttemptedInitialize ) -++ { -++ m_bAttemptedInitialize = true; -++ (*m_pApplicationInitFunc)(); -++ } -++} -++ -++// -------------------------------------------------------------------------------- -++bool KabImplModule::impl_doAllowNewTDEVersion() -++{ -++ try -++ { -++ Reference< XMultiServiceFactory > xConfigProvider( -++ m_xORB->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) ) ), -++ UNO_QUERY_THROW ); -++ Sequence< Any > aCreationArgs(1); -++ aCreationArgs[0] <<= PropertyValue( -++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) ), -++ 0, -++ makeAny( KabDriver::impl_getConfigurationSettingsPath() ), -++ PropertyState_DIRECT_VALUE ); -++ Reference< XPropertySet > xSettings( xConfigProvider->createInstanceWithArguments( -++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationAccess" ) ), -++ aCreationArgs ), -++ UNO_QUERY_THROW ); -++ -++ sal_Bool bDisableCheck = sal_False; -++ xSettings->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DisableTDEMaximumVersionCheck" ) ) ) >>= bDisableCheck; -++ -++ return bDisableCheck != sal_False; -++ } -++ catch( const Exception& ) -++ { -++ DBG_UNHANDLED_EXCEPTION(); -++ } -++ return false; -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_throwNoKdeException() -++{ -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceString( -++ STR_NO_TDE_INST -++ ) ); -++ impl_throwGenericSQLException( sError ); -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_throwKdeTooOldException() -++{ -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution( -++ STR_TDE_VERSION_TOO_OLD, -++ "$major$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MAJOR), -++ "$minor$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MINOR) -++ ) ); -++ impl_throwGenericSQLException( sError ); -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_throwGenericSQLException( const ::rtl::OUString& _rMessage ) -++{ -++ SQLException aError; -++ aError.Message = _rMessage; -++ aError.SQLState = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) ); -++ aError.ErrorCode = 0; -++ throw aError; -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::impl_throwKdeTooNewException() -++{ -++ ::connectivity::SharedResources aResources; -++ -++ SQLException aError; -++ aError.Message = aResources.getResourceStringWithSubstitution( -++ STR_TDE_VERSION_TOO_NEW, -++ "$major$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MAJOR), -++ "$minor$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MINOR) -++ ); -++ aError.SQLState = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) ); -++ aError.ErrorCode = 0; -++ -++ SQLContext aDetails; -++ ::rtl::OUStringBuffer aMessage; -++ aMessage.append( aResources.getResourceString(STR_TDE_VERSION_TOO_NEW_WORK_AROUND) ); -++ -++ aMessage.appendAscii( "Sub disableTDEMaxVersionCheck\n" ); -++ aMessage.appendAscii( " BasicLibraries.LoadLibrary( \"Tools\" )\n" ); -++ -++ aMessage.appendAscii( " Dim configNode as Object\n" ); -++ aMessage.appendAscii( " configNode = GetRegistryKeyContent( \"" ); -++ aMessage.append( KabDriver::impl_getConfigurationSettingsPath() ); -++ aMessage.appendAscii( "\", true )\n" ); -++ -++ aMessage.appendAscii( " configNode.DisableTDEMaximumVersionCheck = TRUE\n" ); -++ aMessage.appendAscii( " configNode.commitChanges\n" ); -++ aMessage.appendAscii( "End Sub\n" ); -++ -++ aDetails.Message = aMessage.makeStringAndClear(); -++ -++ aError.NextException <<= aDetails; -++ -++ throw aError; -++} -++ -++// -------------------------------------------------------------------------------- -++KabConnection* KabImplModule::createConnection( KabDriver* _pDriver ) const -++{ -++ OSL_PRECOND( m_hConnectorModule, "KabImplModule::createConnection: not initialized!" ); -++ -++ void* pUntypedConnection = (*m_pConnectionFactoryFunc)( _pDriver ); -++ if ( !pUntypedConnection ) -++ throw RuntimeException(); -++ -++ return static_cast< KabConnection* >( pUntypedConnection ); -++} -++ -++// -------------------------------------------------------------------------------- -++void KabImplModule::shutdown() -++{ -++ if ( !m_hConnectorModule ) -++ return; -++ -++ (*m_pApplicationShutdownFunc)(); -++ m_bAttemptedInitialize = false; -++ -++ impl_unloadModule(); -++} -++ -++// ======================================================================= -++// = KabDriver -++// ======================================================================= -++KabDriver::KabDriver( -++ const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) -++ : KDriver_BASE(m_aMutex), -++ m_xMSFactory(_rxFactory), -++ m_aImplModule(_rxFactory) -++{ -++ if ( !m_xMSFactory.is() ) -++ throw NullPointerException(); -++ -++ osl_incrementInterlockedCount( &m_refCount ); -++ try -++ { -++ Reference< XDesktop > xDesktop( -++ m_xMSFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ) ), -++ UNO_QUERY_THROW ); -++ xDesktop->addTerminateListener( this ); -++ } -++ catch( const Exception& ) -++ { -++ DBG_UNHANDLED_EXCEPTION(); -++ } -++ osl_decrementInterlockedCount( &m_refCount ); -++} -++// -------------------------------------------------------------------------------- -++void KabDriver::disposing() -++{ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++ // when driver will be destroied so all our connections have to be destroied as well -++ for (OWeakRefArray::iterator i = m_xConnections.begin(); m_xConnections.end() != i; ++i) -++ { -++ Reference< XComponent > xComp(i->get(), UNO_QUERY); -++ if (xComp.is()) -++ xComp->dispose(); -++ } -++ m_xConnections.clear(); -++ -++ WeakComponentImplHelperBase::disposing(); -++} -++// static ServiceInfo -++//------------------------------------------------------------------------------ -++rtl::OUString KabDriver::getImplementationName_Static( ) throw(RuntimeException) -++{ -++ return rtl::OUString::createFromAscii( impl_getAsciiImplementationName() ); -++} -++//------------------------------------------------------------------------------ -++Sequence< ::rtl::OUString > KabDriver::getSupportedServiceNames_Static( ) throw (RuntimeException) -++{ -++ // which service is supported -++ // for more information @see com.sun.star.sdbc.Driver -++ Sequence< ::rtl::OUString > aSNS( 1 ); -++ aSNS[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdbc.Driver"); -++ -++ return aSNS; -++} -++//------------------------------------------------------------------ -++::rtl::OUString SAL_CALL KabDriver::getImplementationName( ) throw(RuntimeException) -++{ -++ return getImplementationName_Static(); -++} -++//------------------------------------------------------------------ -++sal_Bool SAL_CALL KabDriver::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException) -++{ -++ Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames()); -++ const ::rtl::OUString* pSupported = aSupported.getConstArray(); -++ const ::rtl::OUString* pEnd = pSupported + aSupported.getLength(); -++ -++ while (pSupported != pEnd && !pSupported->equals(_rServiceName)) -++ ++pSupported; -++ return pSupported != pEnd; -++} -++//------------------------------------------------------------------ -++Sequence< ::rtl::OUString > SAL_CALL KabDriver::getSupportedServiceNames( ) throw(RuntimeException) -++{ -++ return getSupportedServiceNames_Static(); -++} -++// -------------------------------------------------------------------------------- -++Reference< XConnection > SAL_CALL KabDriver::connect( const ::rtl::OUString& url, const Sequence< PropertyValue >& info ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++ m_aImplModule.init(); -++ -++ // create a new connection with the given properties and append it to our vector -++ KabConnection* pConnection = m_aImplModule.createConnection( this ); -++ OSL_POSTCOND( pConnection, "KabDriver::connect: no connection has been created by the factory!" ); -++ -++ // by definition, the factory function returned an object which was acquired once -++ Reference< XConnection > xConnection = pConnection; -++ pConnection->release(); -++ -++ // late constructor call which can throw exception and allows a correct dtor call when so -++ pConnection->construct( url, info ); -++ -++ // remember it -++ m_xConnections.push_back( WeakReferenceHelper( *pConnection ) ); -++ -++ return xConnection; -++} -++// -------------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabDriver::acceptsURL( const ::rtl::OUString& url ) -++ throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++ if ( !m_aImplModule.isTDEPresent() ) -++ return sal_False; -++ -++ // here we have to look whether we support this URL format -++ return (!url.compareTo(::rtl::OUString::createFromAscii("sdbc:address:kab:"), 16)); -++} -++// -------------------------------------------------------------------------------- -++Sequence< DriverPropertyInfo > SAL_CALL KabDriver::getPropertyInfo( const ::rtl::OUString&, const Sequence< PropertyValue >& ) throw(SQLException, RuntimeException) -++{ -++ // if you have something special to say, return it here :-) -++ return Sequence< DriverPropertyInfo >(); -++} -++// -------------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDriver::getMajorVersion( ) throw(RuntimeException) -++{ -++ return KAB_DRIVER_VERSION_MAJOR; -++} -++// -------------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabDriver::getMinorVersion( ) throw(RuntimeException) -++{ -++ return KAB_DRIVER_VERSION_MINOR; -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabDriver::queryTermination( const EventObject& ) throw (TerminationVetoException, RuntimeException) -++{ -++ // nothing to do, nothing to veto -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabDriver::notifyTermination( const EventObject& ) throw (RuntimeException) -++{ -++ m_aImplModule.shutdown(); -++} -++// -------------------------------------------------------------------------------- -++void SAL_CALL KabDriver::disposing( const EventObject& ) throw (RuntimeException) -++{ -++ // not interested in (this is the disposing of the desktop, if any) -++} -++// -------------------------------------------------------------------------------- -++const sal_Char* KabDriver::impl_getAsciiImplementationName() -++{ -++ return "com.sun.star.comp.sdbc.kab.Driver"; -++ // this name is referenced in the configuration and in the kab.xml -++ // Please be careful when changing it. -++} -++// -------------------------------------------------------------------------------- -++::rtl::OUString KabDriver::impl_getConfigurationSettingsPath() -++{ -++ ::rtl::OUStringBuffer aPath; -++ aPath.appendAscii( "/org.openoffice.Office.DataAccess/DriverSettings/" ); -++ aPath.appendAscii( "com.sun.star.comp.sdbc.kab.Driver" ); -++ return aPath.makeStringAndClear(); -++} -++// -------------------------------------------------------------------------------- -++Reference< XInterface > SAL_CALL KabDriver::Create( const Reference< XMultiServiceFactory >& _rxFactory ) throw( Exception ) -++{ -++ return *(new KabDriver(_rxFactory)); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KDriver.hxx connectivity/source/drivers/tdeab/KDriver.hxx -+--- connectivity/source/drivers/tdeab/KDriver.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KDriver.hxx 2011-08-17 14:27:57.178305442 -0500 -+@@ -0,0 +1,227 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_DRIVER_HXX_ -++#define _CONNECTIVITY_KAB_DRIVER_HXX_ -++ -++/** === begin UNO includes === **/ -++#include -++#include -++#include -++/** === end UNO includes === **/ -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabConnection; -++ class KabDriver; -++ -++ typedef void* (SAL_CALL * ConnectionFactoryFunction)( void* _pDriver ); -++ typedef void (SAL_CALL * ApplicationInitFunction)( void ); -++ typedef void (SAL_CALL * ApplicationShutdownFunction)( void ); -++ typedef int (SAL_CALL * TDEVersionCheckFunction)( void ); -++ -++ typedef std::vector< ::com::sun::star::uno::WeakReferenceHelper > OWeakRefArray; -++ -++ // =============================================================== -++ // = KabImplModule -++ // =============================================================== -++ class KabImplModule -++ { -++ private: -++ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > -++ m_xORB; -++ -++ /// Did we already attempt to load the module and to retrieve the symbols? -++ bool m_bAttemptedLoadModule; -++ /// Did we already check the TDE version and initialize the impl module (or at least attempted to)? -++ bool m_bAttemptedInitialize; -++ -++ oslModule m_hConnectorModule; -++ ConnectionFactoryFunction m_pConnectionFactoryFunc; -++ ApplicationInitFunction m_pApplicationInitFunc; -++ ApplicationShutdownFunction m_pApplicationShutdownFunc; -++ TDEVersionCheckFunction m_pTDEVersionCheckFunc; -++ -++ public: -++ KabImplModule( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); -++ -++ /** determines whether there is a TDE present in the environment -++ */ -++ bool isTDEPresent(); -++ -++ enum TDEVersionType -++ { -++ eTooOld, -++ eSupported, -++ eToNew -++ }; -++ /** checks whether the TDE version we're running against is supported -++ @precond -++ the module is loaded, i.e impl_loadModule has successfully been called -++ */ -++ TDEVersionType matchTDEVersion(); -++ -++ /** initializes the implementation module. -++ -++ @raises ::com::sun::star::uno::RuntimeException -++ if the module could be loaded, but required symbols are missing -++ @raises ::com::sun::star::sdbc::SQLException -++ if the TDE version we're running against is not supported, or no TDE was found at all -++ */ -++ void init(); -++ -++ /** shuts down the impl module (and the TDE application, if we own it) -++ */ -++ void shutdown(); -++ -++ /** creates a new connection -++ @precond -++ init has been called before -++ @raises ::com::sun::star::uno::RuntimeException -++ if no connection object could be created (which is a severe error, normally impossible) -++ */ -++ KabConnection* createConnection( KabDriver* _pDriver ) const; -++ -++ private: -++ /** loads the implementation module and retrieves the needed symbols -++ -++ Save against being called multiple times. -++ -++ @return if the module could be loaded successfully. -++ -++ @raises ::com::sun::star::uno::RuntimeException -++ if the module could be loaded, but required symbols are missing -++ */ -++ bool impl_loadModule(); -++ -++ /** unloads the implementation module, and resets all function pointers to -++ @precond m_hConnectorModule is not -++ */ -++ void impl_unloadModule(); -++ -++ /** throws an SQLException saying than no TDE installation was found -++ */ -++ void impl_throwNoKdeException(); -++ -++ /** throws an SQLException saying that the found TDE version is too old -++ */ -++ void impl_throwKdeTooOldException(); -++ -++ /** throws an SQLException saying that the found TDE version is too new -++ */ -++ void impl_throwKdeTooNewException(); -++ -++ /** throws a generic SQL exception with SQLState S1000 and error code 0 -++ */ -++ void impl_throwGenericSQLException( const ::rtl::OUString& _rMessage ); -++ -++ /** determines whether it's allowed to run on a too-new (not confirmed to work) version -++ */ -++ bool impl_doAllowNewTDEVersion(); -++ }; -++ -++ // =============================================================== -++ // = KabDriver -++ // =============================================================== -++ typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::sdbc::XDriver, -++ ::com::sun::star::lang::XServiceInfo, -++ ::com::sun::star::frame::XTerminateListener > KDriver_BASE; -++ class KabDriver : public KDriver_BASE -++ { -++ protected: -++ ::osl::Mutex m_aMutex; // mutex is need to control member access -++ OWeakRefArray m_xConnections; // vector containing a list of all the -++ // KabConnection objects for this Driver -++ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > -++ m_xMSFactory; // the multi-service factory -++ KabImplModule m_aImplModule; -++ -++ public: -++ static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) throw( ::com::sun::star::uno::Exception ); -++ -++ // XServiceInfo - static versions -++ static ::rtl::OUString getImplementationName_Static( ) throw(::com::sun::star::uno::RuntimeException); -++ static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static( ) throw (::com::sun::star::uno::RuntimeException); -++ -++ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& -++ getMSFactory() const { return m_xMSFactory; } -++ -++ /** returns the driver's implementation name (being pure ASCII) for reference in various places -++ */ -++ static const sal_Char* impl_getAsciiImplementationName(); -++ -++ /** returns the path of our configuration settings -++ */ -++ static ::rtl::OUString impl_getConfigurationSettingsPath(); -++ -++ protected: -++ KabDriver(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory); -++ -++ // OComponentHelper -++ virtual void SAL_CALL disposing(void); -++ -++ // XServiceInfo -++ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XDriver -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL connect( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL acceptsURL( const ::rtl::OUString& url ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMajorVersion() throw(::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getMinorVersion() throw(::com::sun::star::uno::RuntimeException); -++ -++ // XTerminateListener -++ virtual void SAL_CALL queryTermination( const ::com::sun::star::lang::EventObject& Event ) throw (::com::sun::star::frame::TerminationVetoException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL notifyTermination( const ::com::sun::star::lang::EventObject& Event ) throw (::com::sun::star::uno::RuntimeException); -++ -++ // XEventListener -++ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); -++ -++ private: -++ /** shuts down the library which contains the real implementations -++ -++ This method is safe against being called multiple times -++ -++ @precond our mutex is locked -++ */ -++ void impl_shutdownImplementationModule(); -++ }; -++ } -++ -++} -++ -++#endif // _CONNECTIVITY_KAB_DRIVER_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/kfields.cxx connectivity/source/drivers/tdeab/kfields.cxx -+--- connectivity/source/drivers/tdeab/kfields.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/kfields.cxx 2011-08-17 14:27:40.557026383 -0500 -+@@ -0,0 +1,98 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "kfields.hxx" -++#include "resource/common_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++using namespace ::connectivity::kab; -++using namespace ::com::sun::star::sdbc; -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++// ----------------------------------------------------------------------------- -++// return the value of a TDE address book field, given an addressee and a field number -++TQString valueOfKabField(const ::KABC::Addressee &aAddressee, sal_Int32 nFieldNumber) -++{ -++ switch (nFieldNumber) -++ { -++ case KAB_FIELD_REVISION: -++ return aAddressee.revision().toString("yyyy-MM-dd hh:mm:ss"); -++ default: -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ return aFields[nFieldNumber - KAB_DATA_FIELDS]->value(aAddressee); -++ } -++} -++// ------------------------------------------------------------------------------ -++// search the TDE address book field number of a given column name -++sal_uInt32 findKabField(const ::rtl::OUString& columnName) throw(SQLException) -++{ -++ TQString aQtName; -++ ::rtl::OUString aName; -++ -++ aQtName = KABC::Addressee::revisionLabel(); -++ aName = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ if (columnName == aName) -++ return KAB_FIELD_REVISION; -++ -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ ::KABC::Field::List::iterator aField; -++ sal_uInt32 nResult; -++ -++ for ( aField = aFields.begin(), nResult = KAB_DATA_FIELDS; -++ aField != aFields.end(); -++ ++aField, ++nResult) -++ { -++ aQtName = (*aField)->label(); -++ aName = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ -++ if (columnName == aName) -++ return nResult; -++ } -++ -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution( -++ STR_INVALID_COLUMNNAME, -++ "$columnname$",columnName -++ ) ); -++ ::dbtools::throwGenericSQLException(sError,NULL); -++ // Unreachable: -++ OSL_ASSERT(false); -++ return 0; -++} -++// ------------------------------------------------------------------------------ -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/kfields.hxx connectivity/source/drivers/tdeab/kfields.hxx -+--- connectivity/source/drivers/tdeab/kfields.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/kfields.hxx 2011-08-17 14:27:31.926362235 -0500 -+@@ -0,0 +1,51 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_FIELDS_HXX_ -++#define _CONNECTIVITY_KAB_FIELDS_HXX_ -++ -++#include -++#include -++#include -++ -++#define KAB_FIELD_REVISION 0 -++#define KAB_DATA_FIELDS 1 -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ TQString valueOfKabField(const ::KABC::Addressee &aAddressee, sal_Int32 nFieldNumber); -++ sal_uInt32 findKabField(const ::rtl::OUString& columnName) throw(::com::sun::star::sdbc::SQLException); -++ } -++} -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/korder.cxx connectivity/source/drivers/tdeab/korder.cxx -+--- connectivity/source/drivers/tdeab/korder.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/korder.cxx 2011-08-17 14:27:22.785658823 -0500 -+@@ -0,0 +1,92 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "korder.hxx" -++#include "kfields.hxx" -++ -++using namespace ::connectivity::kab; -++ -++KabOrder::~KabOrder() -++{ -++} -++// ----------------------------------------------------------------------------- -++KabSimpleOrder::KabSimpleOrder(::rtl::OUString &sColumnName, sal_Bool bAscending) -++ : KabOrder(), -++ m_nFieldNumber(findKabField(sColumnName)), -++ m_bAscending(bAscending) -++{ -++} -++// ----------------------------------------------------------------------------- -++sal_Int32 KabSimpleOrder::compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const -++{ -++ sal_Int32 result; -++ -++ result = TQString::compare( -++ valueOfKabField(aAddressee1, m_nFieldNumber), -++ valueOfKabField(aAddressee2, m_nFieldNumber)); -++// Timestamps should be compared differently than with their string value -++ -++ if (!m_bAscending) result = -result; -++ -++ return result; -++} -++// ----------------------------------------------------------------------------- -++KabComplexOrder::KabComplexOrder() -++ : KabOrder(), -++ m_aOrders() -++{ -++} -++// ----------------------------------------------------------------------------- -++KabComplexOrder::~KabComplexOrder() -++{ -++ for (sal_uInt32 i = 0; i < m_aOrders.size(); i++) -++ delete m_aOrders[i]; -++} -++// ----------------------------------------------------------------------------- -++void KabComplexOrder::addOrder(KabOrder *pOrder) -++{ -++ m_aOrders.push_back(pOrder); -++} -++// ----------------------------------------------------------------------------- -++sal_Int32 KabComplexOrder::compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const -++{ -++ for (sal_uInt32 i = 0; i < m_aOrders.size(); i++) -++ { -++ const KabOrder *pOrder = m_aOrders[i]; -++ sal_Int32 result = pOrder->compare(aAddressee1, aAddressee2); -++ -++ if (result) return result; -++ } -++ return 0; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/korder.hxx connectivity/source/drivers/tdeab/korder.hxx -+--- connectivity/source/drivers/tdeab/korder.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/korder.hxx 2011-08-17 14:27:15.825123174 -0500 -+@@ -0,0 +1,78 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_ORDER_HXX_ -++#define _CONNECTIVITY_KAB_ORDER_HXX_ -++ -++#include "rtl/ustring.hxx" -++#include -++ -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabOrder -++ { -++ public: -++ virtual ~KabOrder(); -++ -++ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const = 0; -++ }; -++ -++ class KabSimpleOrder : public KabOrder -++ { -++ sal_Int32 m_nFieldNumber; -++ sal_Bool m_bAscending; -++ -++ TQString value(const ::KABC::Addressee &aAddressee) const; -++ public: -++ KabSimpleOrder(::rtl::OUString &sColumnName, sal_Bool bAscending); -++ -++ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const; -++ }; -++ -++ class KabComplexOrder : public KabOrder -++ { -++ ::std::vector m_aOrders; -++ -++ public: -++ KabComplexOrder(); -++ virtual ~KabComplexOrder(); -++ -++ void addOrder(KabOrder *pOrder); -++ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const; -++ }; -++ } -++} -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KPreparedStatement.cxx connectivity/source/drivers/tdeab/KPreparedStatement.cxx -+--- connectivity/source/drivers/tdeab/KPreparedStatement.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KPreparedStatement.cxx 2011-08-17 14:27:09.434631390 -0500 -+@@ -0,0 +1,394 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KPreparedStatement.hxx" -++#include "propertyids.hxx" -++#include -++#include -++#include "resource/tdeab_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::util; -++ -++IMPLEMENT_SERVICE_INFO(KabPreparedStatement, "com.sun.star.sdbc.drivers.KabPreparedStatement", "com.sun.star.sdbc.PreparedStatement"); -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::checkAndResizeParameters(sal_Int32 nParams) throw(SQLException) -++{ -++ if ( !m_aParameterRow.is() ) -++ m_aParameterRow = new OValueVector(); -++ -++ if (nParams < 1) -++ ::dbtools::throwInvalidIndexException(*(KabPreparedStatement *) this,Any()); -++ -++ if (nParams >= (sal_Int32) (m_aParameterRow->get()).size()) -++ (m_aParameterRow->get()).resize(nParams); -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::setKabFields() const throw(SQLException) -++{ -++ ::rtl::Reference xColumns; // selected columns -++ -++ xColumns = m_aSQLIterator.getSelectColumns(); -++ if (!xColumns.is()) -++ { -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceString( -++ STR_INVALID_COLUMN_SELECTION -++ ) ); -++ ::dbtools::throwGenericSQLException(sError,NULL); -++ } -++ m_xMetaData->setKabFields(xColumns); -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::resetParameters() const throw(SQLException) -++{ -++ m_nParameterIndex = 0; -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::getNextParameter(::rtl::OUString &rParameter) const throw(SQLException) -++{ -++ if (m_nParameterIndex >= (sal_Int32) (m_aParameterRow->get()).size()) -++ { -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceString( -++ STR_INVALID_PARA_COUNT -++ ) ); -++ ::dbtools::throwGenericSQLException(sError,*(KabPreparedStatement *) this); -++ } // if (m_nParameterIndex >= (sal_Int32) (*m_aParameterRow).size()) -++ -++ rParameter = (m_aParameterRow->get())[m_nParameterIndex]; -++ -++ m_nParameterIndex++; -++} -++// ------------------------------------------------------------------------- -++KabPreparedStatement::KabPreparedStatement( -++ KabConnection* _pConnection, -++ const ::rtl::OUString& sql) -++ : KabPreparedStatement_BASE(_pConnection), -++ m_sSqlStatement(sql), -++ m_bPrepared(sal_False), -++ m_nParameterIndex(0), -++ m_aParameterRow() -++{ -++} -++// ------------------------------------------------------------------------- -++KabPreparedStatement::~KabPreparedStatement() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::disposing() -++{ -++ KabPreparedStatement_BASE::disposing(); -++ -++ if (m_aParameterRow.is()) -++ { -++ m_aParameterRow->get().clear(); -++ m_aParameterRow = NULL; -++ } -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSetMetaData > SAL_CALL KabPreparedStatement::getMetaData() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ if (!m_xMetaData.is()) -++ { -++ m_xMetaData = new KabResultSetMetaData(getOwnConnection()); -++ setKabFields(); -++ } -++ Reference< XResultSetMetaData > xMetaData = m_xMetaData.get(); -++ return xMetaData; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::close() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ // Reset last warning message -++ try { -++ clearWarnings (); -++ KabCommonStatement::close(); -++ } -++ catch (SQLException &) { -++ // If we get an error, ignore -++ } -++ -++ // Remove this Statement object from the Connection object's -++ // list -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabPreparedStatement::execute() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ Reference< XResultSet> xRS = KabCommonStatement::executeQuery(m_sSqlStatement); -++ -++ return xRS.is(); -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabPreparedStatement::executeUpdate() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ // same as in statement with the difference that this statement also can contain parameter -++ return 0; -++} -++// ------------------------------------------------------------------------- -++Reference< XConnection > SAL_CALL KabPreparedStatement::getConnection() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ return (Reference< XConnection >) m_pConnection; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabPreparedStatement::executeQuery() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ Reference< XResultSet > rs = KabCommonStatement::executeQuery(m_sSqlStatement); -++ -++ return rs; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setNull(sal_Int32 parameterIndex, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ checkAndResizeParameters(parameterIndex); -++ -++ (m_aParameterRow->get())[parameterIndex - 1].setNull(); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setObjectNull(sal_Int32, sal_Int32, const ::rtl::OUString&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setObjectNull", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setBoolean(sal_Int32, sal_Bool) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setBoolean", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setByte(sal_Int32, sal_Int8) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setByte", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setShort(sal_Int32, sal_Int16) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setShort", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setInt(sal_Int32, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setInt", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setLong(sal_Int32, sal_Int64) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setFloat(sal_Int32, float) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setFloat", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setDouble(sal_Int32, double) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setDouble", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setString(sal_Int32 parameterIndex, const ::rtl::OUString &x) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ checkAndResizeParameters(parameterIndex); -++ -++ (m_aParameterRow->get())[parameterIndex - 1] = x; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setBytes(sal_Int32, const Sequence< sal_Int8 >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setBytes", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setDate(sal_Int32, const Date&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setDate", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setTime(sal_Int32, const Time&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setTime", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setTimestamp(sal_Int32, const DateTime&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setTimestamp", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setBinaryStream(sal_Int32, const Reference< ::com::sun::star::io::XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setBinaryStream", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setCharacterStream(sal_Int32, const Reference< ::com::sun::star::io::XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setCharacterStream", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setObject(sal_Int32 parameterIndex, const Any& x) throw(SQLException, RuntimeException) -++{ -++ if(!::dbtools::implSetObject(this,parameterIndex,x)) -++ { -++ throw SQLException(); -++ } -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setObjectWithInfo(sal_Int32, const Any&, sal_Int32, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setObjectWithInfo", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setRef(sal_Int32, const Reference< XRef >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setRef", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setBlob(sal_Int32, const Reference< XBlob >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setBlob", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setClob(sal_Int32, const Reference< XClob >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setClob", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::setArray(sal_Int32, const Reference< XArray >&) throw(SQLException, RuntimeException) -++{ -++ -++ -++ -++::dbtools::throwFunctionNotSupportedException("setArray", NULL); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabPreparedStatement::clearParameters() throw(SQLException, RuntimeException) -++{ -++::dbtools::throwFunctionNotSupportedException("clearParameters", NULL); -++} -++// ------------------------------------------------------------------------- -++void KabPreparedStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) throw (Exception) -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ break; -++ case PROPERTY_ID_RESULTSETTYPE: -++ break; -++ case PROPERTY_ID_FETCHDIRECTION: -++ break; -++ case PROPERTY_ID_USEBOOKMARKS: -++ break; -++ default: -++ KabCommonStatement::setFastPropertyValue_NoBroadcast(nHandle,rValue); -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KPreparedStatement.hxx connectivity/source/drivers/tdeab/KPreparedStatement.hxx -+--- connectivity/source/drivers/tdeab/KPreparedStatement.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KPreparedStatement.hxx 2011-08-17 14:27:04.434246577 -0500 -+@@ -0,0 +1,123 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ -++#define _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ -++ -++#include "KStatement.hxx" -++#include "KResultSetMetaData.hxx" -++#include -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ -++ class OBoundParam; -++ typedef ::cppu::ImplInheritanceHelper4< KabCommonStatement, -++ ::com::sun::star::sdbc::XPreparedStatement, -++ ::com::sun::star::sdbc::XParameters, -++ ::com::sun::star::sdbc::XResultSetMetaDataSupplier, -++ ::com::sun::star::lang::XServiceInfo> KabPreparedStatement_BASE; -++ -++ class KabPreparedStatement : public KabPreparedStatement_BASE -++ { -++ protected: -++ ::rtl::OUString m_sSqlStatement; -++ ::rtl::Reference< KabResultSetMetaData > -++ m_xMetaData; -++ sal_Bool m_bPrepared; -++ mutable sal_Int32 m_nParameterIndex; -++ OValueRow m_aParameterRow; -++ -++ void checkAndResizeParameters(sal_Int32 nParams) throw(::com::sun::star::sdbc::SQLException); -++ void setKabFields() const throw(::com::sun::star::sdbc::SQLException); -++ -++ protected: -++ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::uno::Exception); -++ -++ virtual void resetParameters() const throw(::com::sun::star::sdbc::SQLException); -++ virtual void getNextParameter(::rtl::OUString &rParameter) const throw(::com::sun::star::sdbc::SQLException); -++ virtual ~KabPreparedStatement(); -++ -++ public: -++ DECLARE_SERVICE_INFO(); -++ KabPreparedStatement(KabConnection* _pConnection, const ::rtl::OUString& sql); -++ -++ // OComponentHelper -++ virtual void SAL_CALL disposing(); -++ -++ // XPreparedStatement -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL executeQuery( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL executeUpdate( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL execute( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XParameters -++ virtual void SAL_CALL setNull( sal_Int32 parameterIndex, sal_Int32 sqlType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& typeName ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setBoolean( sal_Int32 parameterIndex, sal_Bool x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setByte( sal_Int32 parameterIndex, sal_Int8 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setShort( sal_Int32 parameterIndex, sal_Int16 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setInt( sal_Int32 parameterIndex, sal_Int32 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setLong( sal_Int32 parameterIndex, sal_Int64 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setFloat( sal_Int32 parameterIndex, float x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setDouble( sal_Int32 parameterIndex, double x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setString( sal_Int32 parameterIndex, const ::rtl::OUString& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setBytes( sal_Int32 parameterIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setDate( sal_Int32 parameterIndex, const ::com::sun::star::util::Date& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setTime( sal_Int32 parameterIndex, const ::com::sun::star::util::Time& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setTimestamp( sal_Int32 parameterIndex, const ::com::sun::star::util::DateTime& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setBinaryStream( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setCharacterStream( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setObject( sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setObjectWithInfo( sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setRef( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setBlob( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setClob( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setArray( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL clearParameters( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XCloseable -++ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XResultSetMetaDataSupplier -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KResultSet.cxx connectivity/source/drivers/tdeab/KResultSet.cxx -+--- connectivity/source/drivers/tdeab/KResultSet.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KResultSet.cxx 2011-08-17 14:26:57.383703991 -0500 -+@@ -0,0 +1,991 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KResultSet.hxx" -++#include "KResultSetMetaData.hxx" -++#include "KConnection.hxx" -++#include "kcondition.hxx" -++#include "korder.hxx" -++#include "kfields.hxx" -++#include -++#include -++#include "TConnection.hxx" -++#include -++#include "resource/tdeab_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++using namespace connectivity::kab; -++using namespace cppu; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::sdbcx; -++using namespace com::sun::star::io; -++using namespace com::sun::star::util; -++ -++IMPLEMENT_SERVICE_INFO(KabResultSet, "com.sun.star.sdbc.drivers.KabResultSet", "com.sun.star.sdbc.ResultSet"); -++// ------------------------------------------------------------------------- -++KabResultSet::KabResultSet(KabCommonStatement* pStmt) -++ : KabResultSet_BASE(m_aMutex), -++ OPropertySetHelper(KabResultSet_BASE::rBHelper), -++ m_xStatement(pStmt), -++ m_xMetaData(NULL), -++ m_aKabAddressees(), -++ m_nRowPos(-1), -++ m_bWasNull(sal_True) -++{ -++} -++// ------------------------------------------------------------------------- -++KabResultSet::~KabResultSet() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::allKabAddressees() -++{ -++ KabConnection* pConnection = static_cast< KabConnection *>(m_xStatement->getConnection().get()); -++ KABC::AddressBook* pAddressBook = pConnection->getAddressBook(); -++ -++ m_aKabAddressees = pAddressBook->allAddressees(); -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::someKabAddressees(const KabCondition *pCondition) -++{ -++ KabConnection* pConnection = static_cast< KabConnection *>(m_xStatement->getConnection().get()); -++ KABC::AddressBook* pAddressBook = pConnection->getAddressBook(); -++ -++ KABC::AddressBook::Iterator iterator; -++ -++ for (iterator = pAddressBook->begin(); -++ iterator != pAddressBook->end(); -++ ++iterator) -++ { -++ if (pCondition->eval(*iterator)) -++ m_aKabAddressees.push_back(*iterator); -++ } -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::sortKabAddressees(const KabOrder *pOrder) -++{ -++ // We do not use class KAddresseeList, which has a sorting algorithm in it, because -++ // it uses templates. It would expand to more or less the same code as the one -++ // which follows, but it would need not be called in a much less convenient way. -++ -++ KABC::Addressee::List::Iterator -++ begin = m_aKabAddressees.begin(), -++ end = m_aKabAddressees.end(), -++ iterator; -++ -++ // Bubble sort. Feel free to implement a better algorithm. -++ while (begin != end) -++ { -++ end--; -++ for (iterator = begin; iterator != end; ++iterator) -++ { -++ if (pOrder->compare(*iterator, *end) > 0) -++ qSwap(*iterator, *end); -++ } -++ } -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::disposing() -++{ -++ OPropertySetHelper::disposing(); -++ -++ ::osl::MutexGuard aGuard(m_aMutex); -++ -++m_xStatement.clear(); -++m_xMetaData.clear(); -++} -++// ------------------------------------------------------------------------- -++Any SAL_CALL KabResultSet::queryInterface(const Type & rType) throw(RuntimeException) -++{ -++ Any aRet = OPropertySetHelper::queryInterface(rType); -++ if (!aRet.hasValue()) -++ aRet = KabResultSet_BASE::queryInterface(rType); -++ return aRet; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::acquire() throw() -++{ -++ KabResultSet_BASE::acquire(); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::release() throw() -++{ -++ KabResultSet_BASE::release(); -++} -++// ------------------------------------------------------------------------- -++Sequence< Type > SAL_CALL KabResultSet::getTypes() throw(RuntimeException) -++{ -++ OTypeCollection aTypes( -++ ::getCppuType( (const Reference< ::com::sun::star::beans::XMultiPropertySet >*) 0), -++ ::getCppuType( (const Reference< ::com::sun::star::beans::XFastPropertySet >*) 0), -++ ::getCppuType( (const Reference< ::com::sun::star::beans::XPropertySet >*) 0)); -++ -++ return comphelper::concatSequences(aTypes.getTypes(), KabResultSet_BASE::getTypes()); -++} -++// ------------------------------------------------------------------------- -++::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL KabResultSet::getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException) -++{ -++ return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::findColumn(const ::rtl::OUString& columnName) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // find the first column with the name columnName -++ Reference< XResultSetMetaData > xMeta = getMetaData(); -++ sal_Int32 nLen = xMeta->getColumnCount(); -++ -++ for (sal_Int32 i = 1; i <= nLen; ++i) -++ if (xMeta->isCaseSensitive(i) ? -++ columnName == xMeta->getColumnName(i) : -++ columnName.equalsIgnoreAsciiCase(xMeta->getColumnName(i))) -++ return i; -++ -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution( -++ STR_INVALID_COLUMNNAME, -++ "$columnname$",columnName -++ ) ); -++ ::dbtools::throwGenericSQLException(sError,NULL); -++ -++ // Unreachable: -++ OSL_ASSERT(false); -++ return 0; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSet::getString(sal_Int32 columnIndex) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ ::rtl::OUString aRet; -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ -++ if (m_nRowPos != -1 && m_nRowPos != nAddressees && m_xMetaData.is()) -++ { -++ sal_Int32 nFieldNumber = m_xMetaData->fieldAtColumn(columnIndex); -++ TQString aQtName; -++ -++ switch (nFieldNumber) -++ { -++ case KAB_FIELD_REVISION: -++// trigger an exception here -++m_bWasNull = true; -++return aRet; -++ default: -++ aQtName = aFields[nFieldNumber - KAB_DATA_FIELDS]->value(m_aKabAddressees[m_nRowPos]); -++ } -++// TDE address book currently does not use NULL values. -++// But it might do it someday -++ if (!aQtName.isNull()) -++ { -++ m_bWasNull = false; -++ aRet = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ return aRet; -++ } -++ } -++// Trigger an exception ? -++ m_bWasNull = true; -++ return aRet; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::getBoolean(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getBoolean", NULL); -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int8 SAL_CALL KabResultSet::getByte(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getByte", NULL); -++ -++ sal_Int8 nRet = 0; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++sal_Int16 SAL_CALL KabResultSet::getShort(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getShort", NULL); -++ -++ sal_Int16 nRet = 0; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::getInt(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getInt", NULL); -++ -++ sal_Int32 nRet = 0; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++sal_Int64 SAL_CALL KabResultSet::getLong(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getLong", NULL); -++ -++ return sal_Int64(); -++} -++// ------------------------------------------------------------------------- -++float SAL_CALL KabResultSet::getFloat(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getFloat", NULL); -++ -++ float nVal(0); -++ return nVal; -++} -++// ------------------------------------------------------------------------- -++double SAL_CALL KabResultSet::getDouble(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getDouble", NULL); -++ -++ double nRet = 0; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++Sequence< sal_Int8 > SAL_CALL KabResultSet::getBytes(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("", NULL); -++ -++ return Sequence< sal_Int8 >(); -++} -++// ------------------------------------------------------------------------- -++Date SAL_CALL KabResultSet::getDate(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getDate", NULL); -++ -++ Date aRet; -++ return aRet; -++} -++// ------------------------------------------------------------------------- -++Time SAL_CALL KabResultSet::getTime(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getTime", NULL); -++ -++ Time nRet; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++DateTime SAL_CALL KabResultSet::getTimestamp(sal_Int32 columnIndex) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ DateTime nRet; -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ -++ if (m_nRowPos != -1 && m_nRowPos != nAddressees && m_xMetaData.is()) -++ { -++ KabResultSetMetaData *pMeta = static_cast(m_xMetaData.get()); -++ sal_Int32 nFieldNumber = pMeta->fieldAtColumn(columnIndex); -++ -++ if (nFieldNumber == KAB_FIELD_REVISION) -++ { -++ TQDateTime nRevision(m_aKabAddressees[m_nRowPos].revision()); -++ -++ if (!nRevision.isNull()) -++ { -++ m_bWasNull = false; -++ nRet.Year = nRevision.date().year(); -++ nRet.Month = nRevision.date().month(); -++ nRet.Day = nRevision.date().day(); -++ nRet.Hours = nRevision.time().hour(); -++ nRet.Minutes = nRevision.time().minute(); -++ nRet.Seconds = nRevision.time().second(); -++ nRet.HundredthSeconds = nRevision.time().msec() / 10; -++ return nRet; -++ } -++ } -++ else { -++ ; -++ } -++// trigger an exception here -++ } -++// Trigger an exception ? -++ m_bWasNull = true; -++ return nRet; -++} -++// ------------------------------------------------------------------------- -++Reference< XInputStream > SAL_CALL KabResultSet::getBinaryStream(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getBinaryStream", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XInputStream > SAL_CALL KabResultSet::getCharacterStream(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getCharacterStream", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Any SAL_CALL KabResultSet::getObject(sal_Int32, const Reference< ::com::sun::star::container::XNameAccess >&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getObject", NULL); -++ -++ return Any(); -++} -++// ------------------------------------------------------------------------- -++Reference< XRef > SAL_CALL KabResultSet::getRef(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getRef", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XBlob > SAL_CALL KabResultSet::getBlob(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getBlob", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XClob > SAL_CALL KabResultSet::getClob(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getClob", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XArray > SAL_CALL KabResultSet::getArray(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++::dbtools::throwFunctionNotSupportedException("getArray", NULL); -++ -++ return NULL; -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSetMetaData > SAL_CALL KabResultSet::getMetaData() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ if (!m_xMetaData.is()) -++ m_xMetaData = new KabResultSetMetaData(m_xStatement->getOwnConnection()); -++ -++ Reference< XResultSetMetaData > xMetaData = m_xMetaData.get(); -++ return xMetaData; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::isBeforeFirst() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ if (m_nRowPos == -1) -++ return sal_True; -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::isAfterLast() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (m_nRowPos == nAddressees) -++ return sal_True; -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::isFirst() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ if (m_nRowPos == 0) -++ return sal_True; -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::isLast() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (m_nRowPos == nAddressees - 1) -++ return sal_True; -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::beforeFirst() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // move before the first row -++ m_nRowPos = -1; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::afterLast() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // move after the last row -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ m_nRowPos = nAddressees; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::close() throw(SQLException, RuntimeException) -++{ -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ } -++ dispose(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::first() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (nAddressees == 0) -++ return sal_False; -++ -++ m_nRowPos = 0; -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::last() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (nAddressees == 0) -++ return sal_False; -++ -++ m_nRowPos = nAddressees - 1; -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::getRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return m_nRowPos; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::absolute(sal_Int32 row) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ if (row <= -1 || -++ row >= nAddressees) -++ return sal_False; -++ -++ m_nRowPos = row; -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::relative(sal_Int32 row) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return absolute(m_nRowPos + row); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::next() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return absolute(m_nRowPos + 1); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::previous() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return absolute(m_nRowPos - 1); -++} -++// ------------------------------------------------------------------------- -++Reference< XInterface > SAL_CALL KabResultSet::getStatement() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ Reference< XStatement > xStatement = m_xStatement.get(); -++ return xStatement; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::rowDeleted() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::rowInserted() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::rowUpdated() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::wasNull() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return m_bWasNull; -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::cancel() throw(RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::clearWarnings() throw(SQLException, RuntimeException) -++{ -++} -++// ------------------------------------------------------------------------- -++Any SAL_CALL KabResultSet::getWarnings() throw(SQLException, RuntimeException) -++{ -++ return Any(); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::insertRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // you only have to implement this if you want to insert new rows -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // only when you allow updates -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::deleteRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::cancelRowUpdates() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::moveToInsertRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ // only when you allow inserts -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::moveToCurrentRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateNull(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateBoolean(sal_Int32, sal_Bool) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateByte(sal_Int32, sal_Int8) throw(SQLException, RuntimeException) -++{ -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateShort(sal_Int32, sal_Int16) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateInt(sal_Int32, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateLong(sal_Int32, sal_Int64) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ----------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateFloat(sal_Int32, float) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateDouble(sal_Int32, double) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateString(sal_Int32, const ::rtl::OUString&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateBytes(sal_Int32, const Sequence< sal_Int8 >&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateDate(sal_Int32, const Date&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateTime(sal_Int32, const Time&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateTimestamp(sal_Int32, const DateTime&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateBinaryStream(sal_Int32, const Reference< XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateCharacterStream(sal_Int32, const Reference< XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::refreshRow() throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateObject(sal_Int32, const Any&) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabResultSet::updateNumericObject(sal_Int32, const Any&, sal_Int32) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++} -++// ------------------------------------------------------------------------- -++// XRowLocate -++Any SAL_CALL KabResultSet::getBookmark() throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ -++ if (m_nRowPos != -1 && m_nRowPos != nAddressees) -++ { -++ TQString aQtName = m_aKabAddressees[m_nRowPos].uid(); -++ ::rtl::OUString sUniqueIdentifier = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ return makeAny(sUniqueIdentifier); -++ } -++ return Any(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::moveToBookmark(const Any& bookmark) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ ::rtl::OUString sBookmark = comphelper::getString(bookmark); -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ -++ for (sal_Int32 nRow = 0; nRow < nAddressees; nRow++) -++ { -++ TQString aQtName = m_aKabAddressees[nRow].uid(); -++ ::rtl::OUString sUniqueIdentifier = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -++ -++ if (sUniqueIdentifier == sBookmark) -++ { -++ m_nRowPos = nRow; -++ return sal_True; -++ } -++ } -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::moveRelativeToBookmark(const Any& bookmark, sal_Int32 rows) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ sal_Int32 nRowSave = m_nRowPos; -++ -++ if (moveToBookmark(bookmark)) -++ { -++ sal_Int32 nAddressees = m_aKabAddressees.size(); -++ -++ m_nRowPos += rows; -++ -++ if (-1 < m_nRowPos && m_nRowPos < nAddressees) -++ return sal_True; -++ } -++ -++ m_nRowPos = nRowSave; -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::compareBookmarks(const Any& firstItem, const Any& secondItem) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ ::rtl::OUString sFirst = comphelper::getString(firstItem); -++ ::rtl::OUString sSecond = comphelper::getString(secondItem); -++ -++ if (sFirst < sSecond) -++ return CompareBookmark::LESS; -++ if (sFirst > sSecond) -++ return CompareBookmark::GREATER; -++ return CompareBookmark::EQUAL; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSet::hasOrderedBookmarks() throw( SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSet::hashBookmark(const Any& bookmark) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ ::rtl::OUString sBookmark = comphelper::getString(bookmark); -++ -++ return sBookmark.hashCode(); -++} -++// ------------------------------------------------------------------------- -++// XDeleteRows -++Sequence< sal_Int32 > SAL_CALL KabResultSet::deleteRows(const Sequence< Any >&) throw( SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -++ -++ return Sequence< sal_Int32 >(); -++} -++// ------------------------------------------------------------------------- -++IPropertyArrayHelper* KabResultSet::createArrayHelper() const -++{ -++ Sequence< Property > aProps(6); -++ Property* pProperties = aProps.getArray(); -++ sal_Int32 nPos = 0; -++ DECL_PROP1IMPL(CURSORNAME, ::rtl::OUString) PropertyAttribute::READONLY); -++ DECL_PROP0(FETCHDIRECTION, sal_Int32); -++ DECL_PROP0(FETCHSIZE, sal_Int32); -++ DECL_BOOL_PROP1IMPL(ISBOOKMARKABLE) PropertyAttribute::READONLY); -++ DECL_PROP1IMPL(RESULTSETCONCURRENCY,sal_Int32) PropertyAttribute::READONLY); -++ DECL_PROP1IMPL(RESULTSETTYPE, sal_Int32) PropertyAttribute::READONLY); -++ -++ return new OPropertyArrayHelper(aProps); -++} -++// ------------------------------------------------------------------------- -++IPropertyArrayHelper & KabResultSet::getInfoHelper() -++{ -++ return *static_cast(this)->getArrayHelper(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool KabResultSet::convertFastPropertyValue( -++ Any &, -++ Any &, -++ sal_Int32 nHandle, -++ const Any& ) -++ throw (::com::sun::star::lang::IllegalArgumentException) -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_ISBOOKMARKABLE: -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ throw ::com::sun::star::lang::IllegalArgumentException(); -++ break; -++ case PROPERTY_ID_FETCHDIRECTION: -++ case PROPERTY_ID_FETCHSIZE: -++ default: -++ ; -++ } -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::setFastPropertyValue_NoBroadcast( -++ sal_Int32 nHandle, -++ const Any& ) -++ throw (Exception) -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_ISBOOKMARKABLE: -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ throw Exception(); -++ break; -++ case PROPERTY_ID_FETCHDIRECTION: -++ break; -++ case PROPERTY_ID_FETCHSIZE: -++ break; -++ default: -++ ; -++ } -++} -++// ------------------------------------------------------------------------- -++void KabResultSet::getFastPropertyValue( -++ Any& _rValue, -++ sal_Int32 nHandle) const -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_ISBOOKMARKABLE: -++ _rValue <<= (sal_Bool)sal_False; -++ break; -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ case PROPERTY_ID_FETCHDIRECTION: -++ case PROPERTY_ID_FETCHSIZE: -++ ; -++ } -++} -++// ----------------------------------------------------------------------------- -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KResultSet.hxx connectivity/source/drivers/tdeab/KResultSet.hxx -+--- connectivity/source/drivers/tdeab/KResultSet.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KResultSet.hxx 2011-08-17 14:26:47.312928966 -0500 -+@@ -0,0 +1,228 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_RESULTSET_HXX_ -++#define _CONNECTIVITY_KAB_RESULTSET_HXX_ -++ -++#include "KStatement.hxx" -++#include "KResultSetMetaData.hxx" -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ /* -++ ** KabResultSet -++ */ -++ typedef ::cppu::WeakComponentImplHelper12< ::com::sun::star::sdbc::XResultSet, -++ ::com::sun::star::sdbc::XRow, -++ ::com::sun::star::sdbc::XResultSetMetaDataSupplier, -++ ::com::sun::star::util::XCancellable, -++ ::com::sun::star::sdbc::XWarningsSupplier, -++ ::com::sun::star::sdbc::XResultSetUpdate, -++ ::com::sun::star::sdbc::XRowUpdate, -++ ::com::sun::star::sdbcx::XRowLocate, -++ ::com::sun::star::sdbcx::XDeleteRows, -++ ::com::sun::star::sdbc::XCloseable, -++ ::com::sun::star::sdbc::XColumnLocate, -++ ::com::sun::star::lang::XServiceInfo> KabResultSet_BASE; -++ -++ class KabResultSet : public comphelper::OBaseMutex, -++ public KabResultSet_BASE, -++ public ::cppu::OPropertySetHelper, -++ public comphelper::OPropertyArrayUsageHelper -++ { -++ protected: -++ ::rtl::Reference< KabCommonStatement > m_xStatement; // the statement that has created this result set -++ ::rtl::Reference< KabResultSetMetaData > m_xMetaData; // the description of the columns in this result set -++ ::KABC::Addressee::List m_aKabAddressees; // address book entries matching the query -++ sal_Int32 m_nRowPos; // the current row within the result set -++ sal_Bool m_bWasNull; // last entry retrieved from this result set was NULL -++ -++ // OPropertyArrayUsageHelper -++ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const; -++ -++ // OPropertySetHelper -++ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper(); -++ -++ virtual sal_Bool SAL_CALL convertFastPropertyValue( -++ ::com::sun::star::uno::Any & rConvertedValue, -++ ::com::sun::star::uno::Any & rOldValue, -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) -++ throw (::com::sun::star::lang::IllegalArgumentException); -++ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) -++ throw (::com::sun::star::uno::Exception); -++ virtual void SAL_CALL getFastPropertyValue( -++ ::com::sun::star::uno::Any& rValue, -++ sal_Int32 nHandle) const; -++ -++ // you can't delete objects of this type -++ virtual ~KabResultSet(); -++ -++ public: -++ DECLARE_SERVICE_INFO(); -++ -++ KabResultSet(KabCommonStatement *pStmt); -++ -++ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > operator *() -++ { -++ return ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >(*(KabResultSet_BASE*) this); -++ } -++ -++ void allKabAddressees(); -++ void someKabAddressees(const class KabCondition *pCondition); -++ void sortKabAddressees(const class KabOrder *pOrder); -++ -++ // ::cppu::OComponentHelper -++ virtual void SAL_CALL disposing(void); -++ -++ // XInterface -++ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL acquire() throw(); -++ virtual void SAL_CALL release() throw(); -++ -++ // XTypeProvider -++ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XPropertySet -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XResultSet -++ virtual sal_Bool SAL_CALL isBeforeFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isAfterLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL beforeFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL afterLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL first( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL last( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL next( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL previous( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL refreshRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL rowUpdated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL rowInserted( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL rowDeleted( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XRow -++ virtual sal_Bool SAL_CALL wasNull( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getString( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XResultSetMetaDataSupplier -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XCancellable -++ virtual void SAL_CALL cancel( ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XCloseable -++ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XWarningsSupplier -++ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XResultSetUpdate -++ virtual void SAL_CALL insertRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL deleteRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL cancelRowUpdates( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL moveToInsertRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL moveToCurrentRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ // XRowUpdate -++ virtual void SAL_CALL updateNull( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateBoolean( sal_Int32 columnIndex, sal_Bool x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateByte( sal_Int32 columnIndex, sal_Int8 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateShort( sal_Int32 columnIndex, sal_Int16 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateInt( sal_Int32 columnIndex, sal_Int32 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateLong( sal_Int32 columnIndex, sal_Int64 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateFloat( sal_Int32 columnIndex, float x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateDouble( sal_Int32 columnIndex, double x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateString( sal_Int32 columnIndex, const ::rtl::OUString& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateBytes( sal_Int32 columnIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateDate( sal_Int32 columnIndex, const ::com::sun::star::util::Date& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateTime( sal_Int32 columnIndex, const ::com::sun::star::util::Time& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateTimestamp( sal_Int32 columnIndex, const ::com::sun::star::util::DateTime& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateBinaryStream( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateCharacterStream( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Any& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL updateNumericObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Any& x, sal_Int32 scale ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XColumnLocate -++ virtual sal_Int32 SAL_CALL findColumn( const ::rtl::OUString& columnName ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XRowLocate -++ virtual ::com::sun::star::uno::Any SAL_CALL getBookmark( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL moveToBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL moveRelativeToBookmark( const ::com::sun::star::uno::Any& bookmark, sal_Int32 rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL compareBookmarks( const ::com::sun::star::uno::Any& firstItem, const ::com::sun::star::uno::Any& secondItem ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL hasOrderedBookmarks( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL hashBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XDeleteRows -++ virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL deleteRows( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_RESULTSET_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KResultSetMetaData.cxx connectivity/source/drivers/tdeab/KResultSetMetaData.cxx -+--- connectivity/source/drivers/tdeab/KResultSetMetaData.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KResultSetMetaData.cxx 2011-08-17 14:26:20.900896322 -0500 -+@@ -0,0 +1,191 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KResultSetMetaData.hxx" -++#include "kfields.hxx" -++#include "KDatabaseMetaData.hxx" -++#include -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::sdbc; -++ -++KabResultSetMetaData::KabResultSetMetaData(KabConnection* _pConnection) -++ : m_pConnection(_pConnection), -++ m_aKabFields() -++{ -++} -++// ------------------------------------------------------------------------- -++KabResultSetMetaData::~KabResultSetMetaData() -++{ -++} -++// ------------------------------------------------------------------------- -++void KabResultSetMetaData::setKabFields(const ::rtl::Reference &xColumns) throw(SQLException) -++{ -++ OSQLColumns::Vector::const_iterator aIter; -++ static const ::rtl::OUString aName(::rtl::OUString::createFromAscii("Name")); -++ -++ for (aIter = xColumns->get().begin(); aIter != xColumns->get().end(); ++aIter) -++ { -++ ::rtl::OUString aFieldName; -++ sal_uInt32 nFieldNumber; -++ -++ (*aIter)->getPropertyValue(aName) >>= aFieldName; -++ nFieldNumber = findKabField(aFieldName); -++ m_aKabFields.push_back(nFieldNumber); -++ } -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getColumnDisplaySize(sal_Int32 column) throw(SQLException, RuntimeException) -++{ -++ return m_aKabFields[column - 1] < KAB_DATA_FIELDS? 20: 50; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getColumnType(sal_Int32 column) throw(SQLException, RuntimeException) -++{ -++ return m_aKabFields[column - 1] == KAB_FIELD_REVISION? DataType::TIMESTAMP: DataType::CHAR; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getColumnCount() throw(SQLException, RuntimeException) -++{ -++ return m_aKabFields.size(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isCaseSensitive(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getSchemaName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnName(sal_Int32 column) throw(SQLException, RuntimeException) -++{ -++ sal_uInt32 nFieldNumber = m_aKabFields[column - 1]; -++ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -++ TQString aQtName; -++ -++ switch (nFieldNumber) -++ { -++ case KAB_FIELD_REVISION: -++ aQtName = KABC::Addressee::revisionLabel(); -++ break; -++ default: -++ aQtName = aFields[nFieldNumber - KAB_DATA_FIELDS]->label(); -++ } -++ ::rtl::OUString aName((const sal_Unicode *) aQtName.ucs2()); -++ -++ return aName; -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getTableName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return KabDatabaseMetaData::getAddressBookTableName(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getCatalogName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnTypeName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnLabel(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnServiceName(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return ::rtl::OUString(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isCurrency(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isAutoIncrement(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isSigned(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getPrecision(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return 0; -++} -++// ----------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::getScale(sal_Int32) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) -++{ -++ return 0; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabResultSetMetaData::isNullable(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return (sal_Int32) sal_True; -++// TDE address book currently does not use NULL values. -++// But it might do it someday -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isSearchable(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isReadOnly(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_True; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isDefinitelyWritable(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabResultSetMetaData::isWritable(sal_Int32) throw(SQLException, RuntimeException) -++{ -++ return sal_False; -++} -++// ------------------------------------------------------------------------- -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KResultSetMetaData.hxx connectivity/source/drivers/tdeab/KResultSetMetaData.hxx -+--- connectivity/source/drivers/tdeab/KResultSetMetaData.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KResultSetMetaData.hxx 2011-08-17 14:26:13.350315217 -0500 -+@@ -0,0 +1,95 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ -++#define _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ -++ -++#include "KConnection.hxx" -++#include -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ /* -++ ** KabResultSetMetaData -++ */ -++ typedef ::cppu::WeakImplHelper1< ::com::sun::star::sdbc::XResultSetMetaData> KabResultSetMetaData_BASE; -++ -++ class KabResultSetMetaData : public KabResultSetMetaData_BASE -++ { -++ KabConnection* m_pConnection; -++ ::std::vector m_aKabFields; // for each selected column, contains the number -++ // of the corresponding KAddressBook field -++ -++ protected: -++ virtual ~KabResultSetMetaData(); -++ -++ public: -++ KabResultSetMetaData(KabConnection* _pConnection); -++ -++ // avoid ambigous cast error from the compiler -++ inline operator ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > () throw() -++ { return this; } -++ -++ void setKabFields( -++ const ::rtl::Reference &xColumns) throw(::com::sun::star::sdbc::SQLException); -++ inline sal_uInt32 fieldAtColumn(sal_Int32 columnIndex) const -++ { return m_aKabFields[columnIndex - 1]; } -++ -++ virtual sal_Int32 SAL_CALL getColumnCount( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isAutoIncrement( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isCaseSensitive( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isSearchable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isCurrency( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL isNullable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isSigned( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getColumnDisplaySize( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getColumnLabel( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getColumnName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getSchemaName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getPrecision( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getScale( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getTableName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getCatalogName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getColumnType( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getColumnTypeName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isReadOnly( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isWritable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL isDefinitelyWritable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getColumnServiceName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KServices.cxx connectivity/source/drivers/tdeab/KServices.cxx -+--- connectivity/source/drivers/tdeab/KServices.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KServices.cxx 2011-08-17 14:26:08.609950397 -0500 -+@@ -0,0 +1,180 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KDriver.hxx" -++#include -++#include -++ -++using namespace connectivity::kab; -++using ::rtl::OUString; -++using ::com::sun::star::uno::Reference; -++using ::com::sun::star::uno::Sequence; -++using ::com::sun::star::registry::XRegistryKey; -++using ::com::sun::star::lang::XSingleServiceFactory; -++using ::com::sun::star::lang::XMultiServiceFactory; -++ -++typedef Reference< XSingleServiceFactory > (SAL_CALL *createFactoryFunc) -++ ( -++ const Reference< XMultiServiceFactory > & rServiceManager, -++ const OUString & rComponentName, -++ ::cppu::ComponentInstantiation pCreateFunction, -++ const Sequence< OUString > & rServiceNames, -++ rtl_ModuleCount* _pTemp -++ ); -++ -++//*************************************************************************************** -++// -++// The following C Api must be provided! -++// It consists in three functions that must be exported by the module -++// -++ -++//--------------------------------------------------------------------------------------- -++void REGISTER_PROVIDER( -++ const OUString& aServiceImplName, -++ const Sequence< OUString>& Services, -++ const Reference< ::com::sun::star::registry::XRegistryKey > & xKey) -++{ -++ OUString aMainKeyName; -++ aMainKeyName = OUString::createFromAscii("/"); -++ aMainKeyName += aServiceImplName; -++ aMainKeyName += OUString::createFromAscii("/UNO/SERVICES"); -++ -++ Reference< ::com::sun::star::registry::XRegistryKey > xNewKey( xKey->createKey(aMainKeyName) ); -++ OSL_ENSURE(xNewKey.is(), "KAB::component_writeInfo : could not create a registry key !"); -++ -++ for (sal_Int32 i=0; icreateKey(Services[i]); -++} -++ -++ -++//--------------------------------------------------------------------------------------- -++struct ProviderRequest -++{ -++ Reference< XSingleServiceFactory > xRet; -++ Reference< XMultiServiceFactory > const xServiceManager; -++ OUString const sImplementationName; -++ -++ ProviderRequest( -++ void* pServiceManager, -++ sal_Char const* pImplementationName -++ ) -++ : xServiceManager(reinterpret_cast(pServiceManager)) -++ , sImplementationName(OUString::createFromAscii(pImplementationName)) -++ { -++ } -++ -++ inline -++ sal_Bool CREATE_PROVIDER( -++ const OUString& Implname, -++ const Sequence< OUString > & Services, -++ ::cppu::ComponentInstantiation Factory, -++ createFactoryFunc creator -++ ) -++ { -++ if (!xRet.is() && (Implname == sImplementationName)) -++ try -++ { -++ xRet = creator( xServiceManager, sImplementationName,Factory, Services,0); -++ } -++ catch(...) -++ { -++ } -++ return xRet.is(); -++ } -++ -++ void* getProvider() const { return xRet.get(); } -++}; -++ -++//--------------------------------------------------------------------------------------- -++ -++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment( -++ const sal_Char **ppEnvTypeName, -++ uno_Environment ** -++ ) -++{ -++ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -++} -++ -++//--------------------------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( -++ void*, -++ void* pRegistryKey -++ ) -++{ -++ if (pRegistryKey) -++ try -++ { -++ Reference< ::com::sun::star::registry::XRegistryKey > xKey(reinterpret_cast< ::com::sun::star::registry::XRegistryKey*>(pRegistryKey)); -++ -++ REGISTER_PROVIDER( -++ KabDriver::getImplementationName_Static(), -++ KabDriver::getSupportedServiceNames_Static(), xKey); -++ -++ return sal_True; -++ } -++ catch (::com::sun::star::registry::InvalidRegistryException& ) -++ { -++ OSL_ENSURE(sal_False, "KAB::component_writeInfo : could not create a registry key ! ## InvalidRegistryException !"); -++ } -++ -++ return sal_False; -++} -++ -++//--------------------------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory( -++ const sal_Char* pImplementationName, -++ void* pServiceManager, -++ void*) -++{ -++ void* pRet = 0; -++ if (pServiceManager) -++ { -++ ProviderRequest aReq(pServiceManager,pImplementationName); -++ -++ aReq.CREATE_PROVIDER( -++ KabDriver::getImplementationName_Static(), -++ KabDriver::getSupportedServiceNames_Static(), -++ &KabDriver::Create, -++ ::cppu::createSingleFactory) -++ ; -++ -++ if (aReq.xRet.is()) -++ aReq.xRet->acquire(); -++ -++ pRet = aReq.getProvider(); -++ } -++ -++ return pRet; -++}; -++ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KStatement.cxx connectivity/source/drivers/tdeab/KStatement.cxx -+--- connectivity/source/drivers/tdeab/KStatement.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KStatement.cxx 2011-08-17 14:26:01.429397755 -0500 -+@@ -0,0 +1,588 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KStatement.hxx" -++#include "KConnection.hxx" -++#include "KDriver.hxx" -++#include "KResultSet.hxx" -++#include "KResultSetMetaData.hxx" -++#include "kcondition.hxx" -++#include "korder.hxx" -++#include "TConnection.hxx" -++#include -++#include "resource/tdeab_res.hrc" -++#include "resource/sharedresources.hxx" -++ -++ -++#if OSL_DEBUG_LEVEL > 0 -++# define OUtoCStr( x ) ( ::rtl::OUStringToOString ( (x), RTL_TEXTENCODING_ASCII_US).getStr()) -++#else /* OSL_DEBUG_LEVEL */ -++# define OUtoCStr( x ) ("dummy") -++#endif /* OSL_DEBUG_LEVEL */ -++ -++using namespace connectivity::kab; -++using namespace com::sun::star::uno; -++using namespace com::sun::star::lang; -++using namespace com::sun::star::beans; -++using namespace com::sun::star::sdbc; -++using namespace com::sun::star::sdbcx; -++using namespace com::sun::star::container; -++using namespace com::sun::star::io; -++using namespace com::sun::star::util; -++ -++namespace -++{ -++ void lcl_throwError(sal_uInt16 _nErrorId) -++ { -++ ::connectivity::SharedResources aResources; -++ const ::rtl::OUString sError( aResources.getResourceString(_nErrorId) ); -++ ::dbtools::throwGenericSQLException(sError,NULL); -++ } -++} -++ -++IMPLEMENT_SERVICE_INFO(KabStatement, "com.sun.star.sdbc.drivers.KabStatement", "com.sun.star.sdbc.Statement"); -++//------------------------------------------------------------------------------ -++KabCommonStatement::KabCommonStatement(KabConnection* _pConnection ) -++ : KabCommonStatement_BASE(m_aMutex), -++ OPropertySetHelper(KabCommonStatement_BASE::rBHelper), -++ m_aParser(_pConnection->getDriver()->getMSFactory()), -++ m_aSQLIterator(_pConnection, _pConnection->createCatalog()->getTables(), m_aParser, NULL ), -++ m_pParseTree(NULL), -++ m_pConnection(_pConnection), -++ rBHelper(KabCommonStatement_BASE::rBHelper) -++{ -++ m_pConnection->acquire(); -++} -++// ----------------------------------------------------------------------------- -++KabCommonStatement::~KabCommonStatement() -++{ -++} -++// ----------------------------------------------------------------------------- -++void KabCommonStatement::disposing() -++{ -++ KabCommonStatement_BASE::disposing(); -++} -++// ----------------------------------------------------------------------------- -++void KabCommonStatement::resetParameters() const throw(::com::sun::star::sdbc::SQLException) -++{ -++ lcl_throwError(STR_PARA_ONLY_PREPARED); -++} -++// ----------------------------------------------------------------------------- -++void KabCommonStatement::getNextParameter(::rtl::OUString &) const throw(::com::sun::star::sdbc::SQLException) -++{ -++ lcl_throwError(STR_PARA_ONLY_PREPARED); -++} -++// ----------------------------------------------------------------------------- -++KabCondition *KabCommonStatement::analyseWhereClause(const OSQLParseNode *pParseNode) const throw(SQLException) -++{ -++ if (pParseNode->count() == 3) -++ { -++ const OSQLParseNode *pLeft = pParseNode->getChild(0), -++ *pMiddle = pParseNode->getChild(1), -++ *pRight = pParseNode->getChild(2); -++ -++ // WHERE ( ... ) ? -++ if (SQL_ISPUNCTUATION(pLeft, "(") && SQL_ISPUNCTUATION(pRight, ")")) -++ { -++ return analyseWhereClause(pMiddle); -++ } -++ else if (SQL_ISRULE(pParseNode, comparison_predicate)) -++ { -++ if (pLeft->isToken() && pRight->isToken()) -++ { -++ switch (pMiddle->getNodeType()) -++ { -++ case SQL_NODE_EQUAL: -++ // WHERE 0 = 1 -++ return new KabConditionConstant(pLeft->getTokenValue() == pRight->getTokenValue()); -++ -++ case SQL_NODE_NOTEQUAL: -++ // WHERE 0 <> 1 -++ // (might not be correct SQL... don't care, handling anyway) -++ return new KabConditionConstant(pLeft->getTokenValue() != pRight->getTokenValue()); -++ -++ default: -++ break; -++ } -++ } -++ else if (SQL_ISRULE(pLeft, column_ref)) -++ { -++ ::rtl::OUString sColumnName, -++ sTableRange; -++ -++ m_aSQLIterator.getColumnRange(pLeft, sColumnName, sTableRange); -++ -++ if (pRight->isToken() || SQL_ISRULE(pRight, parameter)) -++ { -++ ::rtl::OUString sMatchString; -++ -++ if (pRight->isToken()) // WHERE Name = 'Doe' -++ sMatchString = pRight->getTokenValue(); -++ else if (SQL_ISRULE(pRight, parameter)) // WHERE Name = ? -++ getNextParameter(sMatchString); -++ -++ switch (pMiddle->getNodeType()) -++ { -++ case SQL_NODE_EQUAL: -++ // WHERE Name = 'Smith' -++ return new KabConditionEqual(sColumnName, sMatchString); -++ -++ case SQL_NODE_NOTEQUAL: -++ // WHERE Name <> 'Jones' -++ return new KabConditionDifferent(sColumnName, sMatchString); -++ -++ default: -++ break; -++ } -++ } -++ } -++ } -++ else if (SQL_ISRULE(pParseNode, search_condition)) -++ { -++ if (SQL_ISTOKEN(pMiddle, OR)) -++ { -++ // WHERE Name = 'Smith' OR Name = 'Jones' -++ return new KabConditionOr( -++ analyseWhereClause(pLeft), -++ analyseWhereClause(pRight)); -++ } -++ } -++ else if (SQL_ISRULE(pParseNode, boolean_term)) -++ { -++ if (SQL_ISTOKEN(pMiddle, AND)) -++ { -++ // WHERE Name = 'Smith' AND "Given Name" = 'Peter' -++ return new KabConditionAnd( -++ analyseWhereClause(pLeft), -++ analyseWhereClause(pRight)); -++ } -++ } -++ } -++ else if (SQL_ISRULE(pParseNode, test_for_null) || SQL_ISRULE(pParseNode, like_predicate)) -++ { -++ const OSQLParseNode *pLeft = pParseNode->getChild(0); -++ const OSQLParseNode* pPart2 = pParseNode->getChild(1); -++ const OSQLParseNode *pMiddleLeft = pPart2->getChild(0), -++ *pMiddleRight = pPart2->getChild(1), -++ *pRight = pPart2->getChild(2); -++ -++ if (SQL_ISRULE(pParseNode, test_for_null)) -++ { -++ if (SQL_ISRULE(pLeft, column_ref) && -++ SQL_ISTOKEN(pMiddleLeft, IS) && -++ SQL_ISTOKEN(pRight, NULL)) -++ { -++ ::rtl::OUString sColumnName, -++ sTableRange; -++ -++ m_aSQLIterator.getColumnRange(pLeft, sColumnName, sTableRange); -++ -++ if (SQL_ISTOKEN(pMiddleRight, NOT)) -++ { -++ // WHERE "Mobile Phone" IS NOT NULL -++ return new KabConditionNotNull(sColumnName); -++ } -++ else -++ { -++ // WHERE "Mobile Phone" IS NULL -++ return new KabConditionNull(sColumnName); -++ } -++ } -++ } -++ else if (SQL_ISRULE(pParseNode, like_predicate)) -++ { -++ if (SQL_ISRULE(pLeft, column_ref)) -++ { -++ ::rtl::OUString sColumnName, -++ sTableRange; -++ -++ m_aSQLIterator.getColumnRange(pLeft, sColumnName, sTableRange); -++ -++ if (pMiddleRight->isToken() || SQL_ISRULE(pMiddleRight, parameter)) -++ { -++ ::rtl::OUString sMatchString; -++ -++ if (pMiddleRight->isToken()) // WHERE Name LIKE 'Sm%' -++ sMatchString = pMiddleRight->getTokenValue(); -++ else if (SQL_ISRULE(pMiddleRight, parameter)) // WHERE Name LIKE ? -++ getNextParameter(sMatchString); -++ -++ return new KabConditionSimilar(sColumnName, sMatchString); -++ } -++ } -++ } -++ } -++ -++ lcl_throwError(STR_QUERY_TOO_COMPLEX); -++ -++ // Unreachable: -++ OSL_ASSERT(false); -++ return 0; -++} -++// ----------------------------------------------------------------------------- -++KabOrder *KabCommonStatement::analyseOrderByClause(const OSQLParseNode *pParseNode) const throw(SQLException) -++{ -++ if (SQL_ISRULE(pParseNode, ordering_spec_commalist)) -++ { -++ KabComplexOrder *list = new KabComplexOrder(); -++ sal_uInt32 n = pParseNode->count(); -++ -++ // Iterate through the ordering columns -++ for (sal_uInt32 i = 0; i < n; i++) -++ { -++ list->addOrder -++ (analyseOrderByClause(pParseNode->getChild(i))); -++ } -++ -++ return list; -++ } -++ else if (SQL_ISRULE(pParseNode, ordering_spec)) -++ { -++ if (pParseNode->count() == 2) -++ { -++ OSQLParseNode* pColumnRef = pParseNode->getChild(0); -++ OSQLParseNode* pAscendingDescending = pParseNode->getChild(1); -++ -++ if (SQL_ISRULE(pColumnRef, column_ref)) -++ { -++ if (pColumnRef->count() == 3) -++ pColumnRef = pColumnRef->getChild(2); -++ -++ if (pColumnRef->count() == 1) -++ { -++ ::rtl::OUString sColumnName = -++ pColumnRef->getChild(0)->getTokenValue(); -++ sal_Bool bAscending = -++ SQL_ISTOKEN(pAscendingDescending, DESC)? -++ sal_False: -++ sal_True; -++ -++ return new KabSimpleOrder(sColumnName, bAscending); -++ } -++ } -++ } -++ } -++ lcl_throwError(STR_QUERY_TOO_COMPLEX); -++ // Unreachable: -++ OSL_ASSERT(false); -++ return 0; -++} -++//------------------------------------------------------------------------------ -++sal_Bool KabCommonStatement::isTableKnown(KabResultSet *pResult) const -++{ -++ // can handle requests like SELECT * FROM addresses addresses -++ // but cannot handle requests like SELECT * FROM addresses persons -++ if (m_aSQLIterator.getTables().size() != 1) -++ return sal_False; -++ -++ if (m_aSQLIterator.getTables().begin()->first != pResult->getMetaData()->getTableName(0)) -++ return sal_False; -++ -++ return sal_True; -++} -++//------------------------------------------------------------------------------ -++void KabCommonStatement::setKabFields(KabResultSet *pResult) const throw(SQLException) -++{ -++ ::rtl::Reference xColumns; // selected columns -++ KabResultSetMetaData *pMeta; // meta information - holds the list of KAddressBook fields -++ -++ xColumns = m_aSQLIterator.getSelectColumns(); -++ if (!xColumns.is()) -++ { -++ lcl_throwError(STR_INVALID_COLUMN_SELECTION); -++ } -++ pMeta = static_cast(pResult->getMetaData().get()); -++ pMeta->setKabFields(xColumns); -++} -++// ------------------------------------------------------------------------- -++void KabCommonStatement::selectAddressees(KabResultSet *pResult) const throw(SQLException) -++{ -++ const OSQLParseNode *pParseNode; -++ KabCondition *pCondition; -++ -++ pParseNode = m_aSQLIterator.getWhereTree(); -++ if (pParseNode != NULL) -++ { -++ if (SQL_ISRULE(pParseNode, where_clause)) -++ { -++ resetParameters(); -++ pParseNode = pParseNode->getChild(1); -++ pCondition = analyseWhereClause(pParseNode); -++ if (pCondition->isAlwaysTrue()) -++ pResult->allKabAddressees(); -++ else if (!pCondition->isAlwaysFalse()) -++ pResult->someKabAddressees(pCondition); -++ delete pCondition; -++ return; -++ } -++ } -++ -++ // no WHERE clause: get all rows -++ pResult->allKabAddressees(); -++} -++// ------------------------------------------------------------------------- -++void KabCommonStatement::sortAddressees(KabResultSet *pResult) const throw(SQLException) -++{ -++ const OSQLParseNode *pParseNode; -++ KabOrder *pOrder; -++ -++ pParseNode = m_aSQLIterator.getOrderTree(); -++ if (pParseNode != NULL) -++ { -++ if (SQL_ISRULE(pParseNode, opt_order_by_clause)) -++ { -++ pParseNode = pParseNode->getChild(2); -++ pOrder = analyseOrderByClause(pParseNode); -++ pResult->sortKabAddressees(pOrder); -++ delete pOrder; -++ } -++ } -++} -++//----------------------------------------------------------------------------- -++Any SAL_CALL KabCommonStatement::queryInterface( const Type & rType ) throw(RuntimeException) -++{ -++ Any aRet = KabCommonStatement_BASE::queryInterface(rType); -++ if (!aRet.hasValue()) -++ aRet = OPropertySetHelper::queryInterface(rType); -++ return aRet; -++} -++// ------------------------------------------------------------------------- -++Sequence< Type > SAL_CALL KabCommonStatement::getTypes( ) throw(RuntimeException) -++{ -++ ::cppu::OTypeCollection aTypes( ::getCppuType( (const Reference< XMultiPropertySet > *)0 ), -++ ::getCppuType( (const Reference< XFastPropertySet > *)0 ), -++ ::getCppuType( (const Reference< XPropertySet > *)0 )); -++ -++ return comphelper::concatSequences(aTypes.getTypes(),KabCommonStatement_BASE::getTypes()); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::cancel( ) throw(RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ // cancel the current sql statement -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::close( ) throw(SQLException, RuntimeException) -++{ -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ } -++ dispose(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool SAL_CALL KabCommonStatement::execute( -++ const ::rtl::OUString& sql ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ Reference< XResultSet > xRS = executeQuery(sql); -++ -++ return xRS.is(); -++} -++// ------------------------------------------------------------------------- -++Reference< XResultSet > SAL_CALL KabCommonStatement::executeQuery( -++ const ::rtl::OUString& sql ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++OSL_TRACE("TDE Address book - SQL Request: %s", OUtoCStr(sql)); -++ -++ KabResultSet* pResult = new KabResultSet(this); -++ Reference< XResultSet > xRS = pResult; -++ ::rtl::OUString aErr; -++ -++ m_pParseTree = m_aParser.parseTree(aErr, sql); -++ if (m_pParseTree == NULL) -++ throw SQLException(aErr, *this, aErr, 0, Any()); -++ -++ m_aSQLIterator.setParseTree(m_pParseTree); -++ m_aSQLIterator.traverseAll(); -++ switch (m_aSQLIterator.getStatementType()) -++ { -++ case SQL_STATEMENT_SELECT: -++ if (isTableKnown(pResult)) // FROM which table ? -++ { -++ setKabFields(pResult); // SELECT which columns ? -++ selectAddressees(pResult); // WHERE which condition ? -++ sortAddressees(pResult); // ORDER BY which columns ? -++// To be continued: DISTINCT -++// etc... -++ } -++ break; -++ -++ default: -++// To be continued: UPDATE -++// DELETE -++// etc... -++ lcl_throwError(STR_QUERY_TOO_COMPLEX); -++ } -++ -++ return xRS; -++} -++// ------------------------------------------------------------------------- -++Reference< XConnection > SAL_CALL KabCommonStatement::getConnection( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ // just return our connection here -++ return (Reference< XConnection >) m_pConnection; -++} -++// ------------------------------------------------------------------------- -++sal_Int32 SAL_CALL KabCommonStatement::executeUpdate( const ::rtl::OUString& ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ // the return values gives information about how many rows are affected by executing the sql statement -++ return 0; -++} -++// ------------------------------------------------------------------------- -++Any SAL_CALL KabCommonStatement::getWarnings( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ return makeAny(m_aLastWarning); -++} -++// ------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::clearWarnings( ) throw(SQLException, RuntimeException) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -++ -++ m_aLastWarning = SQLWarning(); -++} -++// ------------------------------------------------------------------------- -++::cppu::IPropertyArrayHelper* KabCommonStatement::createArrayHelper( ) const -++{ -++ // this properties are defined by the service statement -++ // they must be in alphabetic order -++ Sequence< Property > aProps(10); -++ Property* pProperties = aProps.getArray(); -++ sal_Int32 nPos = 0; -++ DECL_PROP0(CURSORNAME, ::rtl::OUString); -++ DECL_BOOL_PROP0(ESCAPEPROCESSING); -++ DECL_PROP0(FETCHDIRECTION,sal_Int32); -++ DECL_PROP0(FETCHSIZE, sal_Int32); -++ DECL_PROP0(MAXFIELDSIZE,sal_Int32); -++ DECL_PROP0(MAXROWS, sal_Int32); -++ DECL_PROP0(QUERYTIMEOUT,sal_Int32); -++ DECL_PROP0(RESULTSETCONCURRENCY,sal_Int32); -++ DECL_PROP0(RESULTSETTYPE,sal_Int32); -++ DECL_BOOL_PROP0(USEBOOKMARKS); -++ -++ return new ::cppu::OPropertyArrayHelper(aProps); -++} -++// ------------------------------------------------------------------------- -++::cppu::IPropertyArrayHelper & KabCommonStatement::getInfoHelper() -++{ -++ return *const_cast(this)->getArrayHelper(); -++} -++// ------------------------------------------------------------------------- -++sal_Bool KabCommonStatement::convertFastPropertyValue( -++ Any &, -++ Any &, -++ sal_Int32, -++ const Any&) throw (::com::sun::star::lang::IllegalArgumentException) -++{ -++ sal_Bool bConverted = sal_False; -++ // here we have to try to convert -++ return bConverted; -++} -++// ------------------------------------------------------------------------- -++void KabCommonStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any&) throw (Exception) -++{ -++ // set the value to whatever is nescessary -++ switch (nHandle) -++ { -++ case PROPERTY_ID_QUERYTIMEOUT: -++ case PROPERTY_ID_MAXFIELDSIZE: -++ case PROPERTY_ID_MAXROWS: -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ case PROPERTY_ID_FETCHDIRECTION: -++ case PROPERTY_ID_FETCHSIZE: -++ case PROPERTY_ID_ESCAPEPROCESSING: -++ case PROPERTY_ID_USEBOOKMARKS: -++ default: -++ ; -++ } -++} -++// ------------------------------------------------------------------------- -++void KabCommonStatement::getFastPropertyValue(Any&,sal_Int32 nHandle) const -++{ -++ switch (nHandle) -++ { -++ case PROPERTY_ID_QUERYTIMEOUT: -++ case PROPERTY_ID_MAXFIELDSIZE: -++ case PROPERTY_ID_MAXROWS: -++ case PROPERTY_ID_CURSORNAME: -++ case PROPERTY_ID_RESULTSETCONCURRENCY: -++ case PROPERTY_ID_RESULTSETTYPE: -++ case PROPERTY_ID_FETCHDIRECTION: -++ case PROPERTY_ID_FETCHSIZE: -++ case PROPERTY_ID_ESCAPEPROCESSING: -++ case PROPERTY_ID_USEBOOKMARKS: -++ default: -++ ; -++ } -++} -++// ----------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::acquire() throw() -++{ -++ KabCommonStatement_BASE::acquire(); -++} -++// ----------------------------------------------------------------------------- -++void SAL_CALL KabCommonStatement::release() throw() -++{ -++ KabCommonStatement_BASE::release(); -++} -++// ----------------------------------------------------------------------------- -++Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL KabCommonStatement::getPropertySetInfo( ) throw(RuntimeException) -++{ -++ return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); -++} -++// ----------------------------------------------------------------------------- -++KabStatement::KabStatement(KabConnection* _pConnection) -++ : KabStatement_BASE(_pConnection) -++{ -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KStatement.hxx connectivity/source/drivers/tdeab/KStatement.hxx -+--- connectivity/source/drivers/tdeab/KStatement.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KStatement.hxx 2011-08-17 14:25:52.088678867 -0500 -+@@ -0,0 +1,174 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_STATEMENT_HXX_ -++#define _CONNECTIVITY_KAB_STATEMENT_HXX_ -++ -++#include "KConnection.hxx" -++#include -++#include "connectivity/sqliterator.hxx" -++#include "connectivity/sqlparse.hxx" -++#include -++#include -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ typedef ::cppu::WeakComponentImplHelper4< ::com::sun::star::sdbc::XStatement, -++ ::com::sun::star::sdbc::XWarningsSupplier, -++ ::com::sun::star::util::XCancellable, -++ ::com::sun::star::sdbc::XCloseable> KabCommonStatement_BASE; -++ -++ //************************************************************** -++ // Class KabCommonStatement -++ // is a base class for the normal statement and for the prepared statement -++ //************************************************************** -++ class KabCommonStatement : public comphelper::OBaseMutex, -++ public KabCommonStatement_BASE, -++ public ::cppu::OPropertySetHelper, -++ public comphelper::OPropertyArrayUsageHelper -++ -++ { -++ ::com::sun::star::sdbc::SQLWarning m_aLastWarning; -++ -++ protected: -++ ::std::list< ::rtl::OUString> m_aBatchList; -++ connectivity::OSQLParser m_aParser; -++ connectivity::OSQLParseTreeIterator m_aSQLIterator; -++ connectivity::OSQLParseNode* m_pParseTree; -++ KabConnection* m_pConnection; // The owning Connection object -++ -++ protected: -++ class KabCondition *analyseWhereClause( -++ const OSQLParseNode *pParseNode) const throw(::com::sun::star::sdbc::SQLException); -++ class KabOrder *analyseOrderByClause( -++ const OSQLParseNode *pParseNode) const throw(::com::sun::star::sdbc::SQLException); -++ sal_Bool isTableKnown(class KabResultSet *pResult) const; -++ void setKabFields(class KabResultSet *pResult) const throw(::com::sun::star::sdbc::SQLException); -++ void selectAddressees(KabResultSet *pResult) const throw(::com::sun::star::sdbc::SQLException); -++ void sortAddressees(KabResultSet *pResult) const throw(::com::sun::star::sdbc::SQLException); -++ -++ // OPropertyArrayUsageHelper -++ virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const; -++ -++ // OPropertySetHelper -++ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper(); -++ virtual sal_Bool SAL_CALL convertFastPropertyValue( -++ ::com::sun::star::uno::Any & rConvertedValue, -++ ::com::sun::star::uno::Any & rOldValue, -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::lang::IllegalArgumentException); -++ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( -++ sal_Int32 nHandle, -++ const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::uno::Exception); -++ virtual void SAL_CALL getFastPropertyValue( -++ ::com::sun::star::uno::Any& rValue, -++ sal_Int32 nHandle) const; -++ -++ virtual void resetParameters() const throw(::com::sun::star::sdbc::SQLException); -++ virtual void getNextParameter(::rtl::OUString &rParameter) const throw(::com::sun::star::sdbc::SQLException); -++ virtual ~KabCommonStatement(); -++ -++ public: -++ ::cppu::OBroadcastHelper& rBHelper; -++ -++ KabCommonStatement(KabConnection *_pConnection); -++ using KabCommonStatement_BASE::operator ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >; -++ -++ // OComponentHelper -++ virtual void SAL_CALL disposing(); -++ -++ // XInterface -++ virtual void SAL_CALL release() throw(); -++ virtual void SAL_CALL acquire() throw(); -++ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( -++ const ::com::sun::star::uno::Type & rType -++ ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XTypeProvider -++ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( -++ ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XPropertySet -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( -++ ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XStatement -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL executeQuery( -++ const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL executeUpdate( -++ const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL execute( -++ const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( -++ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XWarningsSupplier -++ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( -++ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL clearWarnings( -++ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // XCancellable -++ virtual void SAL_CALL cancel( -++ ) throw(::com::sun::star::uno::RuntimeException); -++ -++ // XCloseable -++ virtual void SAL_CALL close( -++ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -++ -++ // other methods -++ inline KabConnection* getOwnConnection() const { return m_pConnection; } -++ }; -++ -++ //************************************************************** -++ // Class KabStatement -++ //************************************************************** -++ typedef ::cppu::ImplInheritanceHelper1< -++ KabCommonStatement, ::com::sun::star::lang::XServiceInfo > KabStatement_BASE; -++ -++ class KabStatement : public KabStatement_BASE -++ { -++ protected: -++ virtual ~KabStatement() { } -++ -++ public: -++ KabStatement(KabConnection* _pConnection); -++ DECLARE_SERVICE_INFO(); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_STATEMENT_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KTable.cxx connectivity/source/drivers/tdeab/KTable.cxx -+--- connectivity/source/drivers/tdeab/KTable.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KTable.cxx 2011-08-17 14:25:28.396855433 -0500 -+@@ -0,0 +1,100 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KTable.hxx" -++#include "KTables.hxx" -++#include "KColumns.hxx" -++#include "KCatalog.hxx" -++ -++using namespace connectivity::kab; -++using namespace connectivity; -++using namespace ::comphelper; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::beans; -++using namespace ::com::sun::star::sdbcx; -++using namespace ::com::sun::star::sdbc; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++ -++// ------------------------------------------------------------------------- -++KabTable::KabTable( sdbcx::OCollection* _pTables, KabConnection* _pConnection) -++ : KabTable_TYPEDEF(_pTables, sal_True), -++ m_pConnection(_pConnection) -++{ -++ construct(); -++} -++// ------------------------------------------------------------------------- -++KabTable::KabTable( sdbcx::OCollection* _pTables, -++ KabConnection* _pConnection, -++ const ::rtl::OUString& _Name, -++ const ::rtl::OUString& _Type, -++ const ::rtl::OUString& _Description , -++ const ::rtl::OUString& _SchemaName, -++ const ::rtl::OUString& _CatalogName -++ ) : KabTable_TYPEDEF(_pTables,sal_True, -++ _Name, -++ _Type, -++ _Description, -++ _SchemaName, -++ _CatalogName), -++ m_pConnection(_pConnection) -++{ -++ construct(); -++} -++// ------------------------------------------------------------------------- -++void KabTable::refreshColumns() -++{ -++ TStringVector aVector; -++ -++ if (!isNew()) -++ { -++ Reference< XResultSet > xResult = m_pConnection->getMetaData()->getColumns( -++ Any(), -++ m_SchemaName, -++ m_Name, -++ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%"))); -++ -++ if (xResult.is()) -++ { -++ Reference< XRow > xRow(xResult, UNO_QUERY); -++ while (xResult->next()) -++ aVector.push_back(xRow->getString(4)); -++ } -++ } -++ -++ if (m_pColumns) -++ m_pColumns->reFill(aVector); -++ else -++ m_pColumns = new KabColumns(this,m_aMutex,aVector); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KTable.hxx connectivity/source/drivers/tdeab/KTable.hxx -+--- connectivity/source/drivers/tdeab/KTable.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KTable.hxx 2011-08-17 14:25:22.436396680 -0500 -+@@ -0,0 +1,72 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_TABLE_HXX_ -++#define _CONNECTIVITY_KAB_TABLE_HXX_ -++ -++#include "KConnection.hxx" -++#include "connectivity/sdbcx/VTable.hxx" -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ typedef connectivity::sdbcx::OTable KabTable_TYPEDEF; -++ -++ ::rtl::OUString getTypeString(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xColProp); -++ -++ class KabTable : public KabTable_TYPEDEF -++ { -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; -++ KabConnection* m_pConnection; -++ -++ public: -++ KabTable( sdbcx::OCollection* _pTables, KabConnection* _pConnection); -++ KabTable( sdbcx::OCollection* _pTables, -++ KabConnection* _pConnection, -++ const ::rtl::OUString& _Name, -++ const ::rtl::OUString& _Type, -++ const ::rtl::OUString& _Description = ::rtl::OUString(), -++ const ::rtl::OUString& _SchemaName = ::rtl::OUString(), -++ const ::rtl::OUString& _CatalogName = ::rtl::OUString() -++ ); -++ -++ KabConnection* getConnection() { return m_pConnection;} -++ -++ virtual void refreshColumns(); -++ -++ ::rtl::OUString getTableName() const { return m_Name; } -++ ::rtl::OUString getSchema() const { return m_SchemaName; } -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_TABLE_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KTables.cxx connectivity/source/drivers/tdeab/KTables.cxx -+--- connectivity/source/drivers/tdeab/KTables.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KTables.cxx 2011-08-17 14:25:16.415933304 -0500 -+@@ -0,0 +1,94 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++ -++#include "KTables.hxx" -++#include "KTable.hxx" -++#include "KCatalog.hxx" -++#include "KConnection.hxx" -++#include -++ -++using namespace connectivity::kab; -++using namespace connectivity; -++using namespace ::comphelper; -++using namespace ::cppu; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::beans; -++using namespace ::com::sun::star::sdbcx; -++using namespace ::com::sun::star::sdbc; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++ -++sdbcx::ObjectType KabTables::createObject(const ::rtl::OUString& _rName) -++{ -++ ::rtl::OUString aName,aSchema; -++ aSchema = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")); -++ aName = _rName; -++ -++ Sequence< ::rtl::OUString > aTypes(1); -++ aTypes[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")); -++ ::rtl::OUString sEmpty; -++ -++ Reference< XResultSet > xResult = m_xMetaData->getTables(Any(), aSchema, aName, aTypes); -++ -++ sdbcx::ObjectType xRet = NULL; -++ if (xResult.is()) -++ { -++ Reference< XRow > xRow(xResult, UNO_QUERY); -++ if (xResult->next()) // there can be only one table with this name -++ { -++ KabTable* pRet = new KabTable( -++ this, -++ static_cast(m_rParent).getConnection(), -++ aName, -++ xRow->getString(4), -++ xRow->getString(5), -++ sEmpty); -++ xRet = pRet; -++ } -++ } -++ ::comphelper::disposeComponent(xResult); -++ -++ return xRet; -++} -++// ------------------------------------------------------------------------- -++void KabTables::impl_refresh( ) throw(RuntimeException) -++{ -++ static_cast(m_rParent).refreshTables(); -++} -++// ------------------------------------------------------------------------- -++void KabTables::disposing(void) -++{ -++m_xMetaData.clear(); -++ OCollection::disposing(); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/KTables.hxx connectivity/source/drivers/tdeab/KTables.hxx -+--- connectivity/source/drivers/tdeab/KTables.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/KTables.hxx 2011-08-17 14:24:50.933971998 -0500 -+@@ -0,0 +1,65 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _CONNECTIVITY_KAB_TABLES_HXX_ -++#define _CONNECTIVITY_KAB_TABLES_HXX_ -++ -++#include "connectivity/sdbcx/VCollection.hxx" -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ class KabTables : public sdbcx::OCollection -++ { -++ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; -++ -++ protected: -++ virtual sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); -++ virtual void impl_refresh() throw(::com::sun::star::uno::RuntimeException); -++ -++ public: -++ KabTables( -++ const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rMetaData, -++ ::cppu::OWeakObject& _rParent, -++ ::osl::Mutex& _rMutex, -++ const TStringVector &_rVector) -++ : sdbcx::OCollection(_rParent,sal_True,_rMutex,_rVector), -++ m_xMetaData(_rMetaData) -++ { } -++ -++ virtual void SAL_CALL disposing(void); -++ }; -++ } -++} -++ -++#endif // _CONNECTIVITY_KAB_TABLES_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/makefile.mk connectivity/source/drivers/tdeab/makefile.mk -+--- connectivity/source/drivers/tdeab/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/makefile.mk 2011-08-17 14:24:11.740955243 -0500 -+@@ -0,0 +1,139 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/..$/.. -++PRJINC=..$/.. -++PRJNAME=connectivity -++TARGET=tdeab -++TARGET2=$(TARGET)drv -++ -++ENABLE_EXCEPTIONS=TRUE -++VISIBILITY_HIDDEN=TRUE -++ -++# --- Settings ---------------------------------- -++ -++.INCLUDE : $(PRJ)$/makefile.pmk -++.INCLUDE : $(PRJ)$/version.mk -++ -++.IF "$(GUI)" == "UNX" -++.IF "$(ENABLE_TDEAB)" == "TRUE" -++ -++CFLAGS+=$(TDE_CFLAGS) -++ -++.IF "$(TDE_ROOT)"!="" -++EXTRALIBPATHS+=-L$(TDE_ROOT)$/lib -++.ENDIF -++ -++# === TDEAB base library ========================== -++ -++# --- Files ------------------------------------- -++ -++SLOFILES= \ -++ $(SLO)$/KDriver.obj \ -++ $(SLO)$/KServices.obj -++ -++DEPOBJFILES= \ -++ $(SLO2FILES) -++ -++# --- Library ----------------------------------- -++ -++SHL1VERSIONMAP=$(SOLARENV)/src/component.map -++ -++SHL1TARGET= $(TARGET)$(TDEAB_MAJOR) -++SHL1OBJS=$(SLOFILES) -++SHL1STDLIBS=\ -++ $(CPPULIB) \ -++ $(CPPUHELPERLIB) \ -++ $(DBTOOLSLIB) \ -++ $(SALLIB) \ -++ $(SALHELPERLIB) -++ -++SHL1DEPN= -++SHL1IMPLIB= i$(TARGET) -++ -++SHL1DEF= $(MISC)$/$(SHL1TARGET).def -++ -++DEF1NAME= $(SHL1TARGET) -++ -++# === TDEAB impl library ========================== -++ -++# --- Files ------------------------------------- -++ -++SLO2FILES=\ -++ $(SLO)$/KColumns.obj \ -++ $(SLO)$/KTable.obj \ -++ $(SLO)$/KTables.obj \ -++ $(SLO)$/KCatalog.obj \ -++ $(SLO)$/KResultSet.obj \ -++ $(SLO)$/KStatement.obj \ -++ $(SLO)$/KPreparedStatement.obj \ -++ $(SLO)$/KDatabaseMetaData.obj \ -++ $(SLO)$/KConnection.obj \ -++ $(SLO)$/KResultSetMetaData.obj \ -++ $(SLO)$/kcondition.obj \ -++ $(SLO)$/korder.obj \ -++ $(SLO)$/kfields.obj \ -++ $(SLO)$/TDEInit.obj -++ -++TDEAB_LIB=$(TDE_LIBS) -lkabc -++ -++# --- Library ----------------------------------- -++ -++SHL2VERSIONMAP=$(TARGET2).map -++ -++SHL2TARGET= $(TARGET2)$(TDEAB_MAJOR) -++SHL2OBJS=$(SLO2FILES) -++SHL2LINKFLAGS+=$(TDEAB_LIB) -++SHL2STDLIBS=\ -++ $(CPPULIB) \ -++ $(CPPUHELPERLIB) \ -++ $(SALLIB) \ -++ $(SALHELPERLIB) \ -++ $(DBTOOLSLIB) \ -++ $(COMPHELPERLIB) -++ -++SHL2DEPN= -++SHL2IMPLIB= i$(TARGET2) -++ -++SHL2DEF= $(MISC)$/$(SHL2TARGET).def -++ -++DEF2NAME= $(SHL2TARGET) -++ -++# --- Targets ----------------------------------- -++.ELSE # "$(ENABLE_TDEAB)" == "TRUE" -++dummy: -++ @echo TDE Addressbook disabled - nothing to build -++.ENDIF -++ -++.ELSE # "$(GUI)" == "UNX" -++dummy: -++ @echo "Nothing to build for GUI $(GUI)" -++.ENDIF -++ -++.INCLUDE : $(PRJ)$/target.pmk -++ -+diff -urN connectivity/source/drivers/tdeab/tdeabdrv.map connectivity/source/drivers/tdeab/tdeabdrv.map -+--- connectivity/source/drivers/tdeab/tdeabdrv.map 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/tdeabdrv.map 2011-08-17 14:25:00.664720964 -0500 -+@@ -0,0 +1,9 @@ -++UDK_3_0_0 { -++ global: -++ createKabConnection; -++ initKApplication; -++ shutdownKApplication; -++ matchTDEVersion; -++ local: -++ *; -++}; -+diff -urN connectivity/source/drivers/tdeab/tdeab.xcu connectivity/source/drivers/tdeab/tdeab.xcu -+--- connectivity/source/drivers/tdeab/tdeab.xcu 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/tdeab.xcu 2011-08-17 14:29:58.077608095 -0500 -+@@ -0,0 +1,47 @@ -++ -++ -++ -++ -++ -++ -++ com.sun.star.comp.sdbc.kab.Driver -++ -++ -++ TDE Address Book -++ -++ -++ -++ -++ true -++ -++ -++ -++ -++ -++ -+diff -urN connectivity/source/drivers/tdeab/tdeab.xml connectivity/source/drivers/tdeab/tdeab.xml -+--- connectivity/source/drivers/tdeab/tdeab.xml 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/tdeab.xml 2011-08-17 14:29:44.246543923 -0500 -+@@ -0,0 +1,77 @@ -++ -++ -++ -++ kab1 -++ -++ Eric Bischoff -++ com.sun.star.comp.sdbc.kab.Driver -++ This library implements the database driver for TDE address book formats. -++ com.sun.star.loader.SharedLibrary -++ c++ -++ -++ com.sun.star.sdbc.Driver -++ ... -++ -++ cppuhelper -++ cppu -++ sal -++ -++ cppuhelper -++ cppu1 -++ sal1 -++ -++ com.sun.star.registry.XRegistryKey -++ com.sun.star.util.XCancellable -++ com.sun.star.util.XNumberFormatter -++ com.sun.star.uno.TypeClass -++ com.sun.star.uno.XWeak -++ com.sun.star.uno.XAggregation -++ com.sun.star.uno.XComponentContext -++ com.sun.star.beans.PropertyAttribute -++ com.sun.star.beans.XPropertyState -++ com.sun.star.beans.XPropertySet -++ com.sun.star.beans.PropertyValue -++ com.sun.star.beans.XMultiPropertySet -++ com.sun.star.beans.XFastPropertySet -++ com.sun.star.lang.XSingleServiceFactory -++ com.sun.star.lang.XTypeProvider -++ com.sun.star.lang.XSingleComponentFactory -++ com.sun.star.lang.EventObject -++ com.sun.star.lang.XComponent -++ com.sun.star.lang.IllegalArgumentException -++ com.sun.star.lang.DisposedException -++ com.sun.star.lang.XMultiServiceFactory -++ com.sun.star.lang.XServiceInfo -++ com.sun.star.lang.XUnoTunnel -++ com.sun.star.java.XJavaThreadRegister_11 -++ com.sun.star.java.XJavaVM -++ com.sun.star.sdbc.FetchDirection -++ com.sun.star.sdbc.XConnection -++ com.sun.star.sdbc.XStatement -++ com.sun.star.sdbc.XResultSet -++ com.sun.star.sdbc.XResultSetMetaDataSupplier -++ com.sun.star.sdbc.XColumnLocate -++ com.sun.star.sdbc.XResultSetUpdate -++ com.sun.star.sdbc.XWarningsSupplier -++ com.sun.star.sdbc.XRowUpdate -++ com.sun.star.sdbc.XMultipleResults -++ com.sun.star.sdbc.XBatchExecution -++ com.sun.star.sdbc.XPreparedBatchExecution -++ com.sun.star.sdbc.XParameters -++ com.sun.star.sdbc.XOutParameters -++ com.sun.star.sdbc.DriverPropertyInfo -++ com.sun.star.sdbc.SQLWarning -++ com.sun.star.sdbc.XRow -++ com.sun.star.sdbc.ColumnSearch -++ com.sun.star.sdbc.ColumnValue -++ com.sun.star.sdbc.DataType -++ com.sun.star.sdbc.XDriver -++ com.sun.star.sdbc.TransactionIsolation -++ com.sun.star.sdbc.ResultSetType -++ com.sun.star.sdbc.ResultSetConcurrency -++ com.sun.star.sdbcx.XRowLocate -++ com.sun.star.sdbcx.XDeleteRows -++ com.sun.star.sdbcx.CompareBookmark -++ com.sun.star.sdb.XColumnUpdate -++ com.sun.star.sdb.XColumn -++ -+diff -urN connectivity/source/drivers/tdeab/TDEInit.cxx connectivity/source/drivers/tdeab/TDEInit.cxx -+--- connectivity/source/drivers/tdeab/TDEInit.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/TDEInit.cxx 2011-08-17 14:28:21.700192397 -0500 -+@@ -0,0 +1,158 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_connectivity.hxx" -++#include "TDEInit.h" -++#include -++#include -++#include -++ -++namespace connectivity -++{ -++ namespace kab -++ { -++ // =============================================================== -++ // = TDEInit -++ // =============================================================== -++ class TDEInit -++ { -++ private: -++ /// TDE application if we own it -++ static KApplication* s_pKApplication; -++ static bool s_bDidInsertCatalogue; -++ -++ public: -++ static void Init(); -++ static void Shutdown(); -++ }; -++ -++ // --------------------------------------------------------------- -++ KApplication* TDEInit::s_pKApplication = NULL; -++ bool TDEInit::s_bDidInsertCatalogue = false; -++ -++ // --------------------------------------------------------------- -++ void TDEInit::Init() -++ { -++ // TODO: All this is not thread-safe -++ -++ // we create a TDE application only if it is not already done -++ if (KApplication::kApplication() == NULL) -++ { -++ OSL_ENSURE(s_pKApplication == NULL, "TDEInit::Init: inconsistency in the application pointers!"); -++ -++ char *kabargs[1] = {(char*)"libkab1"}; -++ KCmdLineArgs::init(1, kabargs, "KAddressBook", *kabargs, "Address Book driver", KAB_DRIVER_VERSION); -++ -++ s_pKApplication = new KApplication(false, false); -++ } -++ -++ // set language -++ rtl_Locale *pProcessLocale; -++ osl_getProcessLocale(&pProcessLocale); -++ // sal_Unicode and TQChar are (currently) both 16 bits characters -++ TQString aLanguage( -++ (const TQChar *) pProcessLocale->Language->buffer, -++ (int) pProcessLocale->Language->length); -++ KGlobal::locale()->setLanguage(aLanguage); -++ -++ // load TDE address book's localized messages -++ KGlobal::locale()->insertCatalogue("kaddressbook"); -++ s_bDidInsertCatalogue = true; -++ } -++ -++ // --------------------------------------------------------------- -++ void TDEInit::Shutdown() -++ { -++ if ( s_bDidInsertCatalogue ) -++ // this guard is necessary, since TDE 3.3 seems to crash if we remove a catalogue -++ // which we did not previously insert -++ KGlobal::locale()->removeCatalogue("kaddressbook"); -++ -++ if ( s_pKApplication != NULL ) -++ { -++ delete s_pKApplication; -++ s_pKApplication = NULL; -++ } -++ } -++ } -++} -++ -++// ======================================================================= -++namespace -++{ -++ double normalizeVersion( unsigned int major, unsigned int minor ) -++ { -++ return major + 1.0 * minor / 1000; -++ } -++} -++ -++// ----------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL initKApplication() -++{ -++ ::connectivity::kab::TDEInit::Init(); -++} -++ -++// ----------------------------------------------------------------------- -++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL shutdownKApplication() -++{ -++ ::connectivity::kab::TDEInit::Shutdown(); -++} -++// ----------------------------------------------------------------------- -++/** checks whether the TDE version on the system we're running at is supported -++ by the driver -++ -++ Has to be called before any other code from this library, in particular, -++ it has to be called before initKApplication() -++ -++ If this function returns 0, then no other code from this library -++ has to be called, else the results are unpredictable. -++ -++ @return -++
  • 0 if the TDE version is supportednon
  • -++
  • a negative value if the version is too old
  • -++
  • a positive value if the version is too new to know whether it works with this driver
  • -++
-++ -++ #i60062# / 2006-01-06 / frank.schoenheit@sun.com -++*/ -++extern "C" SAL_DLLPUBLIC_EXPORT int SAL_CALL matchTDEVersion() -++{ -++ double nMinVersion = normalizeVersion( MIN_TDE_VERSION_MAJOR, MIN_TDE_VERSION_MINOR ); -++ double nCurVersion = normalizeVersion( ::KDE::versionMajor(), ::KDE::versionMinor() ); -++ double nMaxVersion = normalizeVersion( MAX_TDE_VERSION_MAJOR, MAX_TDE_VERSION_MINOR ); -++ -++ if ( nCurVersion < nMinVersion ) -++ return -1; -++ if ( nCurVersion > nMaxVersion ) -++ return 1; -++ -++ return 0; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/drivers/tdeab/TDEInit.h connectivity/source/drivers/tdeab/TDEInit.h -+--- connectivity/source/drivers/tdeab/TDEInit.h 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/drivers/tdeab/TDEInit.h 2011-08-17 14:28:13.719578294 -0500 -+@@ -0,0 +1,47 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef CONNECTIVITY_KAB_TDEINIT_H -++#define CONNECTIVITY_KAB_TDEINIT_H -++ -++// the address book driver's version -++#define KAB_DRIVER_VERSION "0.2" -++#define KAB_DRIVER_VERSION_MAJOR 0 -++#define KAB_DRIVER_VERSION_MINOR 2 -++ -++// the minimum TDE version which is required at runtime -++#define MIN_TDE_VERSION_MAJOR 3 -++#define MIN_TDE_VERSION_MINOR 2 -++ -++#define MAX_TDE_VERSION_MAJOR 3 -++#define MAX_TDE_VERSION_MINOR 6 -++ -++ -++#endif // CONNECTIVITY_KAB_TDEINIT_H -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/makefile.mk fpicker/source/unx/tde/makefile.mk -+--- fpicker/source/unx/tde/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/makefile.mk 2011-08-17 14:08:00.486552458 -0500 -+@@ -0,0 +1,75 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2010 Novell, Inc. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/..$/.. -++ -++PRJNAME=fpicker -++TARGET=tdefilepicker -++LIBTARGET=NO -++ENABLE_EXCEPTIONS=TRUE -++#COMP1TYPELIST=$(TARGET) -++#COMPRDB=$(SOLARBINDIR)$/types.rdb -++ -++# --- Settings ----------------------------------------------------- -++ -++.INCLUDE : settings.mk -++ -++# ------------------------------------------------------------------ -++ -++.IF "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -++ -++dummy: -++ @echo "Nothing to build. GUIBASE == $(GUIBASE), ENABLE_TDE is not set" -++ -++.ELSE # we build for TDE -++ -++CFLAGS+= $(TDE_CFLAGS) -++ -++# --- Files -------------------------------------------------------- -++ -++SLOFILES =\ -++ $(SLO)$/tdecommandthread.obj \ -++ $(SLO)$/tdefilepicker.obj \ -++ $(SLO)$/tdefilepicker.moc.obj \ -++ $(SLO)$/tdefpmain.obj \ -++ $(SLO)$/tdemodalityfilter.obj -++ -++APP1TARGET=$(TARGET) -++APP1OBJS=$(SLOFILES) -++APP1RPATH=BRAND -++APP1LINKFLAGS=$(TDE_LIBS) -lkio -lX11 -++APP1STDLIBS=$(SALLIB) -++ -++.ENDIF # "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -++ -++# --- Targets ------------------------------------------------------ -++ -++.INCLUDE : target.mk -++ -++$(MISC)$/tdefilepicker.moc.cxx : tdefilepicker.hxx -++ $(MOC) $< -o $@ -+diff -urN fpicker/source/unx/tde/tdecommandthread.cxx fpicker/source/unx/tde/tdecommandthread.cxx -+--- fpicker/source/unx/tde/tdecommandthread.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdecommandthread.cxx 2011-08-17 14:05:05.983187311 -0500 -+@@ -0,0 +1,178 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++ -++#include -++ -++#include -++ -++#include -++ -++////////////////////////////////////////////////////////////////////////// -++// CommandEvent -++////////////////////////////////////////////////////////////////////////// -++ -++TDECommandEvent::TDECommandEvent( const TQString &qCommand, TQStringList *pStringList ) -++ : TQCustomEvent( TypeId, pStringList ), -++ m_eCommand( Unknown ) -++{ -++ struct { -++ const char *pName; -++ CommandEventType eType; -++ } *pIdx, pMapping[] = -++ { -++ { "appendControl", AppendControl }, -++ { "enableControl", EnableControl }, -++ { "getValue", GetValue }, -++ { "setValue", SetValue }, -++ { "appendFilter", AppendFilter }, -++ { "appendFilterGroup", AppendFilterGroup }, -++ { "getCurrentFilter", GetCurrentFilter }, -++ { "setCurrentFilter", SetCurrentFilter }, -++ { "getDirectory", GetDirectory }, -++ { "setDirectory", SetDirectory }, -++ { "getFiles", GetFiles }, -++ { "setTitle", SetTitle }, -++ { "setType", SetType }, -++ { "setDefaultName", SetDefaultName }, -++ { "setMultiSelection", SetMultiSelection }, -++ { "exec", Exec }, -++ { 0, Unknown } -++ }; -++ -++ for ( pIdx = pMapping; pIdx->pName && qCommand != pIdx->pName; ++pIdx ) -++ ; -++ -++ m_eCommand = pIdx->eType; -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// CommandThread -++////////////////////////////////////////////////////////////////////////// -++ -++TDECommandThread::TDECommandThread( TQWidget *pObject ) -++ : m_pObject( pObject ) -++{ -++} -++ -++TDECommandThread::~TDECommandThread() -++{ -++} -++ -++void TDECommandThread::run() -++{ -++ TQTextIStream qStream( stdin ); -++ qStream.setEncoding( TQTextStream::UnicodeUTF8 ); -++ -++ TQString qLine; -++ bool bQuit = false; -++ while ( !bQuit && !qStream.atEnd() ) -++ { -++ qLine = qStream.readLine(); -++ handleCommand( qLine, bQuit ); -++ } -++} -++ -++void TDECommandThread::handleCommand( const TQString &rString, bool &bQuit ) -++{ -++ TQMutexLocker qMutexLocker( &m_aMutex ); -++ -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "tdefilepicker received: " << rString.latin1() << ::std::endl; -++#endif -++ -++ bQuit = false; -++ TQStringList *pTokens = tokenize( rString ); -++ -++ if ( !pTokens ) -++ return; -++ if ( pTokens->empty() ) -++ { -++ delete pTokens, pTokens = NULL; -++ return; -++ } -++ -++ TQString qCommand = pTokens->front(); -++ pTokens->pop_front(); -++ -++ if ( qCommand == "exit" ) -++ { -++ bQuit = true; -++ kapp->exit(); -++ kapp->wakeUpGuiThread(); -++ } -++ else -++ kapp->postEvent( m_pObject, new TDECommandEvent( qCommand, pTokens ) ); -++} -++ -++TQStringList* TDECommandThread::tokenize( const TQString &rString ) -++{ -++ // Commands look like: -++ // command arg1 arg2 arg3 ... -++ // Args may be enclosed in '"', if they contain spaces. -++ -++ TQStringList *pList = new TQStringList(); -++ -++ TQString qBuffer; -++ qBuffer.reserve( 1024 ); -++ -++ const TQChar *pUnicode = rString.unicode(); -++ const TQChar *pEnd = pUnicode + rString.length(); -++ bool bQuoted = false; -++ -++ for ( ; pUnicode != pEnd; ++pUnicode ) -++ { -++ if ( *pUnicode == '\\' ) -++ { -++ ++pUnicode; -++ if ( pUnicode != pEnd ) -++ { -++ if ( *pUnicode == 'n' ) -++ qBuffer.append( '\n' ); -++ else -++ qBuffer.append( *pUnicode ); -++ } -++ } -++ else if ( *pUnicode == '"' ) -++ bQuoted = !bQuoted; -++ else if ( *pUnicode == ' ' && !bQuoted ) -++ { -++ pList->push_back( qBuffer ); -++ qBuffer.setLength( 0 ); -++ } -++ else -++ qBuffer.append( *pUnicode ); -++ } -++ pList->push_back( qBuffer ); -++ -++ return pList; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdecommandthread.hxx fpicker/source/unx/tde/tdecommandthread.hxx -+--- fpicker/source/unx/tde/tdecommandthread.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdecommandthread.hxx 2011-08-17 14:04:34.560780976 -0500 -+@@ -0,0 +1,98 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _TDECOMMANDTHREAD_HXX_ -++#define _TDECOMMANDTHREAD_HXX_ -++ -++#include -++#include -++#include -++ -++class TDECommandEvent : public TQCustomEvent -++{ -++public: -++ enum CommandEventType { -++ Unknown = 0, -++ -++ AppendControl, -++ EnableControl, -++ GetValue, -++ SetValue, -++ -++ AppendFilter, -++ AppendFilterGroup, -++ UpdateFilters, -++ GetCurrentFilter, -++ SetCurrentFilter, -++ -++ GetDirectory, -++ SetDirectory, -++ -++ GetFiles, -++ -++ SetTitle, -++ SetType, -++ SetDefaultName, -++ SetMultiSelection, -++ -++ Exec -++ }; -++ static const TQEvent::Type TypeId = (TQEvent::Type) ( (int) TQEvent::User + 42 /*random magic value*/ ); -++ -++protected: -++ CommandEventType m_eCommand; -++ -++public: -++ TDECommandEvent( const TQString &qCommand, TQStringList *pStringList ); -++ -++ CommandEventType command() const { return m_eCommand; } -++ TQStringList* stringList() { return static_cast< TQStringList* >( data() ); } -++}; -++ -++class TDECommandThread : public TQThread -++{ -++protected: -++ TQObject *m_pObject; -++ -++ TQMutex m_aMutex; -++ -++public: -++ TDECommandThread( TQWidget *pObject ); -++ virtual ~TDECommandThread(); -++ -++ virtual void run(); -++ -++protected: -++ void handleCommand( const TQString &rString, bool &bQuit ); -++ TQStringList* tokenize( const TQString &rString ); -++}; -++ -++#endif // _TDECOMMANDTHREAD_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdefilepicker.cxx fpicker/source/unx/tde/tdefilepicker.cxx -+--- fpicker/source/unx/tde/tdefilepicker.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdefilepicker.cxx 2011-08-17 14:05:04.073041030 -0500 -+@@ -0,0 +1,733 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++#ifdef TQT_NO_EMIT -++#define emit -++#endif -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++#include -++#include -++ -++////////////////////////////////////////////////////////////////////////// -++// TDEFileDialog -++////////////////////////////////////////////////////////////////////////// -++ -++TDEFileDialog::TDEFileDialog( const TQString &startDir, const TQString &filter, -++ TQWidget *parent, const char *name ) -++ : KFileDialog( startDir, filter, parent, name, true, m_pCustomWidget = new TQVBox() ), -++ m_pCombosAndButtons( new TQHBox( m_pCustomWidget ) ), -++ m_pLabels( new TQVBox( m_pCombosAndButtons ) ), -++ m_pComboBoxes( new TQVBox( m_pCombosAndButtons ) ), -++ m_pPushButtons( new TQVBox( m_pCombosAndButtons ) ), -++ m_pCheckBoxes( new TQGrid( 2, m_pCustomWidget ) ), -++ m_bIsSave( false ), -++ m_bIsExecuting( false ), -++ m_bCanNotifySelection( true ) -++{ -++ connect( this, SIGNAL( fileHighlighted( const TQString & ) ), -++ this, SLOT( fileHighlightedCommand( const TQString & ) ) ); -++ -++ connect( this, SIGNAL( selectionChanged() ), -++ this, SLOT( selectionChangedCommand() ) ); -++ -++ m_pCustomWidget->setSpacing( KDialog::spacingHint() ); -++ m_pCombosAndButtons->setSpacing( KDialog::spacingHint() ); -++ -++ updateCustomWidgetLayout(); -++} -++ -++TDEFileDialog::~TDEFileDialog() -++{ -++} -++ -++void TDEFileDialog::resizeEvent( TQResizeEvent *pEvent ) -++{ -++ KFileDialog::resizeEvent( pEvent ); -++ -++ updateCustomWidgetLayout(); -++} -++ -++void TDEFileDialog::showEvent( TQShowEvent *pEvent ) -++{ -++ KFileDialog::showEvent( pEvent ); -++ -++ updateCustomWidgetLayout(); -++} -++ -++void TDEFileDialog::updateCustomWidgetLayout() -++{ -++ TQPoint qReferencePoint = filterWidget->mapTo( this, TQPoint( 0, 0 ) ); -++ TQPoint qCustomPoint = m_pCustomWidget->mapTo( this, TQPoint( 0, 0 ) ); -++ -++ int nLeft = qReferencePoint.x() - qCustomPoint.x(); -++ int nRight = m_pCustomWidget->width() - filterWidget->width() - nLeft; -++ -++ nLeft -= KDialog::spacingHint(); -++ nRight -= KDialog::spacingHint(); -++ m_pLabels->setFixedWidth( ( nLeft > 0 )? nLeft: 80 ); -++ // FIXME The following call sets the width of m_pPushButtons all right, -++ // but it also increases the width of m_pComboBoxes rapidly. Can we do -++ // anything about it? -++ m_pPushButtons->setFixedWidth( ( nRight > 0 )? nRight: 100 ); -++} -++ -++void TDEFileDialog::customEvent( TQCustomEvent *pEvent ) -++{ -++ if ( pEvent && pEvent->type() == TDECommandEvent::TypeId ) -++ { -++ TDECommandEvent *pCommandEvent = static_cast< TDECommandEvent* >( pEvent ); -++ TQStringList *pStringList = pCommandEvent->stringList(); -++ -++ int nListSize = -1; -++ if ( pStringList ) -++ nListSize = pStringList->size(); -++ -++ switch ( pCommandEvent->command() ) -++ { -++ case TDECommandEvent::AppendControl: -++ if ( nListSize >= 3 ) -++ { -++ appendControl( (*pStringList)[0], (*pStringList)[1], (*pStringList)[2] ); -++ } -++ break; -++ case TDECommandEvent::EnableControl: -++ if ( nListSize >= 2 ) -++ { -++ enableControl( (*pStringList)[0], (*pStringList)[1] ); -++ } -++ break; -++ case TDECommandEvent::GetValue: -++ if ( nListSize >= 2 ) -++ { -++ getValue( (*pStringList)[0], (*pStringList)[1] ); -++ } -++ break; -++ case TDECommandEvent::SetValue: -++ if ( nListSize >= 2 ) -++ { -++ TQStringList qStringList = (*pStringList); -++ qStringList.pop_front(); -++ qStringList.pop_front(); -++ -++ setValue( (*pStringList)[0], (*pStringList)[1], qStringList ); -++ } -++ break; -++ case TDECommandEvent::AppendFilter: -++ if ( nListSize >= 2 ) -++ { -++ appendFilter( (*pStringList)[0], (*pStringList)[1] ); -++ -++ // update the filters widget -++ setFilter( filters() ); -++ } -++ break; -++ case TDECommandEvent::AppendFilterGroup: -++ if ( nListSize >= 1 ) -++ { -++ TQStringList::const_iterator it = pStringList->begin(); -++ ++it; // We ignore the filter group name -++ -++ while ( it != pStringList->end() ) -++ { -++ TQString qTitle = *it; -++ ++it; -++ if ( it != pStringList->end() ) -++ { -++ appendFilter( qTitle, (*it) ); -++ ++it; -++ } -++ } -++ -++ // update the filters widget -++ setFilter( filters() ); -++ } -++ break; -++ case TDECommandEvent::GetCurrentFilter: -++ { -++ TQString qCurrentFilter = filterWidget->currentText(); -++ sendCommand( "currentFilter " + escapeString( qCurrentFilter ) ); -++ } -++ break; -++ case TDECommandEvent::SetCurrentFilter: -++ if ( nListSize >= 1 ) -++ { -++ static_cast< TDEFileFilterComboHack* >( filterWidget )->setCurrentFilter( pStringList->front() ); -++ } -++ break; -++ case TDECommandEvent::GetDirectory: -++ { -++ TQString qDirectory = baseURL().url(); -++ if ( qDirectory.startsWith( "file:/" ) && qDirectory.mid( 6, 1 ) != "/" ) -++ qDirectory.replace( "file:/", "file:///" ); -++ sendCommand( "currentDirectory " + escapeString( qDirectory ) ); -++ } -++ break; -++ case TDECommandEvent::SetDirectory: -++ if ( nListSize >= 1 ) -++ { -++ setURL( pStringList->front() ); -++ } -++ break; -++ case TDECommandEvent::GetFiles: -++ { -++ TQString qString; -++ qString.reserve( 1024 ); -++ -++ qString.append( "files" ); -++ -++ if ( result() == TQDialog::Accepted ) -++ { -++ KURL::List qList( selectedURLs() ); -++ for ( KURL::List::const_iterator it = qList.begin(); it != qList.end(); ++it ) -++ appendURL( qString, (*it) ); -++ } -++ else -++ { -++ // we have to return the selected files anyway -++ const KFileItemList *pItems = ops->selectedItems(); -++ for ( KFileItemListIterator it( *pItems ); it.current(); ++it ) -++ appendURL( qString, (*it)->url() ); -++ } -++ -++ sendCommand( qString ); -++ setCanNotifySelection( true ); -++ } -++ break; -++ case TDECommandEvent::SetTitle: -++ if ( nListSize >= 1 ) -++ { -++ setCaption( pStringList->front() ); -++ } -++ break; -++ case TDECommandEvent::SetType: -++ if ( nListSize >= 1 ) -++ { -++ TQString qType( pStringList->front() ); -++ if ( qType == "open" ) -++ { -++ setIsSave( false ); -++ setCaption( i18n( "Open" ) ); -++ } -++ else if ( qType == "save" ) -++ { -++ setIsSave( true ); -++ setCaption( i18n( "Save As" ) ); -++ } -++ } -++ break; -++ case TDECommandEvent::SetDefaultName: -++ if ( nListSize >= 1 ) -++ { -++ setKeepLocation( true ); -++ setSelection( pStringList->front() ); -++ } -++ break; -++ case TDECommandEvent::SetMultiSelection: -++ if ( nListSize >= 1 ) -++ { -++ if ( pStringList->front() == "true" ) -++ setMode( KFile::Files ); -++ else -++ setMode( KFile::File ); -++ } -++ break; -++ case TDECommandEvent::Exec: -++ { -++ filterWidget->setEditable( false ); -++ setIsExecuting( true ); -++ bool bCanExit = false; -++ do { -++ setCanNotifySelection( true ); -++ exec(); -++ -++ KURL qLocalSelectedURL = mostLocalURL( selectedURL() ); -++ TQString qProtocol( qLocalSelectedURL.protocol() ); -++ -++ if ( isSave() && result() == TQDialog::Accepted ) -++ { -++ if ( qProtocol == "file" ) -++ { -++ TQString qFileName( addExtension( qLocalSelectedURL.path() ) ); -++ bCanExit = -++ !QFile::exists( qFileName ) || -++ ( KMessageBox::warningYesNo( 0, -++ i18n( "A file named \"%1\" already exists. " -++ "Are you sure you want to overwrite it?" ).arg( qFileName ), -++ i18n( "Overwrite File?" ), -++ i18n( "Overwrite" ), KStdGuiItem::cancel() ) == KMessageBox::Yes ); -++ } -++ else if ( !isSupportedProtocol( qProtocol ) ) -++ { -++ KMessageBox::sorry( 0, -++ i18n( "Saving using protocol \"%1\" is not supported." ).arg( qProtocol ) ); -++ bCanExit = false; -++ } -++ else -++ bCanExit = true; -++ } -++ else if ( !isSave() && result() == TQDialog::Accepted && !isSupportedProtocol( qProtocol ) ) -++ { -++ KMessageBox::information( 0, -++ i18n( "Protocol \"%1\" is supported only partially. " -++ "Local copy of the file will be created." ).arg( qProtocol ) ); -++ bCanExit = true; -++ } -++ else -++ bCanExit = true; -++ } while ( !bCanExit ); -++ setIsExecuting( false ); -++ -++ if ( result() == TQDialog::Accepted ) -++ sendCommand( "accept" ); -++ else -++ sendCommand( "reject" ); -++ } -++ break; -++ default: -++ break; -++ } -++ -++ // FIXME Some cleanup of pEvent? delete something, etc.? -++ } -++} -++ -++void TDEFileDialog::appendControl( const TQString &rId, const TQString &rType, const TQString &rTitle ) -++{ -++ TQString qLabel( rTitle ); -++ qLabel.replace( '~', '&' ); -++ -++ if ( rType == "checkbox" ) -++ { -++ TQCheckBox *pCheckBox = new TQCheckBox( qLabel, m_pCheckBoxes, rId.utf8() ); -++ -++ pCheckBox->setEnabled( true ); -++ pCheckBox->setChecked( false ); -++ } -++ else if ( rType == "listbox" ) -++ { -++ TQLabel *pComboLabel = new TQLabel( qLabel, m_pLabels ); -++ TQComboBox *pComboBox = new TQComboBox( m_pComboBoxes, rId.utf8() ); -++ -++ pComboLabel->setBuddy( pComboBox ); -++ pComboBox->setEnabled( true ); -++ } -++ else if ( rType == "pushbutton" ) -++ { -++ TQPushButton *pPushButton = new TQPushButton( qLabel, m_pPushButtons, rId.utf8() ); -++ pPushButton->setEnabled( true ); -++ } -++} -++ -++TQWidget* TDEFileDialog::findControl( const TQString &rId ) const -++{ -++ TQObjectList *pList = m_pCustomWidget->queryList(); -++ TQCString qName( rId.utf8() ); -++ TQObjectList::const_iterator it = pList->begin(); -++ -++ for ( ; it != pList->end() && qName != (*it)->name(); ++it ) -++ ; -++ -++ TQWidget *pWidget = NULL; -++ if ( it != pList->end() ) -++ pWidget = static_cast< TQWidget* >( *it ); -++ -++ delete pList; -++ -++ return pWidget; -++} -++ -++void TDEFileDialog::enableControl( const TQString &rId, const TQString &rValue ) -++{ -++ TQWidget *pWidget = findControl( rId ); -++ -++ if ( pWidget ) -++ pWidget->setEnabled( rValue.lower() == "true" ); -++} -++ -++void TDEFileDialog::getValue( const TQString &rId, const TQString &rAction ) -++{ -++ TQWidget *pWidget = findControl( rId ); -++ TQString qString; -++ qString.reserve( 1024 ); -++ qString.append( "value" ); -++ -++ if ( pWidget ) -++ { -++ TQCString qClassName = pWidget->className(); -++ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING ) -++ { -++ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget ); -++ -++ if ( pCheckBox->isChecked() ) -++ qString.append( " bool true" ); -++ else -++ qString.append( " bool false" ); -++ } -++ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING ) -++ { -++ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget ); -++ if ( rAction == "getItems" ) -++ { -++ qString.append( " stringList" ); -++ for ( int nIdx = 0; nIdx < pComboBox->count(); ++nIdx ) -++ { -++ qString.append( ' ' ); -++ appendEscaped( qString, pComboBox->text( nIdx ) ); -++ } -++ } -++ else if ( rAction == "getSelectedItem" ) -++ { -++ qString.append( " string " ); -++ appendEscaped( qString, pComboBox->currentText() ); -++ } -++ else if ( rAction == "getSelectedItemIndex" ) -++ { -++ qString.append( " int " ); -++ qString.append( TQString().setNum( pComboBox->currentItem() ) ); -++ } -++ // TODO getHelpURL -++ } -++ // TODO push button -++ } -++ -++ sendCommand( qString ); -++} -++ -++void TDEFileDialog::setValue( const TQString &rId, const TQString &rAction, const TQStringList &rValue ) -++{ -++ TQWidget *pWidget = findControl( rId ); -++ -++ if ( pWidget ) -++ { -++ TQCString qClassName = pWidget->className(); -++ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING ) -++ { -++ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget ); -++ -++ bool bValue = ( !rValue.isEmpty() ) && ( rValue.front().lower() == "true" ); -++ pCheckBox->setChecked( bValue ); -++ } -++ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING ) -++ { -++ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget ); -++ if ( rAction == "addItem" ) -++ { -++ if ( !rValue.isEmpty() ) -++ pComboBox->insertItem( rValue.front() ); -++ } -++ else if ( rAction == "addItems" ) -++ { -++ pComboBox->insertStringList( rValue ); -++ } -++ else if ( rAction == "deleteItem" ) -++ { -++ if ( !rValue.isEmpty() ) -++ pComboBox->removeItem( rValue.front().toInt() ); -++ } -++ else if ( rAction == "deleteItems" ) -++ { -++ pComboBox->clear(); -++ } -++ else if ( rAction == "setSelectedItem" ) -++ { -++ if ( !rValue.isEmpty() ) -++ pComboBox->setCurrentItem( rValue.front().toInt() ); -++ } -++ // FIXME setHelpURL is ignored -++ } -++ // TODO push button -++ } -++} -++ -++void TDEFileDialog::appendFilter( const TQString &rTitle, const TQString &rFilter ) -++{ -++ // Filters are separated by ';' -++ TQString qFilter( rFilter ); -++ qFilter.replace( TQChar( ';' ), TQChar( ' ' ) ).replace( "*.*", "*" ); -++ -++ // Workaround for too wide (*.bmp;...) entry -++ TQString qTitle( rTitle ); -++ qTitle.replace( TQRegExp( "^<([^>]*)> \\(.*" ), "<\\1>" ); -++ -++ m_aFilters.push_back( qMakePair( qTitle, qFilter ) ); -++} -++ -++TQString TDEFileDialog::filters() const -++{ -++ TQString qString, qTmp; -++ bool bFirstFilter = true; -++ -++ for ( FilterList::const_iterator it = m_aFilters.begin(); it != m_aFilters.end(); ++it ) -++ { -++ if ( bFirstFilter ) -++ bFirstFilter = false; -++ else -++ qString.append( '\n' ); -++ -++ qString.append( (*it).second ); -++ qString.append( '|' ); -++ -++ qTmp = (*it).first; -++ qString.append( qTmp.replace( '/', "\\/" ) ); -++ } -++ -++ return qString; -++} -++ -++TQString TDEFileDialog::addExtension( const TQString &rFileName ) const -++{ -++ if ( !isSave() ) -++ return rFileName; -++ -++ TQString qExtension; -++ -++ TQWidget *pExtensionWidget = findControl( "100" ); // CHECKBOX_AUTOEXTENSION -++ TQCheckBox *pExtensionCB = pExtensionWidget? static_cast< TQCheckBox* >( pExtensionWidget->qt_cast( TQCHECKBOX_OBJECT_NAME_STRING ) ): NULL; -++ if ( pExtensionCB && pExtensionCB->isChecked() ) -++ { -++ // FIXME: qFilter can be a MIME; we ignore it now... -++ TQStringList qFilterList = TQStringList::split( " ", currentFilter() ); -++ for ( TQStringList::const_iterator it = qFilterList.begin(); -++ qExtension.isEmpty() && it != qFilterList.end(); -++ ++it ) -++ { -++ int nUnwanted = (*it).findRev( '*' ); -++ if ( nUnwanted < 0 ) -++ nUnwanted = (*it).findRev( '?' ); -++ else -++ nUnwanted = ::std::max( nUnwanted, (*it).find( '?', nUnwanted ) ); -++ -++ int nIdx = (*it).find( '.', ::std::max( nUnwanted, 0 ) ); -++ if ( nIdx >= 0 ) -++ qExtension = (*it).mid( nIdx ).lower(); -++ } -++ } -++ -++ if ( qExtension.isEmpty() || qExtension == "." || rFileName.endsWith( qExtension ) ) -++ return rFileName; -++ else -++ return rFileName + qExtension; -++} -++ -++bool TDEFileDialog::isSupportedProtocol( const TQString &rProtocol ) const -++{ -++ // TODO Get this information directly from OOo -++ const char * pOOoProtocols[] = { "", "smb", "ftp", "http", "file", "mailto", -++ "vnd.sun.star.webdav", "news", "private", "vnd.sun.star.help", -++ "https", "slot", "macro", "javascript", "imap", "pop3", "data", -++ "cid", "out", "vnd.sun.star.wfs", "vnd.sun.star.hier", "vim", -++ ".uno", ".component", "vnd.sun.star.pkg", "ldap", "db", -++ "vnd.sun.star.cmd", "vnd.sun.star.script", "vnd.sun.star.odma", -++ "telnet", -++ NULL }; -++ -++ for ( const char **pIndex = pOOoProtocols; *pIndex != NULL; ++pIndex ) -++ { -++ if ( rProtocol == *pIndex ) -++ return true; -++ } -++ -++ // TODO gnome-vfs bits here -++ -++ return false; -++} -++ -++KURL TDEFileDialog::mostLocalURL( const KURL &rURL ) const -++{ -++#if KDE_IS_VERSION(3,5,0) -++ KURL qMostLocalURL( KIO::NetAccess::mostLocalURL( rURL, const_cast( this ) ) ); -++ if ( qMostLocalURL.isLocalFile() ) -++ return qMostLocalURL; -++ else -++ { -++ // Terrible hack to get even non-existing media:// files right -++ qMostLocalURL.cd( ".." ); -++ KURL qMostLocalPath( KIO::NetAccess::mostLocalURL( qMostLocalURL, const_cast( this ) ) ); -++ if ( qMostLocalPath.isLocalFile() ) -++ { -++ qMostLocalPath.addPath( rURL.fileName() ); -++ return qMostLocalPath; -++ } -++ } -++#endif -++ -++ return rURL; -++} -++ -++TQString TDEFileDialog::localCopy( const TQString &rFileName ) const -++{ -++ // 106 == MIB enum for UTF-8 -++ KURL qLocalURL = mostLocalURL( KURL( rFileName, 106 ) ); -++ if ( qLocalURL.isLocalFile() ) -++ return qLocalURL.url(); -++ -++ int nExtensionPos = rFileName.findRev( '/' ); -++ if ( nExtensionPos >= 0 ) -++ nExtensionPos = rFileName.find( '.', nExtensionPos ); -++ else -++ nExtensionPos = rFileName.find( '.' ); -++ -++ KTempFile qTempFile( TQString::null, ( nExtensionPos < 0 )? TQString(): rFileName.mid( nExtensionPos ) ); -++ KURL qDestURL; -++ qDestURL.setPath( qTempFile.name() ); -++ -++ if ( !KIO::NetAccess::file_copy( rFileName, qDestURL, 0600, true, false, NULL ) ) -++ { -++ KMessageBox::error( 0, KIO::NetAccess::lastErrorString() ); -++ return TQString::null; -++ } -++ -++ return qDestURL.url(); -++} -++ -++void TDEFileDialog::fileHighlightedCommand( const TQString & ) -++{ -++ if ( canNotifySelection() ) -++ { -++ sendCommand( "fileSelectionChanged" ); -++ setCanNotifySelection( false ); -++ } -++} -++ -++void TDEFileDialog::selectionChangedCommand() -++{ -++ if ( canNotifySelection() ) -++ { -++ sendCommand( "fileSelectionChanged" ); -++ setCanNotifySelection( false ); -++ } -++} -++ -++void TDEFileDialog::sendCommand( const TQString &rCommand ) -++{ -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "tdefilepicker sent: " << rCommand.latin1() << ::std::endl; -++#endif -++ -++ //m_aOutputStream << rCommand << endl; -++ ::std::cout << rCommand.utf8() << ::std::endl; -++} -++ -++void TDEFileDialog::appendURL( TQString &rBuffer, const KURL &rURL ) -++{ -++ // From Martin Kretzschmar: -++ // file:///path/to/test%E0.odt is not a valid URL from OOo's point of -++ // view. (?Most modern parts of?) OOo assume(s) that the URL contains only -++ // ASCII characters (which test%E0.odt does) and is UTF-8 after unescaping -++ // (which file:///path/test%E0.odt is not). -++ // Cf. the comment in sal/inc/osl/file.h. -++ // 106 == MIB enum for UTF-8 -++ TQString qUrlStr = addExtension( rURL.url( 0, 106 ) ); -++ -++ if ( !isExecuting() && !isSupportedProtocol( rURL.protocol() ) ) -++ qUrlStr = localCopy( qUrlStr ); -++ -++ if ( qUrlStr.startsWith( "file:/" ) && qUrlStr.mid( 6, 1 ) != "/" ) -++ qUrlStr.replace( "file:/", "file:///" ); -++ -++ rBuffer.append( " " ); -++ if ( !qUrlStr.isEmpty() ) -++ appendEscaped( rBuffer, qUrlStr ); -++} -++ -++void TDEFileDialog::appendEscaped( TQString &rBuffer, const TQString &rString ) -++{ -++ const TQChar *pUnicode = rString.unicode(); -++ const TQChar *pEnd = pUnicode + rString.length(); -++ -++ rBuffer.append( '"' ); -++ for ( ; pUnicode != pEnd; ++pUnicode ) -++ { -++ if ( *pUnicode == '\\' ) -++ rBuffer.append( "\\\\" ); -++ else if ( *pUnicode == '"' ) -++ rBuffer.append( "\\\"" ); -++ else if ( *pUnicode == '\n' ) -++ rBuffer.append( "\\\n" ); -++ else -++ rBuffer.append( *pUnicode ); -++ } -++ rBuffer.append( '"' ); -++} -++ -++TQString TDEFileDialog::escapeString( const TQString &rString ) -++{ -++ TQString qString; -++ qString.reserve( 2*rString.length() + 2 ); // every char escaped + quotes -++ -++ appendEscaped( qString, rString ); -++ -++ return qString; -++} -++ -++ -++void TDEFileFilterComboHack::setCurrentFilter( const TQString& filter ) -++{ -++ setCurrentText( filter ); -++ filterChanged(); -++ -++ // Workaround for 'Filter name (*.blah)' vs. 'Filter name' -++ if ( currentText() != text( currentItem() ) ) -++ { -++ int nItem = 0; -++ for ( ; nItem < count() && !text( nItem ).startsWith( filter ); ++nItem ); -++ -++ if ( nItem < count() ) -++ setCurrentItem( nItem ); -++ else -++ setCurrentItem( 0 ); -++ -++ filterChanged(); -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdefilepicker.hxx fpicker/source/unx/tde/tdefilepicker.hxx -+--- fpicker/source/unx/tde/tdefilepicker.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdefilepicker.hxx 2011-08-17 14:05:02.262902414 -0500 -+@@ -0,0 +1,126 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _TDEFILEPICKER_HXX_ -++#define _TDEFILEPICKER_HXX_ -++ -++#include -++#include -++ -++class TQGrid; -++class TQHBox; -++class TQVBox; -++ -++class TDEFileDialog : public KFileDialog -++{ -++ Q_OBJECT -++ -++protected: -++ typedef TQPair< TQString, TQString > FilterEntry; -++ typedef TQValueList< FilterEntry > FilterList; -++ -++ TQVBox *m_pCustomWidget; -++ TQHBox *m_pCombosAndButtons; -++ -++ TQVBox *m_pLabels; -++ TQVBox *m_pComboBoxes; -++ TQVBox *m_pPushButtons; -++ -++ TQGrid *m_pCheckBoxes; -++ -++ FilterList m_aFilters; -++ -++ /** Are we a "Save As" dialog? -++ * -++ * We cannot use KFileDialog::setOperationMode() here, because then -++ * it automatically adds an "Automatically select filename extension" -++ * check box, and completely destroys the dialog's layout -++ * (custom list boxes are under this check box, which looks ugly). -++ */ -++ bool m_bIsSave; -++ bool m_bIsExecuting; -++ -++ bool m_bCanNotifySelection; -++ -++public: -++ TDEFileDialog( const TQString &startDir, const TQString &filter, -++ TQWidget *parent, const char *name ); -++ virtual ~TDEFileDialog(); -++ -++protected: -++ virtual void resizeEvent( TQResizeEvent *pEvent ); -++ virtual void showEvent( TQShowEvent *pEvent ); -++ void updateCustomWidgetLayout(); -++ -++ virtual void customEvent( TQCustomEvent *pEvent ); -++ -++protected: -++ void appendControl( const TQString &rId, const TQString &rType, const TQString &rTitle ); -++ TQWidget* findControl( const TQString &rId ) const; -++ void enableControl( const TQString &rId, const TQString &rValue ); -++ void getValue( const TQString &rId, const TQString &rAction ); -++ void setValue( const TQString &rId, const TQString &rAction, const TQStringList &rValue ); -++ -++ void appendFilter( const TQString &rTitle, const TQString &rFilter ); -++ TQString filters() const; -++ TQString addExtension( const TQString &rFileName ) const; -++ -++ void setIsSave( bool bIsSave ) { m_bIsSave = bIsSave; } -++ bool isSave( void ) const { return m_bIsSave; } -++ -++ void setIsExecuting( bool bIsExecuting ) { m_bIsExecuting = bIsExecuting; } -++ bool isExecuting( void ) const { return m_bIsExecuting; } -++ -++ bool isSupportedProtocol( const TQString &rProtocol ) const; -++ KURL mostLocalURL( const KURL &rURL ) const; -++ TQString localCopy( const TQString &rFileName ) const; -++ -++ void setCanNotifySelection( bool bCanNotifySelection ) { m_bCanNotifySelection = bCanNotifySelection; } -++ bool canNotifySelection( void ) const { return m_bCanNotifySelection; } -++ -++protected slots: -++ void fileHighlightedCommand( const TQString & ); -++ void selectionChangedCommand(); -++ -++protected: -++ void sendCommand( const TQString &rCommand ); -++ void appendURL( TQString &rBuffer, const KURL &rURL ); -++ void appendEscaped( TQString &rBuffer, const TQString &rString ); -++ TQString escapeString( const TQString &rString ); -++}; -++ -++class TDEFileFilterComboHack : public KFileFilterCombo -++{ -++public: -++ void setCurrentFilter( const TQString& filter ); -++}; -++ -++#endif // _TDEFILEPICKER_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdefpmain.cxx fpicker/source/unx/tde/tdefpmain.cxx -+--- fpicker/source/unx/tde/tdefpmain.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdefpmain.cxx 2011-08-17 14:04:58.622623640 -0500 -+@@ -0,0 +1,93 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++#include -++ -++#include -++#include -++#include -++ -++#include -++#include -++ -++////////////////////////////////////////////////////////////////////////// -++// Main -++////////////////////////////////////////////////////////////////////////// -++ -++static KCmdLineOptions sOptions[] = -++{ -++ { "winid ", I18N_NOOP("Window ID to which is the fpicker modal"), "0" }, -++ KCmdLineLastOption -++}; -++ -++int main( int argc, char* argv[] ) -++{ -++ // we fake the name of the application to have "OpenOffice.org" in the -++ // title -++ KAboutData qAboutData( "tdefilepicker", I18N_NOOP( "OpenOffice.org" ), -++ "0.1", I18N_NOOP( "tdefilepicker is an implementation of the TDE file dialog for OpenOffice.org." ), -++ KAboutData::License_LGPL, -++ "(c) 2004, Jan Holesovsky" ); -++ qAboutData.addAuthor( "Jan Holesovsky", I18N_NOOP("Original author and current maintainer"), "kendy@openoffice.org" ); -++ -++ // Let the user see that this does something... -++ ::std::cerr << "tdefilepicker, an implementation of TDE file dialog for OOo." << ::std::endl -++ << "Type 'exit' and press Enter to finish." << ::std::endl; -++ -++ KCmdLineArgs::addCmdLineOptions( sOptions ); -++ KCmdLineArgs::init( argc, argv, &qAboutData ); -++ -++ KLocale::setMainCatalogue( "kdialog" ); -++ -++ KApplication kApplication; -++ -++ // Setup the modality -++ KCmdLineArgs *pArgs = KCmdLineArgs::parsedArgs(); -++ long nWinId = atol( pArgs->getOption( "winid" ) ); -++ pArgs->clear(); -++ -++ TDEModalityFilter qModalityFilter( nWinId ); -++ -++ TDEFileDialog aFileDialog( NULL, TQString(), NULL, "tdefiledialog" ); -++ -++ TDECommandThread qCommandThread( &aFileDialog ); -++ qCommandThread.start(); -++ -++ kApplication.exec(); -++ -++ qCommandThread.wait(); -++ -++ ::std::cout << "exited" << ::std::endl; -++ -++ return 0; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdemodalityfilter.cxx fpicker/source/unx/tde/tdemodalityfilter.cxx -+--- fpicker/source/unx/tde/tdemodalityfilter.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdemodalityfilter.cxx 2011-08-17 14:04:44.121513143 -0500 -+@@ -0,0 +1,68 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++ -++#include -++#include -++ -++#include -++#include -++#include -++ -++////////////////////////////////////////////////////////////////////////// -++// Modality filter -++////////////////////////////////////////////////////////////////////////// -++ -++TDEModalityFilter::TDEModalityFilter( WId nWinId ) -++ : m_nWinId( nWinId ) -++{ -++ kapp->installEventFilter( this ); -++} -++ -++TDEModalityFilter::~TDEModalityFilter() -++{ -++ kapp->removeEventFilter( this ); -++} -++ -++bool TDEModalityFilter::eventFilter( TQObject *pObject, TQEvent *pEvent ) -++{ -++ if ( pObject->isWidgetType() && pEvent->type() == TQEvent::Show ) -++ { -++ KDialogBase* pDlg = ::qt_cast< KDialogBase* >( pObject ); -++ if ( pDlg != NULL && m_nWinId != 0 ) -++ { -++ XSetTransientForHint( qt_xdisplay(), pDlg->winId(), m_nWinId ); -++ m_nWinId = 0; -++ } -++ } -++ return false; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde/tdemodalityfilter.hxx fpicker/source/unx/tde/tdemodalityfilter.hxx -+--- fpicker/source/unx/tde/tdemodalityfilter.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde/tdemodalityfilter.hxx 2011-08-17 14:04:27.940273979 -0500 -+@@ -0,0 +1,49 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _TDEMODALITYFILTER_HXX_ -++#define _TDEMODALITYFILTER_HXX_ -++ -++#include -++ -++class TDEModalityFilter : public TQObject -++{ -++private: -++ WId m_nWinId; -++ -++public: -++ TDEModalityFilter( WId nWinId ); -++ virtual ~TDEModalityFilter(); -++ -++ virtual bool eventFilter( TQObject *pObject, TQEvent *pEvent ); -++}; -++ -++#endif // _TDEMODALITYFILTER_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/FPServiceInfo.hxx fpicker/source/unx/tde_unx/FPServiceInfo.hxx -+--- fpicker/source/unx/tde_unx/FPServiceInfo.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/FPServiceInfo.hxx 2011-08-17 14:07:24.203772856 -0500 -+@@ -0,0 +1,48 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _FPSERVICEINFO_HXX_ -++#define _FPSERVICEINFO_HXX_ -++ -++// the service names -++#define FILE_PICKER_SERVICE_NAME "com.sun.star.ui.dialogs.TDEFilePicker" -++ -++// the implementation names -++#define FILE_PICKER_IMPL_NAME "com.sun.star.ui.dialogs.UnxFilePicker" -++ -++// the registry key names -++// a key under which this service will be registered, -++// Format: -> "/ImplName/UNO/SERVICES/ServiceName" -++// -++#define FILE_PICKER_REGKEY_NAME "/com.sun.star.ui.dialogs.UnxFilePicker/UNO/SERVICES/com.sun.star.ui.dialogs.TDEFilePicker" -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/fps-tde-ucd.txt fpicker/source/unx/tde_unx/fps-tde-ucd.txt -+--- fpicker/source/unx/tde_unx/fps-tde-ucd.txt 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/fps-tde-ucd.txt 2011-08-17 14:06:16.168562070 -0500 -+@@ -0,0 +1,6 @@ -++[ComponentDescriptor] -++ImplementationName=com.sun.star.ui.dialogs.UnxFilePicker -++ComponentName=fps_tde.uno.so -++LoaderName=com.sun.star.loader.SharedLibrary -++[SupportedServices] -++com.sun.star.ui.dialogs.TDEFilePicker -+diff -urN fpicker/source/unx/tde_unx/fps_tde.xml fpicker/source/unx/tde_unx/fps_tde.xml -+--- fpicker/source/unx/tde_unx/fps_tde.xml 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/fps_tde.xml 2011-08-17 14:07:17.433254165 -0500 -+@@ -0,0 +1,51 @@ -++ -++ -++ -++ fps_tde -++ -++ Jan Holesovsky -++ com.sun.star.comp.ui.dialogs.FilePicker -++ -++ The TDE implementation of the FilePicker service. -++ -++ com.sun.star.loader.SharedLibrary -++ c++ -++ -++ com.sun.star.ui.dialogs.FilePicker -++ ... -++ com.sun.star.ui.dialogs.XExecutableDialog -++ com.sun.star.ui.dialogs.XFilePicker -++ com.sun.star.ui.dialogs.XFilterManager -++ com.sun.star.ui.dialogs.XFilterGroupManager -++ com.sun.star.ui.dialogs.XFilePickerListener -++ com.sun.star.ui.dialogs.ExecutableDialogException -++ com.sun.star.ui.dialogs.XFilePickerNotifier -++ com.sun.star.ui.dialogs.XFilePickerControlAccess -++ com.sun.star.ui.dialogs.XFilePreview -++ com.sun.star.ui.dialogs.ExtendedFilePickerElementIds -++ com.sun.star.ui.dialogs.ExecutableDialogResults -++ com.sun.star.ui.dialogs.FilePickerEvent -++ com.sun.star.ui.dialogs.CommonFilePickerElementIds -++ com.sun.star.ui.dialogs.ListboxControlActions -++ com.sun.star.ui.dialogs.TemplateDescription -++ com.sun.star.ui.dialogs.FilePreviewImageFormats -++ com.sun.star.util.XCancellable -++ com.sun.star.lang.XComponent -++ com.sun.star.lang.XMultiServiceFactory -++ com.sun.star.lang.XSingleServiceFactory -++ com.sun.star.lang.XServiceInfo -++ com.sun.star.lang.XTypeProvider -++ com.sun.star.lang.IllegalArgumentException -++ com.sun.star.uno.TypeClass -++ com.sun.star.uno.XWeak -++ com.sun.star.uno.XAggregation -++ com.sun.star.registry.XRegistryKey -++ com.sun.star.container.XSet -++ -++ cppuhelper -++ cppu -++ sal -++ cppuhelper -++ cppu2 -++ sal2 -++ -+diff -urN fpicker/source/unx/tde_unx/makefile.mk fpicker/source/unx/tde_unx/makefile.mk -+--- fpicker/source/unx/tde_unx/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/makefile.mk 2011-08-17 14:07:11.152773020 -0500 -+@@ -0,0 +1,78 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2010 Novell, Inc. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/..$/.. -++ -++PRJNAME=fpicker -++TARGET=fps_tde.uno -++LIBTARGET=NO -++ENABLE_EXCEPTIONS=TRUE -++ -++# --- Settings ----------------------------------------------------- -++ -++.INCLUDE : settings.mk -++DLLPRE= -++ -++# ------------------------------------------------------------------ -++ -++# Currently just TDE is supported... -++.IF "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -++ -++dummy: -++ @echo "Nothing to build. GUIBASE == $(GUIBASE), ENABLE_TDE is not set" -++ -++.ELSE # we build for TDE -++ -++# --- Files -------------------------------------------------------- -++ -++SLOFILES =\ -++ $(SLO)$/UnxCommandThread.obj \ -++ $(SLO)$/UnxFilePicker.obj \ -++ $(SLO)$/UnxNotifyThread.obj \ -++ $(SLO)$/UnxFPentry.obj -++ -++SHL1NOCHECK=TRUE -++SHL1TARGET=fps_tde.uno -++SHL1STDLIBS=$(CPPULIB)\ -++ $(CPPUHELPERLIB)\ -++ $(SALLIB)\ -++ $(VCLLIB)\ -++ $(TOOLSLIB) -++ -++SHL1OBJS=$(SLOFILES) -++SHL1DEF=$(MISC)$/$(SHL1TARGET).def -++ -++DEF1NAME=$(SHL1TARGET) -++DEF1VERSIONMAP=$(SOLARENV)/src/component.map -++ -++.ENDIF # "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -++ -++# --- Targets ------------------------------------------------------ -++ -++.INCLUDE : target.mk -+diff -urN fpicker/source/unx/tde_unx/UnxCommandThread.cxx fpicker/source/unx/tde_unx/UnxCommandThread.cxx -+--- fpicker/source/unx/tde_unx/UnxCommandThread.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxCommandThread.cxx 2011-08-17 14:06:59.001842171 -0500 -+@@ -0,0 +1,315 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++ -++#include -++#include -++ -++#include -++#include -++#include -++ -++using namespace ::com::sun::star; -++ -++////////////////////////////////////////////////////////////////////////// -++// UnxFilePickerCommandThread -++////////////////////////////////////////////////////////////////////////// -++ -++UnxFilePickerCommandThread::UnxFilePickerCommandThread( UnxFilePickerNotifyThread *pNotifyThread, int nReadFD ) -++ : m_pNotifyThread( pNotifyThread ), -++ m_nReadFD( nReadFD ) -++{ -++} -++ -++UnxFilePickerCommandThread::~UnxFilePickerCommandThread() -++{ -++} -++ -++sal_Bool SAL_CALL UnxFilePickerCommandThread::result() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_aResult; -++} -++ -++::rtl::OUString SAL_CALL UnxFilePickerCommandThread::getCurrentFilter() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_aGetCurrentFilter; -++} -++ -++::rtl::OUString SAL_CALL UnxFilePickerCommandThread::getDirectory() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_aGetDirectory; -++} -++ -++uno::Sequence< ::rtl::OUString > SAL_CALL UnxFilePickerCommandThread::getFiles() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ sal_Int32 nSize = m_aGetFiles.size(); -++ uno::Sequence< ::rtl::OUString > aFiles( ( nSize > 1 )? nSize + 1: nSize ); -++ -++ if ( nSize == 1 ) -++ aFiles[0] = m_aGetFiles.front(); -++ else if ( nSize > 1 ) -++ { -++ // First entry in the sequence must be the dirname, the others are the -++ // filenames, so we have to rearrange the list... -++ -++ ::rtl::OUString aFront = m_aGetFiles.front(); -++ sal_Int32 nLastSlash = aFront.lastIndexOf( '/' ); -++ -++ aFiles[0] = ( nLastSlash >= 0 )? aFront.copy( 0, nLastSlash ): ::rtl::OUString(); -++ ++nLastSlash; -++ -++ sal_Int32 nIdx = 1; -++ for ( ::std::list< ::rtl::OUString >::const_iterator it = m_aGetFiles.begin(); -++ it != m_aGetFiles.end(); ++it, ++nIdx ) -++ { -++ sal_Int32 nLength = (*it).getLength() - nLastSlash; -++ aFiles[nIdx] = ( nLength >= 0 )? (*it).copy( nLastSlash, nLength ): ::rtl::OUString(); -++ } -++ } -++ -++ return aFiles; -++} -++ -++uno::Any SAL_CALL UnxFilePickerCommandThread::getValue() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_aGetValue; -++} -++ -++void SAL_CALL UnxFilePickerCommandThread::run() -++{ -++ if ( m_nReadFD < 0 ) -++ return; -++ -++ sal_Int32 nBufferSize = 1024; // 1 is for testing, 1024 for real use -++ sal_Char *pBuffer = new sal_Char[nBufferSize]; -++ sal_Char *pBufferEnd = pBuffer + nBufferSize; -++ -++ sal_Char *pWhereToRead = pBuffer; -++ sal_Char *pEntryBegin = pBuffer; -++ sal_Int32 nBytesRead = 0; -++ sal_Bool bShouldExit = sal_False; -++ while ( !bShouldExit && ( nBytesRead = read( m_nReadFD, pWhereToRead, pBufferEnd - pWhereToRead ) ) > 0 ) -++ { -++ sal_Bool bFoundNL = sal_False; -++ sal_Char *pWhereToReadEnd = pWhereToRead + nBytesRead; -++ sal_Char *pEntryEnd = pWhereToRead; -++ do { -++ for ( ; pEntryEnd < pWhereToReadEnd && *pEntryEnd != '\n'; ++pEntryEnd ) -++ ; -++ -++ if ( pEntryEnd < pWhereToReadEnd ) -++ { -++ bFoundNL = sal_True; -++ *pEntryEnd = 0; -++ -++ if ( strcmp( pEntryBegin, "exited" ) == 0 ) -++ bShouldExit = sal_True; -++ else -++ handleCommand( ::rtl::OUString( pEntryBegin, pEntryEnd - pEntryBegin, RTL_TEXTENCODING_UTF8 )/*, bQuit*/ ); -++ -++ pEntryBegin = pEntryEnd + 1; -++ } -++ } while ( pEntryEnd < pWhereToReadEnd ); -++ -++ if ( bFoundNL ) -++ { -++ if ( pEntryBegin < pBufferEnd ) -++ memmove( pBuffer, pEntryBegin, pWhereToReadEnd - pEntryBegin ); -++ } -++ else -++ { -++ // enlarge the buffer size -++ nBufferSize *= 2; -++ sal_Char *pNewBuffer = new sal_Char[nBufferSize]; -++ if ( pEntryBegin < pBufferEnd ) -++ memmove( pNewBuffer, pEntryBegin, pWhereToReadEnd - pEntryBegin ); -++ -++ delete[] pBuffer; -++ pBuffer = pNewBuffer; -++ pBufferEnd = pBuffer + nBufferSize; -++ } -++ -++ pWhereToRead = pBuffer + ( pWhereToReadEnd - pEntryBegin ); -++ pEntryBegin = pBuffer; -++ } -++} -++ -++void SAL_CALL UnxFilePickerCommandThread::handleCommand( const ::rtl::OUString &rCommand ) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "UnxFilePicker received: \"" << -++ OUStringToOString( rCommand, RTL_TEXTENCODING_ASCII_US ).getStr() << "\"" << ::std::endl; -++#endif -++ -++ ::std::list< ::rtl::OUString > aList = tokenize( rCommand ); -++ -++ if ( aList.size() == 0 ) -++ return; -++ -++ ::rtl::OUString aCommandName = aList.front(); -++ aList.pop_front(); -++ -++ if ( aCommandName.equalsAscii( "accept" ) ) -++ { -++ m_aResult = sal_True; -++ m_aExecCondition.set(); -++ } -++ else if ( aCommandName.equalsAscii( "reject" ) ) -++ { -++ m_aResult = sal_False; -++ m_aExecCondition.set(); -++ } -++ else if ( aCommandName.equalsAscii( "fileSelectionChanged" ) ) -++ { -++ if ( m_pNotifyThread ) -++ m_pNotifyThread->fileSelectionChanged(); -++ } -++ else if ( aCommandName.equalsAscii( "files" ) ) -++ { -++ m_aGetFiles = aList; -++ m_aGetFilesCondition.set(); -++ } -++ else if ( aCommandName.equalsAscii( "value" ) ) -++ { -++ ::rtl::OUString aType; -++ if ( !aList.empty() ) -++ { -++ aType = aList.front(); -++ aList.pop_front(); -++ } -++ -++ if ( aType.equalsAscii( "bool" ) ) -++ { -++ sal_Bool bValue = !aList.empty() && aList.front().equalsIgnoreAsciiCaseAscii( "true" ); -++ -++ m_aGetValue <<= bValue; -++ m_aGetValueCondition.set(); -++ } -++ else if ( aType.equalsAscii( "int" ) ) -++ { -++ sal_Int32 nValue = 0; -++ if ( !aList.empty() ) -++ nValue = aList.front().toInt32(); -++ -++ m_aGetValue <<= nValue; -++ m_aGetValueCondition.set(); -++ } -++ else if ( aType.equalsAscii( "string" ) ) -++ { -++ ::rtl::OUString aValue; -++ if ( !aList.empty() ) -++ aValue = aList.front(); -++ -++ m_aGetValue <<= aValue; -++ m_aGetValueCondition.set(); -++ } -++ else if ( aType.equalsAscii( "stringList" ) ) -++ { -++ uno::Sequence< ::rtl::OUString > aSequence( aList.size() ); -++ sal_Int32 nIdx = 0; -++ for ( ::std::list< ::rtl::OUString >::const_iterator it = aList.begin(); it != aList.end(); ++it, ++nIdx ) -++ aSequence[nIdx] = (*it); -++ -++ m_aGetValue <<= aSequence; -++ m_aGetValueCondition.set(); -++ } -++ else -++ { -++ m_aGetValue = uno::Any(); -++ m_aGetValueCondition.set(); -++ } -++ } -++ else if ( aCommandName.equalsAscii( "currentFilter" ) ) -++ { -++ m_aGetCurrentFilter = aList.empty()? ::rtl::OUString(): aList.front(); -++ m_aGetCurrentFilterCondition.set(); -++ } -++ else if ( aCommandName.equalsAscii( "currentDirectory" ) ) -++ { -++ m_aGetDirectory = aList.empty()? ::rtl::OUString(): aList.front(); -++ m_aGetDirectoryCondition.set(); -++ } -++ else -++ { -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "Unrecognized command: " -++ << OUStringToOString( aCommandName, RTL_TEXTENCODING_ASCII_US ).getStr() << "\"" << ::std::endl; -++#endif -++ } -++} -++ -++::std::list< ::rtl::OUString > SAL_CALL UnxFilePickerCommandThread::tokenize( const ::rtl::OUString &rCommand ) -++{ -++ ::std::list< ::rtl::OUString > aList; -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ const sal_Unicode *pUnicode = rCommand.getStr(); -++ const sal_Unicode *pEnd = pUnicode + rCommand.getLength(); -++ sal_Bool bQuoted = sal_False; -++ -++ for ( ; pUnicode != pEnd; ++pUnicode ) -++ { -++ if ( *pUnicode == '\\' ) -++ { -++ ++pUnicode; -++ if ( pUnicode != pEnd ) -++ { -++ if ( *pUnicode == 'n' ) -++ aBuffer.appendAscii( "\n", 1 ); -++ else -++ aBuffer.append( *pUnicode ); -++ } -++ } -++ else if ( *pUnicode == '"' ) -++ bQuoted = !bQuoted; -++ else if ( *pUnicode == ' ' && !bQuoted ) -++ aList.push_back( aBuffer.makeStringAndClear() ); -++ else -++ aBuffer.append( *pUnicode ); -++ } -++ aList.push_back( aBuffer.makeStringAndClear() ); -++ -++ return aList; -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxCommandThread.hxx fpicker/source/unx/tde_unx/UnxCommandThread.hxx -+--- fpicker/source/unx/tde_unx/UnxCommandThread.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxCommandThread.hxx 2011-08-17 14:06:49.721131468 -0500 -+@@ -0,0 +1,136 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _UNXCOMMANDTHREAD_HXX_ -++#define _UNXCOMMANDTHREAD_HXX_ -++ -++#include -++#include -++ -++#include -++#include -++#include -++#include -++ -++#include -++ -++#include -++ -++class UnxFilePickerNotifyThread; -++ -++/** Synchronization for the 'thread-less' version of the fpicker. -++ -++ Something like osl::Condition, but calls Application::Yield() while in -++ wait(). -++*/ -++class YieldingCondition -++{ -++ ::osl::Mutex m_aMutex; -++ bool m_bValue; -++ -++ bool get() -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ return m_bValue; -++ } -++ -++public: -++ YieldingCondition() { reset(); } -++ -++ void reset() -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ m_bValue = false; -++ } -++ -++ void set() -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ m_bValue = true; -++ } -++ -++ void wait() -++ { -++ while ( !get() ) -++ Application::Yield(); -++ } -++}; -++ -++class UnxFilePickerCommandThread : public ::osl::Thread -++{ -++protected: -++ UnxFilePickerNotifyThread *m_pNotifyThread; -++ int m_nReadFD; -++ -++ ::osl::Mutex m_aMutex; -++ -++ YieldingCondition m_aExecCondition; -++ sal_Bool m_aResult; -++ -++ ::osl::Condition m_aGetCurrentFilterCondition; -++ ::rtl::OUString m_aGetCurrentFilter; -++ -++ ::osl::Condition m_aGetDirectoryCondition; -++ ::rtl::OUString m_aGetDirectory; -++ -++ ::osl::Condition m_aGetFilesCondition; -++ ::std::list< ::rtl::OUString > m_aGetFiles; -++ -++ ::osl::Condition m_aGetValueCondition; -++ ::com::sun::star::uno::Any m_aGetValue; -++ -++public: -++ UnxFilePickerCommandThread( UnxFilePickerNotifyThread *pNotifyThread, int nReadFD ); -++ ~UnxFilePickerCommandThread(); -++ -++ YieldingCondition& SAL_CALL execCondition() { return m_aExecCondition; } -++ sal_Bool SAL_CALL result(); -++ -++ ::osl::Condition& SAL_CALL getCurrentFilterCondition() { return m_aGetCurrentFilterCondition; } -++ ::rtl::OUString SAL_CALL getCurrentFilter(); -++ -++ ::osl::Condition& SAL_CALL getDirectoryCondition() { return m_aGetDirectoryCondition; } -++ ::rtl::OUString SAL_CALL getDirectory(); -++ -++ ::osl::Condition& SAL_CALL getFilesCondition() { return m_aGetFilesCondition; } -++ ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles(); -++ -++ ::osl::Condition& SAL_CALL getValueCondition() { return m_aGetValueCondition; } -++ ::com::sun::star::uno::Any SAL_CALL getValue(); -++ -++protected: -++ virtual void SAL_CALL run(); -++ -++ virtual void SAL_CALL handleCommand( const ::rtl::OUString &rCommand/*, sal_Bool &rQuit*/ ); -++ ::std::list< ::rtl::OUString > SAL_CALL tokenize( const ::rtl::OUString &rCommand ); -++}; -++ -++#endif // _UNXCOMMANDTHREAD_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxFilePicker.cxx fpicker/source/unx/tde_unx/UnxFilePicker.cxx -+--- fpicker/source/unx/tde_unx/UnxFilePicker.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxFilePicker.cxx 2011-08-17 14:07:44.765348071 -0500 -+@@ -0,0 +1,932 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++#include -++#include -++#include -++#include -++ -++#include -++ -++#include -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++ -++#include -++ -++using namespace ::com::sun::star; -++ -++using namespace ::com::sun::star::ui::dialogs; -++using namespace ::com::sun::star::ui::dialogs::TemplateDescription; -++ -++////////////////////////////////////////////////////////////////////////// -++// helper functions -++////////////////////////////////////////////////////////////////////////// -++ -++namespace -++{ -++ // controling event notifications -++ const bool STARTUP_SUSPENDED = true; -++ const bool STARTUP_ALIVE = false; -++ -++ uno::Sequence SAL_CALL FilePicker_getSupportedServiceNames() -++ { -++ uno::Sequence aRet(3); -++ aRet[0] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.FilePicker"); -++ aRet[1] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.SystemFilePicker"); -++ aRet[2] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.TDEFilePicker"); -++ return aRet; -++ } -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// UnxFilePicker -++////////////////////////////////////////////////////////////////////////// -++ -++UnxFilePicker::UnxFilePicker( const uno::Reference& xServiceMgr ) -++ : cppu::WeakComponentImplHelper8< -++ XFilterManager, -++ XFilterGroupManager, -++ XFilePickerControlAccess, -++ XFilePickerNotifier, -++// TODO XFilePreview, -++ lang::XInitialization, -++ util::XCancellable, -++ lang::XEventListener, -++ lang::XServiceInfo>( m_rbHelperMtx ), -++ m_xServiceMgr( xServiceMgr ), -++ m_nFilePickerPid( -1 ), -++ m_nFilePickerWrite( -1 ), -++ m_nFilePickerRead( -1 ), -++ m_pNotifyThread( NULL ), -++ m_pCommandThread( NULL ), -++ m_pResMgr( CREATEVERSIONRESMGR( fps_office ) ) -++{ -++} -++ -++UnxFilePicker::~UnxFilePicker() -++{ -++ if ( m_nFilePickerPid > 0 ) -++ { -++ sendCommand( ::rtl::OUString::createFromAscii( "exit" ) ); -++ waitpid( m_nFilePickerPid, NULL, 0 ); -++ } -++ -++ if ( m_pCommandThread ) -++ { -++ m_pCommandThread->join(); -++ -++ delete m_pCommandThread, m_pCommandThread = NULL; -++ } -++ -++ if ( m_pNotifyThread ) -++ { -++ m_pNotifyThread->exit(); -++ -++ m_pNotifyThread->join(); -++ -++ delete m_pNotifyThread, m_pNotifyThread = NULL; -++ } -++ -++ if ( m_nFilePickerWrite >= 0 ) -++ close( m_nFilePickerWrite ); -++ -++ if ( m_nFilePickerRead >= 0 ) -++ close( m_nFilePickerRead ); -++ -++ delete m_pResMgr, m_pResMgr = NULL; -++} -++ -++void SAL_CALL UnxFilePicker::addFilePickerListener( const uno::Reference& xListener ) -++ throw( uno::RuntimeException ) -++{ -++ OSL_ASSERT( m_pNotifyThread ); -++ osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_pNotifyThread->addFilePickerListener( xListener ); -++} -++ -++void SAL_CALL UnxFilePicker::removeFilePickerListener( const uno::Reference& xListener ) -++ throw( uno::RuntimeException ) -++{ -++ OSL_ASSERT( m_pNotifyThread ); -++ osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_pNotifyThread->removeFilePickerListener( xListener ); -++} -++ -++void SAL_CALL UnxFilePicker::setTitle( const rtl::OUString &rTitle ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setTitle " ); -++ appendEscaped( aBuffer, rTitle ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++sal_Int16 SAL_CALL UnxFilePicker::execute() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ -++ // this is _not_ an osl::Condition, see i#93366 -++ m_pCommandThread->execCondition().reset(); -++ -++ sendCommand( ::rtl::OUString::createFromAscii( "exec" ) ); -++ -++ m_pCommandThread->execCondition().wait(); -++ -++ return m_pCommandThread->result(); -++} -++ -++void SAL_CALL UnxFilePicker::setMultiSelectionMode( sal_Bool bMode ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUString aString = bMode? -++ ::rtl::OUString::createFromAscii( "setMultiSelection true" ): -++ ::rtl::OUString::createFromAscii( "setMultiSelection false" ); -++ -++ sendCommand( aString ); -++} -++ -++void SAL_CALL UnxFilePicker::setDefaultName( const ::rtl::OUString &rName ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setDefaultName " ); -++ appendEscaped( aBuffer, rName ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++void SAL_CALL UnxFilePicker::setDisplayDirectory( const rtl::OUString &rDirectory ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setDirectory " ); -++ appendEscaped( aBuffer, rDirectory ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++rtl::OUString SAL_CALL UnxFilePicker::getDisplayDirectory() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ sendCommand( ::rtl::OUString::createFromAscii( "getDirectory" ), -++ m_pCommandThread->getDirectoryCondition() ); -++ -++ return m_pCommandThread->getDirectory(); -++} -++ -++uno::Sequence< ::rtl::OUString > SAL_CALL UnxFilePicker::getFiles() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ sendCommand( ::rtl::OUString::createFromAscii( "getFiles" ), -++ m_pCommandThread->getFilesCondition() ); -++ -++ return m_pCommandThread->getFiles(); -++} -++ -++void SAL_CALL UnxFilePicker::appendFilter( const ::rtl::OUString &rTitle, const ::rtl::OUString &rFilter ) -++ throw( lang::IllegalArgumentException, uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "appendFilter " ); -++ appendEscaped( aBuffer, rTitle ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, rFilter ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++void SAL_CALL UnxFilePicker::setCurrentFilter( const rtl::OUString &rTitle ) -++ throw( lang::IllegalArgumentException, uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setCurrentFilter " ); -++ appendEscaped( aBuffer, rTitle ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++rtl::OUString SAL_CALL UnxFilePicker::getCurrentFilter() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ sendCommand( ::rtl::OUString::createFromAscii( "getCurrentFilter" ), -++ m_pCommandThread->getCurrentFilterCondition() ); -++ -++ return m_pCommandThread->getCurrentFilter(); -++} -++ -++void SAL_CALL UnxFilePicker::appendFilterGroup( const rtl::OUString &rGroupTitle, const uno::Sequence &rFilters ) -++ throw( lang::IllegalArgumentException, uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "appendFilterGroup " ); -++ appendEscaped( aBuffer, rGroupTitle ); -++ -++ for ( sal_Int32 i = 0; i < rFilters.getLength(); ++i ) -++ { -++ beans::StringPair aPair = rFilters[i]; -++ -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aPair.First ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aPair.Second ); -++ } -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++void SAL_CALL UnxFilePicker::setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const uno::Any &rValue ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUString aType; -++ ::rtl::OUString aAction; -++ sal_Int32 nTitleId; -++ -++ if ( controlIdInfo( nControlId, aType, nTitleId ) && controlActionInfo( nControlAction, aAction ) ) -++ { -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setValue " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( " ", 1 ); -++ aBuffer.append( aAction ); -++ -++ if ( aType.equalsAscii( "checkbox" ) ) -++ { -++ sal_Bool bControlValue; -++ if ( ( rValue >>= bControlValue ) && bControlValue ) -++ aBuffer.appendAscii( " true" ); -++ else -++ aBuffer.appendAscii( " false" ); -++ } -++ else if ( aType.equalsAscii( "listbox" ) ) -++ { -++ switch ( nControlAction ) -++ { -++ case ControlActions::ADD_ITEM: -++ case ControlActions::SET_HELP_URL: -++ { -++ ::rtl::OUString aString; -++ if ( rValue >>= aString ) -++ { -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aString ); -++ } -++ } -++ break; -++ -++ case ControlActions::ADD_ITEMS: -++ { -++ uno::Sequence< ::rtl::OUString > aSequence; -++ if ( rValue >>= aSequence ) -++ { -++ for ( sal_Int32 nIdx = 0; nIdx < aSequence.getLength(); ++nIdx ) -++ { -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aSequence[nIdx] ); -++ } -++ -++ } -++ } -++ break; -++ -++ case ControlActions::DELETE_ITEM: -++ case ControlActions::SET_SELECT_ITEM: -++ { -++ sal_Int32 nInt; -++ if ( rValue >>= nInt ) -++ { -++ aBuffer.appendAscii( " ", 1 ); -++ aBuffer.append( nInt ); -++ } -++ } -++ break; -++ -++ default: -++ // nothing -++ break; -++ } -++ } -++ // TODO else if push button... -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++ } -++} -++ -++uno::Any SAL_CALL UnxFilePicker::getValue( sal_Int16 nControlId, sal_Int16 nControlAction ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUString aAction; -++ -++ if ( controlActionInfo( nControlAction, aAction ) ) -++ { -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "getValue " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( " ", 1 ); -++ aBuffer.append( aAction ); -++ -++ sendCommand( aBuffer.makeStringAndClear(), -++ m_pCommandThread->getValueCondition() ); -++ -++ return m_pCommandThread->getValue(); -++ } -++ -++ return uno::Any(); -++} -++ -++void SAL_CALL UnxFilePicker::enableControl( sal_Int16 nControlId, sal_Bool bEnable ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "enableControl " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( bEnable? " true": " false" ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++void SAL_CALL UnxFilePicker::setLabel( sal_Int16 nControlId, const ::rtl::OUString &rLabel ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "setLabel " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, rLabel ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++} -++ -++rtl::OUString SAL_CALL UnxFilePicker::getLabel(sal_Int16 /*nControlId*/) -++ throw ( uno::RuntimeException ) -++{ -++ // FIXME getLabel() is not yet implemented -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ // TODO return m_pImpl->getLabel(nControlId); -++ return ::rtl::OUString(); -++} -++ -++/* TODO -++uno::Sequence SAL_CALL UnxFilePicker::getSupportedImageFormats() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getSupportedImageFormats(); -++} -++ -++sal_Int32 SAL_CALL UnxFilePicker::getTargetColorDepth() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getTargetColorDepth(); -++} -++ -++sal_Int32 SAL_CALL UnxFilePicker::getAvailableWidth() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getAvailableWidth(); -++} -++ -++sal_Int32 SAL_CALL UnxFilePicker::getAvailableHeight() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getAvailableHeight(); -++} -++ -++void SAL_CALL UnxFilePicker::setImage( sal_Int16 aImageFormat, const uno::Any &rImage ) -++ throw( lang::IllegalArgumentException, uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_pImpl->setImage( aImageFormat, aImage ); -++} -++ -++sal_Bool SAL_CALL UnxFilePicker::setShowState( sal_Bool bShowState ) -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->setShowState( bShowState ); -++} -++ -++sal_Bool SAL_CALL UnxFilePicker::getShowState() -++ throw( uno::RuntimeException ) -++{ -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ return m_pImpl->getShowState(); -++} -++*/ -++ -++void SAL_CALL UnxFilePicker::initialize( const uno::Sequence &rArguments ) -++ throw( uno::Exception, uno::RuntimeException ) -++{ -++ initFilePicker(); -++ -++ // parameter checking -++ uno::Any aAny; -++ if ( 0 == rArguments.getLength( ) ) -++ throw lang::IllegalArgumentException( -++ rtl::OUString::createFromAscii( "no arguments" ), -++ static_cast< XFilePicker* >( this ), 1 ); -++ -++ aAny = rArguments[0]; -++ -++ if ( ( aAny.getValueType() != ::getCppuType( (sal_Int16*)0 ) ) && ( aAny.getValueType() != ::getCppuType( (sal_Int8*)0 ) ) ) -++ throw lang::IllegalArgumentException( -++ rtl::OUString::createFromAscii( "invalid argument type" ), -++ static_cast< XFilePicker* >( this ), 1 ); -++ -++ sal_Int16 templateId = -1; -++ aAny >>= templateId; -++ -++ ::rtl::OUString aTypeOpen = ::rtl::OUString::createFromAscii( "setType \"open\"" ); -++ ::rtl::OUString aTypeSaveAs = ::rtl::OUString::createFromAscii( "setType \"save\"" ); -++ -++ switch ( templateId ) -++ { -++ case FILEOPEN_SIMPLE: -++ sendCommand( aTypeOpen ); -++ break; -++ -++ case FILESAVE_SIMPLE: -++ sendCommand( aTypeSaveAs ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION_PASSWORD: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PASSWORD ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PASSWORD ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION_SELECTION: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_SELECTION ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION_TEMPLATE: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::LISTBOX_TEMPLATE ); -++ break; -++ -++ case FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE: -++ sendCommand( aTypeOpen ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_LINK ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PREVIEW ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE ); -++ break; -++ -++ case FILEOPEN_PLAY: -++ sendCommand( aTypeOpen ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::PUSHBUTTON_PLAY ); -++ break; -++ -++ case FILEOPEN_READONLY_VERSION: -++ sendCommand( aTypeOpen ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_READONLY ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::LISTBOX_VERSION ); -++ break; -++ -++ case FILEOPEN_LINK_PREVIEW: -++ sendCommand( aTypeOpen ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_LINK ); -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PREVIEW ); -++ break; -++ -++ case FILESAVE_AUTOEXTENSION: -++ sendCommand( aTypeSaveAs ); -++ -++ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -++ break; -++ -++ default: -++ throw lang::IllegalArgumentException( -++ rtl::OUString::createFromAscii( "Unknown template" ), -++ static_cast< XFilePicker* >( this ), -++ 1 ); -++ } -++} -++ -++void SAL_CALL UnxFilePicker::cancel() -++ throw ( uno::RuntimeException ) -++{ -++ // FIXME cancel() is not implemented -++ checkFilePicker(); -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ // TODO m_pImpl->cancel(); -++} -++ -++void SAL_CALL UnxFilePicker::disposing( const lang::EventObject &rEvent ) -++ throw( uno::RuntimeException ) -++{ -++ uno::Reference xFilePickerListener( rEvent.Source, uno::UNO_QUERY ); -++ -++ if ( xFilePickerListener.is() ) -++ removeFilePickerListener( xFilePickerListener ); -++} -++ -++rtl::OUString SAL_CALL UnxFilePicker::getImplementationName() -++ throw( uno::RuntimeException ) -++{ -++ return rtl::OUString::createFromAscii( FILE_PICKER_IMPL_NAME ); -++} -++ -++sal_Bool SAL_CALL UnxFilePicker::supportsService( const rtl::OUString& ServiceName ) -++ throw( uno::RuntimeException ) -++{ -++ uno::Sequence< ::rtl::OUString > SupportedServicesNames = FilePicker_getSupportedServiceNames(); -++ -++ for ( sal_Int32 n = SupportedServicesNames.getLength(); n--; ) -++ { -++ if ( SupportedServicesNames[n].compareTo( ServiceName ) == 0 ) -++ return sal_True; -++ } -++ -++ return sal_False; -++} -++ -++uno::Sequence< ::rtl::OUString > SAL_CALL UnxFilePicker::getSupportedServiceNames() -++ throw( uno::RuntimeException ) -++{ -++ return FilePicker_getSupportedServiceNames(); -++} -++ -++void UnxFilePicker::initFilePicker() -++{ -++ int aFiledesStdin[2], aFiledesStdout[2]; -++ if ( pipe( aFiledesStdin ) < 0 || pipe( aFiledesStdout ) < 0 ) -++ return; -++ -++ m_nFilePickerPid = fork(); -++ if ( m_nFilePickerPid < 0 ) -++ return; -++ -++ if ( m_nFilePickerPid == 0 ) -++ { -++ // Child... -++ close( aFiledesStdin[1] ); // write end of the pipe -++ dup2( aFiledesStdin[0], 0 ); -++ close( aFiledesStdin[0] ); -++ -++ close( aFiledesStdout[0] ); // read end of the pipe -++ dup2( aFiledesStdout[1], 1 ); -++ close( aFiledesStdout[1] ); -++ -++#if OSL_DEBUG_LEVEL == 0 -++ int nRedirect = open( "/dev/null", O_WRONLY ); -++ if( nRedirect != -1 ) -++ { -++ dup2( nRedirect, 2 ); -++ } -++#endif -++ -++ // The executable name -++ char pFname[1024]; snprintf(pFname, sizeof pFname, "%s/%s", getenv("OLDPWD"), "tdefilepicker"); -++ -++ // ID of the main window -++ const int nIdLen = 20; -++ char pWinId[nIdLen] = "0"; -++ -++ // TODO pass here the real parent (not possible for system dialogs -++ // yet), and default to GetDefDialogParent() only when the real parent -++ // is NULL -++ Window *pParentWin = Application::GetDefDialogParent(); -++ if ( pParentWin ) -++ { -++ const SystemEnvData* pSysData = ((SystemWindow *)pParentWin)->GetSystemData(); -++ if ( pSysData ) -++ { -++ snprintf( pWinId, nIdLen, "%ld", pSysData->aWindow ); // unx only -++ pWinId[nIdLen-1] = 0; -++ } -++ } -++ -++ // Execute the fpicker implementation -++ execlp( pFname, pFname, "--winid", pWinId, NULL ); -++ -++ // Error, finish the child -++ exit( -1 ); -++ } -++ -++ // Parent continues -++ close( aFiledesStdin[0] ); -++ m_nFilePickerWrite = aFiledesStdin[1]; -++ -++ close( aFiledesStdout[1] ); -++ m_nFilePickerRead = aFiledesStdout[0]; -++ -++ // Create the notify thread -++ if ( !m_pNotifyThread ) -++ m_pNotifyThread = new UnxFilePickerNotifyThread( this ); -++ -++ // Create the command thread -++ if ( !m_pCommandThread ) -++ m_pCommandThread = new UnxFilePickerCommandThread( m_pNotifyThread, m_nFilePickerRead ); -++ -++ // Start the threads -++ m_pNotifyThread->create(); -++ m_pCommandThread->create(); -++ -++ return; -++} -++ -++void UnxFilePicker::checkFilePicker() throw( ::com::sun::star::uno::RuntimeException ) -++{ -++ if ( m_nFilePickerPid > 0 ) -++ { -++ // TODO check if external file picker is runnning -++ } -++ else -++ { -++ throw uno::RuntimeException( -++ ::rtl::OUString::createFromAscii( "the external file picker does not run" ), -++ *this ); -++ } -++} -++ -++void UnxFilePicker::sendCommand( const ::rtl::OUString &rCommand ) -++{ -++ if ( m_nFilePickerWrite < 0 ) -++ return; -++ -++ ::rtl::OString aUtfString = OUStringToOString( rCommand + ::rtl::OUString::createFromAscii( "\n" ), RTL_TEXTENCODING_UTF8 ); -++ -++#if OSL_DEBUG_LEVEL > 0 -++ ::std::cerr << "UnxFilePicker sent: \"" << aUtfString.getStr() << "\"" << ::std::endl; -++#endif -++ -++ write( m_nFilePickerWrite, aUtfString.getStr(), aUtfString.getLength() ); -++} -++ -++void UnxFilePicker::sendCommand( const ::rtl::OUString &rCommand, ::osl::Condition &rCondition ) -++{ -++ rCondition.reset(); -++ -++ sendCommand( rCommand ); -++ -++ rCondition.wait(); -++} -++ -++void UnxFilePicker::appendEscaped( ::rtl::OUStringBuffer &rBuffer, const ::rtl::OUString &rString ) -++{ -++ const sal_Unicode *pUnicode = rString.getStr(); -++ const sal_Unicode *pEnd = pUnicode + rString.getLength(); -++ -++ rBuffer.appendAscii( "\"" , 1 ); -++ -++ for ( ; pUnicode != pEnd; ++pUnicode ) -++ { -++ if ( *pUnicode == '\\' ) -++ rBuffer.appendAscii( "\\\\", 2 ); -++ else if ( *pUnicode == '"' ) -++ rBuffer.appendAscii( "\\\"", 2 ); -++ else if ( *pUnicode == '\n' ) -++ rBuffer.appendAscii( "\\n", 2 ); -++ else -++ rBuffer.append( *pUnicode ); -++ } -++ -++ rBuffer.appendAscii( "\"", 1 ); -++} -++ -++sal_Bool UnxFilePicker::controlIdInfo( sal_Int16 nControlId, ::rtl::OUString &rType, sal_Int32 &rTitleId ) -++{ -++ typedef struct { -++ sal_Int16 nId; -++ const ::rtl::OUString *pType; -++ sal_Int32 nTitle; -++ } ElementToName; -++ -++ const ::rtl::OUString aCheckBox( RTL_CONSTASCII_USTRINGPARAM( "checkbox" ) ); -++ const ::rtl::OUString aControl( RTL_CONSTASCII_USTRINGPARAM( "control" ) ); -++ const ::rtl::OUString aEdit( RTL_CONSTASCII_USTRINGPARAM( "edit" ) ); -++ const ::rtl::OUString aLabel( RTL_CONSTASCII_USTRINGPARAM( "label" ) ); -++ const ::rtl::OUString aListBox( RTL_CONSTASCII_USTRINGPARAM( "listbox" ) ); -++ const ::rtl::OUString aPushButton( RTL_CONSTASCII_USTRINGPARAM( "pushbutton" ) ); -++ -++ const ElementToName *pPtr; -++ const ElementToName pArray[] = -++ { -++ { CommonFilePickerElementIds::PUSHBUTTON_OK, &aPushButton, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::PUSHBUTTON_CANCEL, &aPushButton, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::LISTBOX_FILTER, &aListBox, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::CONTROL_FILEVIEW, &aControl, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::EDIT_FILEURL, &aEdit, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::LISTBOX_FILTER_LABEL, &aLabel, 0/*FIXME?*/ }, -++ { CommonFilePickerElementIds::EDIT_FILEURL_LABEL, &aLabel, 0/*FIXME?*/ }, -++ -++ { ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, &aCheckBox, STR_SVT_FILEPICKER_AUTO_EXTENSION }, -++ { ExtendedFilePickerElementIds::CHECKBOX_PASSWORD, &aCheckBox, STR_SVT_FILEPICKER_PASSWORD }, -++ { ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS, &aCheckBox, STR_SVT_FILEPICKER_FILTER_OPTIONS }, -++ { ExtendedFilePickerElementIds::CHECKBOX_READONLY, &aCheckBox, STR_SVT_FILEPICKER_READONLY }, -++ { ExtendedFilePickerElementIds::CHECKBOX_LINK, &aCheckBox, STR_SVT_FILEPICKER_INSERT_AS_LINK }, -++ { ExtendedFilePickerElementIds::CHECKBOX_PREVIEW, &aCheckBox, STR_SVT_FILEPICKER_SHOW_PREVIEW }, -++ { ExtendedFilePickerElementIds::PUSHBUTTON_PLAY, &aPushButton, STR_SVT_FILEPICKER_PLAY }, -++ { ExtendedFilePickerElementIds::LISTBOX_VERSION, &aListBox, STR_SVT_FILEPICKER_VERSION }, -++ { ExtendedFilePickerElementIds::LISTBOX_TEMPLATE, &aListBox, STR_SVT_FILEPICKER_TEMPLATES }, -++ { ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE, &aListBox, STR_SVT_FILEPICKER_IMAGE_TEMPLATE }, -++ { ExtendedFilePickerElementIds::CHECKBOX_SELECTION, &aCheckBox, STR_SVT_FILEPICKER_SELECTION }, -++ { 0, 0, 0 } -++ }; -++ -++ for ( pPtr = pArray; pPtr->nId && ( pPtr->nId != nControlId ); ++pPtr ) -++ ; -++ -++ if ( pPtr->nId == nControlId ) -++ { -++ rType = *(pPtr->pType); -++ rTitleId = pPtr->nTitle; -++ -++ return sal_True; -++ } -++ -++ return sal_False; -++} -++ -++sal_Bool UnxFilePicker::controlActionInfo( sal_Int16 nControlAction, ::rtl::OUString &rType ) -++{ -++ typedef struct { -++ sal_Int16 nId; -++ const ::rtl::OUString pType; -++ } ElementToName; -++ -++ const ElementToName *pPtr; -++ const ElementToName pArray[] = -++ { -++ { ControlActions::ADD_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "addItem" ) ) }, -++ { ControlActions::ADD_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "addItems" ) ) }, -++ { ControlActions::DELETE_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "deleteItem" ) ) }, -++ { ControlActions::DELETE_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "deleteItems" ) ) }, -++ { ControlActions::SET_SELECT_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setSelectedItem" ) ) }, -++ { ControlActions::GET_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getItems" ) ) }, -++ { ControlActions::GET_SELECTED_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getSelectedItem" ) ) }, -++ { ControlActions::GET_SELECTED_ITEM_INDEX, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getSelectedItemIndex" ) ) }, -++ { ControlActions::SET_HELP_URL, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setHelpURL" ) ) }, -++ { ControlActions::GET_HELP_URL, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getHelpURL" ) ) }, -++ { 0, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "noAction" ) ) } -++ }; -++ -++ for ( pPtr = pArray; pPtr->nId && ( pPtr->nId != nControlAction ); ++pPtr ) -++ ; -++ -++ rType = pPtr->pType; -++ -++ return sal_True; -++} -++ -++void UnxFilePicker::sendAppendControlCommand( sal_Int16 nControlId ) -++{ -++ ::rtl::OUString aType; -++ sal_Int32 nTitleId; -++ -++ if ( controlIdInfo( nControlId, aType, nTitleId ) ) -++ { -++ ::rtl::OUStringBuffer aBuffer( 1024 ); -++ -++ aBuffer.appendAscii( "appendControl " ); -++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, aType ); -++ aBuffer.appendAscii( " ", 1 ); -++ appendEscaped( aBuffer, m_pResMgr? String( ResId( nTitleId, *m_pResMgr ) ): String() ); -++ -++ sendCommand( aBuffer.makeStringAndClear() ); -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxFilePicker.hxx fpicker/source/unx/tde_unx/UnxFilePicker.hxx -+--- fpicker/source/unx/tde_unx/UnxFilePicker.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxFilePicker.hxx 2011-08-17 14:07:41.705113628 -0500 -+@@ -0,0 +1,178 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _UNXFILEPICKER_HXX_ -++#define _UNXFILEPICKER_HXX_ -++ -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++#include -++ -++class UnxFilePickerCommandThread; -++class UnxFilePickerNotifyThread; -++class ResMgr; -++ -++class UnxFilePickerDummy -++{ -++protected: -++ osl::Mutex m_aMutex; -++ osl::Mutex m_rbHelperMtx; -++}; -++ -++class UnxFilePicker : -++ public UnxFilePickerDummy, -++ public cppu::WeakComponentImplHelper8< -++ ::com::sun::star::ui::dialogs::XFilterManager, -++ ::com::sun::star::ui::dialogs::XFilterGroupManager, -++ ::com::sun::star::ui::dialogs::XFilePickerControlAccess, -++ ::com::sun::star::ui::dialogs::XFilePickerNotifier, -++// TODO ::com::sun::star::ui::dialogs::XFilePreview, -++ ::com::sun::star::lang::XInitialization, -++ ::com::sun::star::util::XCancellable, -++ ::com::sun::star::lang::XEventListener, -++ ::com::sun::star::lang::XServiceInfo > -++{ -++protected: -++ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xServiceMgr; // to instanciate own services -++ -++ pid_t m_nFilePickerPid; -++ int m_nFilePickerWrite; // (tde|...)filepicker gets it as stdin -++ int m_nFilePickerRead; // (tde|...)filepicker gets it as stdout -++ -++ UnxFilePickerNotifyThread *m_pNotifyThread; -++ UnxFilePickerCommandThread *m_pCommandThread; -++ -++ ResMgr *m_pResMgr; -++ -++public: -++ UnxFilePicker( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceMgr ); -++ virtual ~UnxFilePicker(); -++ -++ // XFilePickerNotifier -++ -++ virtual void SAL_CALL addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XExecutableDialog functions -++ -++ virtual void SAL_CALL setTitle( const ::rtl::OUString &rTitle ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual sal_Int16 SAL_CALL execute() throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XFilePicker functions -++ -++ virtual void SAL_CALL setMultiSelectionMode( sal_Bool bMode ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL setDefaultName( const ::rtl::OUString &rName ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL setDisplayDirectory( const ::rtl::OUString &rDirectory ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual ::rtl::OUString SAL_CALL getDisplayDirectory() throw( ::com::sun::star::uno::RuntimeException ); -++ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles() throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XFilterManager functions -++ -++ virtual void SAL_CALL appendFilter( const ::rtl::OUString &rTitle, const ::rtl::OUString &rFilter ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL setCurrentFilter( const ::rtl::OUString &rTitle ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); -++ virtual ::rtl::OUString SAL_CALL getCurrentFilter() throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XFilterGroupManager functions -++ -++ virtual void SAL_CALL appendFilterGroup( const ::rtl::OUString &rGroupTitle, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > &rFilters ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); -++ -++ // XFilePickerControlAccess functions -++ -++ virtual void SAL_CALL setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const ::com::sun::star::uno::Any &rValue ) throw (::com::sun::star::uno::RuntimeException); -++ virtual ::com::sun::star::uno::Any SAL_CALL getValue( sal_Int16 nControlId, sal_Int16 nControlAction ) throw (::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL enableControl( sal_Int16 nControlId, sal_Bool bEnable ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL setLabel( sal_Int16 nControlId, const ::rtl::OUString &rLabel ) throw (::com::sun::star::uno::RuntimeException); -++ virtual ::rtl::OUString SAL_CALL getLabel( sal_Int16 nControlId ) throw (::com::sun::star::uno::RuntimeException); -++ -++ /* TODO XFilePreview -++ -++ virtual ::com::sun::star::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats( ) throw (::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getTargetColorDepth( ) throw (::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getAvailableWidth( ) throw (::com::sun::star::uno::RuntimeException); -++ virtual sal_Int32 SAL_CALL getAvailableHeight( ) throw (::com::sun::star::uno::RuntimeException); -++ virtual void SAL_CALL setImage( sal_Int16 aImageFormat, const ::com::sun::star::uno::Any &rImage ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL setShowState( sal_Bool bShowState ) throw (::com::sun::star::uno::RuntimeException); -++ virtual sal_Bool SAL_CALL getShowState( ) throw (::com::sun::star::uno::RuntimeException); -++ */ -++ -++ // XInitialization -++ -++ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > &rArguments ) throw( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException ); -++ -++ // XCancellable -++ -++ virtual void SAL_CALL cancel( ) throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XEventListener -++ -++ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject &rEvent ) throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // XServiceInfo -++ -++ virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); -++ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString &rServiceName ) throw( ::com::sun::star::uno::RuntimeException ); -++ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException ); -++ -++private: -++ // prevent copy and assignment -++ UnxFilePicker( const UnxFilePicker& ); -++ UnxFilePicker& operator=( const UnxFilePicker& ); -++ -++protected: -++ void initFilePicker(); -++ void checkFilePicker() throw( ::com::sun::star::uno::RuntimeException ); -++ -++ // Async sendCommand -++ void sendCommand( const ::rtl::OUString &rCommand ); -++ // Synchronized sendCommand -++ void sendCommand( const ::rtl::OUString &rCommand, ::osl::Condition &rCondition ); -++ void appendEscaped( ::rtl::OUStringBuffer &rBuffer, const ::rtl::OUString &rString ); -++ -++private: -++ sal_Bool controlIdInfo( sal_Int16 nControlId, ::rtl::OUString &rType, sal_Int32 &rTitleId ); -++ sal_Bool controlActionInfo( sal_Int16 nControlId, ::rtl::OUString &rType ); -++ void sendAppendControlCommand( sal_Int16 nControlId ); -++}; -++ -++#endif // _UNXFILEPICKER_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxFPentry.cxx fpicker/source/unx/tde_unx/UnxFPentry.cxx -+--- fpicker/source/unx/tde_unx/UnxFPentry.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxFPentry.cxx 2011-08-17 14:06:26.059319485 -0500 -+@@ -0,0 +1,128 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++ -++#include -++#include -++ -++#include "UnxFilePicker.hxx" -++#include "FPServiceInfo.hxx" -++ -++using namespace ::rtl; -++using namespace ::com::sun::star::uno; -++using namespace ::com::sun::star::container; -++using namespace ::com::sun::star::lang; -++using namespace ::com::sun::star::registry; -++using namespace ::cppu; -++using ::com::sun::star::ui::dialogs::XFilePicker; -++ -++////////////////////////////////////////////////////////////////////////// -++// -++////////////////////////////////////////////////////////////////////////// -++ -++static Reference< XInterface > SAL_CALL createInstance( const Reference< XMultiServiceFactory >& rServiceManager ) -++{ -++ return Reference< XInterface >( -++ static_cast< XFilePicker* >( new UnxFilePicker( rServiceManager ) ) ); -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// the three uno functions that will be exported -++////////////////////////////////////////////////////////////////////////// -++ -++extern "C" -++{ -++ -++////////////////////////////////////////////////////////////////////////// -++// component_getImplementationEnvironment -++////////////////////////////////////////////////////////////////////////// -++ -++void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv ) -++{ -++ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// -++////////////////////////////////////////////////////////////////////////// -++ -++sal_Bool SAL_CALL component_writeInfo( void* pServiceManager, void* pRegistryKey ) -++{ -++ sal_Bool bRetVal = sal_True; -++ -++ if ( pRegistryKey ) -++ { -++ try -++ { -++ Reference< XRegistryKey > pXNewKey( static_cast< XRegistryKey* >( pRegistryKey ) ); -++ pXNewKey->createKey( OUString::createFromAscii( FILE_PICKER_REGKEY_NAME ) ); -++ } -++ catch( InvalidRegistryException& ) -++ { -++ OSL_ENSURE( sal_False, "InvalidRegistryException caught" ); -++ bRetVal = sal_False; -++ } -++ } -++ -++ return bRetVal; -++} -++ -++////////////////////////////////////////////////////////////////////////// -++// -++////////////////////////////////////////////////////////////////////////// -++ -++void* SAL_CALL component_getFactory( const sal_Char* pImplName, uno_Interface* pSrvManager, uno_Interface* pRegistryKey ) -++{ -++ void* pRet = 0; -++ -++ if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FILE_PICKER_IMPL_NAME ) ) ) -++ { -++ Sequence< OUString > aSNS( 1 ); -++ aSNS.getArray( )[0] = OUString::createFromAscii( FILE_PICKER_SERVICE_NAME ); -++ -++ Reference< XSingleServiceFactory > xFactory ( createSingleFactory( -++ reinterpret_cast< XMultiServiceFactory* > ( pSrvManager ), -++ OUString::createFromAscii( pImplName ), -++ createInstance, -++ aSNS ) ); -++ if ( xFactory.is() ) -++ { -++ xFactory->acquire(); -++ pRet = xFactory.get(); -++ } -++ } -++ -++ return pRet; -++} -++ -++} // extern "C" -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxNotifyThread.cxx fpicker/source/unx/tde_unx/UnxNotifyThread.cxx -+--- fpicker/source/unx/tde_unx/UnxNotifyThread.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxNotifyThread.cxx 2011-08-17 14:06:06.307806939 -0500 -+@@ -0,0 +1,116 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include -++#include -++ -++using namespace ::com::sun::star; -++ -++////////////////////////////////////////////////////////////////////////// -++// UnxFilePickerNotifyThread -++////////////////////////////////////////////////////////////////////////// -++ -++UnxFilePickerNotifyThread::UnxFilePickerNotifyThread( UnxFilePicker *pUnxFilePicker ) -++ : m_pUnxFilePicker( pUnxFilePicker ), -++ m_bExit( sal_False ), -++ m_eNotifyType( Nothing ), -++ m_nControlId( 0 ) -++{ -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::addFilePickerListener( const uno::Reference< ui::dialogs::XFilePickerListener >& xListener ) -++ throw( uno::RuntimeException ) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_xListener = xListener; -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::removeFilePickerListener( const uno::Reference< ui::dialogs::XFilePickerListener >& xListener ) -++ throw( uno::RuntimeException ) -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_xListener.clear(); -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::exit() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_bExit = sal_True; -++ -++ m_aExitCondition.reset(); -++ m_aNotifyCondition.set(); -++ -++ m_aExitCondition.wait(); -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::fileSelectionChanged() -++{ -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ m_eNotifyType = FileSelectionChanged; -++ m_nControlId = 0; -++ -++ m_aNotifyCondition.set(); -++} -++ -++void SAL_CALL UnxFilePickerNotifyThread::run() -++{ -++ do { -++ m_aNotifyCondition.reset(); -++ m_aNotifyCondition.wait(); -++ -++ if ( m_xListener.is() && m_pUnxFilePicker ) -++ { -++ ::osl::MutexGuard aGuard( m_aMutex ); -++ -++ ui::dialogs::FilePickerEvent aEvent( *m_pUnxFilePicker, m_nControlId ); -++ -++ switch ( m_eNotifyType ) -++ { -++ case FileSelectionChanged: -++ m_xListener->fileSelectionChanged( aEvent ); -++ break; -++ -++ // TODO More to come... -++ -++ default: -++ // nothing -++ break; -++ } -++ } -++ } while ( !m_bExit ); -++ -++ m_aExitCondition.set(); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN fpicker/source/unx/tde_unx/UnxNotifyThread.hxx fpicker/source/unx/tde_unx/UnxNotifyThread.hxx -+--- fpicker/source/unx/tde_unx/UnxNotifyThread.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ fpicker/source/unx/tde_unx/UnxNotifyThread.hxx 2011-08-17 14:05:56.737074019 -0500 -+@@ -0,0 +1,90 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2010 Novell, Inc. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _UNXNOTIFYTHREAD_HXX_ -++#define _UNXNOTIFYTHREAD_HXX_ -++ -++#include -++#include -++ -++#include -++#include -++#include -++ -++class UnxFilePicker; -++ -++class UnxFilePickerNotifyThread : public ::osl::Thread -++{ -++protected: -++ enum NotifyType -++ { -++ Nothing = 0, -++ FileSelectionChanged -++ // TODO More to come... -++ }; -++ -++ UnxFilePicker *m_pUnxFilePicker; -++ -++ ::osl::Mutex m_aMutex; -++ -++ ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener > m_xListener; -++ -++ sal_Bool m_bExit; -++ ::osl::Condition m_aExitCondition; -++ -++ NotifyType m_eNotifyType; -++ ::osl::Condition m_aNotifyCondition; -++ sal_Int16 m_nControlId; -++ -++public: -++ UnxFilePickerNotifyThread( UnxFilePicker *pUnxFilePicker ); -++ -++ virtual void SAL_CALL addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) -++ throw( ::com::sun::star::uno::RuntimeException ); -++ virtual void SAL_CALL removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) -++ throw( ::com::sun::star::uno::RuntimeException ); -++ -++ void SAL_CALL exit(); -++ -++ void SAL_CALL fileSelectionChanged(); -++ /* TODO -++ void SAL_CALL directoryChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ); -++ rtl::OUString SAL_CALL helpRequested( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ) const; -++ void SAL_CALL controlStateChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ); -++ void SAL_CALL dialogSizeChanged( ); -++ */ -++ -++protected: -++ virtual void SAL_CALL run(); -++}; -++ -++#endif // _UNXNOTIFYTHREAD_HXX_ -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN shell/source/backends/tdebe/makefile.mk shell/source/backends/tdebe/makefile.mk -+--- shell/source/backends/tdebe/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/makefile.mk 2011-08-17 14:16:06.283767347 -0500 -+@@ -0,0 +1,82 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++PRJ=..$/..$/.. -++ -++PRJNAME=shell -++TARGET=tdebe -++ -++LIBTARGET=NO -++ENABLE_EXCEPTIONS=TRUE -++VISIBILITY_HIDDEN=TRUE -++ -++# --- Settings --- -++ -++.INCLUDE : settings.mk -++ -++# For some of the included external TDE headers, GCC complains about shadowed -++# symbols in instantiated template code only at the end of a compilation unit, -++# so the only solution is to disable that warning here: -++.IF "$(COM)" == "GCC" -++CFLAGSCXX+=-Wno-shadow -++.ENDIF -++ -++UNIXTEXT=$(MISC)/$(TARGET)1-ucd.txt -++ -++# no "lib" prefix -++DLLPRE = -++ -++.IF "$(ENABLE_TDE)" == "TRUE" -++ -++CFLAGS+=$(TDE_CFLAGS) -++ -++# --- Files --- -++ -++SLOFILES=\ -++ $(SLO)$/tdeaccess.obj \ -++ $(SLO)$/tdebackend.obj -++ -++SHL1NOCHECK=TRUE -++SHL1TARGET=$(TARGET)1.uno -++SHL1OBJS=$(SLOFILES) -++SHL1DEF=$(MISC)$/$(SHL1TARGET).def -++ -++SHL1IMPLIB=i$(SHL1TARGET) -++SHL1LINKFLAGS+=$(TDE_LIBS) -lkio -++SHL1STDLIBS= \ -++ $(CPPUHELPERLIB) \ -++ $(CPPULIB) \ -++ $(SALLIB) -++ -++SHL1DEF=$(MISC)$/$(SHL1TARGET).def -++DEF1NAME=$(SHL1TARGET) -++ -++.ENDIF # "$(ENABLE_TDE)" == "TRUE" -++ -++# --- Targets --- -++ -++.INCLUDE : target.mk -+diff -urN shell/source/backends/tdebe/tdeaccess.cxx shell/source/backends/tdebe/tdeaccess.cxx -+--- shell/source/backends/tdebe/tdeaccess.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/tdeaccess.cxx 2011-08-17 14:16:46.426842396 -0500 -+@@ -0,0 +1,319 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++* -++* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++* -++* Copyright 2000, 2010 Oracle and/or its affiliates. -++* Copyright 2011 Timothy Pearson -++* -++* OpenOffice.org - a multi-platform office productivity suite -++* -++* This file is part of OpenOffice.org. -++* -++* OpenOffice.org is free software: you can redistribute it and/or modify -++* it under the terms of the GNU Lesser General Public License version 3 -++* only, as published by the Free Software Foundation. -++* -++* OpenOffice.org 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 Lesser General Public License version 3 for more details -++* (a copy is included in the LICENSE file that accompanied this code). -++* -++* You should have received a copy of the GNU Lesser General Public License -++* version 3 along with OpenOffice.org. If not, see -++* -++* for a copy of the LGPLv3 License. -++* -++************************************************************************/ -++ -++#include "precompiled_shell.hxx" -++#include "sal/config.h" -++ -++#include "com/sun/star/uno/Any.hxx" -++#include "cppu/unotype.hxx" -++#include "osl/diagnose.h" -++#include "osl/file.h" -++#include "rtl/string.h" -++#include "rtl/ustring.hxx" -++ -++#include "tde_headers.h" -++ -++#include "tdeaccess.hxx" -++ -++#define SPACE ' ' -++#define COMMA ',' -++#define SEMI_COLON ';' -++ -++namespace tdeaccess { -++ -++namespace { -++ -++namespace css = com::sun::star ; -++namespace uno = css::uno ; -++ -++} -++ -++css::beans::Optional< css::uno::Any > getValue(rtl::OUString const & id) { -++ if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ExternalMailer"))) { -++ KEMailSettings aEmailSettings; -++ TQString aClientProgram; -++ ::rtl::OUString sClientProgram; -++ -++ aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram ); -++ if ( aClientProgram.isEmpty() ) -++ aClientProgram = "kmail"; -++ else -++ aClientProgram = aClientProgram.section(SPACE, 0, 0); -++ sClientProgram = (const sal_Unicode *) aClientProgram.ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sClientProgram ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight"))) -++ { -++ TQFont aFixedFont; -++ short nFontHeight; -++ -++ aFixedFont = KGlobalSettings::fixedFont(); -++ nFontHeight = aFixedFont.pointSize(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( nFontHeight ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName"))) -++ { -++ TQFont aFixedFont; -++ TQString aFontName; -++ :: rtl::OUString sFontName; -++ -++ aFixedFont = KGlobalSettings::fixedFont(); -++ aFontName = aFixedFont.family(); -++ sFontName = (const sal_Unicode *) aFontName.ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sFontName ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport"))) -++ { -++ /* does not make much sense without an accessibility bridge */ -++ sal_Bool ATToolSupport = sal_False; -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( rtl::OUString::valueOf( ATToolSupport ) ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable"))) -++ { -++ TQString aDocumentsDir( KGlobalSettings::documentPath() ); -++ rtl::OUString sDocumentsDir; -++ rtl::OUString sDocumentsURL; -++ if ( aDocumentsDir.endsWith(TQChar('/')) ) -++ aDocumentsDir.truncate ( aDocumentsDir.length() - 1 ); -++ sDocumentsDir = (const sal_Unicode *) aDocumentsDir.ucs2(); -++ osl_getFileURLFromSystemPath( sDocumentsDir.pData, &sDocumentsURL.pData ); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sDocumentsURL ) ); -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName"))) -++ { -++ TQString aFTPProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aFTPProxy = KProtocolManager::proxyFor( "FTP" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aFTPProxy.isEmpty() ) -++ { -++ KURL aProxy(aFTPProxy); -++ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sProxy ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort"))) -++ { -++ TQString aFTPProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aFTPProxy = KProtocolManager::proxyFor( "FTP" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aFTPProxy.isEmpty() ) -++ { -++ KURL aProxy(aFTPProxy); -++ sal_Int32 nPort = aProxy.port(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( nPort ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName"))) -++ { -++ TQString aHTTPProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aHTTPProxy.isEmpty() ) -++ { -++ KURL aProxy(aHTTPProxy); -++ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sProxy ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort"))) -++ { -++ TQString aHTTPProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aHTTPProxy.isEmpty() ) -++ { -++ KURL aProxy(aHTTPProxy); -++ sal_Int32 nPort = aProxy.port(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( nPort ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName"))) -++ { -++ TQString aHTTPSProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aHTTPSProxy.isEmpty() ) -++ { -++ KURL aProxy(aHTTPSProxy); -++ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sProxy ) ); -++ } -++ } else if (id.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort"))) -++ { -++ TQString aHTTPSProxy; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" ); -++ break; -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++// In such cases, the proxy address is not stored in TDE, but determined dynamically. -++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -++// The best we can do here is to ask the current value for a given address. -++ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" ); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aHTTPSProxy.isEmpty() ) -++ { -++ KURL aProxy(aHTTPSProxy); -++ sal_Int32 nPort = aProxy.port(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( nPort ) ); -++ } -++ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy"))) { -++ TQString aNoProxyFor; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++ aNoProxyFor = KProtocolManager::noProxyFor(); -++ break; -++ default: // No proxy is used -++ break; -++ } -++ if ( !aNoProxyFor.isEmpty() ) -++ { -++ ::rtl::OUString sNoProxyFor; -++ -++ aNoProxyFor = aNoProxyFor.replace( COMMA, SEMI_COLON ); -++ sNoProxyFor = (const sal_Unicode *) aNoProxyFor.ucs2(); -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( sNoProxyFor ) ); -++ } -++ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) { -++ int nProxyType; -++ switch ( KProtocolManager::proxyType() ) -++ { -++ case KProtocolManager::ManualProxy: // Proxies are manually configured -++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -++ nProxyType = 1; -++ break; -++ default: // No proxy is used -++ nProxyType = 0; -++ } -++ return css::beans::Optional< css::uno::Any >( -++ true, uno::makeAny( (sal_Int32) nProxyType ) ); -++ } else { -++ OSL_ASSERT(false); // this cannot happen -++ } -++ return css::beans::Optional< css::uno::Any >(); -++} -++ -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN shell/source/backends/tdebe/tdeaccess.hxx shell/source/backends/tdebe/tdeaccess.hxx -+--- shell/source/backends/tdebe/tdeaccess.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/tdeaccess.hxx 2011-08-17 14:16:31.565704001 -0500 -+@@ -0,0 +1,51 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++* -++* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++* -++* Copyright 2000, 2010 Oracle and/or its affiliates. -++* Copyright 2011 Timothy Pearson -++* -++* OpenOffice.org - a multi-platform office productivity suite -++* -++* This file is part of OpenOffice.org. -++* -++* OpenOffice.org is free software: you can redistribute it and/or modify -++* it under the terms of the GNU Lesser General Public License version 3 -++* only, as published by the Free Software Foundation. -++* -++* OpenOffice.org 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 Lesser General Public License version 3 for more details -++* (a copy is included in the LICENSE file that accompanied this code). -++* -++* You should have received a copy of the GNU Lesser General Public License -++* version 3 along with OpenOffice.org. If not, see -++* -++* for a copy of the LGPLv3 License. -++* -++************************************************************************/ -++ -++#ifndef INCLUDED_SHELL_SOURCE_BACKENDS_TDEBE_TDEACCESS_HXX -++#define INCLUDED_SHELL_SOURCE_BACKENDS_TDEBE_TDEACCESS_HXX -++ -++#include "sal/config.h" -++ -++#include "com/sun/star/beans/Optional.hpp" -++ -++namespace com { namespace sun { namespace star { namespace uno { -++ class Any; -++} } } } -++namespace rtl { class OUString; } -++ -++namespace tdeaccess { -++ -++com::sun::star::beans::Optional< com::sun::star::uno::Any > getValue( -++ rtl::OUString const & id); -++ -++} -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN shell/source/backends/tdebe/tdebackend.cxx shell/source/backends/tdebe/tdebackend.cxx -+--- shell/source/backends/tdebe/tdebackend.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/tdebackend.cxx 2011-08-17 14:16:42.136513747 -0500 -+@@ -0,0 +1,262 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++* -++* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++* -++* Copyright 2000, 2010 Oracle and/or its affiliates. -++* Copyright 2011 Timothy Pearson -++* -++* OpenOffice.org - a multi-platform office productivity suite -++* -++* This file is part of OpenOffice.org. -++* -++* OpenOffice.org is free software: you can redistribute it and/or modify -++* it under the terms of the GNU Lesser General Public License version 3 -++* only, as published by the Free Software Foundation. -++* -++* OpenOffice.org 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 Lesser General Public License version 3 for more details -++* (a copy is included in the LICENSE file that accompanied this code). -++* -++* You should have received a copy of the GNU Lesser General Public License -++* version 3 along with OpenOffice.org. If not, see -++* -++* for a copy of the LGPLv3 License. -++* -++************************************************************************/ -++ -++#include "precompiled_shell.hxx" -++#include "sal/config.h" -++ -++#include "boost/noncopyable.hpp" -++#include "com/sun/star/beans/Optional.hpp" -++#include "com/sun/star/beans/PropertyVetoException.hpp" -++#include "com/sun/star/beans/UnknownPropertyException.hpp" -++#include "com/sun/star/beans/XPropertyChangeListener.hpp" -++#include "com/sun/star/beans/XPropertySet.hpp" -++#include "com/sun/star/beans/XPropertySetInfo.hpp" -++#include "com/sun/star/beans/XVetoableChangeListener.hpp" -++#include "com/sun/star/lang/IllegalArgumentException.hpp" -++#include "com/sun/star/lang/WrappedTargetException.hpp" -++#include "com/sun/star/lang/XMultiComponentFactory.hpp" -++#include "com/sun/star/lang/XServiceInfo.hpp" -++#include "com/sun/star/lang/WrappedTargetException.hpp" -++#include "com/sun/star/uno/Any.hxx" -++#include "com/sun/star/uno/Reference.hxx" -++#include "com/sun/star/uno/RuntimeException.hpp" -++#include "com/sun/star/uno/Sequence.hxx" -++#include "com/sun/star/uno/XComponentContext.hpp" -++#include "com/sun/star/uno/XCurrentContext.hpp" -++#include "cppuhelper/factory.hxx" -++#include "cppuhelper/implbase2.hxx" -++#include "cppuhelper/implementationentry.hxx" -++#include "cppuhelper/weak.hxx" -++#include "rtl/string.h" -++#include "rtl/ustring.h" -++#include "rtl/ustring.hxx" -++#include "sal/types.h" -++#include "uno/current_context.hxx" -++#include "uno/lbnames.h" -++ -++#include "tde_headers.h" -++ -++#include "tdeaccess.hxx" -++ -++namespace { -++ -++namespace css = com::sun::star; -++ -++rtl::OUString SAL_CALL getServiceImplementationName() { -++ return rtl::OUString( -++ RTL_CONSTASCII_USTRINGPARAM( -++ "com.sun.star.comp.configuration.backend.TDEBackend")); -++} -++ -++css::uno::Sequence< rtl::OUString > SAL_CALL getServiceSupportedServiceNames() { -++ rtl::OUString name( -++ RTL_CONSTASCII_USTRINGPARAM( -++ "com.sun.star.configuration.backend.TDEBackend")); -++ return css::uno::Sequence< rtl::OUString >(&name, 1); -++} -++ -++class Service: -++ public cppu::WeakImplHelper2< -++ css::lang::XServiceInfo, css::beans::XPropertySet >, -++ private boost::noncopyable -++{ -++public: -++ Service(); -++ -++private: -++ virtual ~Service() {} -++ -++ virtual rtl::OUString SAL_CALL getImplementationName() -++ throw (css::uno::RuntimeException) -++ { return getServiceImplementationName(); } -++ -++ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName) -++ throw (css::uno::RuntimeException) -++ { return ServiceName == getSupportedServiceNames()[0]; } -++ -++ virtual css::uno::Sequence< rtl::OUString > SAL_CALL -++ getSupportedServiceNames() throw (css::uno::RuntimeException) -++ { return getServiceSupportedServiceNames(); } -++ -++ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL -++ getPropertySetInfo() throw (css::uno::RuntimeException) -++ { return css::uno::Reference< css::beans::XPropertySetInfo >(); } -++ -++ virtual void SAL_CALL setPropertyValue( -++ rtl::OUString const &, css::uno::Any const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::beans::PropertyVetoException, -++ css::lang::IllegalArgumentException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException); -++ -++ virtual css::uno::Any SAL_CALL getPropertyValue( -++ rtl::OUString const & PropertyName) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException); -++ -++ virtual void SAL_CALL addPropertyChangeListener( -++ rtl::OUString const &, -++ css::uno::Reference< css::beans::XPropertyChangeListener > const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException) -++ {} -++ -++ virtual void SAL_CALL removePropertyChangeListener( -++ rtl::OUString const &, -++ css::uno::Reference< css::beans::XPropertyChangeListener > const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException) -++ {} -++ -++ virtual void SAL_CALL addVetoableChangeListener( -++ rtl::OUString const &, -++ css::uno::Reference< css::beans::XVetoableChangeListener > const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException) -++ {} -++ -++ virtual void SAL_CALL removeVetoableChangeListener( -++ rtl::OUString const &, -++ css::uno::Reference< css::beans::XVetoableChangeListener > const &) -++ throw ( -++ css::beans::UnknownPropertyException, -++ css::lang::WrappedTargetException, css::uno::RuntimeException) -++ {} -++ -++ bool enabled_; -++}; -++ -++Service::Service(): enabled_(false) { -++ css::uno::Reference< css::uno::XCurrentContext > context( -++ css::uno::getCurrentContext()); -++ if (context.is()) { -++ rtl::OUString desktop; -++ context->getValueByName( -++ rtl::OUString( -++ RTL_CONSTASCII_USTRINGPARAM("system.desktop-environment"))) >>= -++ desktop; -++ enabled_ = desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("TDE")) && -++ KApplication::kApplication() != 0; -++ } -++} -++ -++void Service::setPropertyValue(rtl::OUString const &, css::uno::Any const &) -++ throw ( -++ css::beans::UnknownPropertyException, css::beans::PropertyVetoException, -++ css::lang::IllegalArgumentException, css::lang::WrappedTargetException, -++ css::uno::RuntimeException) -++{ -++ throw css::lang::IllegalArgumentException( -++ rtl::OUString( -++ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")), -++ static_cast< cppu::OWeakObject * >(this), -1); -++} -++ -++css::uno::Any Service::getPropertyValue(rtl::OUString const & PropertyName) -++ throw ( -++ css::beans::UnknownPropertyException, css::lang::WrappedTargetException, -++ css::uno::RuntimeException) -++{ -++ if (PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ExternalMailer")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")) || -++ PropertyName.equalsAsciiL( -++ RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) -++ { -++ return css::uno::makeAny( -++ enabled_ -++ ? tdeaccess::getValue(PropertyName) -++ : css::beans::Optional< css::uno::Any >()); -++ } -++ throw css::beans::UnknownPropertyException( -++ PropertyName, static_cast< cppu::OWeakObject * >(this)); -++} -++ -++css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance( -++ css::uno::Reference< css::uno::XComponentContext > const &) -++{ -++ return static_cast< cppu::OWeakObject * >(new Service); -++} -++ -++static cppu::ImplementationEntry const services[] = { -++ { &createInstance, &getServiceImplementationName, -++ &getServiceSupportedServiceNames, &cppu::createSingleComponentFactory, 0, -++ 0 }, -++ { 0, 0, 0, 0, 0, 0 } -++}; -++ -++} -++ -++extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( -++ char const * pImplName, void * pServiceManager, void * pRegistryKey) -++{ -++ return cppu::component_getFactoryHelper( -++ pImplName, pServiceManager, pRegistryKey, services); -++} -++ -++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL -++component_getImplementationEnvironment( -++ char const ** ppEnvTypeName, uno_Environment **) -++{ -++ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -++} -++ -++extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( -++ void * pServiceManager, void * pRegistryKey) -++{ -++ return component_writeInfoHelper(pServiceManager, pRegistryKey, services); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN shell/source/backends/tdebe/tdebe1-ucd.txt shell/source/backends/tdebe/tdebe1-ucd.txt -+--- shell/source/backends/tdebe/tdebe1-ucd.txt 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/backends/tdebe/tdebe1-ucd.txt 2011-08-17 14:16:36.266064060 -0500 -+@@ -0,0 +1,6 @@ -++[ComponentDescriptor] -++ImplementationName=com.sun.star.comp.configuration.backend.TDEBackend -++ComponentName=tdebe1.uno.so -++LoaderName=com.sun.star.loader.SharedLibrary -++[SupportedServices] -++com.sun.star.configuration.backend.TDEBackend -+--- fpicker/prj/build.lst 2010-11-11 09:30:08.000000000 -0600 -++++ fpicker/prj/build.lst 2011-08-17 19:28:07.578452546 -0500 -+@@ -7,8 +7,10 @@ -+ fp fpicker\source\unx\kde4 nmake - u fp_kde4_filepicker fp_inc NULL -+ fp fpicker\source\unx\kde_unx nmake - u fp_unx_common fp_inc NULL -+ fp fpicker\source\unx\kde nmake - u fp_unx_kde_filepicker fp_inc NULL -++fp fpicker\source\unx\tde_unx nmake - u fp_unx_tdecommon fp_inc NULL -++fp fpicker\source\unx\tde nmake - u fp_unx_tde_filepicker fp_inc NULL -+ fp fpicker\source\aqua nmake - u fp_macosx_filepicker NULL -+ fp fpicker\source\win32\filepicker nmake - w fp_win32_filepicker fp_inc NULL -+ fp fpicker\source\win32\folderpicker nmake - w fp_win32_folderpicker fp_inc NULL -+ fp fpicker\source\win32\misc nmake - w fp_win32_misc fp_win32_filepicker.w fp_win32_folderpicker.w fp_inc NULL -+-fp fpicker\util nmake - all fp_util fp_gnome_filepicker.u fp_unx_common.u fp_unx_kde_filepicker.u fp_win32_filepicker.w fp_win32_misc.w fp_win32_folderpicker.w NULL -++fp fpicker\util nmake - all fp_util fp_gnome_filepicker.u fp_unx_common.u fp_unx_kde_filepicker.u fp_unx_tdecommon.u fp_unx_tde_filepicker.u fp_win32_filepicker.w fp_win32_misc.w fp_win32_folderpicker.w NULL -+--- shell/prj/build.lst 2010-11-11 09:30:08.000000000 -0600 -++++ shell/prj/build.lst 2011-08-17 19:29:38.835371237 -0500 -+@@ -30,5 +30,6 @@ -+ sl shell\source\backends\gconfbe nmake - u sl_backends_gconfbe sl_inc NULL -+ sl shell\source\backends\kdebe nmake - u sl_backends_kdebe sl_inc NULL -+ sl shell\source\backends\kde4be nmake - u sl_backends_kde4be sl_inc NULL -++sl shell\source\backends\tdebe nmake - u sl_backends_tdebe sl_inc NULL -+ sl shell\source\backends\desktopbe nmake - u sl_backends_desktopbe sl_inc NULL -+ sl shell\source\win32\shlxthandler\ooofilt nmake - w sl_win32_shlxthandler_ooofilt sl_all_zipfile.w sl_all_ooofilereader.w sl_win32_shlxthandler_util.w sl_all sl_inc NULL -+--- connectivity/prj/build.lst 2010-11-11 13:08:58.000000000 -0600 -++++ connectivity/prj/build.lst 2011-08-17 19:31:47.795150674 -0500 -+@@ -12,6 +12,7 @@ -+ cn connectivity\source\drivers\mozab\bootstrap nmake - all cn_mozab_bootstrap cn_mozab_mozillasrc cn_inc NULL -+ cn connectivity\source\drivers\mozab nmake - all cn_mozab cn_mozab_bootstrap cn_dbtools cn_inc NULL -+ cn connectivity\source\drivers\kab nmake - all cn_kab cn_dbtools cn_inc NULL -++cn connectivity\source\drivers\tdeab nmake - all cn_tdeab cn_dbtools cn_inc NULL -+ cn connectivity\source\drivers\macab nmake - all cn_macab cn_dbtools cn_inc NULL -+ cn connectivity\source\drivers\evoab2 nmake - all cn_evoab2 cn_dbtools cn_file cn_inc NULL -+ cn connectivity\source\drivers\calc nmake - all cn_calc cn_file cn_inc NULL -+@@ -28,5 +29,5 @@ -+ cn connectivity\source\simpledbt nmake - all cn_simpledbt cn_cmtools cn_inc NULL -+ cn connectivity\source\dbtools nmake - all cn_dbtools cn_simpledbt cn_cmtools cn_parse cn_res cn_sdbcx cn_inc cn_res NULL -+ cn connectivity\qa\connectivity\tools nmake - all cn_qa_tools cn_inc NULL -+-cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_adabas cn_flat cn_dbase cn_hsqldb cn_macab NULL -++cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_tdeab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_adabas cn_flat cn_dbase cn_hsqldb cn_macab NULL -+ -+--- set_soenv.in 2011-03-08 12:51:39.000000000 -0600 -++++ set_soenv.in 2011-08-17 22:19:40.994282148 -0500 -+@@ -1732,6 +1732,10 @@ -+ ToFile( "KDE_GLIB_LIBS", "@KDE_GLIB_LIBS@", "e" ); -+ ToFile( "KDE_HAVE_GLIB", "@KDE_HAVE_GLIB@", "e" ); -+ ToFile( "ENABLE_KAB", "@ENABLE_KAB@", "e" ); -++ToFile( "ENABLE_TDE", "@ENABLE_TDE@", "e" ); -++ToFile( "TDE_CFLAGS", "@TDE_CFLAGS@", "e" ); -++ToFile( "TDE_LIBS", "@TDE_LIBS@", "e" ); -++ToFile( "ENABLE_TDEAB", "@ENABLE_TDEAB@", "e" ); -+ ToFile( "PSPRINT", "TRUE", "e" ); -+ ToFile( "MKDEPENDSOLVER", "TRUE", "e" ); -+ ToFile( "nodep", "@nodep@", "e" ); -+diff -urN shell/inc/tde_headers.h shell/inc/tde_headers.h -+--- shell/inc/tde_headers.h 1969-12-31 18:00:00.000000000 -0600 -++++ shell/inc/tde_headers.h 2011-08-18 00:00:30.118955481 -0500 -+@@ -0,0 +1,98 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef INCLUDED_VCL_TDE_HEADERS_H -++#define INCLUDED_VCL_TDE_HEADERS_H -++ -++/* ********* Suppress warnings if needed */ -++#include "sal/config.h" -++ -++#if defined __GNUC__ -++#pragma GCC system_header -++#endif -++ -++ -++/* ********* Hack, but needed because of conflicting types... */ -++#define Region QtXRegion -++ -++ -++/* ********* TQt headers */ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++/* ********* See hack on top of this file */ -++#undef Region -++ -++ -++/* ********* TDE base headers */ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++ -++/* ********* TDE address book connectivity headers */ -++#include -++#include -++#include -++#include -++ -++ -++#endif -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN connectivity/source/inc/resource/tdeab_res.hrc connectivity/source/inc/resource/tdeab_res.hrc -+--- connectivity/source/inc/resource/tdeab_res.hrc 1969-12-31 18:00:00.000000000 -0600 -++++ connectivity/source/inc/resource/tdeab_res.hrc 2011-08-18 00:42:41.185561810 -0500 -+@@ -0,0 +1,44 @@ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef CONNECTIVITY_RESOURCE_KAB_HRC -++#define CONNECTIVITY_RESOURCE_KAB_HRC -++ -++#include "resource/conn_shared_res.hrc" -++#include "resource/common_res.hrc" -++// ============================================================================ -++// = the tdeab driver's resource strings -++// ============================================================================ -++ -++#define STR_NO_TDE_INST ( STR_KAB_BASE + 0 ) -++#define STR_TDE_VERSION_TOO_OLD ( STR_KAB_BASE + 1 ) -++#define STR_TDE_VERSION_TOO_NEW ( STR_KAB_BASE + 2 ) -++#define STR_TDE_VERSION_TOO_NEW_WORK_AROUND ( STR_KAB_BASE + 3 ) -++ -++#endif // CONNECTIVITY_RESOURCE_KAB_HRC -++ -+diff -urN shell/prj/d.lst shell/prj/d.lst -+--- shell/prj/d.lst 2010-11-11 09:30:08.000000000 -0600 -++++ shell/prj/d.lst 2011-08-18 00:54:55.072395417 -0500 -+@@ -14,6 +14,7 @@ -+ ..\%__SRC%\bin\open-url %_DEST%\bin%_EXT%\open-url -+ ..\%__SRC%\bin\cde-open-url %_DEST%\bin%_EXT%\cde-open-url -+ ..\%__SRC%\bin\kde-open-url %_DEST%\bin%_EXT%\kde-open-url -++..\%__SRC%\bin\tde-open-url %_DEST%\bin%_EXT%\tde-open-url -+ ..\%__SRC%\bin\gnome-open-url %_DEST%\bin%_EXT%\gnome-open-url -+ ..\%__SRC%\bin\gnome-open-url.bin %_DEST%\bin%_EXT%\gnome-open-url.bin -+ ..\%__SRC%\bin\senddoc %_DEST%\bin%_EXT%\senddoc -+@@ -23,3 +24,4 @@ -+ -+ ..\%__SRC%\misc\*-ucd.txt %_DEST%\bin%_EXT%\*-ucd.txt -+ ..\inc\kde_headers.h %_DEST%\inc%_EXT%\shell\kde_headers.h -++..\inc\tde_headers.h %_DEST%\inc%_EXT%\shell\tde_headers.h -+diff -urN fpicker/prj/d.lst fpicker/prj/d.lst -+--- fpicker/prj/d.lst 2010-11-11 09:30:08.000000000 -0600 -++++ fpicker/prj/d.lst 2011-08-18 00:57:05.532528127 -0500 -+@@ -5,6 +5,7 @@ -+ ..\%__SRC%\bin\f*.res %_DEST%\bin%_EXT%\ -+ ..\%__SRC%\bin\f*.dll %_DEST%\bin%_EXT%\ -+ ..\%__SRC%\bin\kdefilepicker %_DEST%\bin%_EXT%\kdefilepicker -++..\%__SRC%\bin\tdefilepicker %_DEST%\bin%_EXT%\tdefilepicker -+ ..\%__SRC%\lib\f*.so %_DEST%\lib%_EXT%\ -+ ..\%__SRC%\lib\*.dylib %_DEST%\lib%_EXT%\*.dylib -+ -+@@ -14,3 +15,4 @@ -+ ..\source\unx\kde4\fps-kde4-ucd.txt %_DEST%\bin%_EXT%\fps-kde4-ucd.txt -+ ..\source\aqua\fps-aqua-ucd.txt %_DEST%\bin%_EXT%\fps-aqua-ucd.txt -+ ..\source\unx\kde_unx\fps-kde-ucd.txt %_DEST%\bin%_EXT%\fps-kde-ucd.txt -++..\source\unx\tde_unx\fps-tde-ucd.txt %_DEST%\bin%_EXT%\fps-tde-ucd.txt -+diff -urN connectivity/prj/d.lst connectivity/prj/d.lst -+--- connectivity/prj/d.lst 2010-11-11 09:30:07.000000000 -0600 -++++ connectivity/prj/d.lst 2011-08-18 00:58:04.797146865 -0500 -+@@ -8,6 +8,7 @@ -+ ..\source\drivers\adabas\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\ado\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\kab\*.xml %_DEST%\xml%_EXT%\*.xml -++..\source\drivers\tdeab\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\macab\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\file\*.xml %_DEST%\xml%_EXT%\*.xml -+ ..\source\drivers\flat\*.xml %_DEST%\xml%_EXT%\*.xml -+diff -urN scp2/prj/build.lst scp2/prj/build.lst -+--- scp2/prj/build.lst 2010-11-30 14:17:23.000000000 -0600 -++++ scp2/prj/build.lst 2011-08-18 11:36:10.411551109 -0500 -+@@ -14,6 +14,7 @@ -+ cp scp2\source\impress nmake - all cp_impress cp_langmacros cp_langtemplates NULL -+ cp scp2\source\javafilter nmake - all cp_javafilter cp_langmacros cp_langtemplates NULL -+ cp scp2\source\kde nmake - all cp_kde cp_langmacros cp_langtemplates NULL -++cp scp2\source\tde nmake - all cp_tde cp_langmacros cp_langtemplates NULL -+ cp scp2\source\layout nmake - all cp_layout cp_langmacros NULL -+ cp scp2\source\math nmake - all cp_math cp_langmacros cp_langtemplates NULL -+ cp scp2\source\ooo nmake - all cp_ooo cp_langmacros cp_langtemplates NULL -+@@ -27,4 +28,4 @@ -+ cp scp2\source\winexplorerext nmake - all cp_winexplorerext cp_langmacros cp_langtemplates NULL -+ cp scp2\source\onlineupdate nmake - all cp_update cp_langmacros cp_langtemplates NULL -+ cp scp2\source\accessories nmake - all cp_accessories cp_langmacros NULL -+-cp scp2\util nmake - all cp_util cp_activex cp_binfilter cp_calc cp_canvas cp_crashrep cp_draw cp_extensions cp_gnome cp_graphicfilter cp_impress cp_javafilter cp_kde cp_layout cp_math cp_ooo cp_python cp_quickstart cp_testtool cp_writer cp_base cp_xsltfilter cp_winexplorerext cp_sdkoo cp_update cp_accessories NULL -++cp scp2\util nmake - all cp_util cp_activex cp_binfilter cp_calc cp_canvas cp_crashrep cp_draw cp_extensions cp_gnome cp_graphicfilter cp_impress cp_javafilter cp_kde cp_tde cp_layout cp_math cp_ooo cp_python cp_quickstart cp_testtool cp_writer cp_base cp_xsltfilter cp_winexplorerext cp_sdkoo cp_update cp_accessories NULL -+diff -urN scp2/source/ooo/file_library_ooo.scp scp2/source/ooo/file_library_ooo.scp -+--- scp2/source/ooo/file_library_ooo.scp 2010-11-11 09:08:07.000000000 -0600 -++++ scp2/source/ooo/file_library_ooo.scp 2011-08-18 11:42:28.890516734 -0500 -+@@ -590,6 +590,25 @@ -+ End -+ #endif -+ #endif -++#ifdef ENABLE_TDE -++#ifndef MACOSX -++File gid_File_Lib_Fps_Tde -++ TXT_FILE_BODY; -++ Styles = (PACKED,UNO_COMPONENT); -++ RegistryID = gid_Starregistry_Services_Rdb; -++ Dir = gid_Dir_Program; -++ Name = SPECIAL_COMPONENT_LIB_NAME(fps_tde.uno); -++ Regmergefile = "fps-tde-ucd.txt"; -++End -++File gid_File_Bin_TdeFilePicker -++ BIN_FILE_BODY; -++ Styles = (PACKED); -++ Dir = gid_Brand_Dir_Program; -++ Name = "tdefilepicker"; -++End -++#endif -++#endif -++ -+ #endif -+ -+ #ifdef MACOSX -+@@ -1207,6 +1226,17 @@ -+ End -+ #endif -+ #endif -++#ifdef ENABLE_TDE -++#ifndef MACOSX -++File gid_File_Lib_Vclplug_Tde -++ Name = LIBNAME(vclplug_tde); -++ TXT_FILE_BODY; -++ Styles = (PACKED); -++ Dir = SCP2_OOO_BIN_DIR; -++End -++#endif -++#endif -++ -+ #endif -+ -+ #if defined(QUARTZ) -+diff -urN scp2/source/ooo/file_ooo.scp scp2/source/ooo/file_ooo.scp -+--- scp2/source/ooo/file_ooo.scp 2011-03-08 13:12:46.000000000 -0600 -++++ scp2/source/ooo/file_ooo.scp 2011-08-18 11:40:40.942257980 -0500 -+@@ -209,6 +209,13 @@ -+ Styles = (PACKED); -+ End -+ -++File gid_File_Bin_Tde_Open_Url -++ BIN_FILE_BODY; -++ Dir = gid_Dir_Program; -++ Name = "tde-open-url"; -++ Styles = (PACKED); -++End -++ -+ File gid_File_Bin_Cde_Open_Url -+ BIN_FILE_BODY; -+ Dir = gid_Dir_Program; -+diff -urN scp2/source/ooo/module_hidden_ooo.scp scp2/source/ooo/module_hidden_ooo.scp -+--- scp2/source/ooo/module_hidden_ooo.scp 2010-12-14 09:40:37.000000000 -0600 -++++ scp2/source/ooo/module_hidden_ooo.scp 2011-08-18 11:44:02.297661319 -0500 -+@@ -40,6 +40,7 @@ -+ gid_File_Bin_Gnome_Open_Url, -+ gid_File_Bin_Gnome_Open_Url_Bin, -+ gid_File_Bin_Kde_Open_Url, -++ gid_File_Bin_Tde_Open_Url, -+ gid_File_Bin_Open_Url, -+ gid_File_Bin_Pagein, -+ gid_File_Bin_Pluginapp, -+@@ -239,6 +240,7 @@ -+ gid_File_Lib_Vclplug_Gtk, -+ gid_File_Lib_Vclplug_Kde, -+ gid_File_Lib_Vclplug_Kde4, -++ gid_File_Lib_Vclplug_Tde, -+ gid_File_Lib_Vclplug_Svp, -+ gid_File_Lib_Basctl, -+ gid_File_Lib_CanvasTools, -+diff -urN scp2/source/tde/file_tde.scp scp2/source/tde/file_tde.scp -+--- scp2/source/tde/file_tde.scp 1969-12-31 18:00:00.000000000 -0600 -++++ scp2/source/tde/file_tde.scp 2011-08-18 11:38:30.302260303 -0500 -+@@ -0,0 +1,39 @@ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++#include "macros.inc" -++ -++#ifdef ENABLE_TDE -++File gid_File_Lib_Tdebe -++ TXT_FILE_BODY; -++ Styles = (PACKED); -++ Dir = SCP2_OOO_BIN_DIR; -++ Name = STRING(CONCAT2(tdebe1.uno,UNXSUFFIX)); -++ RegistryID = gid_Starregistry_Services_Rdb; -++ Regmergefile = "tdebe1-ucd.txt"; -++End -++#endif -+diff -urN scp2/source/tde/makefile.mk scp2/source/tde/makefile.mk -+--- scp2/source/tde/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ scp2/source/tde/makefile.mk 2011-08-18 11:37:33.667925169 -0500 -+@@ -0,0 +1,59 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/.. -++ -++PRJPCH= -++ -++PRJNAME=scp2 -++TARGET=tde -++TARGETTYPE=CUI -++ -++# --- Settings ----------------------------------------------------- -++ -++.INCLUDE : settings.mk -++ -++SCP_PRODUCT_TYPE=osl -++ -++.IF "$(ENABLE_TDE)" == "TRUE" -++ -++.IF "$(ENABLE_TDE)" != "" -++SCPDEFS+=-DENABLE_TDE -++.ENDIF -++ -++PARFILES = \ -++ module_tde.par \ -++ file_tde.par -++ -++ULFFILES= \ -++ module_tde.ulf -++.ENDIF -++ -++# --- File --------------------------------------------------------- -++ -++.INCLUDE : target.mk -+diff -urN scp2/source/tde/module_tde.scp scp2/source/tde/module_tde.scp -+--- scp2/source/tde/module_tde.scp 1969-12-31 18:00:00.000000000 -0600 -++++ scp2/source/tde/module_tde.scp 2011-08-18 11:38:07.870543319 -0500 -+@@ -0,0 +1,45 @@ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * Copyright 2011 Timothy Pearson -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#include "macros.inc" -++ -++#if defined( ENABLE_TDE ) -++Module gid_Module_Optional_Tde -++ ParentID = gid_Module_Optional; -++ Default = YES; -++ PackageInfo = "packinfo_office.txt"; -++ MOD_NAME_DESC(MODULE_OPTIONAL_TDE); -++ Styles = (DONTSHOWINUSERINSTALL); -++ Files = ( -++#ifdef ENABLE_TDE -++ gid_File_Lib_Tdebe -++#endif // ENABLE_TDE -++ ); -++End -++#endif -++ -+diff -urN scp2/source/tde/module_tde.ulf scp2/source/tde/module_tde.ulf -+--- scp2/source/tde/module_tde.ulf 1969-12-31 18:00:00.000000000 -0600 -++++ scp2/source/tde/module_tde.ulf 2011-08-18 11:37:03.345603863 -0500 -+@@ -0,0 +1,34 @@ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++[STR_NAME_MODULE_OPTIONAL_TDE] -++en-US = "TDE Integration" -++ -++[STR_DESC_MODULE_OPTIONAL_TDE] -++en-US = "System integration of %PRODUCTNAME %PRODUCTVERSION into TDE." -++ -+diff -urN scp2/util/makefile.mk scp2/util/makefile.mk -+--- scp2/util/makefile.mk 2010-12-16 07:54:12.000000000 -0600 -++++ scp2/util/makefile.mk 2011-08-18 11:39:59.419080617 -0500 -+@@ -197,6 +197,12 @@ -+ module_kde.par \ -+ file_kde.par -+ .ENDIF -++ -++.IF "$(ENABLE_TDE)" == "TRUE" -++SCP1FILES += \ -++ module_tde.par \ -++ file_tde.par -++.ENDIF -+ .ENDIF -+ -+ .IF "$(ENABLE_CRASHDUMP)" != "" -+@@ -380,6 +386,12 @@ -+ module_kde.par \ -+ file_kde.par -+ .ENDIF -++ -++.IF "$(ENABLE_TDE)" == "TRUE" -++SCP2FILES += \ -++ module_tde.par \ -++ file_tde.par -++.ENDIF -+ .ENDIF -+ -+ .IF "$(ENABLE_CRASHDUMP)" != "" -+diff -urN shell/source/unix/misc/makefile.mk shell/source/unix/misc/makefile.mk -+--- shell/source/unix/misc/makefile.mk 2010-11-11 09:30:08.000000000 -0600 -++++ shell/source/unix/misc/makefile.mk 2011-08-18 14:27:51.206440704 -0500 -+@@ -45,7 +45,8 @@ -+ $(BIN)$/open-url \ -+ $(BIN)$/cde-open-url \ -+ $(BIN)$/gnome-open-url \ -+- $(BIN)$/kde-open-url -++ $(BIN)$/kde-open-url \ -++ $(BIN)$/tde-open-url -+ -+ .IF "$(GUI)" == "OS2" -+ -+diff -urN shell/source/unix/misc/tde-open-url.sh shell/source/unix/misc/tde-open-url.sh -+--- shell/source/unix/misc/tde-open-url.sh 1969-12-31 18:00:00.000000000 -0600 -++++ shell/source/unix/misc/tde-open-url.sh 2010-11-11 09:30:08.000000000 -0600 -+@@ -0,0 +1,10 @@ -++#!/bin/sh -++ -++# special handling for mailto: uris -++if echo $1 | grep '^mailto:' > /dev/null; then -++ kmailservice "$1" & -++else -++ kfmclient openURL "$1" & -++fi -++ -++exit 0 -+diff -urN setup_native/source/packinfo/packinfo_office.txt setup_native/source/packinfo/packinfo_office.txt -+--- setup_native/source/packinfo/packinfo_office.txt 2011-03-08 13:12:46.000000000 -0600 -++++ setup_native/source/packinfo/packinfo_office.txt 2011-08-18 14:46:02.820250783 -0500 -+@@ -48,6 +48,21 @@ -+ End -+ -+ Start -++module = "gid_Module_Optional_Tde" -++solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-tde-integration" -++solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01" -++packagename = "%BASISPACKAGEPREFIX%OOOBASEVERSION-tde-integration" -++freebsdrequires = "%BASISPACKAGEPREFIX%OOOBASEVERSION-core01" -++requires = "%BASISPACKAGEPREFIX%OOOBASEVERSION-core01" -++copyright = "1999-2009 by OpenOffice.org" -++solariscopyright = "solariscopyrightfile" -++vendor = "The Document Foundation" -++description = "TDE integration module for LibreOffice %OOOBASEVERSION" -++destpath = "/opt" -++packageversion = "%OOOPACKAGEVERSION" -++End -++ -++Start -+ module = "gid_Module_Root" -+ # script = "shellscripts_core01.txt" -+ solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01" -+diff -urN scp2/source/ooo/makefile.mk scp2/source/ooo/makefile.mk -+--- scp2/source/ooo/makefile.mk 2010-12-16 05:06:55.000000000 -0600 -++++ scp2/source/ooo/makefile.mk 2011-08-18 15:49:48.543071983 -0500 -+@@ -88,6 +88,14 @@ -+ SCPDEFS+=-DENABLE_KAB -+ .ENDIF -+ -++.IF "$(ENABLE_TDE)" != "" -++SCPDEFS+=-DENABLE_TDE -++.ENDIF -++ -++.IF "$(ENABLE_TDEAB)" != "" -++SCPDEFS+=-DENABLE_TDEAB -++.ENDIF -++ -+ .IF "$(ENABLE_EVOAB2)" != "" -+ SCPDEFS+=-DENABLE_EVOAB2 -+ .ENDIF -+diff -urN solenv/config/sooo330.ini solenv/config/sooo330.ini -+--- solenv/config/sooo330.ini 2010-11-11 09:08:07.000000000 -0600 -++++ solenv/config/sooo330.ini 2011-08-18 19:37:01.865529222 -0500 -+@@ -646,6 +646,8 @@ -+ CVER C432 -+ ENABLE_KAB TRUE -+ ENABLE_KDE TRUE -++ ENABLE_TDEAB TRUE -++ ENABLE_TDE TRUE -+ ENABLE_EVOAB2 TRUE -+ ENV_TOOLS %SOLARROOT%/et_linux_libc2.5/%WORK_STAMP%/bin -+ GUI UNX -+@@ -656,6 +658,7 @@ -+ JDK14PATH %SOLAR_JDK14PATH% -+ JDK15PATH %SOLAR_JDK15PATH% -+ KDE_ROOT /so/env/kde/linux/kde-3.2.2 -++ TDE_ROOT /so/env/tde/linux/tde-3.2.2 -+ LIBMYSQL_PATH %SOLAR_ENV_ROOT%/mysql-connector-c-6.0.2/unxlngi6 -+ NO_BSYMBOLIC True -+ OJDK16PATH %SOLAR_OJDK16PATH% -+@@ -921,6 +924,8 @@ -+ CVER C341 -+ ENABLE_KAB TRUE -+ ENABLE_KDE TRUE -++ ENABLE_TDEAB TRUE -++ ENABLE_TDE TRUE -+ ENV_TOOLS %SOLARROOT%/et_linux_libc2.32/%WORK_STAMP%/bin -+ GUI UNX -+ GUIBASE unx -+@@ -930,6 +935,7 @@ -+ JDK14PATH %SOLAR_JDK14PATH% -+ JDK15PATH %SOLAR_JDK15PATH% -+ KDE_ROOT /so/env/kde/linux/kde-3.2.2 -++ TDE_ROOT /so/env/tde/linux/tde-3.2.2 -+ LIBMYSQL_PATH %SOLAR_ENV_ROOT%/mysql-connector-c-6.0.2/unxlngx6 -+ NO_BSYMBOLIC True -+ OJDK16PATH %SOLAR_OJDK16PATH% -+diff -urN solenv/config/ssolar.cmn solenv/config/ssolar.cmn -+--- solenv/config/ssolar.cmn 2010-11-11 09:08:07.000000000 -0600 -++++ solenv/config/ssolar.cmn 2011-08-18 19:37:26.207387814 -0500 -+@@ -89,6 +89,7 @@ -+ ENABLE_GCONF -+ ENABLE_GNOMEVFS -+ ENABLE_KDE -++ ENABLE_TDE -+ ENABLE_MEDIAWIKI -+ ENABLE_MINIMIZER -+ ENABLE_NSS_MODULE -+diff -urN solenv/inc/unx.mk solenv/inc/unx.mk -+--- solenv/inc/unx.mk 2010-11-11 09:08:07.000000000 -0600 -++++ solenv/inc/unx.mk 2011-08-18 19:35:33.868809472 -0500 -+@@ -206,4 +206,13 @@ -+ .ENDIF # "$(KDE_ROOT)"!="" -+ .ENDIF # "$(ENABLE_KDE)" != "" -+ -++# enable building/linking TDE-dependent code in both OOo and SO build environment -++.IF "$(ENABLE_TDE)" != "" -++.IF "$(TDE_ROOT)"!="" -++TDE_CFLAGS:=-I$(TDE_ROOT)/include -I/usr/include/tqt -DQT_CLEAN_NAMESPACE -++TDE_LIBS:=-lkdeui -lkdecore -ltqt -lqt-mt -++SOLARLIB+=-L$(TDE_ROOT)/lib -++.ENDIF # "$(TDE_ROOT)"!="" -++.ENDIF # "$(ENABLE_TDE)" != "" -++ -+ OOO_LIBRARY_PATH_VAR *= LD_LIBRARY_PATH -+diff -urN svx/util/makefile.pmk svx/util/makefile.pmk -+--- svx/util/makefile.pmk 2010-11-11 09:30:08.000000000 -0600 -++++ svx/util/makefile.pmk 2011-08-18 19:40:05.809571436 -0500 -+@@ -40,4 +40,8 @@ -+ CFLAGS+=-DENABLE_KDE4 -+ .ENDIF -+ -++.IF "$(ENABLE_TDE)" != "" -++CFLAGS+=-DENABLE_TDE -++.ENDIF -++ -+ VISIBILITY_HIDDEN=TRUE -+diff -urN cui/source/options/optgdlg.cxx cui/source/options/optgdlg.cxx -+--- cui/source/options/optgdlg.cxx 2011-01-05 12:03:17.000000000 -0600 -++++ cui/source/options/optgdlg.cxx 2011-08-18 19:41:16.134938506 -0500 -+@@ -157,6 +157,14 @@ -+ return rtl::OUString(); -+ #endif -+ } -++ else if ( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "tde" ) ) -++ { -++ #ifdef ENABLE_TDE -++ return ::rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.TDEFilePicker" ); -++ #else -++ return rtl::OUString(); -++ #endif -++ } -+ #if defined WNT -+ return ::rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.SystemFilePicker" ); -+ #elif (defined MACOSX && defined QUARTZ) -+diff -urN cui/util/makefile.pmk cui/util/makefile.pmk -+--- cui/util/makefile.pmk 2010-11-11 09:12:41.000000000 -0600 -++++ cui/util/makefile.pmk 2011-08-18 19:40:36.291897881 -0500 -+@@ -37,4 +37,8 @@ -+ CFLAGS+=-DENABLE_KDE4 -+ .ENDIF -+ -++.IF "$(ENABLE_TDE)" != "" -++CFLAGS+=-DENABLE_TDE -++.ENDIF -++ -+ VISIBILITY_HIDDEN=TRUE -+diff -urN desktop/source/pagein/makefile.mk desktop/source/pagein/makefile.mk -+--- desktop/source/pagein/makefile.mk 2010-11-11 09:30:07.000000000 -0600 -++++ desktop/source/pagein/makefile.mk 2011-08-18 19:41:55.037907135 -0500 -+@@ -129,6 +129,9 @@ -+ .IF "$(ENABLE_KDE)" != "" -+ @-echo $(DLLPRE)vclplug_kde$(DFTDLLPOST) >> $@ -+ .ENDIF # ENABLE_KDE -++.IF "$(ENABLE_TDE)" != "" -++ @-echo $(DLLPRE)vclplug_tde$(DFTDLLPOST) >> $@ -++.ENDIF # ENABLE_TDE -+ # -+ @-echo $(DLLPRE)basegfx$(DFTDLLPOST) >> $@ -+ @-echo $(DLLPRE)sot$(DFTDLLPOST) >> $@ -+diff -urN toolkit/source/layout/core/dialogbuttonhbox.cxx toolkit/source/layout/core/dialogbuttonhbox.cxx -+--- toolkit/source/layout/core/dialogbuttonhbox.cxx 2010-11-11 09:22:48.000000000 -0600 -++++ toolkit/source/layout/core/dialogbuttonhbox.cxx 2011-08-18 19:46:04.396929494 -0500 -+@@ -57,6 +57,8 @@ -+ DialogButtonHBox::WINDOWS; -+ #elif defined( ENABLE_KDE ) -+ DialogButtonHBox::KDE; -++#elif defined( ENABLE_TDE ) -++DialogButtonHBox::TDE; -+ #else /* !MACOSX && !SAL_W32 && !ENABLE_KDE */ -+ DialogButtonHBox::GNOME; -+ #endif /* !MACOSX && !SAL_W32 && !ENABLE_KDE */ -+@@ -84,6 +86,8 @@ -+ mnOrdering = GNOME; -+ else if ( ordering.equalsIgnoreAsciiCaseAscii( "KDE" ) ) -+ mnOrdering = KDE; -++ else if ( ordering.equalsIgnoreAsciiCaseAscii( "TDE" ) ) -++ mnOrdering = TDE; -+ else if ( ordering.equalsIgnoreAsciiCaseAscii( "MacOS" ) ) -+ mnOrdering = MACOS; -+ else if ( ordering.equalsIgnoreAsciiCaseAscii( "Windows" ) ) -+@@ -144,6 +148,8 @@ -+ macosOrdering(); -+ else if ( mnOrdering == KDE ) -+ kdeOrdering(); -++ else if ( mnOrdering == TDE ) -++ tdeOrdering(); -+ else if ( 1 || mnOrdering == GNOME ) -+ gnomeOrdering(); -+ } -+@@ -218,6 +224,30 @@ -+ { -+ std::list< Box_Base::ChildData * > ordered; -+ if ( mpHelp ) -++ ordered.push_back( mpHelp ); -++ if ( mpReset ) -++ ordered.push_back( mpReset ); -++ if ( mpFlow && ( mpHelp || mpReset ) ) -++ ordered.push_back( mpFlow ); -++ ordered.insert( ordered.end(), maOther.begin(), maOther.end() ); -++ if ( mpAction ) -++ ordered.push_back( mpAction ); -++ if ( mpAffirmative ) -++ ordered.push_back( mpAffirmative ); -++ if ( mpApply ) -++ ordered.push_back( mpApply ); -++ if ( mpAlternate ) -++ ordered.push_back( mpAlternate ); -++ if ( mpCancel ) -++ ordered.push_back( mpCancel ); -++ maChildren = ordered; -++} -++ -++void -++DialogButtonHBox::tdeOrdering() -++{ -++ std::list< Box_Base::ChildData * > ordered; -++ if ( mpHelp ) -+ ordered.push_back( mpHelp ); -+ if ( mpReset ) -+ ordered.push_back( mpReset ); -+diff -urN toolkit/source/layout/core/dialogbuttonhbox.hxx toolkit/source/layout/core/dialogbuttonhbox.hxx -+--- toolkit/source/layout/core/dialogbuttonhbox.hxx 2010-11-11 09:22:48.000000000 -0600 -++++ toolkit/source/layout/core/dialogbuttonhbox.hxx 2011-08-18 19:46:17.897959152 -0500 -+@@ -45,11 +45,12 @@ -+ void SAL_CALL removeChild( css::uno::Reference< css::awt::XLayoutConstrains > const& xChild ) throw ( css::uno::RuntimeException ); -+ -+ private: -+- enum Ordering { PLATFORM, GNOME, KDE, MACOS, WINDOWS }; -++ enum Ordering { PLATFORM, GNOME, KDE, TDE, MACOS, WINDOWS }; -+ -+ void orderChildren(); -+ void gnomeOrdering(); -+ void kdeOrdering(); -++ void tdeOrdering(); -+ void macosOrdering(); -+ void windowsOrdering(); -+ -+diff -urN vcl/util/makefile.mk vcl/util/makefile.mk -+--- vcl/util/makefile.mk 2011-03-08 12:51:41.000000000 -0600 -++++ vcl/util/makefile.mk 2011-08-18 19:55:25.649710040 -0500 -+@@ -420,6 +420,35 @@ -+ -+ .ENDIF # "$(ENABLE_KDE)" != "" -+ -++# TDE plugin -++.IF "$(ENABLE_TDE)" != "" -++.IF "$(TDE_ROOT)"!="" -++EXTRALIBPATHS+=-L$(TDE_ROOT)$/lib -++.ENDIF -++LIB5TARGET=$(SLB)$/itde_plug_ -++LIB5FILES=$(SLB)$/tdeplug.lib -++SHL5TARGET=vclplug_tde$(DLLPOSTFIX) -++SHL5IMPLIB=itde_plug_ -++SHL5LIBS=$(LIB5TARGET) -++SHL5DEPN=$(SHL2TARGETN) -++# libs for TDE plugin -++SHL5STDLIBS+=-l$(SHL2TARGET) -++SHL5STDLIBS+=\ -++ $(VCLLIB) \ -++ $(TOOLSLIB) \ -++ $(SALLIB) \ -++ $(X11LINK_DYNAMIC) -++ -++.IF "$(ENABLE_RANDR)" != "" -++.IF "$(XRANDR_DLOPEN)" == "FALSE" -++SHL5STDLIBS+= $(XRANDR_LIBS) -++.ENDIF -++.ENDIF -++ -++SHL5LINKFLAGS+=$(TDE_LIBS) -++ -++.ENDIF # "$(ENABLE_TDE)" != "" -++ -+ # KDE4 plugin -+ .IF "$(ENABLE_KDE4)" != "" -+ .IF "$(KDE4_ROOT)"!="" -+diff -urN vcl/unx/tde/makefile.mk vcl/unx/tde/makefile.mk -+--- vcl/unx/tde/makefile.mk 1969-12-31 18:00:00.000000000 -0600 -++++ vcl/unx/tde/makefile.mk 2011-08-18 20:13:01.750097435 -0500 -+@@ -0,0 +1,82 @@ -++#************************************************************************* -++# -++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++# -++# Copyright 2000, 2010 Oracle and/or its affiliates. -++# Copyright 2011 Timothy Pearson -++# -++# OpenOffice.org - a multi-platform office productivity suite -++# -++# This file is part of OpenOffice.org. -++# -++# OpenOffice.org is free software: you can redistribute it and/or modify -++# it under the terms of the GNU Lesser General Public License version 3 -++# only, as published by the Free Software Foundation. -++# -++# OpenOffice.org 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 Lesser General Public License version 3 for more details -++# (a copy is included in the LICENSE file that accompanied this code). -++# -++# You should have received a copy of the GNU Lesser General Public License -++# version 3 along with OpenOffice.org. If not, see -++# -++# for a copy of the LGPLv3 License. -++# -++#************************************************************************* -++ -++PRJ=..$/.. -++ -++PRJNAME=vcl -++TARGET=tdeplug -++.INCLUDE : $(PRJ)$/util$/makefile.pmk -++ -++# workaround for makedepend hang -++MTDEPENDSOLVER= -++ -++# --- Settings ----------------------------------------------------- -++ -++.INCLUDE : settings.mk -++.INCLUDE : $(PRJ)$/util$/makefile2.pmk -++ -++# For some of the included external TDE headers, GCC complains about shadowed -++# symbols in instantiated template code only at the end of a compilation unit, -++# so the only solution is to disable that warning here: -++.IF "$(COM)" == "GCC" -++CFLAGSCXX+=-Wno-shadow -++.ENDIF -++ -++# --- Files -------------------------------------------------------- -++ -++.IF "$(GUIBASE)"!="unx" -++ -++dummy: -++ @echo "Nothing to build for GUIBASE $(GUIBASE)" -++ -++.ELSE # "$(GUIBASE)"!="unx" -++ -++.IF "$(ENABLE_TDE)" != "" -++ -++CFLAGS+=$(TDE_CFLAGS) -++ -++.IF "$(ENABLE_RANDR)" != "" -++CDEFS+=-DUSE_RANDR -++.ENDIF -++ -++SLOFILES=\ -++ $(SLO)$/tdedata.obj \ -++ $(SLO)$/salnativewidgets-tde.obj -++ -++.ELSE # "$(ENABLE_TDE)" != "" -++ -++dummy: -++ @echo TDE disabled - nothing to build -++.ENDIF -++.ENDIF # "$(GUIBASE)"!="unx" -++ -++# --- Targets ------------------------------------------------------ -++ -++.INCLUDE : target.mk -++ -++.INCLUDE : $(PRJ)$/util$/target.pmk -+diff -urN vcl/unx/tde/salnativewidgets-tde.cxx vcl/unx/tde/salnativewidgets-tde.cxx -+--- vcl/unx/tde/salnativewidgets-tde.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ vcl/unx/tde/salnativewidgets-tde.cxx 2011-08-18 20:13:46.133472981 -0500 -+@@ -0,0 +1,2119 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_vcl.hxx" -++ -++#define _SV_SALNATIVEWIDGETS_TDE_CXX -++#include -++ -++#include -++#include -++#include -++ -++#include -++ -++#include -++#include -++#include -++#include -++#include -++ -++#include -++ -++using namespace ::rtl; -++ -++/** Cached native widgets. -++ -++ A class which caches and paints the native widgets. -++*/ -++class WidgetPainter -++{ -++ protected: -++ /** Cached push button. -++ -++ It is necessary for the TQStyle::drawControl(). The buttons are created -++ on demand and they are still hidden (no TQWidget::show() is called). -++ */ -++ TQPushButton *m_pPushButton; -++ -++ /** Cached radio button. -++ -++ @see m_pPushButton -++ */ -++ TQRadioButton *m_pRadioButton; -++ -++ /** Cached check box. -++ -++ @see m_pPushButton -++ */ -++ TQCheckBox *m_pCheckBox; -++ -++ /** Cached combo box. -++ -++ @see m_pPushButton -++ */ -++ TQComboBox *m_pComboBox; -++ -++ /** Cached editable combo box. -++ -++ Needed, because some styles do not like dynamic changes -++ (TQComboBox::setEditable()). -++ -++ @see m_pPushButton -++ */ -++ TQComboBox *m_pEditableComboBox; -++ -++ /** Cached line edit box. -++ -++ @see m_pPushButton -++ */ -++ TQLineEdit *m_pLineEdit; -++ -++ /** Cached spin box. -++ -++ @see m_pPushButton -++ */ -++ TQSpinWidget *m_pSpinWidget; -++ -++ /** Cached spin box'es line edit. -++ -++ @see m_pPushButton -++ */ -++ TQLineEdit *m_pSpinEdit; -++ -++ /** Cached tab. -++ -++ Left, middle, right tab and a tab which is alone. -++ -++ @see m_pPushButton -++ */ -++ TQTab *m_pTabLeft, *m_pTabMiddle, *m_pTabRight, *m_pTabAlone; -++ -++ /** Cached tab bar's parent widget. -++ -++ Needed, because the Qt windows style checks for the availability -++ of tab bar's parent. We cannot use m_pTabWidget, because -++ TabWidget::setTabBar() and TabWidget::tabBar() methods are -++ protected. -++ -++ @see m_pPushButton, m_pTabWidget -++ */ -++ TQWidget *m_pTabBarParent; -++ -++ /** Cached tab bar widget. -++ -++ @see m_pPushButton -++ */ -++ TQTabBar *m_pTabBar; -++ -++ /** Cached tab widget. -++ -++ We need it to draw the tab page. It cannot be used to draw the -++ tabs themselves, because the drawing has to be tweaked a little -++ due to not enough information from VCL. -++ -++ @see m_pPushButton, m_pTabBarParent -++ */ -++ TQTabWidget *m_pTabWidget; -++ -++ /** Cached list view. -++ -++ @see m_pPushButton -++ */ -++ TQListView *m_pListView; -++ -++ /** Cached scroll bar. -++ -++ @see m_pPushButton -++ */ -++ TQScrollBar *m_pScrollBar; -++ -++ /** Cached dock area. Needed for proper functionality of tool bars. -++ -++ @see m_pPushButton -++ */ -++ TQMainWindow *m_pMainWindow; -++ -++ /** Cached tool bar. -++ -++ @see m_pPushButton -++ */ -++ TQToolBar *m_pToolBarHoriz, *m_pToolBarVert; -++ -++ /** Cached tool button. -++ -++ @see m_pPushButton -++ */ -++ TQToolButton *m_pToolButton; -++ -++ /** Cached menu bar. -++ -++ @see m_pPushButton -++ */ -++ TQMenuBar *m_pMenuBar; -++ -++ /** Identifiers of menu bar items. -++ */ -++ int m_nMenuBarEnabledItem, m_nMenuBarDisabledItem; -++ -++ /** Cached popup menu. -++ -++ @see m_pPushButton -++ */ -++ TQPopupMenu *m_pPopupMenu; -++ -++ /** Identifiers of popup menu items. -++ */ -++ int m_nPopupMenuEnabledItem, m_nPopupMenuDisabledItem; -++ -++ /** cached progress bar -++ */ -++ TQProgressBar *m_pProgressBar; -++ -++ // TODO other widgets -++ -++ public: -++ /** Implicit constructor. -++ -++ It creates an empty WidgetPainter with all the cached widgets initialized -++ to NULL. The widgets are created on demand and they are still hidden -++ (no TQWidget::show()), because they are needed just as a parameter for -++ TQStyle::drawControl(). -++ -++ @see m_pPushButton -++ */ -++ WidgetPainter( void ); -++ -++ /** Destructor. -++ -++ Destruct all the cached widgets. -++ */ -++ virtual ~WidgetPainter( void ); -++ -++ /** Paints the specified widget to the X window. -++ -++ Use X calls to bitblt (bit block transfer) the widget qWidget to -++ the window specified by drawable with the style defined by nStyle. -++ -++ @param qWidget -++ A pointer to the cached widget. -++ -++ @param nState -++ The state of the control (focused, on/off, ...) -++ -++ @param aValue -++ The value (true/false, ...) -++ -++ @param dpy -++ The display to be used by the X calls. -++ -++ @param drawable -++ The destination X window. -++ -++ @param gc -++ The graphics context. -++ */ -++ BOOL drawStyledWidget( TQWidget *pWidget, -++ ControlState nState, const ImplControlValue& aValue, -++ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc, -++ ControlPart nPart = PART_ENTIRE_CONTROL ); -++ -++ /** 'Get' method for push button. -++ -++ The method returns the cached push button. It is constructed if it -++ does not exist. It has NULL as a parent and it stays hidden, but it -++ is necessary for the drawStyledWidget() method. -++ -++ @return valid push button. -++ */ -++ TQPushButton *pushButton( const Rectangle& rControlRegion, BOOL bDefault ); -++ -++ /** 'Get' method for radio button. -++ -++ @see pushButton() -++ */ -++ TQRadioButton *radioButton( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for check box. -++ -++ @see pushButton() -++ */ -++ TQCheckBox *checkBox( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for combo box. -++ -++ It returns m_pComboBox or m_pEditableComboBox according to -++ bEditable. -++ -++ @see pushButton(), m_pEditableComboBox -++ */ -++ TQComboBox *comboBox( const Rectangle& rControlRegion, BOOL bEditable ); -++ -++ /** 'Get' method for line edit box. -++ -++ @see pushButton() -++ */ -++ TQLineEdit *lineEdit( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for spin box. -++ -++ @see pushButton() -++ */ -++ TQSpinWidget *spinWidget( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for tab bar. -++ -++ @see pushButton() -++ */ -++ TQTabBar *tabBar( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for tab widget. -++ -++ @see pushButton() -++ */ -++ TQTabWidget *tabWidget( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for list view. -++ -++ @see pushButton() -++ */ -++ TQListView *listView( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for scroll bar. -++ -++ @see pushButton() -++ */ -++ TQScrollBar *scrollBar( const Rectangle& rControlRegion, -++ BOOL bHorizontal, const ImplControlValue& aValue ); -++ -++ /** 'Get' method for tool bar. -++ -++ @see pushButton() -++ */ -++ TQToolBar *toolBar( const Rectangle& rControlRegion, BOOL bHorizontal ); -++ -++ /** 'Get' method for tool button. -++ -++ @see pushButton() -++ */ -++ TQToolButton *toolButton( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for menu bar. -++ -++ @see pushButton() -++ */ -++ TQMenuBar *menuBar( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for popup menu. -++ -++ @see pushButton() -++ */ -++ TQPopupMenu *popupMenu( const Rectangle& rControlRegion ); -++ -++ /** 'Get' method for progress bar -++ -++ @see pushButton() -++ */ -++ TQProgressBar *progressBar( const Rectangle& rControlRegion ); -++ -++ // TODO other widgets -++ -++ protected: -++ /** Style conversion function. -++ -++ Conversion function between VCL ControlState together with -++ ImplControlValue and Qt state flags. -++ -++ @param nState -++ State of the widget (default, focused, ...) as defined in Native -++ Widget Framework. -++ -++ @param aValue -++ Value held by the widget (on, off, ...) -++ */ -++ TQStyle::SFlags vclStateValue2SFlags( ControlState nState, const ImplControlValue& aValue ); -++ -++ public: -++ /** Convert VCL Rectangle to TQRect. -++ -++ @param rControlRegion -++ The region to convert. -++ -++ @return -++ The bounding box of the region. -++ */ -++ static TQRect region2TQRect( const Rectangle& rControlRegion ); -++}; -++ -++WidgetPainter::WidgetPainter( void ) -++ : m_pPushButton( NULL ), -++ m_pRadioButton( NULL ), -++ m_pCheckBox( NULL ), -++ m_pComboBox( NULL ), -++ m_pEditableComboBox( NULL ), -++ m_pLineEdit( NULL ), -++ m_pSpinWidget( NULL ), -++ m_pSpinEdit( NULL ), -++ m_pTabLeft( NULL ), -++ m_pTabMiddle( NULL ), -++ m_pTabRight( NULL ), -++ m_pTabAlone( NULL ), -++ m_pTabBarParent( NULL ), -++ m_pTabBar( NULL ), -++ m_pTabWidget( NULL ), -++ m_pListView( NULL ), -++ m_pScrollBar( NULL ), -++ m_pMainWindow( NULL ), -++ m_pToolBarHoriz( NULL ), -++ m_pToolBarVert( NULL ), -++ m_pToolButton( NULL ), -++ m_pMenuBar( NULL ), -++ m_pPopupMenu( NULL ), -++ m_pProgressBar( NULL ) -++{ -++} -++ -++WidgetPainter::~WidgetPainter( void ) -++{ -++ delete m_pPushButton, m_pPushButton = NULL; -++ delete m_pRadioButton, m_pRadioButton = NULL; -++ delete m_pCheckBox, m_pCheckBox = NULL; -++ delete m_pComboBox, m_pComboBox = NULL; -++ delete m_pEditableComboBox, m_pEditableComboBox = NULL; -++ delete m_pLineEdit, m_pLineEdit = NULL; -++ delete m_pSpinWidget, m_pSpinWidget = NULL; -++ m_pSpinEdit = NULL; // Deleted in m_pSpinWidget's destructor -++ delete m_pTabAlone, m_pTabAlone = NULL; -++ delete m_pTabBarParent, m_pTabBarParent = NULL; -++ m_pTabBar = NULL; // Deleted in m_pTabBarParent's destructor -++ m_pTabLeft = NULL; -++ m_pTabMiddle = NULL; -++ m_pTabRight = NULL; -++ delete m_pTabWidget, m_pTabWidget = NULL; -++ delete m_pListView, m_pListView = NULL; -++ delete m_pScrollBar, m_pScrollBar = NULL; -++ delete m_pToolBarHoriz, m_pToolBarHoriz = NULL; -++ delete m_pToolBarVert, m_pToolBarVert = NULL; -++ delete m_pMainWindow, m_pMainWindow = NULL; -++ delete m_pToolButton, m_pToolButton = NULL; -++ delete m_pMenuBar, m_pMenuBar = NULL; -++ delete m_pPopupMenu, m_pPopupMenu = NULL; -++ delete m_pProgressBar, m_pProgressBar = NULL; -++} -++ -++BOOL WidgetPainter::drawStyledWidget( TQWidget *pWidget, -++ ControlState nState, const ImplControlValue& aValue, -++ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc, -++ ControlPart nPart ) -++{ -++ if ( !pWidget ) -++ return FALSE; -++ -++ // Normalize the widget -++ TQPoint qWidgetPos( pWidget->pos() ); -++ pWidget->move( 0, 0 ); -++ -++ // Enable/disable the widget -++ pWidget->setEnabled( nState & CTRL_STATE_ENABLED ); -++ -++ // Create pixmap to paint to -++ TQPixmap qPixmap( pWidget->width(), pWidget->height() ); -++ TQPainter qPainter( &qPixmap ); -++ TQRect qRect( 0, 0, pWidget->width(), pWidget->height() ); -++ -++ // Use the background of the widget -++ qPixmap.fill( pWidget, TQPoint(0, 0) ); -++ -++ // Convert the flags -++ TQStyle::SFlags nStyle = vclStateValue2SFlags( nState, aValue ); -++ -++ // Store the widget class -++ const char *pClassName = pWidget->className(); -++ -++ // Draw the widget to the pixmap -++ if ( strcmp( TQPUSHBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ // Workaround for the Platinum style. -++ // Platinum takes the state directly from the widget, not from SFlags. -++ TQPushButton *pPushButton = static_cast( pWidget->qt_cast( TQPUSHBUTTON_OBJECT_NAME_STRING ) ); -++ if ( pPushButton ) -++ { -++ pPushButton->setDown ( nStyle & TQStyle::Style_Down ); -++ pPushButton->setOn ( nStyle & TQStyle::Style_On ); -++ pPushButton->setEnabled( nStyle & TQStyle::Style_Enabled ); -++ } -++ -++ kapp->style().drawControl( TQStyle::CE_PushButton, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( strcmp( TQRADIOBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ // Bitblt from the screen, because the radio buttons are usually not -++ // rectangular, and there could be a bitmap under them -++ GC aTmpGC = XCreateGC( dpy, qPixmap.handle(), 0, NULL ); -++ X11SalGraphics::CopyScreenArea( dpy, -++ drawable, nScreen, nDepth, -++ qPixmap.handle(), qPixmap.x11Screen(), qPixmap.x11Depth(), -++ aTmpGC, -++ qWidgetPos.x(), qWidgetPos.y(), qRect.width(), qRect.height(), -++ 0, 0 ); -++ XFreeGC( dpy, aTmpGC ); -++ -++ kapp->style().drawControl( TQStyle::CE_RadioButton, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( strcmp( TQCHECKBOX_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawControl( TQStyle::CE_CheckBox, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( strcmp( TQCOMBOBOX_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawComplexControl( TQStyle::CC_ComboBox, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ -++ // Editable combo box uses the background of the associated edit box -++ TQComboBox *pComboBox = static_cast( pWidget->qt_cast( TQCOMBOBOX_OBJECT_NAME_STRING ) ); -++ if ( pComboBox && pComboBox->editable() && pComboBox->lineEdit() ) -++ { -++ TQColorGroup::ColorRole eColorRole = ( pComboBox->isEnabled() )? -++ TQColorGroup::Base: TQColorGroup::Background; -++ qPainter.fillRect( -++ kapp->style().querySubControlMetrics( TQStyle::CC_ComboBox, -++ pComboBox, TQStyle::SC_ComboBoxEditField ), -++ pComboBox->lineEdit()->colorGroup().brush( eColorRole ) ); -++ } -++ } -++ else if ( strcmp( TQLINEEDIT_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawPrimitive( TQStyle::PE_PanelLineEdit, -++ &qPainter, qRect, -++ pWidget->colorGroup(), nStyle | TQStyle::Style_Sunken ); -++ } -++ else if ( strcmp( TQSPINWIDGET_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ const SpinbuttonValue *pValue = static_cast ( &aValue ); -++ -++ // Is any of the buttons pressed? -++ TQStyle::SCFlags eActive = TQStyle::SC_None; -++ if ( pValue ) -++ { -++ if ( pValue->mnUpperState & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_SpinWidgetUp; -++ else if ( pValue->mnLowerState & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_SpinWidgetDown; -++ -++ // Update the enable/disable state of the widget -++ if ( ( nState & CTRL_STATE_ENABLED ) || -++ ( pValue->mnUpperState & CTRL_STATE_ENABLED ) || -++ ( pValue->mnLowerState & CTRL_STATE_ENABLED ) ) -++ { -++ pWidget->setEnabled( true ); -++ nStyle |= TQStyle::Style_Enabled; -++ } -++ else -++ pWidget->setEnabled( false ); -++ -++ // Mouse-over effect -++ if ( (pValue->mnUpperState & CTRL_STATE_ROLLOVER) || -++ (pValue->mnLowerState & CTRL_STATE_ROLLOVER) ) -++ nStyle |= TQStyle::Style_MouseOver; -++ } -++ -++ // Spin widget uses the background of the associated edit box -++ TQSpinWidget *pSpinWidget = static_cast( pWidget->qt_cast( TQSPINWIDGET_OBJECT_NAME_STRING ) ); -++ if ( pSpinWidget && pSpinWidget->editWidget() ) -++ { -++ TQColorGroup::ColorRole eColorRole = ( pSpinWidget->isEnabled() )? -++ TQColorGroup::Base: TQColorGroup::Background; -++ qPainter.fillRect( -++ kapp->style().querySubControlMetrics( TQStyle::CC_SpinWidget, -++ pSpinWidget, TQStyle::SC_SpinWidgetEditField ), -++ pSpinWidget->editWidget()->colorGroup().brush( eColorRole ) ); -++ } -++ -++ // Adjust the frame (needed for Motif Plus style) -++ TQRect qFrameRect = kapp->style().querySubControlMetrics( TQStyle::CC_SpinWidget, -++ pWidget, TQStyle::SC_SpinWidgetFrame ); -++ -++ kapp->style().drawComplexControl( TQStyle::CC_SpinWidget, -++ &qPainter, pWidget, qFrameRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyle::SC_All, eActive ); -++ } -++ else if ( strcmp( TQTABBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ const TabitemValue *pValue = static_cast ( &aValue ); -++ -++ TQTab *pTab = NULL; -++ if ( pValue ) -++ { -++ if ( ( pValue->isFirst() || pValue->isLeftAligned() ) && ( pValue->isLast() || pValue->isRightAligned() ) ) -++ pTab = m_pTabAlone; -++ else if ( pValue->isFirst() || pValue->isLeftAligned() ) -++ pTab = m_pTabLeft; -++ else if ( pValue->isLast() || pValue->isRightAligned() ) -++ pTab = m_pTabRight; -++ else -++ pTab = m_pTabMiddle; -++ } -++ if ( !pTab ) -++ return FALSE; -++ -++ pTab->setRect( qRect ); -++ -++ kapp->style().drawControl( TQStyle::CE_TabBarTab, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyleOption( pTab ) ); -++ } -++ else if ( strcmp( TQTABWIDGET_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawPrimitive( TQStyle::PE_PanelTabWidget, -++ &qPainter, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( strcmp( TQLISTVIEW_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ kapp->style().drawPrimitive( TQStyle::PE_Panel, -++ &qPainter, qRect, -++ pWidget->colorGroup(), nStyle | TQStyle::Style_Sunken ); -++ } -++ else if ( strcmp( TQSCROLLBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ const ScrollbarValue *pValue = static_cast ( &aValue ); -++ -++ TQStyle::SCFlags eActive = TQStyle::SC_None; -++ if ( pValue ) -++ { -++ // Workaround for Style_MouseOver-aware themes. -++ // Quite ugly, but I do not know about a better solution. -++ const char *pStyleName = kapp->style().className(); -++ if ( strcmp( "QMotifPlusStyle", pStyleName ) == 0 ) -++ { -++ nStyle |= TQStyle::Style_MouseOver; -++ if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER ) -++ eActive = TQStyle::SC_ScrollBarSlider; -++ } -++ else if ( strcmp( "QSGIStyle", pStyleName ) == 0 ) -++ { -++ nStyle |= TQStyle::Style_MouseOver; -++ if ( pValue->mnButton1State & CTRL_STATE_ROLLOVER ) -++ eActive = TQStyle::SC_ScrollBarSubLine; -++ else if ( pValue->mnButton2State & CTRL_STATE_ROLLOVER ) -++ eActive = TQStyle::SC_ScrollBarAddLine; -++ else if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER ) -++ eActive = TQStyle::SC_ScrollBarSlider; -++ } -++ -++ if ( pValue->mnButton1State & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarSubLine; -++ else if ( pValue->mnButton2State & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarAddLine; -++ else if ( pValue->mnThumbState & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarSlider; -++ else if ( pValue->mnPage1State & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarSubPage; -++ else if ( pValue->mnPage2State & CTRL_STATE_PRESSED ) -++ eActive = TQStyle::SC_ScrollBarAddPage; -++ -++ // Update the enable/disable state of the widget -++ if ( ( nState & CTRL_STATE_ENABLED ) || -++ ( pValue->mnButton1State & CTRL_STATE_ENABLED ) || -++ ( pValue->mnButton2State & CTRL_STATE_ENABLED ) || -++ ( pValue->mnThumbState & CTRL_STATE_ENABLED ) || -++ ( pValue->mnPage1State & CTRL_STATE_ENABLED ) || -++ ( pValue->mnPage2State & CTRL_STATE_ENABLED ) ) -++ { -++ pWidget->setEnabled( true ); -++ nStyle |= TQStyle::Style_Enabled; -++ } -++ else -++ pWidget->setEnabled( false ); -++ } -++ -++ // Is it a horizontal scroll bar? -++ TQScrollBar *pScrollBar = static_cast ( pWidget->qt_cast( TQSCROLLBAR_OBJECT_NAME_STRING ) ); -++ TQStyle::StyleFlags eHoriz = TQStyle::Style_Default; -++ if ( pScrollBar && pScrollBar->orientation() == Qt::Horizontal ) -++ eHoriz = TQStyle::Style_Horizontal; -++ -++ kapp->style().drawComplexControl( TQStyle::CC_ScrollBar, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle | eHoriz, -++ TQStyle::SC_All, eActive ); -++ } -++ else if ( strcmp( TQTOOLBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ TQToolBar *pToolBar = static_cast< TQToolBar * >( pWidget->qt_cast( TQTOOLBAR_OBJECT_NAME_STRING ) ); -++ bool bIsHorizontal = false; -++ if ( pToolBar && pToolBar->orientation() == Qt::Horizontal ) -++ { -++ nStyle |= TQStyle::Style_Horizontal; -++ bIsHorizontal = true; -++ } -++ -++ kapp->style().drawControl( TQStyle::CE_DockWindowEmptyArea, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ -++ kapp->style().drawPrimitive( TQStyle::PE_PanelDockWindow, -++ &qPainter, qRect, pWidget->colorGroup(), nStyle ); -++ -++ if ( nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT ) -++ { -++ const ToolbarValue *pValue = static_cast< const ToolbarValue * >( &aValue ); -++ -++ TQRect qThumbRect = region2TQRect( pValue->maGripRect ); -++ qThumbRect.moveBy( -qWidgetPos.x(), -qWidgetPos.y() ); -++ if ( bIsHorizontal ) -++ qThumbRect.addCoords( 0, 2, 0, -3 ); // make the thumb a bit nicer -++ else -++ qThumbRect.addCoords( 2, 0, -3, 0 ); // make the thumb a bit nicer -++ -++ if ( kapp->style().inherits( "HighColorStyle" ) || -++ kapp->style().inherits( "HighContrastStyle" ) || -++ kapp->style().inherits( "KeramikStyle" ) || -++ kapp->style().inherits( "KThemeStyle" ) || -++ kapp->style().inherits( "ThinKeramikStyle" ) ) -++ { -++ // Workaround for the workaround in KStyle::drawPrimitive() -++ KStyle *pStyle = static_cast< KStyle * >( &kapp->style() ); -++ pStyle->drawKStylePrimitive( KStyle::KPE_ToolBarHandle, -++ &qPainter, pToolBar, qThumbRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else -++ kapp->style().drawPrimitive( TQStyle::PE_DockWindowHandle, -++ &qPainter, qThumbRect, pWidget->colorGroup(), nStyle ); -++ } -++ } -++ else if ( strcmp( TQTOOLBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ if( (nStyle & TQStyle::Style_MouseOver) ) -++ nStyle &= ~TQStyle::Style_Off; -++ kapp->style().drawComplexControl( TQStyle::CC_ToolButton, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyle::SC_ToolButton ); -++ } -++ else if ( strcmp( TQMENUBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ if ( nPart == PART_ENTIRE_CONTROL ) -++ { -++ kapp->style().drawControl( TQStyle::CE_MenuBarEmptyArea, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else if ( nPart == PART_MENU_ITEM ) -++ { -++ int nMenuItem = ( nStyle & TQStyle::Style_Enabled )? m_nMenuBarEnabledItem: m_nMenuBarDisabledItem; -++ TQMenuItem *pMenuItem = static_cast( pWidget )->findItem( nMenuItem ); -++ -++ if ( nStyle & TQStyle::Style_Selected ) -++ nStyle |= TQStyle::Style_Active | TQStyle::Style_Down | TQStyle::Style_HasFocus; -++ -++ kapp->style().drawControl( TQStyle::CE_MenuBarItem, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyleOption( pMenuItem ) ); -++ } -++ } -++ else if ( strcmp( TQPOPUPMENU_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ int nMenuItem = ( nStyle & TQStyle::Style_Enabled )? m_nPopupMenuEnabledItem: m_nPopupMenuDisabledItem; -++ TQMenuItem *pMenuItem = static_cast( pWidget )->findItem( nMenuItem ); -++ -++ if ( nStyle & TQStyle::Style_Selected ) -++ nStyle |= TQStyle::Style_Active; -++ -++ kapp->style().drawControl( TQStyle::CE_PopupMenuItem, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle, -++ TQStyleOption( pMenuItem, 0, 0 ) ); -++ } -++ else if ( strcmp( TQPROGRESSBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -++ { -++ long nProgressWidth = aValue.getNumericVal(); -++ TQProgressBar* pProgress = static_cast(pWidget); -++ pProgress->setProgress( nProgressWidth, qRect.width() ); -++ -++ kapp->style().drawControl( TQStyle::CE_ProgressBarGroove, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ kapp->style().drawControl( TQStyle::CE_ProgressBarContents, -++ &qPainter, pWidget, qRect, -++ pWidget->colorGroup(), nStyle ); -++ } -++ else -++ return FALSE; -++ -++ // Bitblt it to the screen -++ X11SalGraphics::CopyScreenArea( dpy, -++ qPixmap.handle(), qPixmap.x11Screen(), qPixmap.x11Depth(), -++ drawable, nScreen, nDepth, -++ gc, -++ 0, 0, qRect.width(), qRect.height(), -++ qWidgetPos.x(), qWidgetPos.y() ); -++ -++ // Restore widget's position -++ pWidget->move( qWidgetPos ); -++ -++ return TRUE; -++} -++ -++TQPushButton *WidgetPainter::pushButton( const Rectangle& rControlRegion, -++ BOOL bDefault ) -++{ -++ if ( !m_pPushButton ) -++ m_pPushButton = new TQPushButton( NULL, "push_button" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ // Workaround for broken styles which do not add -++ // TQStyle::PM_ButtonDefaultIndicator to the size of the default button -++ // (for example Keramik) -++ // FIXME Fix Keramik style to be consistant with Qt built-in styles. Aargh! -++ if ( bDefault ) -++ { -++ TQSize qContentsSize( 50, 50 ); -++ m_pPushButton->setDefault( false ); -++ TQSize qNormalSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton, -++ m_pPushButton, qContentsSize ); -++ m_pPushButton->setDefault( true ); -++ TQSize qDefSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton, -++ m_pPushButton, qContentsSize ); -++ -++ int nIndicatorSize = kapp->style().pixelMetric( -++ TQStyle::PM_ButtonDefaultIndicator, m_pPushButton ); -++ if ( qNormalSize.width() == qDefSize.width() ) -++ qRect.addCoords( nIndicatorSize, 0, -nIndicatorSize, 0 ); -++ if ( qNormalSize.height() == qDefSize.height() ) -++ qRect.addCoords( 0, nIndicatorSize, 0, -nIndicatorSize ); -++ } -++ -++ m_pPushButton->move( qRect.topLeft() ); -++ m_pPushButton->resize( qRect.size() ); -++ m_pPushButton->setDefault( bDefault ); -++ -++ return m_pPushButton; -++} -++ -++TQRadioButton *WidgetPainter::radioButton( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pRadioButton ) -++ m_pRadioButton = new TQRadioButton( NULL, "radio_button" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ // Workaround for broken themes which do not honor the given size. -++ // Quite ugly, but I do not know about a better solution. -++ const char *pStyleName = kapp->style().className(); -++ if ( strcmp( "KThemeStyle", pStyleName ) == 0 ) -++ { -++ TQRect qOldRect( qRect ); -++ -++ qRect.setWidth( kapp->style().pixelMetric( -++ TQStyle::PM_ExclusiveIndicatorWidth, m_pRadioButton ) ); -++ qRect.setHeight( kapp->style().pixelMetric( -++ TQStyle::PM_ExclusiveIndicatorHeight, m_pRadioButton ) ); -++ -++ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2, -++ ( qOldRect.height() - qRect.height() ) / 2 ); -++ } -++ -++ m_pRadioButton->move( qRect.topLeft() ); -++ m_pRadioButton->resize( qRect.size() ); -++ -++ return m_pRadioButton; -++} -++ -++TQCheckBox *WidgetPainter::checkBox( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pCheckBox ) -++ m_pCheckBox = new TQCheckBox( NULL, "check_box" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ // Workaround for broken themes which do not honor the given size. -++ // Quite ugly, but I do not know about a better solution. -++ const char *pStyleName = kapp->style().className(); -++ if ( strcmp( "KThemeStyle", pStyleName ) == 0 ) -++ { -++ TQRect qOldRect( qRect ); -++ -++ qRect.setWidth( kapp->style().pixelMetric( -++ TQStyle::PM_IndicatorWidth, m_pCheckBox ) ); -++ qRect.setHeight( kapp->style().pixelMetric( -++ TQStyle::PM_IndicatorHeight, m_pCheckBox ) ); -++ -++ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2, -++ ( qOldRect.height() - qRect.height() ) / 2 ); -++ } -++ -++ m_pCheckBox->move( qRect.topLeft() ); -++ m_pCheckBox->resize( qRect.size() ); -++ -++ return m_pCheckBox; -++} -++ -++TQComboBox *WidgetPainter::comboBox( const Rectangle& rControlRegion, -++ BOOL bEditable ) -++{ -++ TQComboBox *pComboBox = NULL; -++ if ( bEditable ) -++ { -++ if ( !m_pEditableComboBox ) -++ m_pEditableComboBox = new TQComboBox( true, NULL, "combo_box_edit" ); -++ pComboBox = m_pEditableComboBox; -++ } -++ else -++ { -++ if ( !m_pComboBox ) -++ m_pComboBox = new TQComboBox( false, NULL, "combo_box" ); -++ pComboBox = m_pComboBox; -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ pComboBox->move( qRect.topLeft() ); -++ pComboBox->resize( qRect.size() ); -++ -++ return pComboBox; -++} -++ -++TQLineEdit *WidgetPainter::lineEdit( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pLineEdit ) -++ m_pLineEdit = new TQLineEdit( NULL, "line_edit" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pLineEdit->move( qRect.topLeft() ); -++ m_pLineEdit->resize( qRect.size() ); -++ -++ return m_pLineEdit; -++} -++ -++TQSpinWidget *WidgetPainter::spinWidget( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pSpinWidget ) -++ { -++ m_pSpinWidget = new TQSpinWidget( NULL, "spin_widget" ); -++ -++ m_pSpinEdit = new TQLineEdit( NULL, "line_edit_spin" ); -++ m_pSpinWidget->setEditWidget( m_pSpinEdit ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pSpinWidget->move( qRect.topLeft() ); -++ m_pSpinWidget->resize( qRect.size() ); -++ m_pSpinWidget->arrange(); -++ -++ return m_pSpinWidget; -++} -++ -++TQTabBar *WidgetPainter::tabBar( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pTabBar ) -++ { -++ if ( !m_pTabBarParent ) -++ m_pTabBarParent = new TQWidget( NULL, "tab_bar_parent" ); -++ -++ m_pTabBar = new TQTabBar( m_pTabBarParent, "tab_bar" ); -++ -++ m_pTabLeft = new TQTab(); -++ m_pTabMiddle = new TQTab(); -++ m_pTabRight = new TQTab(); -++ m_pTabAlone = new TQTab(); -++ -++ m_pTabBar->addTab( m_pTabLeft ); -++ m_pTabBar->addTab( m_pTabMiddle ); -++ m_pTabBar->addTab( m_pTabRight ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pTabBar->move( qRect.topLeft() ); -++ m_pTabBar->resize( qRect.size() ); -++ -++ m_pTabBar->setShape( TQTabBar::RoundedAbove ); -++ -++ return m_pTabBar; -++} -++ -++TQTabWidget *WidgetPainter::tabWidget( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pTabWidget ) -++ m_pTabWidget = new TQTabWidget( NULL, "tab_widget" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ --qRect.rTop(); -++ -++ m_pTabWidget->move( qRect.topLeft() ); -++ m_pTabWidget->resize( qRect.size() ); -++ -++ return m_pTabWidget; -++} -++ -++TQListView *WidgetPainter::listView( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pListView ) -++ m_pListView = new TQListView( NULL, "list_view" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pListView->move( qRect.topLeft() ); -++ m_pListView->resize( qRect.size() ); -++ -++ return m_pListView; -++} -++ -++TQScrollBar *WidgetPainter::scrollBar( const Rectangle& rControlRegion, -++ BOOL bHorizontal, const ImplControlValue& aValue ) -++{ -++ if ( !m_pScrollBar ) -++ { -++ m_pScrollBar = new TQScrollBar( NULL, "scroll_bar" ); -++ m_pScrollBar->setTracking( false ); -++ m_pScrollBar->setLineStep( 1 ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pScrollBar->move( qRect.topLeft() ); -++ m_pScrollBar->resize( qRect.size() ); -++ m_pScrollBar->setOrientation( bHorizontal? Qt::Horizontal: Qt::Vertical ); -++ -++ const ScrollbarValue *pValue = static_cast ( &aValue ); -++ if ( pValue ) -++ { -++ m_pScrollBar->setMinValue( pValue->mnMin ); -++ m_pScrollBar->setMaxValue( pValue->mnMax - pValue->mnVisibleSize ); -++ m_pScrollBar->setValue( pValue->mnCur ); -++ m_pScrollBar->setPageStep( pValue->mnVisibleSize ); -++ } -++ -++ return m_pScrollBar; -++} -++ -++TQToolBar *WidgetPainter::toolBar( const Rectangle& rControlRegion, BOOL bHorizontal ) -++{ -++ if ( !m_pMainWindow ) -++ m_pMainWindow = new TQMainWindow( NULL, "main_window" ); -++ -++ TQToolBar *pToolBar; -++ if ( bHorizontal ) -++ { -++ if ( !m_pToolBarHoriz ) -++ { -++ m_pToolBarHoriz = new TQToolBar( m_pMainWindow, "tool_bar_horiz" ); -++ m_pMainWindow->moveDockWindow( m_pToolBarHoriz, Qt::DockTop ); -++ } -++ pToolBar = m_pToolBarHoriz; -++ } -++ else -++ { -++ if ( !m_pToolBarVert ) -++ { -++ m_pToolBarVert = new TQToolBar( m_pMainWindow, "tool_bar_horiz" ); -++ m_pMainWindow->moveDockWindow( m_pToolBarVert, Qt::DockLeft ); -++ } -++ pToolBar = m_pToolBarVert; -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ pToolBar->move( qRect.topLeft() ); -++ pToolBar->resize( qRect.size() ); -++ -++ return pToolBar; -++} -++ -++TQToolButton *WidgetPainter::toolButton( const Rectangle& rControlRegion) -++{ -++ if ( !m_pToolButton ) -++ m_pToolButton = new TQToolButton( NULL, "tool_button" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pToolButton->move( qRect.topLeft() ); -++ m_pToolButton->resize( qRect.size() ); -++ -++ return m_pToolButton; -++} -++ -++TQMenuBar *WidgetPainter::menuBar( const Rectangle& rControlRegion) -++{ -++ if ( !m_pMenuBar ) -++ { -++ m_pMenuBar = new TQMenuBar( NULL, "menu_bar" ); -++ -++ m_nMenuBarEnabledItem = m_pMenuBar->insertItem( "" ); -++ m_nMenuBarDisabledItem = m_pMenuBar->insertItem( "" ); -++ -++ m_pMenuBar->setItemEnabled( m_nMenuBarEnabledItem, true ); -++ m_pMenuBar->setItemEnabled( m_nMenuBarDisabledItem, false ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pMenuBar->move( qRect.topLeft() ); -++ m_pMenuBar->resize( qRect.size() ); -++ -++ return m_pMenuBar; -++} -++ -++TQPopupMenu *WidgetPainter::popupMenu( const Rectangle& rControlRegion) -++{ -++ if ( !m_pPopupMenu ) -++ { -++ m_pPopupMenu = new TQPopupMenu( NULL, "popup_menu" ); -++ -++ m_nPopupMenuEnabledItem = m_pPopupMenu->insertItem( "" ); -++ m_nPopupMenuDisabledItem = m_pPopupMenu->insertItem( "" ); -++ -++ m_pPopupMenu->setItemEnabled( m_nPopupMenuEnabledItem, true ); -++ m_pPopupMenu->setItemEnabled( m_nPopupMenuDisabledItem, false ); -++ } -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pPopupMenu->move( qRect.topLeft() ); -++ m_pPopupMenu->resize( qRect.size() ); -++ -++ return m_pPopupMenu; -++} -++ -++TQProgressBar *WidgetPainter::progressBar( const Rectangle& rControlRegion ) -++{ -++ if ( !m_pProgressBar ) -++ m_pProgressBar = new TQProgressBar( NULL, "progress_bar" ); -++ -++ TQRect qRect = region2TQRect( rControlRegion ); -++ -++ m_pProgressBar->move( qRect.topLeft() ); -++ m_pProgressBar->resize( qRect.size() ); -++ -++ return m_pProgressBar; -++} -++ -++TQStyle::SFlags WidgetPainter::vclStateValue2SFlags( ControlState nState, -++ const ImplControlValue& aValue ) -++{ -++ TQStyle::SFlags nStyle = -++ ( (nState & CTRL_STATE_DEFAULT)? TQStyle::Style_ButtonDefault: TQStyle::Style_Default ) | -++ ( (nState & CTRL_STATE_ENABLED)? TQStyle::Style_Enabled: TQStyle::Style_Default ) | -++ ( (nState & CTRL_STATE_FOCUSED)? TQStyle::Style_HasFocus: TQStyle::Style_Default ) | -++ ( (nState & CTRL_STATE_PRESSED)? TQStyle::Style_Down: TQStyle::Style_Raised ) | -++ ( (nState & CTRL_STATE_SELECTED)? TQStyle::Style_Selected : TQStyle::Style_Default ) | -++ ( (nState & CTRL_STATE_ROLLOVER)? TQStyle::Style_MouseOver: TQStyle::Style_Default ); -++ //TODO ( (nState & CTRL_STATE_HIDDEN)? TQStyle::Style_: TQStyle::Style_Default ) | -++ -++ switch ( aValue.getTristateVal() ) -++ { -++ case BUTTONVALUE_ON: nStyle |= TQStyle::Style_On; break; -++ case BUTTONVALUE_OFF: nStyle |= TQStyle::Style_Off; break; -++ case BUTTONVALUE_MIXED: nStyle |= TQStyle::Style_NoChange; break; -++ default: break; -++ } -++ -++ return nStyle; -++} -++ -++TQRect WidgetPainter::region2TQRect( const Rectangle& rControlRegion ) -++{ -++ return TQRect( TQPoint( rControlRegion.Left(), rControlRegion.Top() ), -++ TQPoint( rControlRegion.Right(), rControlRegion.Bottom() ) ); -++} -++ -++/** Instance of WidgetPainter. -++ -++ It is used to paint the widgets requested by NWF. -++*/ -++static WidgetPainter *pWidgetPainter; -++ -++class TDESalGraphics : public X11SalGraphics -++{ -++ public: -++ TDESalGraphics() {} -++ virtual ~TDESalGraphics() {} -++ virtual BOOL IsNativeControlSupported( ControlType nType, ControlPart nPart ); -++ virtual BOOL hitTestNativeControl( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, const Point& aPos, -++ BOOL& rIsInside ); -++ virtual BOOL drawNativeControl( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue& aValue, -++ const OUString& aCaption ); -++ virtual BOOL drawNativeControlText( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue& aValue, -++ const OUString& aCaption ); -++ virtual BOOL getNativeControlRegion( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue& aValue, -++ const OUString& aCaption, -++ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ); -++}; -++ -++/** What widgets can be drawn the native way. -++ -++ @param nType -++ Type of the widget. -++ -++ @param nPart -++ Specification of the widget's part if it consists of more than one. -++ -++ @return TRUE if the platform supports native drawing of the widget nType -++ defined by nPart. -++*/ -++BOOL TDESalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nPart ) -++{ -++ return -++ ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) || -++ ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) || -++ ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) ) || -++ ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) || -++ ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) || -++ ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_WINDOW || nPart == HAS_BACKGROUND_TEXTURE ) ) || -++ ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) || -++ // no CTRL_SPINBUTTONS for TDE -++ ( (nType == CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) ) || -++ ( (nType == CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) ) || -++ // no CTRL_TAB_BODY for TDE -++ ( (nType == CTRL_SCROLLBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) ) || -++ ( (nType == CTRL_SCROLLBAR) && (nPart == HAS_THREE_BUTTONS) ) || // TODO small optimization is possible here: return this only if the style really has 3 buttons -++ // CTRL_GROUPBOX not supported -++ // CTRL_FIXEDLINE not supported -++ // CTRL_FIXEDBORDER not supported -++ ( (nType == CTRL_TOOLBAR) && (nPart == PART_ENTIRE_CONTROL || -++ nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT || -++ nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT || -++ nPart == PART_BUTTON) ) || -++ ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) || -++ ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) || -++ ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) ) -++ ; -++} -++ -++ -++/** Test whether the position is in the native widget. -++ -++ If the return value is TRUE, bIsInside contains information whether -++ aPos was or was not inside the native widget specified by the -++ nType/nPart combination. -++*/ -++BOOL TDESalGraphics::hitTestNativeControl( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, const Point& rPos, -++ BOOL& rIsInside ) -++{ -++ if ( nType == CTRL_SCROLLBAR ) -++ { -++ // make position relative to rControlRegion -++ Point aPos = rPos - rControlRegion.TopLeft(); -++ rIsInside = FALSE; -++ -++ BOOL bHorizontal = ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT ); -++ -++ TQScrollBar *pScrollBar = pWidgetPainter->scrollBar( rControlRegion, -++ bHorizontal, ImplControlValue() ); -++ TQRect qRectSubLine = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubLine ); -++ TQRect qRectAddLine = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarAddLine ); -++ -++ // There are 2 buttons on the right/bottom side of the scrollbar -++ BOOL bTwoSubButtons = FALSE; -++ -++ // It is a Platinum style scroll bar -++ BOOL bPlatinumStyle = FALSE; -++ -++ // Workaround for Platinum and 3 button style scroll bars. -++ // It makes the right/down button bigger. -++ if ( bHorizontal ) -++ { -++ qRectAddLine.setLeft( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pScrollBar, -++ TQStyle::SC_ScrollBarAddPage ).right() + 1 ); -++ if ( qRectAddLine.width() > qRectSubLine.width() ) -++ bTwoSubButtons = TRUE; -++ if ( qRectSubLine.left() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).left() ) -++ bPlatinumStyle = TRUE; -++ } -++ else -++ { -++ qRectAddLine.setTop( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pScrollBar, -++ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 ); -++ if ( qRectAddLine.height() > qRectSubLine.height() ) -++ bTwoSubButtons = TRUE; -++ if ( qRectSubLine.top() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).top() ) -++ bPlatinumStyle = TRUE; -++ } -++ -++ switch ( nPart ) -++ { -++ case PART_BUTTON_LEFT: -++ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) ) -++ rIsInside = TRUE; -++ else if ( bTwoSubButtons ) -++ { -++ qRectAddLine.setWidth( qRectAddLine.width() / 2 ); -++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -++ } -++ break; -++ -++ case PART_BUTTON_UP: -++ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) ) -++ rIsInside = TRUE; -++ else if ( bTwoSubButtons ) -++ { -++ qRectAddLine.setHeight( qRectAddLine.height() / 2 ); -++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -++ } -++ break; -++ -++ case PART_BUTTON_RIGHT: -++ if ( bTwoSubButtons ) -++ qRectAddLine.setLeft( qRectAddLine.left() + qRectAddLine.width() / 2 ); -++ -++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -++ break; -++ -++ case PART_BUTTON_DOWN: -++ if ( bTwoSubButtons ) -++ qRectAddLine.setTop( qRectAddLine.top() + qRectAddLine.height() / 2 ); -++ -++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -++ break; -++ -++ // cases PART_TRACK_HORZ_AREA and PART_TRACK_VERT_AREA -++ default: -++ return FALSE; -++ } -++ -++ return TRUE; -++ } -++ -++ return FALSE; -++} -++ -++ -++/** Draw the requested control described by nPart/nState. -++ -++ @param rControlRegion -++ The bounding region of the complete control in VCL frame coordinates. -++ -++ @param aValue -++ An optional value (tristate/numerical/string). -++ -++ @param aCaption -++ A caption or title string (like button text etc.) -++*/ -++BOOL TDESalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue& aValue, -++ const OUString& ) -++{ -++ BOOL bReturn = FALSE; -++ -++ Display *dpy = GetXDisplay(); -++ XLIB_Window drawable = GetDrawable(); -++ GC gc = SelectPen(); //SelectFont(); // GC with current clipping region set -++ -++ if ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->pushButton( rControlRegion, (nState & CTRL_STATE_DEFAULT) ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->radioButton( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->checkBox( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->comboBox( rControlRegion, TRUE ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->lineEdit( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->comboBox( rControlRegion, FALSE ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_WINDOW) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->listView( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->spinWidget( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType==CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->tabBar( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType==CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->tabWidget( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_SCROLLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->scrollBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ, aValue ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT || nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->toolBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_THUMB_VERT ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart ); -++ } -++ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_BUTTON) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->toolButton( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart ); -++ } -++ else if ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->menuBar( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart ); -++ } -++ else if ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->popupMenu( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ else if ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) ) -++ { -++ bReturn = pWidgetPainter->drawStyledWidget( -++ pWidgetPainter->progressBar( rControlRegion ), -++ nState, aValue, -++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -++ } -++ -++ return bReturn; -++} -++ -++ -++/** Draw text on the widget. -++ -++ OPTIONAL. Draws the requested text for the control described by nPart/nState. -++ Used if text is not drawn by DrawNativeControl(). -++ -++ @param rControlRegion -++ The bounding region of the complete control in VCL frame coordinates. -++ -++ @param aValue -++ An optional value (tristate/numerical/string) -++ -++ @param aCaption -++ A caption or title string (like button text etc.) -++*/ -++BOOL TDESalGraphics::drawNativeControlText( ControlType, ControlPart, -++ const Rectangle&, ControlState, -++ const ImplControlValue&, -++ const OUString& ) -++{ -++ return FALSE; -++} -++ -++/** Check if the bounding regions match. -++ -++ If the return value is TRUE, rNativeBoundingRegion -++ contains the true bounding region covered by the control -++ including any adornment, while rNativeContentRegion contains the area -++ within the control that can be safely drawn into without drawing over -++ the borders of the control. -++ -++ @param rControlRegion -++ The bounding region of the control in VCL frame coordinates. -++ -++ @param aValue -++ An optional value (tristate/numerical/string) -++ -++ @param aCaption -++ A caption or title string (like button text etc.) -++*/ -++BOOL TDESalGraphics::getNativeControlRegion( ControlType nType, ControlPart nPart, -++ const Rectangle& rControlRegion, ControlState nState, -++ const ImplControlValue&, -++ const OUString&, -++ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ) -++{ -++ BOOL bReturn = FALSE; -++ TQRect qBoundingRect = WidgetPainter::region2TQRect( rControlRegion ); -++ TQRect qRect; -++ -++ TQWidget *pWidget = NULL; -++ switch ( nType ) -++ { -++ // Metrics of the push button -++ case CTRL_PUSHBUTTON: -++ pWidget = pWidgetPainter->pushButton( rControlRegion, ( nState & CTRL_STATE_DEFAULT ) ); -++ -++ switch ( nPart ) -++ { -++ case PART_ENTIRE_CONTROL: -++ qRect = qBoundingRect; -++ -++ if ( nState & CTRL_STATE_DEFAULT ) -++ { -++ int nIndicatorSize = kapp->style().pixelMetric( -++ TQStyle::PM_ButtonDefaultIndicator, pWidget ); -++ qBoundingRect.addCoords( -nIndicatorSize, -nIndicatorSize, -++ nIndicatorSize, nIndicatorSize ); -++ bReturn = TRUE; -++ } -++ break; -++ } -++ break; -++ -++ // Metrics of the radio button -++ case CTRL_RADIOBUTTON: -++ pWidget = pWidgetPainter->radioButton( rControlRegion ); -++ -++ if ( nPart == PART_ENTIRE_CONTROL ) -++ { -++ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorWidth, pWidget ) ); -++ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorHeight, pWidget ) ); -++ -++ bReturn = TRUE; -++ } -++ break; -++ -++ // Metrics of the check box -++ case CTRL_CHECKBOX: -++ pWidget = pWidgetPainter->checkBox( rControlRegion ); -++ -++ if ( nPart == PART_ENTIRE_CONTROL ) -++ { -++ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_IndicatorWidth, pWidget ) ); -++ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_IndicatorHeight, pWidget ) ); -++ -++ bReturn = TRUE; -++ } -++ break; -++ -++ // Metrics of the combo box -++ case CTRL_COMBOBOX: -++ case CTRL_LISTBOX: -++ pWidget = pWidgetPainter->comboBox( rControlRegion, ( nType == CTRL_COMBOBOX ) ); -++ switch ( nPart ) -++ { -++ case PART_BUTTON_DOWN: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxArrow ); -++ qRect.setLeft( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ComboBox, pWidget, -++ TQStyle::SC_ComboBoxEditField ).right() + 1 ); -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ bReturn = TRUE; -++ break; -++ -++ case PART_SUB_EDIT: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxEditField ); -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ bReturn = TRUE; -++ break; -++ } -++ break; -++ -++ // Metrics of the spin box -++ case CTRL_SPINBOX: -++ pWidget = pWidgetPainter->spinWidget( rControlRegion ); -++ switch ( nPart ) -++ { -++ case PART_BUTTON_UP: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetUp ); -++ bReturn = TRUE; -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ break; -++ -++ case PART_BUTTON_DOWN: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetDown ); -++ bReturn = TRUE; -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ break; -++ -++ case PART_SUB_EDIT: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetEditField ); -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ bReturn = TRUE; -++ break; -++ } -++ break; -++ -++ // Metrics of the scroll bar -++ case CTRL_SCROLLBAR: -++ pWidget = pWidgetPainter->scrollBar( rControlRegion, -++ ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT ), -++ ImplControlValue() ); -++ switch ( nPart ) -++ { -++ case PART_BUTTON_LEFT: -++ case PART_BUTTON_UP: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarSubLine ); -++ -++ // Workaround for Platinum style scroll bars. It makes the -++ // left/up button invisible. -++ if ( nPart == PART_BUTTON_LEFT ) -++ { -++ if ( qRect.left() > kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, -++ TQStyle::SC_ScrollBarSubPage ).left() ) -++ { -++ qRect.setLeft( 0 ); -++ qRect.setRight( 0 ); -++ } -++ } -++ else -++ { -++ if ( qRect.top() > kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, -++ TQStyle::SC_ScrollBarSubPage ).top() ) -++ { -++ qRect.setTop( 0 ); -++ qRect.setBottom( 0 ); -++ } -++ } -++ -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ -++ bReturn = TRUE; -++ break; -++ -++ case PART_BUTTON_RIGHT: -++ case PART_BUTTON_DOWN: -++ qRect = kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarAddLine ); -++ -++ // Workaround for Platinum and 3 button style scroll bars. -++ // It makes the right/down button bigger. -++ if ( nPart == PART_BUTTON_RIGHT ) -++ qRect.setLeft( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, -++ TQStyle::SC_ScrollBarAddPage ).right() + 1 ); -++ else -++ qRect.setTop( kapp->style().querySubControlMetrics( -++ TQStyle::CC_ScrollBar, pWidget, -++ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 ); -++ -++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -++ -++ bReturn = TRUE; -++ break; -++ } -++ break; -++ } -++ -++ // Fill rNativeBoundingRegion and rNativeContentRegion -++ if ( bReturn ) -++ { -++ // Bounding region -++ Point aBPoint( qBoundingRect.x(), qBoundingRect.y() ); -++ Size aBSize( qBoundingRect.width(), qBoundingRect.height() ); -++ rNativeBoundingRegion = Rectangle( aBPoint, aBSize ); -++ -++ // Region of the content -++ Point aPoint( qRect.x(), qRect.y() ); -++ Size aSize( qRect.width(), qRect.height() ); -++ rNativeContentRegion = Rectangle( aPoint, aSize ); -++ } -++ -++ return bReturn; -++} -++ -++// ----------------------------------------------------------------------- -++// TDESalFrame implementation -++// ----------------------------------------------------------------------- -++ -++TDESalFrame::TDESalFrame( SalFrame* pParent, ULONG nStyle ) : -++ X11SalFrame( pParent, nStyle ) -++{ -++} -++ -++void TDESalFrame::Show( BOOL bVisible, BOOL bNoActivate ) -++{ -++ if ( !GetParent() && ! (GetStyle() & SAL_FRAME_STYLE_INTRO) ) -++ { -++ TDEXLib* pXLib = static_cast(GetDisplay()->GetXLib()); -++ pXLib->doStartup(); -++ } -++ X11SalFrame::Show( bVisible, bNoActivate ); -++} -++ -++/** Helper function to convert colors. -++*/ -++static Color toColor( const TQColor &rColor ) -++{ -++ return Color( rColor.red(), rColor.green(), rColor.blue() ); -++} -++ -++/** Helper function to read untranslated text entry from KConfig configuration repository. -++*/ -++static OUString readEntryUntranslated( KConfig *pConfig, const char *pKey ) -++{ -++ return OUString::createFromAscii( pConfig->readEntryUntranslated( pKey ).ascii() ); -++} -++ -++/** Helper function to read color from KConfig configuration repository. -++*/ -++static Color readColor( KConfig *pConfig, const char *pKey ) -++{ -++ return toColor( pConfig->readColorEntry( pKey ) ); -++} -++ -++/** Helper function to add information to Font from TQFont. -++ -++ Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx). -++*/ -++static Font toFont( const TQFont &rTQFont, const ::com::sun::star::lang::Locale& rLocale ) -++{ -++ psp::FastPrintFontInfo aInfo; -++ TQFontInfo qFontInfo( rTQFont ); -++ -++ // set family name -++ aInfo.m_aFamilyName = String( rTQFont.family().utf8(), RTL_TEXTENCODING_UTF8 ); -++ -++ // set italic -++ aInfo.m_eItalic = ( qFontInfo.italic()? psp::italic::Italic: psp::italic::Upright ); -++ -++ // set weight -++ int nWeight = qFontInfo.weight(); -++ if ( nWeight <= TQFont::Light ) -++ aInfo.m_eWeight = psp::weight::Light; -++ else if ( nWeight <= TQFont::Normal ) -++ aInfo.m_eWeight = psp::weight::Normal; -++ else if ( nWeight <= TQFont::DemiBold ) -++ aInfo.m_eWeight = psp::weight::SemiBold; -++ else if ( nWeight <= TQFont::Bold ) -++ aInfo.m_eWeight = psp::weight::Bold; -++ else -++ aInfo.m_eWeight = psp::weight::UltraBold; -++ -++ // set width -++ int nStretch = rTQFont.stretch(); -++ if ( nStretch <= TQFont::UltraCondensed ) -++ aInfo.m_eWidth = psp::width::UltraCondensed; -++ else if ( nStretch <= TQFont::ExtraCondensed ) -++ aInfo.m_eWidth = psp::width::ExtraCondensed; -++ else if ( nStretch <= TQFont::Condensed ) -++ aInfo.m_eWidth = psp::width::Condensed; -++ else if ( nStretch <= TQFont::SemiCondensed ) -++ aInfo.m_eWidth = psp::width::SemiCondensed; -++ else if ( nStretch <= TQFont::Unstretched ) -++ aInfo.m_eWidth = psp::width::Normal; -++ else if ( nStretch <= TQFont::SemiExpanded ) -++ aInfo.m_eWidth = psp::width::SemiExpanded; -++ else if ( nStretch <= TQFont::Expanded ) -++ aInfo.m_eWidth = psp::width::Expanded; -++ else if ( nStretch <= TQFont::ExtraExpanded ) -++ aInfo.m_eWidth = psp::width::ExtraExpanded; -++ else -++ aInfo.m_eWidth = psp::width::UltraExpanded; -++ -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "font name BEFORE system match: \"%s\"\n", OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() ); -++#endif -++ -++ // match font to e.g. resolve "Sans" -++ psp::PrintFontManager::get().matchFont( aInfo, rLocale ); -++ -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "font match %s, name AFTER: \"%s\"\n", -++ aInfo.m_nID != 0 ? "succeeded" : "failed", -++ OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() ); -++#endif -++ -++ // font height -++ int nPointHeight = qFontInfo.pointSize(); -++ if ( nPointHeight <= 0 ) -++ nPointHeight = rTQFont.pointSize(); -++ -++ // Create the font -++ Font aFont( aInfo.m_aFamilyName, Size( 0, nPointHeight ) ); -++ if( aInfo.m_eWeight != psp::weight::Unknown ) -++ aFont.SetWeight( PspGraphics::ToFontWeight( aInfo.m_eWeight ) ); -++ if( aInfo.m_eWidth != psp::width::Unknown ) -++ aFont.SetWidthType( PspGraphics::ToFontWidth( aInfo.m_eWidth ) ); -++ if( aInfo.m_eItalic != psp::italic::Unknown ) -++ aFont.SetItalic( PspGraphics::ToFontItalic( aInfo.m_eItalic ) ); -++ if( aInfo.m_ePitch != psp::pitch::Unknown ) -++ aFont.SetPitch( PspGraphics::ToFontPitch( aInfo.m_ePitch ) ); -++ -++ return aFont; -++} -++ -++/** Implementation of TDE integration's main method. -++*/ -++void TDESalFrame::UpdateSettings( AllSettings& rSettings ) -++{ -++ StyleSettings aStyleSettings( rSettings.GetStyleSettings() ); -++ bool bSetTitleFont = false; -++ -++ aStyleSettings.SetToolbarIconSize( STYLE_TOOLBAR_ICONSIZE_LARGE ); -++ -++ // WM settings -++ KConfig *pConfig = KGlobal::config(); -++ if ( pConfig ) -++ { -++ pConfig->setGroup( "WM" ); -++ const char *pKey; -++ -++ pKey = "activeBackground"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetActiveColor( readColor( pConfig, pKey ) ); -++ -++ pKey = "activeBlend"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetActiveColor2( readColor( pConfig, pKey ) ); -++ -++ pKey = "inactiveBackground"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetDeactiveColor( readColor( pConfig, pKey ) ); -++ -++ pKey = "inactiveBlend"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetDeactiveColor2( readColor( pConfig, pKey ) ); -++ -++ pKey = "inactiveForeground"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetDeactiveTextColor( readColor( pConfig, pKey ) ); -++ -++ pKey = "activeForeground"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetActiveTextColor( readColor( pConfig, pKey ) ); -++ -++ pKey = "titleFont"; -++ if ( pConfig->hasKey( pKey ) ) -++ { -++ Font aFont = toFont( pConfig->readFontEntry( pKey ), rSettings.GetUILocale() ); -++ aStyleSettings.SetTitleFont( aFont ); -++ bSetTitleFont = true; -++ } -++ -++ pConfig->setGroup( "Icons" ); -++ -++ pKey = "Theme"; -++ if ( pConfig->hasKey( pKey ) ) -++ aStyleSettings.SetPreferredSymbolsStyleName( readEntryUntranslated( pConfig, pKey ) ); -++ } -++ -++ // General settings -++ TQColorGroup qColorGroup = kapp->palette().active(); -++ -++ Color aFore = toColor( qColorGroup.foreground() ); -++ Color aBack = toColor( qColorGroup.background() ); -++ Color aText = toColor( qColorGroup.text() ); -++ Color aBase = toColor( qColorGroup.base() ); -++ -++ // Foreground -++ aStyleSettings.SetRadioCheckTextColor( aFore ); -++ aStyleSettings.SetLabelTextColor( aFore ); -++ aStyleSettings.SetInfoTextColor( aFore ); -++ aStyleSettings.SetDialogTextColor( aFore ); -++ aStyleSettings.SetGroupTextColor( aFore ); -++ -++ // Text -++ aStyleSettings.SetFieldTextColor( aText ); -++ aStyleSettings.SetFieldRolloverTextColor( aText ); -++ aStyleSettings.SetWindowTextColor( aText ); -++ aStyleSettings.SetHelpTextColor( aText ); -++ -++ // Base -++ aStyleSettings.SetFieldColor( aBase ); -++ aStyleSettings.SetHelpColor( aBase ); -++ aStyleSettings.SetWindowColor( aBase ); -++ aStyleSettings.SetActiveTabColor( aBase ); -++ -++ // Buttons -++ aStyleSettings.SetButtonTextColor( toColor( qColorGroup.buttonText() ) ); -++ aStyleSettings.SetButtonRolloverTextColor( toColor( qColorGroup.buttonText() ) ); -++ -++ // Disable color -++ aStyleSettings.SetDisableColor( toColor( qColorGroup.mid() ) ); -++ -++ // Workspace -++ aStyleSettings.SetWorkspaceColor( toColor( qColorGroup.mid() ) ); -++ -++ // Background -++ aStyleSettings.Set3DColors( aBack ); -++ aStyleSettings.SetFaceColor( aBack ); -++ aStyleSettings.SetInactiveTabColor( aBack ); -++ aStyleSettings.SetDialogColor( aBack ); -++ if( aBack == COL_LIGHTGRAY ) -++ aStyleSettings.SetCheckedColor( Color( 0xCC, 0xCC, 0xCC ) ); -++ else -++ { -++ Color aColor2 = aStyleSettings.GetLightColor(); -++ aStyleSettings. -++ SetCheckedColor( Color( (BYTE)(((USHORT)aBack.GetRed()+(USHORT)aColor2.GetRed())/2), -++ (BYTE)(((USHORT)aBack.GetGreen()+(USHORT)aColor2.GetGreen())/2), -++ (BYTE)(((USHORT)aBack.GetBlue()+(USHORT)aColor2.GetBlue())/2) -++ ) ); -++ } -++ -++ // Selection -++ aStyleSettings.SetHighlightColor( toColor( qColorGroup.highlight() ) ); -++ aStyleSettings.SetHighlightTextColor( toColor( qColorGroup.highlightedText() ) ); -++ -++ // Font -++ Font aFont = toFont( kapp->font(), rSettings.GetUILocale() ); -++ -++ aStyleSettings.SetAppFont( aFont ); -++ aStyleSettings.SetHelpFont( aFont ); -++ aStyleSettings.SetMenuFont( aFont ); // will be changed according to pMenuBar -++ aStyleSettings.SetToolFont( aFont ); // will be changed according to pToolBar -++ aStyleSettings.SetLabelFont( aFont ); -++ aStyleSettings.SetInfoFont( aFont ); -++ aStyleSettings.SetRadioCheckFont( aFont ); -++ aStyleSettings.SetPushButtonFont( aFont ); -++ aStyleSettings.SetFieldFont( aFont ); -++ aStyleSettings.SetIconFont( aFont ); -++ aStyleSettings.SetGroupFont( aFont ); -++ -++ aFont.SetWeight( WEIGHT_BOLD ); -++ if( !bSetTitleFont ) -++ aStyleSettings.SetTitleFont( aFont ); -++ aStyleSettings.SetFloatTitleFont( aFont ); -++ -++ int flash_time = TQApplication::cursorFlashTime(); -++ aStyleSettings.SetCursorBlinkTime( flash_time != 0 ? flash_time/2 : STYLE_CURSOR_NOBLINKTIME ); -++ -++ KMainWindow qMainWindow; -++ qMainWindow.createGUI( "/dev/null" ); // hack -++ -++ // Menu -++ aStyleSettings.SetSkipDisabledInMenus( TRUE ); -++ KMenuBar *pMenuBar = qMainWindow.menuBar(); -++ if ( pMenuBar ) -++ { -++ // Color -++ TQColorGroup qMenuCG = pMenuBar->colorGroup(); -++ -++ // Menu text and background color, theme specific -++ Color aMenuFore = toColor( qMenuCG.foreground() ); -++ Color aMenuBack = toColor( qMenuCG.background() ); -++ if ( kapp->style().inherits( "LightStyleV2" ) || -++ kapp->style().inherits( "LightStyleV3" ) || -++ ( kapp->style().inherits( "QMotifStyle" ) && !kapp->style().inherits( "QSGIStyle" ) ) || -++ kapp->style().inherits( "QWindowsStyle" ) ) -++ { -++ aMenuFore = toColor( qMenuCG.buttonText() ); -++ aMenuBack = toColor( qMenuCG.button() ); -++ } -++ -++ aStyleSettings.SetMenuTextColor( aMenuFore ); -++ aStyleSettings.SetMenuBarTextColor( aMenuFore ); -++ aStyleSettings.SetMenuColor( aMenuBack ); -++ aStyleSettings.SetMenuBarColor( aMenuBack ); -++ -++ aStyleSettings.SetMenuHighlightColor( toColor ( qMenuCG.highlight() ) ); -++ -++ // Menu items higlight text color, theme specific -++ if ( kapp->style().inherits( "HighContrastStyle" ) || -++ kapp->style().inherits( "KeramikStyle" ) || -++ kapp->style().inherits( "QWindowsStyle" ) || -++ kapp->style().inherits( "ThinKeramikStyle" ) || -++ kapp->style().inherits( "PlastikStyle" ) ) -++ { -++ aStyleSettings.SetMenuHighlightTextColor( toColor ( qMenuCG.highlightedText() ) ); -++ } -++ else -++ aStyleSettings.SetMenuHighlightTextColor( aMenuFore ); -++ -++ // set special menubar higlight text color -++ if ( kapp->style().inherits( "HighContrastStyle" ) ) -++ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = toColor( qMenuCG.highlightedText() ); -++ else -++ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = aMenuFore; -++ -++ // Font -++ aFont = toFont( pMenuBar->font(), rSettings.GetUILocale() ); -++ aStyleSettings.SetMenuFont( aFont ); -++ } -++ -++ // Tool bar -++ KToolBar *pToolBar = qMainWindow.toolBar(); -++ if ( pToolBar ) -++ { -++ aFont = toFont( pToolBar->font(), rSettings.GetUILocale() ); -++ aStyleSettings.SetToolFont( aFont ); -++ } -++ -++ // Scroll bar size -++ aStyleSettings.SetScrollBarSize( kapp->style().pixelMetric( TQStyle::PM_ScrollBarExtent ) ); -++ -++ rSettings.SetStyleSettings( aStyleSettings ); -++} -++ -++SalGraphics* TDESalFrame::GetGraphics() -++{ -++ if( GetWindow() ) -++ { -++ for( int i = 0; i < nMaxGraphics; i++ ) -++ { -++ if( ! m_aGraphics[i].bInUse ) -++ { -++ m_aGraphics[i].bInUse = true; -++ if( ! m_aGraphics[i].pGraphics ) -++ { -++ m_aGraphics[i].pGraphics = new TDESalGraphics(); -++ m_aGraphics[i].pGraphics->Init( this, GetWindow(), GetScreenNumber() ); -++ } -++ return m_aGraphics[i].pGraphics; -++ } -++ } -++ } -++ -++ return NULL; -++} -++ -++void TDESalFrame::ReleaseGraphics( SalGraphics *pGraphics ) -++{ -++ for( int i = 0; i < nMaxGraphics; i++ ) -++ { -++ if( m_aGraphics[i].pGraphics == pGraphics ) -++ { -++ m_aGraphics[i].bInUse = false; -++ break; -++ } -++ } -++} -++ -++void TDESalFrame::updateGraphics( bool bClear ) -++{ -++ Drawable aDrawable = bClear ? None : GetWindow(); -++ for( int i = 0; i < nMaxGraphics; i++ ) -++ { -++ if( m_aGraphics[i].bInUse ) -++ m_aGraphics[i].pGraphics->SetDrawable( aDrawable, GetScreenNumber() ); -++ } -++} -++ -++TDESalFrame::~TDESalFrame() -++{ -++} -++ -++TDESalFrame::GraphicsHolder::~GraphicsHolder() -++{ -++ delete pGraphics; -++} -++ -++// ----------------------------------------------------------------------- -++// TDESalInstance implementation -++// ----------------------------------------------------------------------- -++ -++SalFrame * -++TDESalInstance::CreateFrame( SalFrame *pParent, ULONG nStyle ) -++{ -++ return new TDESalFrame( pParent, nStyle ); -++} -++ -++// ----------------------------------------------------------------------- -++// TDESalData pieces -++// ----------------------------------------------------------------------- -++ -++// Create the widget painter so we have some control over -++// the destruction sequence, so Qt doesn't die in action. -++ -++void TDEData::initNWF() -++{ -++ ImplSVData *pSVData = ImplGetSVData(); -++ // draw toolbars on separate lines -++ pSVData->maNWFData.mbDockingAreaSeparateTB = true; -++ -++ pWidgetPainter = new WidgetPainter(); -++} -++ -++void TDEData::deInitNWF() -++{ -++ delete pWidgetPainter; -++ pWidgetPainter = NULL; -++ -++ // We have to destroy the style early -++ kapp->setStyle( NULL ); -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN vcl/unx/tde/tdedata.cxx vcl/unx/tde/tdedata.cxx -+--- vcl/unx/tde/tdedata.cxx 1969-12-31 18:00:00.000000000 -0600 -++++ vcl/unx/tde/tdedata.cxx 2011-08-18 20:14:26.186519004 -0500 -+@@ -0,0 +1,274 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++// MARKER(update_precomp.py): autogen include statement, do not remove -++#include "precompiled_vcl.hxx" -++ -++#define _SV_SALDATA_CXX -++#include -++ -++#include -++#include -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#ifdef FREEBSD -++#include -++#include -++#include -++#endif -++#include -++#include -++#include -++#include -++#include -++ -++#include -++#include "i18n_im.hxx" -++#include "i18n_xkb.hxx" -++ -++/* #i59042# override KApplications method for session management -++ * since it will interfere badly with our own. -++ */ -++class VCLTDEApplication : public KApplication -++{ -++ public: -++ VCLTDEApplication() : KApplication() {} -++ -++ virtual void commitData(QSessionManager &sm); -++}; -++ -++void VCLTDEApplication::commitData(QSessionManager&) -++{ -++} -++ -++/*************************************************************************** -++ * class SalTDEDisplay * -++ ***************************************************************************/ -++ -++SalTDEDisplay::SalTDEDisplay( Display* pDisp ) -++ : SalX11Display( pDisp ) -++{ -++} -++ -++SalTDEDisplay::~SalTDEDisplay() -++{ -++ // in case never a frame opened -++ static_cast(GetXLib())->doStartup(); -++ // clean up own members -++ doDestruct(); -++ // prevent SalDisplay from closing KApplication's display -++ pDisp_ = NULL; -++} -++ -++/*************************************************************************** -++ * class TDEXLib * -++ ***************************************************************************/ -++ -++TDEXLib::~TDEXLib() -++{ -++ // #158056# on 64 bit linux using libXRandr.so.2 will crash in -++ // XCloseDisplay when freeing extension data -++ // no known work around, therefor currently leak. Hopefully -++ // this does not make problems since we're shutting down anyway -++ // should we ever get a real tde plugin that uses the TDE event loop -++ // we should use tde's method to signal screen changes similar -++ // to the gtk plugin -++ #if ! defined USE_RANDR || ! (defined LINUX && defined X86_64) -++ // properly deinitialize KApplication -++ delete (VCLTDEApplication*)m_pApplication; -++ #endif -++ // free the faked cmdline arguments no longer needed by KApplication -++ for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) -++ free( m_pFreeCmdLineArgs[i] ); -++ delete [] m_pFreeCmdLineArgs; -++ delete [] m_pAppCmdLineArgs; -++} -++ -++void TDEXLib::Init() -++{ -++ SalI18N_InputMethod* pInputMethod = new SalI18N_InputMethod; -++ pInputMethod->SetLocale(); -++ XrmInitialize(); -++ -++ KAboutData *kAboutData = new KAboutData( "LibreOffice", -++ I18N_NOOP( "LibreOffice" ), -++ "1.1.0", -++ I18N_NOOP( "LibreOffice with TDE Native Widget Support." ), -++ KAboutData::License_LGPL, -++ "(c) 2003, 2004 Novell, Inc", -++ I18N_NOOP( "LibreOffice is an office suite.\n" ), -++ "http://libreoffice.org", -++ "libreoffice@lists.freedesktop.org"); -++ kAboutData->addAuthor( "Jan Holesovsky", -++ I18N_NOOP( "Original author and maintainer of the TDE NWF." ), -++ "kendy@artax.karlin.mff.cuni.cz", -++ "http://artax.karlin.mff.cuni.cz/~kendy" ); -++ -++ m_nFakeCmdLineArgs = 1; -++ USHORT nIdx; -++ int nParams = osl_getCommandArgCount(); -++ rtl::OString aDisplay; -++ rtl::OUString aParam, aBin; -++ -++ for ( nIdx = 0; nIdx < nParams; ++nIdx ) -++ { -++ osl_getCommandArg( nIdx, &aParam.pData ); -++ if ( !m_pFreeCmdLineArgs && aParam.equalsAscii( "-display" ) && nIdx + 1 < nParams ) -++ { -++ osl_getCommandArg( nIdx + 1, &aParam.pData ); -++ aDisplay = rtl::OUStringToOString( aParam, osl_getThreadTextEncoding() ); -++ -++ m_nFakeCmdLineArgs = 3; -++ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; -++ m_pFreeCmdLineArgs[ 1 ] = strdup( "-display" ); -++ m_pFreeCmdLineArgs[ 2 ] = strdup( aDisplay.getStr() ); -++ } -++ } -++ if ( !m_pFreeCmdLineArgs ) -++ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; -++ -++ osl_getExecutableFile( &aParam.pData ); -++ osl_getSystemPathFromFileURL( aParam.pData, &aBin.pData ); -++ rtl::OString aExec = rtl::OUStringToOString( aBin, osl_getThreadTextEncoding() ); -++ m_pFreeCmdLineArgs[0] = strdup( aExec.getStr() ); -++ -++ // make a copy of the string list for freeing it since -++ // KApplication manipulates the pointers inside the argument vector -++ // note: KApplication bad ! -++ m_pAppCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; -++ for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) -++ m_pAppCmdLineArgs[i] = m_pFreeCmdLineArgs[i]; -++ -++ KCmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData ); -++ -++ KApplication::disableAutoDcopRegistration(); -++ m_pApplication = new VCLTDEApplication(); -++ kapp->disableSessionManagement(); -++ -++ Display* pDisp = TQPaintDevice::x11AppDisplay(); -++ -++ SalDisplay *pSalDisplay = new SalTDEDisplay( pDisp ); -++ -++ pInputMethod->CreateMethod( pDisp ); -++ pInputMethod->AddConnectionWatch( pDisp, (void*)this ); -++ pSalDisplay->SetInputMethod( pInputMethod ); -++ -++ PushXErrorLevel( true ); -++ SalI18N_KeyboardExtension *pKbdExtension = new SalI18N_KeyboardExtension( pDisp ); -++ XSync( pDisp, False ); -++ -++ pKbdExtension->UseExtension( ! HasXErrorOccured() ); -++ PopXErrorLevel(); -++ -++ pSalDisplay->SetKbdExtension( pKbdExtension ); -++} -++ -++void TDEXLib::doStartup() -++{ -++ if( ! m_bStartupDone ) -++ { -++ KStartupInfo::appStarted(); -++ m_bStartupDone = true; -++ #if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "called KStartupInfo::appStarted()\n" ); -++ #endif -++ } -++} -++ -++/********************************************************************** -++ * class TDEData * -++ **********************************************************************/ -++ -++TDEData::~TDEData() -++{ -++} -++ -++void TDEData::Init() -++{ -++ pXLib_ = new TDEXLib(); -++ pXLib_->Init(); -++} -++ -++/********************************************************************** -++ * plugin entry point * -++ **********************************************************************/ -++ -++extern "C" { -++ VCL_DLLPUBLIC SalInstance* create_SalInstance( oslModule ) -++ { -++ /* #i92121# workaround deadlocks in the X11 implementation -++ */ -++ static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" ); -++ /* #i90094# -++ from now on we know that an X connection will be -++ established, so protect X against itself -++ */ -++ if( ! ( pNoXInitThreads && *pNoXInitThreads ) ) -++ XInitThreads(); -++ -++ rtl::OString aVersion( qVersion() ); -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "qt version string is \"%s\"\n", aVersion.getStr() ); -++#endif -++ sal_Int32 nIndex = 0, nMajor = 0, nMinor = 0, nMicro = 0; -++ nMajor = aVersion.getToken( 0, '.', nIndex ).toInt32(); -++ if( nIndex > 0 ) -++ nMinor = aVersion.getToken( 0, '.', nIndex ).toInt32(); -++ if( nIndex > 0 ) -++ nMicro = aVersion.getToken( 0, '.', nIndex ).toInt32(); -++ if( nMajor != 3 || nMinor < 2 || (nMinor == 2 && nMicro < 2) ) -++ { -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "unsuitable qt version %d.%d.%d\n", (int)nMajor, (int)nMinor, (int)nMicro ); -++#endif -++ return NULL; -++ } -++ -++ TDESalInstance* pInstance = new TDESalInstance( new SalYieldMutex() ); -++#if OSL_DEBUG_LEVEL > 1 -++ fprintf( stderr, "created TDESalInstance 0x%p\n", pInstance ); -++#endif -++ -++ // initialize SalData -++ TDEData *pSalData = new TDEData(); -++ SetSalData( pSalData ); -++ pSalData->m_pInstance = pInstance; -++ pSalData->Init(); -++ pSalData->initNWF(); -++ -++ return pInstance; -++ } -++} -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN vcl/prj/build.lst vcl/prj/build.lst -+--- vcl/prj/build.lst 2010-11-11 13:09:00.000000000 -0600 -++++ vcl/prj/build.lst 2011-08-18 20:31:51.496382806 -0500 -+@@ -35,6 +35,7 @@ -+ vc vcl\unx\headless nmake - u vc__hl vc_inc NULL -+ vc vcl\unx\kde nmake - u vc__kde vc_inc NULL -+ vc vcl\unx\kde4 nmake - u vc__kde4 vc_inc NULL -++vc vcl\unx\tde nmake - u vc__tde vc_inc NULL -+ vc vcl\aqua\source\a11y nmake - u vc__aquy vc_inc NULL -+ vc vcl\aqua\source\app nmake - u vc__appa vc_inc NULL -+ vc vcl\aqua\source\dtrans nmake - u vc__dtra vc_inc NULL -+@@ -45,6 +46,6 @@ -+ vc vcl\mac\source\gdi nmake - m vc__gdim vc_inc NULL -+ vc vcl\mac\source\window nmake - m vc__winm vc_inc NULL -+ vc vcl\mac\source\src nmake - m vc__srcm vc_inc NULL -+-vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL -++vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__tde.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL -+ vc vcl\util\linksvp nmake - u vc_lsvp vc_util NULL -+ vc vcl\workben nmake - all vc_wrkb vc_util vc_salmain NULL -+diff -urN vcl/prj/d.lst vcl/prj/d.lst -+--- vcl/prj/d.lst 2010-11-11 09:22:48.000000000 -0600 -++++ vcl/prj/d.lst 2011-08-18 20:30:59.772430360 -0500 -+@@ -62,6 +62,7 @@ -+ ..\inc\vcl\javachild.hxx %_DEST%\inc%_EXT%\vcl\javachild.hxx -+ ..\inc\vcl\jobset.hxx %_DEST%\inc%_EXT%\vcl\jobset.hxx -+ ..\unx\inc\kde_headers.h %_DEST%\inc%_EXT%\vcl\kde_headers.h -++..\unx\inc\tde_headers.h %_DEST%\inc%_EXT%\vcl\tde_headers.h -+ ..\inc\vcl\keycod.hxx %_DEST%\inc%_EXT%\vcl\keycod.hxx -+ ..\inc\vcl\keycodes.hxx %_DEST%\inc%_EXT%\vcl\keycodes.hxx -+ ..\inc\vcl\lineinfo.hxx %_DEST%\inc%_EXT%\vcl\lineinfo.hxx -+diff -urN vcl/source/app/settings.cxx vcl/source/app/settings.cxx -+--- vcl/source/app/settings.cxx 2011-03-08 12:51:41.000000000 -0600 -++++ vcl/source/app/settings.cxx 2011-08-18 20:32:39.820075101 -0500 -+@@ -830,6 +830,8 @@ -+ nRet = STYLE_SYMBOLS_CRYSTAL; -+ else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "kde4" ) ) -+ nRet = STYLE_SYMBOLS_OXYGEN; -++ else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "tde" ) ) -++ nRet = STYLE_SYMBOLS_CRYSTAL; -+ } -+ -+ // falback to any existing style -+diff -urN vcl/unx/source/gdi/dtint.cxx vcl/unx/source/gdi/dtint.cxx -+--- vcl/unx/source/gdi/dtint.cxx 2010-11-11 09:22:48.000000000 -0600 -++++ vcl/unx/source/gdi/dtint.cxx 2011-08-18 20:35:34.753448320 -0500 -+@@ -96,7 +96,7 @@ -+ /* -+ * #i22061# override desktop detection -+ * if environment variable OOO_FORCE_DESKTOP is set -+- * to one of "cde" "kde" "gnome" then autodetection -++ * to one of "cde" "kde" "tde" "gnome" then autodetection -+ * is overridden. -+ */ -+ static const char* pOverride = getenv( "OOO_FORCE_DESKTOP" ); -+diff -urN vcl/unx/source/plugadapt/salplug.cxx vcl/unx/source/plugadapt/salplug.cxx -+--- vcl/unx/source/plugadapt/salplug.cxx 2010-11-11 13:09:00.000000000 -0600 -++++ vcl/unx/source/plugadapt/salplug.cxx 2011-08-18 20:35:23.512588295 -0500 -+@@ -55,10 +55,11 @@ -+ DESKTOP_GNOME, -+ DESKTOP_KDE, -+ DESKTOP_KDE4, -++ DESKTOP_TDE, -+ DESKTOP_CDE -+ }; -+ -+-static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4", "CDE" }; -++static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4", "TDE", "CDE" }; -+ -+ static SalInstance* tryInstance( const OUString& rModuleBase ) -+ { -+@@ -162,7 +166,7 @@ -+ { -+ static const char* pKDEFallbackList[] = -+ { -+- "kde4", "kde", "gtk", "gen", 0 -++ "kde4", "kde", "tde", "gtk", "gen", 0 -+ }; -+ -+ static const char* pStandardFallbackList[] = -+@@ -191,6 +195,11 @@ -+ } -+ else if( desktop.equalsAscii( desktop_strings[DESKTOP_KDE4] ) ) -+ pList = pKDEFallbackList; -++ else if( desktop.equalsAscii( desktop_strings[DESKTOP_TDE] ) ) -++ { -++ pList = pKDEFallbackList; -++ nListEntry = 1; -++ } -+ -+ SalInstance* pInst = NULL; -+ while( pList[nListEntry] && pInst == NULL ) -+@@ -235,7 +244,7 @@ -+ pInst = autodetect_plugin(); -+ -+ // fallback, try everything -+- const char* pPlugin[] = { "gtk", "kde", "gen", 0 }; -++ const char* pPlugin[] = { "gtk", "kde", "tde", "gen", 0 }; -+ -+ for ( int i = 0; !pInst && pPlugin[ i ]; ++i ) -+ pInst = tryInstance( OUString::createFromAscii( pPlugin[ i ] ) ); -+diff -urN vcl/unx/inc/plugins/tde/tdedata.hxx vcl/unx/inc/plugins/tde/tdedata.hxx -+--- vcl/unx/inc/plugins/tde/tdedata.hxx 1969-12-31 18:00:00.000000000 -0600 -++++ vcl/unx/inc/plugins/tde/tdedata.hxx 2011-08-18 20:45:32.009117227 -0500 -+@@ -0,0 +1,114 @@ -++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -++/************************************************************************* -++ * -++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -++ * -++ * Copyright 2000, 2010 Oracle and/or its affiliates. -++ * Copyright 2011 Timothy Pearson -++ * -++ * OpenOffice.org - a multi-platform office productivity suite -++ * -++ * This file is part of OpenOffice.org. -++ * -++ * OpenOffice.org is free software: you can redistribute it and/or modify -++ * it under the terms of the GNU Lesser General Public License version 3 -++ * only, as published by the Free Software Foundation. -++ * -++ * OpenOffice.org 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 Lesser General Public License version 3 for more details -++ * (a copy is included in the LICENSE file that accompanied this code). -++ * -++ * You should have received a copy of the GNU Lesser General Public License -++ * version 3 along with OpenOffice.org. If not, see -++ * -++ * for a copy of the LGPLv3 License. -++ * -++ ************************************************************************/ -++ -++#ifndef _VCL_TDEDATA_HXX -++#define _VCL_TDEDATA_HXX -++ -++#include -++#include -++#include -++ -++class TDEData : public X11SalData -++{ -++public: -++ TDEData() {} -++ virtual ~TDEData(); -++ -++ virtual void Init(); -++ virtual void initNWF(); -++ virtual void deInitNWF(); -++}; -++ -++class SalTDEDisplay : public SalX11Display -++{ -++public: -++ SalTDEDisplay( Display* pDisp ); -++ virtual ~SalTDEDisplay(); -++}; -++ -++class TDESalFrame : public X11SalFrame -++{ -++ static const int nMaxGraphics = 2; -++ -++ struct GraphicsHolder -++ { -++ X11SalGraphics* pGraphics; -++ bool bInUse; -++ GraphicsHolder() -++ : pGraphics( NULL ), -++ bInUse( false ) -++ {} -++ ~GraphicsHolder(); -++ }; -++ GraphicsHolder m_aGraphics[ nMaxGraphics ]; -++ -++public: -++ TDESalFrame( SalFrame* pParent, ULONG nStyle ); -++ virtual ~TDESalFrame(); -++ -++ virtual SalGraphics* GetGraphics(); -++ virtual void ReleaseGraphics( SalGraphics *pGraphics ); -++ virtual void updateGraphics( bool bClear ); -++ virtual void UpdateSettings( AllSettings& rSettings ); -++ virtual void Show( BOOL bVisible, BOOL bNoActivate ); -++}; -++ -++class TDESalInstance : public X11SalInstance -++{ -++public: -++ TDESalInstance( SalYieldMutex* pMutex ) -++ : X11SalInstance( pMutex ) {} -++ virtual ~TDESalInstance() {} -++ virtual SalFrame* CreateFrame( SalFrame* pParent, ULONG nStyle ); -++}; -++ -++class TDEXLib : public SalXLib -++{ -++ bool m_bStartupDone; -++ void* m_pApplication; -++ char** m_pFreeCmdLineArgs; -++ char** m_pAppCmdLineArgs; -++ int m_nFakeCmdLineArgs; -++public: -++ TDEXLib() : SalXLib(), -++ m_bStartupDone( false ), -++ m_pApplication( NULL ), -++ m_pFreeCmdLineArgs( NULL ), -++ m_pAppCmdLineArgs( NULL ), -++ m_nFakeCmdLineArgs( 0 ) -++ {} -++ virtual ~TDEXLib(); -++ virtual void Init(); -++ -++ void doStartup(); -++}; -++ -++#endif // _VCL_TDEDATA_HXX -++ -++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+diff -urN scp2/source/ooo/file_library_ooo.scp scp2/source/ooo/file_library_ooo.scp -+--- scp2/source/ooo/file_library_ooo.scp 2010-11-11 09:08:07.000000000 -0600 -++++ scp2/source/ooo/file_library_ooo.scp 2011-08-19 03:12:08.329491869 -0500 -+@@ -463,6 +463,24 @@ -+ -+ #endif -+ -++#ifdef ENABLE_TDEAB -++File gid_File_Lib_Tdeab_1 -++ TXT_FILE_BODY; -++ Styles = (PACKED,UNO_COMPONENT); -++ RegistryID = gid_Starregistry_Services_Rdb; -++ Dir = SCP2_OOO_BIN_DIR; -++ Name = STRING(CONCAT2(libtdeab1,UNXSUFFIX)); -++End -++ -++File gid_File_Lib_Tdeab_Drv_1 -++ TXT_FILE_BODY; -++ Styles = (PACKED); -++ Dir = SCP2_OOO_BIN_DIR; -++ Name = STRING(CONCAT2(libtdeabdrv1,UNXSUFFIX)); -++End -++ -++#endif -++ -+ #ifdef MACOSX -+ File gid_File_Lib_Macab_1 -+ TXT_FILE_BODY; -+diff -urN scp2/source/ooo/module_hidden_ooo.scp scp2/source/ooo/module_hidden_ooo.scp -+--- scp2/source/ooo/module_hidden_ooo.scp 2010-12-14 09:40:37.000000000 -0600 -++++ scp2/source/ooo/module_hidden_ooo.scp 2011-08-19 03:13:34.946155129 -0500 -+@@ -285,6 +285,8 @@ -+ gid_File_Lib_Evoab_2, -+ gid_File_Lib_Kab_1, -+ gid_File_Lib_Kab_Drv_1, -++ gid_File_Lib_Tdeab_1, -++ gid_File_Lib_Tdeab_Drv_1, -+ gid_File_Lib_Macab_1, -+ gid_File_Lib_Macab_Drv_1, -+ gid_File_Lib_Evtatt, -+diff -urN postprocess/packregistry/makefile.mk postprocess/packregistry/makefile.mk -+--- postprocess/packregistry/makefile.mk 2010-12-01 12:05:07.000000000 -0600 -++++ postprocess/packregistry/makefile.mk 2011-08-19 03:54:29.454469572 -0500 -+@@ -336,6 +336,9 @@ -+ .IF "$(ENABLE_KAB)" == "TRUE" -+ MY_FILES_main += $(MY_MOD)/DataAccess/kab.xcu -+ .END -++.IF "$(ENABLE_TDEAB)" == "TRUE" -++MY_FILES_main += $(MY_MOD)/DataAccess/tdeab.xcu -++.END -+ .IF "$(SYSTEM_MOZILLA)" != "YES" && "$(WITH_MOZILLA)" != "NO" && \ -+ "$(OS)" != "MACOSX" -+ .IF "$(OS)" == "WNT" -+diff -urN connectivity/version.mk connectivity/version.mk -+--- connectivity/version.mk 2010-11-11 09:30:07.000000000 -0600 -++++ connectivity/version.mk 2011-08-19 03:55:43.470147349 -0500 -+@@ -101,6 +101,16 @@ -+ # the micro -+ KAB_MICRO=0 -+ -++# ----------------------------Tdeab settings-------------------------------------# -++# target -++TDEAB_TARGET=tdeab -++ -++# the major -++TDEAB_MAJOR=1 -++# the minor -++TDEAB_MINOR=0 -++# the micro -++TDEAB_MICRO=0 -+ -+ # ----------------------------Macab settings-------------------------------------# -+ # target -+diff -urN fpicker/source/generic/fpicker.cxx fpicker/source/generic/fpicker.cxx -+--- fpicker/source/generic/fpicker.cxx 2010-11-11 09:30:08.000000000 -0600 -++++ fpicker/source/generic/fpicker.cxx 2011-08-19 19:55:13.344690587 -0500 -+@@ -64,6 +64,8 @@ -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDEFilePicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde4")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDE4FilePicker")); -++ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("tde")) -++ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.TDEFilePicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("macosx")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.AquaFilePicker")); -+ #endif -+@@ -139,6 +141,8 @@ -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.GtkFolderPicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDEFolderPicker")); -++ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("tde")) -++ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.TDEFolderPicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("macosx")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.AquaFolderPicker")); -+ #endif -+diff -urN vcl/unx/source/desktopdetect/desktopdetector.cxx vcl/unx/source/desktopdetect/desktopdetector.cxx -+--- vcl/unx/source/desktopdetect/desktopdetector.cxx 2010-11-11 09:22:48.000000000 -0600 -++++ vcl/unx/source/desktopdetect/desktopdetector.cxx 2011-08-19 21:10:45.481110576 -0500 -+@@ -49,12 +49,13 @@ -+ DESKTOP_NONE = 0, -+ DESKTOP_UNKNOWN, -+ DESKTOP_GNOME, -++ DESKTOP_TDE, -+ DESKTOP_KDE, -+ DESKTOP_KDE4, -+ DESKTOP_CDE -+ }; -+ -+-static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4", "CDE" }; -++static const char * desktop_strings[] = { "none", "unknown", "GNOME", "TDE", "KDE", "KDE4", "CDE" }; -+ -+ static bool is_gnome_desktop( Display* pDisplay ) -+ { -+@@ -218,6 +219,15 @@ -+ return false; -+ } -+ -++static bool is_tde_desktop( Display* pDisplay ) -++{ -++ if ( NULL != getenv( "TDE_FULL_SESSION" ) ) -++ { -++ return true; -++ } -++ return false; -++} -++ -+ static bool is_kde4_desktop( Display* pDisplay ) -+ { -+ if ( NULL != getenv( "KDE_FULL_SESSION" ) ) -+@@ -265,6 +275,8 @@ -+ -+ if ( aOver.equalsIgnoreAsciiCase( "cde" ) ) -+ aRet.appendAscii( desktop_strings[DESKTOP_CDE] ); -++ if ( aOver.equalsIgnoreAsciiCase( "tde" ) ) -++ aRet.appendAscii( desktop_strings[DESKTOP_TDE] ); -+ if ( aOver.equalsIgnoreAsciiCase( "kde4" ) ) -+ aRet.appendAscii( desktop_strings[DESKTOP_KDE4] ); -+ if ( aOver.equalsIgnoreAsciiCase( "gnome" ) ) -+@@ -319,7 +331,9 @@ -+ { -+ XErrorHandler pOldHdl = XSetErrorHandler( autodect_error_handler ); -+ -+- if ( is_kde4_desktop( pDisplay ) ) -++ if ( is_tde_desktop( pDisplay ) ) -++ aRet.appendAscii( desktop_strings[DESKTOP_TDE] ); -++ else if ( is_kde4_desktop( pDisplay ) ) -+ aRet.appendAscii( desktop_strings[DESKTOP_KDE4] ); -+ else if ( is_gnome_desktop( pDisplay ) ) -+ aRet.appendAscii( desktop_strings[DESKTOP_GNOME] ); -diff -urN libreoffice-build/patches/unittesting/unittesting-vcl.diff libreoffice-build/patches/unittesting/unittesting-vcl.diff ---- libreoffice-build/patches/unittesting/unittesting-vcl.diff 2010-11-11 08:41:39.000000000 -0600 -+++ libreoffice-build/patches/unittesting/unittesting-vcl.diff 2011-09-19 11:35:33.731926351 -0500 -@@ -10,7 +10,7 @@ - +++ vcl/prj/build.lst - @@ -47,4 +47,3 @@ vc vcl\mac\source\window nmake - m vc__winm vc_inc NULL - vc vcl\mac\source\src nmake - m vc__srcm vc_inc NULL -- vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL -+ vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__tde.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL - vc vcl\util\linksvp nmake - u vc_lsvp vc_util NULL - -vc vcl\workben nmake - all vc_wrkb vc_util vc_salmain NULL - diff --git vcl/prj/tests.lst vcl/prj/tests.lst diff --git a/main/thirdparty/libreoffice/git_10_28_2011/patches/libreoffice-trinity.diff b/main/thirdparty/libreoffice/git_10_28_2011/patches/libreoffice-trinity.diff deleted file mode 100644 index fccd9f4e6..000000000 --- a/main/thirdparty/libreoffice/git_10_28_2011/patches/libreoffice-trinity.diff +++ /dev/null @@ -1,16171 +0,0 @@ -diff --git a/Repository.mk b/Repository.mk -index 5fab1b5..f123f3b 100644 ---- a/Repository.mk -+++ b/Repository.mk -@@ -229,6 +229,7 @@ $(eval $(call gb_Helper_register_libraries,OOOLIBS, \ - vclplug_gtk \ - vclplug_gtk3 \ - vclplug_kde \ -+ vclplug_tde \ - vclplug_kde4 \ - vclplug_svp \ - visioimport \ -diff --git a/bin/distro-install-file-lists b/bin/distro-install-file-lists -index b233030..23f2504 100755 ---- a/bin/distro-install-file-lists -+++ b/bin/distro-install-file-lists -@@ -211,6 +211,13 @@ if test "z$OOO_VENDOR" != "zDebian" ; then - mv_file_between_flists kde_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/libkabdrv1.so - add_used_directories kde_list.txt common_list.txt - -+ # tde subpackage -+ test -f $DESTDIR/gid_Module_Optional_Tde && cp $DESTDIR/gid_Module_Optional_Tde tde_list.txt || : -+ mv_file_between_flists tde_list.txt common_list.txt $INSTALLDIR/program/tdefilepicker -+ mv_file_between_flists tde_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/fps_tde.uno.so -+ mv_file_between_flists tde_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/libvclplug_tdel..so -+ mv_file_between_flists tde_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/libtdeabdrv1.so -+ - # create kde4 subpackage - mv_file_between_flists kde4_list.txt kde_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/kde4be1.uno.so - mv_file_between_flists kde4_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/libvclplug_kde4l..so -@@ -416,6 +423,7 @@ else - create_package_directory gid_Module_Optional_Pyuno pkg/python-uno - create_package_directory gid_Module_Optional_Gnome pkg/libreoffice-gnome - create_package_directory gid_Module_Optional_Kde pkg/libreoffice-kde -+ create_package_directory gid_Module_Optional_Tde pkg/libreoffice-tde - - create_package_directory gid_Module_Root_Files_2 pkg/libreoffice-common - create_package_directory gid_Module_Root_Files_3 pkg/libreoffice-common -@@ -494,7 +502,7 @@ else - fi && - ( cd pkg/libreoffice-common/$d - find -maxdepth 1 \ -- -regex '\./\(.*\.so.*\|.*\.bin\|pagein\|nsplugin\|kdefilepicker\|msfontextract\|.*\.rdb\|javaldx\|uri-encode\)' \ -+ -regex '\./\(.*\.so.*\|.*\.bin\|pagein\|nsplugin\|kdefilepicker\|tdefilepicker\|msfontextract\|.*\.rdb\|javaldx\|uri-encode\)' \ - -exec mv {} $DESTDIR/pkg/libreoffice-core/$d \; - ); \ - done -diff --git a/configure.in b/configure.in -index 3b48331..2888cbb 100644 ---- a/configure.in -+++ b/configure.in -@@ -381,6 +381,15 @@ AC_ARG_ENABLE(kdeab, - fi - ) - -+AC_ARG_ENABLE(tde, -+[ --enable-tde Determines whether to use TQt3/TDE vclplug on platforms -+ where TQt and TDE are available. -+],,) -+ -+AC_ARG_ENABLE(tdeab, -+[ --disable-tdeab Disable the TDE address book support -+],,if test "$enable_tde" = "yes"; then enable_tdeab=yes; fi) -+ - AC_ARG_ENABLE(kde4, - AS_HELP_STRING([--enable-kde4], - [Determines whether to use Qt4/KDE4 vclplug on platforms where Qt4 and -@@ -1554,6 +1563,7 @@ solaris*) - test_gtk=yes - build_gstreamer=yes - test_kde=yes -+ test_tde=yes - test_freetype=yes - test_gstreamer=yes - _os=SunOS -@@ -1587,6 +1597,7 @@ linux-gnu*|k*bsd*-gnu*) - test_gtk=yes - build_gstreamer=yes - test_kde=yes -+ test_tde=yes - test_kde4=yes - test_freetype=yes - test_unix_quickstarter=yes -@@ -1659,6 +1670,7 @@ freebsd*) - test_gtk=yes - build_gstreamer=yes - test_kde=yes -+ test_tde=yes - test_kde4=yes - test_freetype=yes - AC_MSG_CHECKING([the FreeBSD operating system release]) -@@ -1703,6 +1715,7 @@ aix*) - openbsd*) - test_gtk=yes - test_kde=yes -+ test_tde=yes - test_freetype=yes - PTHREAD_CFLAGS="-D_THREAD_SAFE" - PTHREAD_LIBS="-pthread" -@@ -1713,6 +1726,7 @@ dragonfly*) - test_gtk=yes - build_gstreamer=yes - test_kde=yes -+ test_tde=yes - test_kde4=yes - test_freetype=yes - PTHREAD_LIBS="-pthread" -@@ -6941,6 +6955,13 @@ if test "x$enable_kde4" = "xyes"; then - fi - AC_SUBST(ENABLE_KDE4) - -+ENABLE_TDE="" -+if test "x$enable_tde" = "xyes"; then -+ ENABLE_TDE="TRUE" -+ R="$R tde" -+fi -+AC_SUBST(ENABLE_TDE) -+ - if test -z "$R"; then - AC_MSG_RESULT([none]) - else -@@ -7852,6 +7873,129 @@ AC_SUBST(KDE_GLIB_LIBS) - AC_SUBST(KDE_HAVE_GLIB) - - dnl =================================================================== -+dnl Check whether the Qt3 and TDE libraries are available. -+dnl =================================================================== -+ -+TDE_CFLAGS="" -+TDE_LIBS="" -+if test "$_os" != "OpenBSD"; then -+ MOC="tmoc" -+fi -+if test "$test_tde" = "yes" -a "$ENABLE_TDE" = "TRUE" ; then -+ dnl Search paths for Qt3 and TDE -+ if test "$build_cpu" != "x86_64" ; then -+ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib/qt3/include /usr/lib/qt/include /usr/share/qt3/include /usr/local/include/X11/qt3 $x_includes" -+ qt_libdirs="$QTLIB /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries" -+ else -+ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib64/qt3/include /usr/lib64/qt/include /usr/share/qt3/include /usr/lib/qt3/include /usr/lib/qt/include /usr/local/include/X11/qt3 $x_includes" -+ qt_libdirs="$QTLIB /usr/local/qt/lib64 /usr/lib64/qt /usr/lib64 /usr/X11R6/lib64/X11/qt /usr/X11R6/lib64/qt /usr/lib64/qt3/lib64 /usr/lib64/qt/lib64 /usr/share/qt3/lib64 /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries" -+ fi -+ if test -n "$QTDIR" ; then -+ qt_incdirs="$QTDIR/include $qt_incdirs" -+ if test "$build_cpu" != "x86_64" ; then -+ qt_libdirs="$QTDIR/lib $qt_libdirs" -+ else -+ qt_libdirs="$QTDIR/lib64 $QTDIR/lib $qt_libdirs" -+ fi -+ fi -+ if test "$build_cpu" != "x86_64" ; then -+ tde_incdirs="/opt/trinity/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes" -+ tde_libdirs="/opt/trinity/lib /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib/kde4/lib /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries" -+ else -+ tde_incdirs="/opt/trinity/include /usr/lib64/kde/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes" -+ tde_libdirs="/opt/trinity/lib /usr/lib64/kde/lib64 /usr/local/kde/lib64 /usr/kde/lib64 /usr/lib64/kde /usr/lib64/kde3 /usr/lib64 /usr/X11R6/lib64 /usr/local/lib64 /opt/trinity/lib64 /opt/kde/lib64 /usr/X11R6/kde/lib64 /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries" -+ fi -+ if test -n "$TDEDIR" ; then -+ tde_incdirs="$TDEDIR/include $tde_incdirs" -+ if test "$build_cpu" != "x86_64" ; then -+ tde_libdirs="$TDEDIR/lib $tde_libdirs" -+ else -+ tde_libdirs="$TDEDIR/lib64 $TDEDIR/lib $tde_libdirs" -+ fi -+ fi -+ -+ dnl What to test -+ qt_test_include="qstyle.h" -+ qt_test_library="libqt-mt.so*" -+ tde_test_include="kapp.h" -+ tde_test_library="libDCOP.so*" -+ -+ dnl Check for Qt3 headers -+ AC_MSG_CHECKING([for Qt3 headers]) -+ qt_incdir="no" -+ for tde_check in $qt_incdirs ; do -+ if test -r "$tde_check/$qt_test_include" ; then -+ qt_incdir="$tde_check" -+ break -+ fi -+ done -+ AC_MSG_RESULT([$qt_incdir]) -+ if test "x$qt_incdir" = "xno" ; then -+ AC_MSG_ERROR([Qt3 headers not found. Please specify the root of -+your Qt3 installation by exporting QTDIR before running "configure".]) -+ fi -+ -+ dnl Check for Qt3 libraries -+ AC_MSG_CHECKING([for Qt3 libraries]) -+ qt_libdir="no" -+ for qt_check in $qt_libdirs ; do -+ if test -r "`ls $qt_check/$qt_test_library 2>/dev/null | head -1`" ; then -+ qt_libdir="$qt_check" -+ break -+ fi -+ done -+ AC_MSG_RESULT([$qt_libdir]) -+ if test "x$qt_libdir" = "xno" ; then -+ AC_MSG_ERROR([Qt3 libraries not found. Please specify the root of -+your Qt3 installation by exporting QTDIR before running "configure".]) -+ fi -+ -+ dnl Check for Meta Object Compiler -+ AC_PATH_PROG( MOC, tmoc, no, [`dirname $qt_libdir`/bin:$QTDIR/bin:$PATH] ) -+ if test "$MOC" = "no" ; then -+ AC_MSG_ERROR([TQt3 Meta Object Compiler not found. Please specify -+the root of your Qt3 installation by exporting QTDIR before running "configure".]) -+ fi -+ -+ dnl Check for TDE headers -+ AC_MSG_CHECKING([for TDE headers]) -+ tde_incdir="no" -+ for tde_check in $tde_incdirs ; do -+ if test -r "$tde_check/$tde_test_include" ; then -+ tde_incdir="$tde_check" -+ break -+ fi -+ done -+ AC_MSG_RESULT([$tde_incdir]) -+ if test "x$tde_incdir" = "xno" ; then -+ AC_MSG_ERROR([TDE headers not found. Please specify the root of -+your TDE installation by exporting TDEDIR before running "configure".]) -+ fi -+ -+ dnl Check for TDE libraries -+ AC_MSG_CHECKING([for TDE libraries]) -+ tde_libdir="no" -+ for tde_check in $tde_libdirs ; do -+ if test -r "`ls $tde_check/$tde_test_library 2>/dev/null | head -1`" ; then -+ tde_libdir="$tde_check" -+ break -+ fi -+ done -+ AC_MSG_RESULT([$tde_libdir]) -+ if test "x$tde_libdir" = "xno" ; then -+ AC_MSG_ERROR([TDE libraries not found. Please specify the root of -+your TDE installation by exporting TDEDIR before running "configure".]) -+ fi -+ -+ dnl Set the variables -+ TDE_CFLAGS="-I$qt_incdir -I$tde_incdir -I/usr/include/tqt -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT" -+ TDE_LIBS="-L$tde_libdir -L$qt_libdir -lkdeui -lkdecore -ltqt -lqt-mt" -+fi -+AC_SUBST(TDE_CFLAGS) -+AC_SUBST(TDE_LIBS) -+AC_SUBST(MOC) -+ -+dnl =================================================================== - dnl Test for the enabling the lockdown pieces - dnl =================================================================== - AC_MSG_CHECKING([whether to enable the lockdown pieces]) -@@ -7908,6 +8052,33 @@ fi - AC_SUBST(ENABLE_KAB) - - dnl =================================================================== -+dnl Test whether to include TDE AB support -+dnl =================================================================== -+AC_MSG_CHECKING([whether to enable TDE address book support]) -+if test "$enable_tdeab" = "yes" && test "$enable_tde" = "yes"; then -+ AC_MSG_RESULT([yes]) -+ AC_LANG_PUSH([C++]) -+ save_CXXFLAGS=$CXXFLAGS -+ CXXFLAGS="$CXXFLAGS $TDE_CFLAGS" -+ AC_MSG_CHECKING([whether TDE is between 3.2 and 3.6]) -+ AC_TRY_RUN([ -+#include -+ -+int main(int argc, char **argv) { -+ if (KDE_VERSION_MAJOR == 3 && 2 <= KDE_VERSION_MINOR && KDE_VERSION_MINOR <= 6) return 0; -+ else return 1; -+} -+ ], [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([TDE version too old or too recent, please use another version of TDE or disable TDE address book support])]) -+ CXXFLAGS=$save_CXXFLAGS -+ AC_LANG_POP([C++]) -+ ENABLE_TDEAB=TRUE -+else -+ AC_MSG_RESULT([no]) -+ ENABLE_TDEAB= -+fi -+AC_SUBST(ENABLE_TDEAB) -+ -+dnl =================================================================== - dnl Test whether to include MathMLDTD - dnl =================================================================== - AC_MSG_CHECKING([whether to include MathMLDTD]) -diff --git a/connectivity/prj/build.lst b/connectivity/prj/build.lst -index 9860897..be07edb 100644 ---- a/connectivity/prj/build.lst -+++ b/connectivity/prj/build.lst -@@ -12,6 +12,7 @@ cn connectivity\source\drivers\mozab\mozillasrc nmake - all cn_mozab_moz - cn connectivity\source\drivers\mozab\bootstrap nmake - all cn_mozab_bootstrap cn_mozab_mozillasrc cn_inc NULL - cn connectivity\source\drivers\mozab nmake - all cn_mozab cn_mozab_bootstrap cn_dbtools cn_inc NULL - cn connectivity\source\drivers\kab nmake - all cn_kab cn_dbtools cn_inc NULL -+cn connectivity\source\drivers\tdeab nmake - all cn_tdeab cn_dbtools cn_inc NULL - cn connectivity\source\drivers\macab nmake - all cn_macab cn_dbtools cn_inc NULL - cn connectivity\source\drivers\evoab2 nmake - all cn_evoab2 cn_dbtools cn_file cn_inc NULL - cn connectivity\source\drivers\calc nmake - all cn_calc cn_file cn_inc NULL -@@ -28,4 +29,4 @@ cn connectivity\source\simpledbt nmake - all cn_simpledbt - cn connectivity\source\dbtools nmake - all cn_dbtools cn_simpledbt cn_cmtools cn_parse cn_res cn_sdbcx cn_inc cn_res NULL - cn connectivity\qa\connectivity\tools nmake - all cn_qa_tools cn_inc NULL - cn connectivity\qa nmake - all cn_qa cn_inc NULL --cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_flat cn_dbase cn_hsqldb cn_macab NULL -+cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_tdeab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_flat cn_dbase cn_hsqldb cn_macab NULL -diff --git a/connectivity/prj/d.lst b/connectivity/prj/d.lst -index 1387da4..400ecaa 100644 ---- a/connectivity/prj/d.lst -+++ b/connectivity/prj/d.lst -@@ -11,6 +11,7 @@ - ..\source\drivers\adabas\*.xml %_DEST%\xml\*.xml - ..\source\drivers\ado\*.xml %_DEST%\xml\*.xml - ..\source\drivers\kab\*.xml %_DEST%\xml\*.xml -+..\source\drivers\tdeab\*.xml %_DEST%\xml\*.xml - ..\source\drivers\macab\*.xml %_DEST%\xml\*.xml - ..\source\drivers\file\*.xml %_DEST%\xml\*.xml - ..\source\drivers\flat\*.xml %_DEST%\xml\*.xml -diff --git a/connectivity/source/drivers/tdeab/KCatalog.cxx b/connectivity/source/drivers/tdeab/KCatalog.cxx -new file mode 100644 -index 0000000..262144e ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KCatalog.cxx -@@ -0,0 +1,128 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KCatalog.hxx" -+#include "KConnection.hxx" -+#include "KTables.hxx" -+ -+using namespace connectivity::kab; -+using namespace ::com::sun::star::uno; -+using namespace ::com::sun::star::beans; -+using namespace ::com::sun::star::sdbcx; -+using namespace ::com::sun::star::sdbc; -+using namespace ::com::sun::star::container; -+using namespace ::com::sun::star::lang; -+using namespace ::cppu; -+ -+// ------------------------------------------------------------------------- -+KabCatalog::KabCatalog(KabConnection* _pCon) -+ : connectivity::sdbcx::OCatalog(_pCon), -+ m_pConnection(_pCon), -+ m_xMetaData(m_pConnection->getMetaData()) -+{ -+} -+// ------------------------------------------------------------------------- -+void KabCatalog::refreshTables() -+{ -+ TStringVector aVector; -+ Sequence< ::rtl::OUString > aTypes(1); -+ aTypes[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%")); -+ Reference< XResultSet > xResult = m_xMetaData->getTables( -+ Any(), -+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")), -+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")), -+ aTypes); -+ -+ if (xResult.is()) -+ { -+ Reference< XRow > xRow(xResult,UNO_QUERY); -+ ::rtl::OUString aName; -+ // const ::rtl::OUString& sDot = KabCatalog::getDot(); -+ -+ while (xResult->next()) -+ { -+ // aName = xRow->getString(2); -+ // aName += sDot; -+ aName = xRow->getString(3); -+ aVector.push_back(aName); -+ } -+ } -+ if (m_pTables) -+ m_pTables->reFill(aVector); -+ else -+ m_pTables = new KabTables(m_xMetaData,*this,m_aMutex,aVector); -+} -+// ------------------------------------------------------------------------- -+void KabCatalog::refreshViews() -+{ -+} -+// ------------------------------------------------------------------------- -+void KabCatalog::refreshGroups() -+{ -+} -+// ------------------------------------------------------------------------- -+void KabCatalog::refreshUsers() -+{ -+} -+// ------------------------------------------------------------------------- -+const ::rtl::OUString& KabCatalog::getDot() -+{ -+ static const ::rtl::OUString sDot = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(".")); -+ return sDot; -+} -+// ----------------------------------------------------------------------------- -+ -+// XTablesSupplier -+Reference< XNameAccess > SAL_CALL KabCatalog::getTables( ) throw(RuntimeException) -+{ -+ ::osl::MutexGuard aGuard(m_aMutex); -+ checkDisposed(rBHelper.bDisposed); -+ -+ try -+ { -+ if (!m_pTables) -+ refreshTables(); -+ } -+ catch( const RuntimeException& ) -+ { -+ // allowed to leave this method -+ throw; -+ } -+ catch( const Exception& ) -+ { -+ // allowed -+ } -+ -+ return m_pTables; -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KCatalog.hxx b/connectivity/source/drivers/tdeab/KCatalog.hxx -new file mode 100644 -index 0000000..ddfe1e9 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KCatalog.hxx -@@ -0,0 +1,68 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_CATALOG_HXX_ -+#define _CONNECTIVITY_KAB_CATALOG_HXX_ -+ -+#include "connectivity/sdbcx/VCatalog.hxx" -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ class KabConnection; -+ -+ class KabCatalog : public connectivity::sdbcx::OCatalog -+ { -+ KabConnection* m_pConnection; // used to get the metadata -+ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; // just to make things easier -+ -+ public: -+ KabCatalog(KabConnection* _pCon); -+ -+ inline KabConnection* getConnection() const { return m_pConnection; } -+ -+ static const ::rtl::OUString& getDot(); -+ -+ // implementation of the pure virtual methods -+ virtual void refreshTables(); -+ virtual void refreshViews(); -+ virtual void refreshGroups(); -+ virtual void refreshUsers(); -+ -+ // XTablesSupplier -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTables( -+ ) throw(::com::sun::star::uno::RuntimeException); -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_CATALOG_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KColumns.cxx b/connectivity/source/drivers/tdeab/KColumns.cxx -new file mode 100644 -index 0000000..e61e457 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KColumns.cxx -@@ -0,0 +1,102 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KColumns.hxx" -+#include "KTable.hxx" -+#include "KTables.hxx" -+#include "KCatalog.hxx" -+#include "connectivity/sdbcx/VColumn.hxx" -+ -+using namespace connectivity::kab; -+using namespace connectivity::sdbcx; -+using namespace connectivity; -+using namespace ::comphelper; -+using namespace ::com::sun::star::uno; -+using namespace ::com::sun::star::beans; -+using namespace ::com::sun::star::sdbc; -+using namespace ::com::sun::star::container; -+using namespace ::com::sun::star::lang; -+ -+// ------------------------------------------------------------------------- -+sdbcx::ObjectType KabColumns::createObject(const ::rtl::OUString& _rName) -+{ -+ Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns( -+ Any(), -+ m_pTable->getSchema(), -+ m_pTable->getTableName(), -+ _rName); -+ -+ sdbcx::ObjectType xRet = NULL; -+ if (xResult.is()) -+ { -+ Reference< XRow > xRow(xResult,UNO_QUERY); -+ -+ while (xResult->next()) -+ { -+ if (xRow->getString(4) == _rName) -+ { -+ OColumn* pRet = new OColumn( -+ _rName, -+ xRow->getString(6), -+ xRow->getString(13), -+ xRow->getString(12), -+ xRow->getInt(11), -+ xRow->getInt(7), -+ xRow->getInt(9), -+ xRow->getInt(5), -+ sal_False, -+ sal_False, -+ sal_False, -+ sal_True); -+ xRet = pRet; -+ break; -+ } -+ } -+ } -+ -+ return xRet; -+} -+// ------------------------------------------------------------------------- -+void KabColumns::impl_refresh() throw(RuntimeException) -+{ -+ m_pTable->refreshColumns(); -+} -+// ------------------------------------------------------------------------- -+KabColumns::KabColumns( KabTable* _pTable, -+ ::osl::Mutex& _rMutex, -+ const TStringVector &_rVector) -+ : sdbcx::OCollection(*_pTable, sal_True, _rMutex, _rVector), -+ m_pTable(_pTable) -+{ -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KColumns.hxx b/connectivity/source/drivers/tdeab/KColumns.hxx -new file mode 100644 -index 0000000..1919747 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KColumns.hxx -@@ -0,0 +1,58 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_COLUMNS_HXX_ -+#define _CONNECTIVITY_KAB_COLUMNS_HXX_ -+ -+#include "KTable.hxx" -+#include "connectivity/sdbcx/VCollection.hxx" -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ class KabColumns : public sdbcx::OCollection -+ { -+ protected: -+ KabTable* m_pTable; -+ -+ virtual sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); -+ virtual void impl_refresh() throw(::com::sun::star::uno::RuntimeException); -+ -+ public: -+ KabColumns( KabTable* _pTable, -+ ::osl::Mutex& _rMutex, -+ const TStringVector &_rVector); -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_COLUMNS_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KConnection.cxx b/connectivity/source/drivers/tdeab/KConnection.cxx -new file mode 100644 -index 0000000..26824bf ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KConnection.cxx -@@ -0,0 +1,332 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KConnection.hxx" -+#include "KDatabaseMetaData.hxx" -+#include "KStatement.hxx" -+#include "KPreparedStatement.hxx" -+#include "KDriver.hxx" -+#include "KCatalog.hxx" -+#include -+#include -+#include -+ -+using namespace connectivity::kab; -+using namespace com::sun::star::uno; -+using namespace com::sun::star::lang; -+using namespace com::sun::star::beans; -+using namespace com::sun::star::sdbc; -+using namespace com::sun::star::sdbcx; -+ -+IMPLEMENT_SERVICE_INFO(KabConnection, "com.sun.star.sdbc.drivers.KabConnection", "com.sun.star.sdbc.Connection") -+//----------------------------------------------------------------------------- -+KabConnection::KabConnection(KabDriver* _pDriver) -+ : OMetaConnection_BASE(m_aMutex), -+ OSubComponent((::cppu::OWeakObject*)_pDriver, this), -+ m_xMetaData(NULL), -+ m_pAddressBook(NULL), -+ m_pDriver(_pDriver) -+{ -+ m_pDriver->acquire(); -+} -+//----------------------------------------------------------------------------- -+KabConnection::~KabConnection() -+{ -+ if (!isClosed()) -+ close(); -+ -+ m_pDriver->release(); -+ m_pDriver = NULL; -+} -+//----------------------------------------------------------------------------- -+void SAL_CALL KabConnection::release() throw() -+{ -+ relase_ChildImpl(); -+} -+// ----------------------------------------------------------------------------- -+void KabConnection::construct(const ::rtl::OUString&, const Sequence< PropertyValue >&) throw(SQLException) -+{ -+ osl_incrementInterlockedCount( &m_refCount ); -+ -+ // create a TDE address book object -+ m_pAddressBook = KABC::StdAddressBook::self(); -+ m_pAddressBook->setAutomaticSave(false); -+// perharps we should analyze the URL to know whether the addressbook is local, over LDAP, etc... -+// perharps we should get some user and password information from "info" properties -+ -+ osl_decrementInterlockedCount( &m_refCount ); -+} -+// XServiceInfo -+// -------------------------------------------------------------------------------- -+Reference< XStatement > SAL_CALL KabConnection::createStatement( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // create a statement -+ // the statement can only be executed once -+ Reference< XStatement > xReturn = new KabStatement(this); -+ m_aStatements.push_back(WeakReferenceHelper(xReturn)); -+ return xReturn; -+} -+// -------------------------------------------------------------------------------- -+Reference< XPreparedStatement > SAL_CALL KabConnection::prepareStatement( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // create a statement -+ // the statement can only be executed more than once -+ Reference< XPreparedStatement > xReturn = new KabPreparedStatement(this, _sSql); -+ m_aStatements.push_back(WeakReferenceHelper(xReturn)); -+ return xReturn; -+} -+// -------------------------------------------------------------------------------- -+Reference< XPreparedStatement > SAL_CALL KabConnection::prepareCall( const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // not implemented yet :-) a task to do -+ return NULL; -+} -+// -------------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabConnection::nativeSQL( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ // when you need to transform SQL92 to you driver specific you can do it here -+ -+ return _sSql; -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabConnection::setAutoCommit( sal_Bool ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ // here you have to set your commit mode please have a look at the jdbc documentation to get a clear explanation -+} -+// -------------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabConnection::getAutoCommit( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ // you have to distinguish which if you are in autocommit mode or not -+ // at normal case true should be fine here -+ -+ return sal_True; -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabConnection::commit( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // when you database does support transactions you should commit here -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabConnection::rollback( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // same as commit but for the other case -+} -+// -------------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabConnection::isClosed( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ // just simple -> we are closed when we are disposed, that means someone called dispose(); (XComponent) -+ return KabConnection_BASE::rBHelper.bDisposed; -+} -+// -------------------------------------------------------------------------------- -+Reference< XDatabaseMetaData > SAL_CALL KabConnection::getMetaData( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // here we have to create the class with biggest interface -+ // The answer is 42 :-) -+ Reference< XDatabaseMetaData > xMetaData = m_xMetaData; -+ if (!xMetaData.is()) -+ { -+ xMetaData = new KabDatabaseMetaData(this); // need the connection because it can return it -+ m_xMetaData = xMetaData; -+ } -+ -+ return xMetaData; -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabConnection::setReadOnly( sal_Bool ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // set you connection to readonly -+} -+// -------------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabConnection::isReadOnly( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // return if your connection to readonly -+ return sal_False; -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabConnection::setCatalog( const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // if your database doesn't work with catalogs you go to next method otherwise you kjnow what to do -+} -+// -------------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabConnection::getCatalog( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ -+ // return your current catalog -+ return ::rtl::OUString(); -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabConnection::setTransactionIsolation( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // set your isolation level -+ // please have a look at @see com.sun.star.sdbc.TransactionIsolation -+} -+// -------------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabConnection::getTransactionIsolation( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ -+ // please have a look at @see com.sun.star.sdbc.TransactionIsolation -+ return TransactionIsolation::NONE; -+} -+// -------------------------------------------------------------------------------- -+Reference< ::com::sun::star::container::XNameAccess > SAL_CALL KabConnection::getTypeMap( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ -+ // if your driver has special database types you can return it here -+ -+ return NULL; -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabConnection::setTypeMap( const Reference< ::com::sun::star::container::XNameAccess >& ) throw(SQLException, RuntimeException) -+{ -+ // the other way around -+} -+// -------------------------------------------------------------------------------- -+// XCloseable -+void SAL_CALL KabConnection::close( ) throw(SQLException, RuntimeException) -+{ -+ { -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed); -+ } -+ dispose(); -+} -+// -------------------------------------------------------------------------------- -+// XWarningsSupplier -+Any SAL_CALL KabConnection::getWarnings( ) throw(SQLException, RuntimeException) -+{ -+ // when you collected some warnings -> return it -+ return Any(); -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabConnection::clearWarnings( ) throw(SQLException, RuntimeException) -+{ -+ // you should clear your collected warnings here -+} -+//------------------------------------------------------------------------------ -+void KabConnection::disposing() -+{ -+ // we noticed that we should be destroied in near future so we have to dispose our statements -+ ::osl::MutexGuard aGuard(m_aMutex); -+ -+ for (OWeakRefArray::iterator i = m_aStatements.begin(); m_aStatements.end() != i; ++i) -+ { -+ Reference< XComponent > xComp(i->get(), UNO_QUERY); -+ if (xComp.is()) -+ xComp->dispose(); -+ } -+ m_aStatements.clear(); -+ -+ if (m_pAddressBook != NULL) -+ { -+ m_pAddressBook->close(); -+ m_pAddressBook = NULL; -+ } -+ -+ m_xMetaData = ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XDatabaseMetaData>(); -+ -+ dispose_ChildImpl(); -+ KabConnection_BASE::disposing(); -+} -+// ----------------------------------------------------------------------------- -+Reference< XTablesSupplier > SAL_CALL KabConnection::createCatalog() -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ Reference< XTablesSupplier > xTab = m_xCatalog; -+ if (!m_xCatalog.is()) -+ { -+ KabCatalog *pCat = new KabCatalog(this); -+ xTab = pCat; -+ m_xCatalog = xTab; -+ } -+ return xTab; -+} -+// ----------------------------------------------------------------------------- -+::KABC::AddressBook* KabConnection::getAddressBook() const -+{ -+ return m_pAddressBook; -+} -+// ----------------------------------------------------------------------------- -+extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL createKabConnection( void* _pDriver ) -+{ -+ KabConnection* pConnection = new KabConnection( static_cast< KabDriver* >( _pDriver ) ); -+ // by definition, the pointer crossing library boundaries as void ptr is acquired once -+ pConnection->acquire(); -+ return pConnection; -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KConnection.hxx b/connectivity/source/drivers/tdeab/KConnection.hxx -new file mode 100644 -index 0000000..66b75d4 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KConnection.hxx -@@ -0,0 +1,142 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_CONNECTION_HXX_ -+#define _CONNECTIVITY_KAB_CONNECTION_HXX_ -+ -+#include -+#include "OSubComponent.hxx" -+#include "connectivity/CommonTools.hxx" -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+namespace KABC -+{ -+ class StdAddressBook; -+ class AddressBook; -+} -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ -+ typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::sdbc::XConnection, -+ ::com::sun::star::sdbc::XWarningsSupplier, -+ ::com::sun::star::lang::XServiceInfo -+ > OMetaConnection_BASE; -+ -+ class KabStatement_Base; -+ class KabDriver; -+ class KabDatabaseMetaData; -+ -+ typedef OMetaConnection_BASE KabConnection_BASE; // implements basics and text encoding -+ typedef std::vector< ::com::sun::star::uno::WeakReferenceHelper > OWeakRefArray; -+ -+ class KabConnection : public comphelper::OBaseMutex, -+ public KabConnection_BASE, -+ public OSubComponent -+ { -+ friend class OSubComponent; -+ -+ protected: -+ //==================================================================== -+ // Data attributes -+ //==================================================================== -+ ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; -+ -+ OWeakRefArray m_aStatements; // vector containing a list of all the Statement objects -+ // for this Connection -+ -+ ::KABC::StdAddressBook* m_pAddressBook; // the address book -+ KabDriver* m_pDriver; // pointer to the owning driver object -+ ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier> -+ m_xCatalog; // needed for the SQL interpreter -+ -+ public: -+ virtual void construct( const ::rtl::OUString& url,const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info) throw(::com::sun::star::sdbc::SQLException); -+ -+ KabConnection(KabDriver* _pDriver); -+ virtual ~KabConnection(); -+ -+ void closeAllStatements () throw( ::com::sun::star::sdbc::SQLException); -+ -+ // OComponentHelper -+ virtual void SAL_CALL disposing(void); -+ -+ // XInterface -+ virtual void SAL_CALL release() throw(); -+ -+ // XServiceInfo -+ DECLARE_SERVICE_INFO(); -+ -+ // XConnection -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement > SAL_CALL createStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareCall( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL nativeSQL( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL getAutoCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL commit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL rollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isClosed( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setCatalog( const ::rtl::OUString& catalog ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getCatalog( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getTransactionIsolation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTypeMap( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setTypeMap( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XCloseable -+ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XWarningsSupplier -+ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // needed for the SQL interpreter -+ ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > SAL_CALL createCatalog(); -+ -+ // accessors -+ inline KabDriver* getDriver() const { return m_pDriver;} -+ ::KABC::AddressBook* getAddressBook() const; -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_CONNECTION_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx b/connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx -new file mode 100644 -index 0000000..1bff0ea ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx -@@ -0,0 +1,1084 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KDatabaseMetaData.hxx" -+#include "kfields.hxx" -+#include "TDEInit.h" -+#include -+#include "FDatabaseMetaDataResultSet.hxx" -+#include "OTypeInfo.hxx" -+#include -+#include -+#include -+ -+using namespace connectivity::kab; -+using namespace com::sun::star::uno; -+using namespace com::sun::star::lang; -+using namespace com::sun::star::beans; -+using namespace com::sun::star::sdbc; -+ -+KabDatabaseMetaData::KabDatabaseMetaData(KabConnection* _pCon) -+ : m_xConnection(_pCon), -+ m_bUseCatalog(sal_True) -+{ -+ OSL_ENSURE(_pCon,"KabDatabaseMetaData::KabDatabaseMetaData: No connection set!"); -+ -+ osl_incrementInterlockedCount( &m_refCount ); -+ m_bUseCatalog = !(usesLocalFiles() || usesLocalFilePerTable()); -+ osl_decrementInterlockedCount( &m_refCount ); -+} -+// ------------------------------------------------------------------------- -+KabDatabaseMetaData::~KabDatabaseMetaData() -+{ -+} -+// ------------------------------------------------------------------------- -+const ::rtl::OUString & KabDatabaseMetaData::getAddressBookTableName() -+{ -+ static const ::rtl::OUString aAddressBookTableName -+ (::rtl::OUString::createFromAscii( i18n("Address Book") )); -+ -+ return aAddressBookTableName; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getCatalogSeparator( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aVal; -+ if (m_bUseCatalog) -+ { // do some special here for you database -+ } -+ -+ return aVal; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxBinaryLiteralLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxRowSize( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxCatalogNameLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxCharLiteralLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnNameLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInIndex( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxCursorNameLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxConnections( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInTable( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxStatementLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxTableNameLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxTablesInSelect( ) throw(SQLException, RuntimeException) -+{ -+ // MaxTablesInSelect describes how many tables can participate in the FROM part of a given SELECT statement, -+ // currently, the resultset/statement implementations can cope with one table only -+ sal_Int32 nValue = 1; -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::doesMaxRowSizeIncludeBlobs( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::storesLowerCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::storesLowerCaseIdentifiers( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::storesMixedCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::storesMixedCaseIdentifiers( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::storesUpperCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::storesUpperCaseIdentifiers( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsAlterTableWithAddColumn( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsAlterTableWithDropColumn( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxIndexLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsNonNullableColumns( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getCatalogTerm( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aVal; -+ if (m_bUseCatalog) -+ { -+ } -+ return aVal; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getIdentifierQuoteString( ) throw(SQLException, RuntimeException) -+{ -+ // normally this is " -+ ::rtl::OUString aVal = ::rtl::OUString::createFromAscii("\""); -+ return aVal; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getExtraNameCharacters( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aVal; -+ return aVal; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsDifferentTableCorrelationNames( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::isCatalogAtStart( ) throw(SQLException, RuntimeException) -+{ -+ sal_Bool bValue = sal_False; -+ if (m_bUseCatalog) -+ { -+ } -+ return bValue; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::dataDefinitionIgnoredInTransactions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::dataDefinitionCausesTransactionCommit( ) throw(SQLException, RuntimeException) -+{ -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsDataManipulationTransactionsOnly( ) throw(SQLException, RuntimeException) -+{ -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsPositionedDelete( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsPositionedUpdate( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenStatementsAcrossRollback( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenStatementsAcrossCommit( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenCursorsAcrossCommit( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsOpenCursorsAcrossRollback( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsTransactionIsolationLevel( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInDataManipulation( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsANSI92FullSQL( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsANSI92EntryLevelSQL( ) throw(SQLException, RuntimeException) -+{ -+ return sal_True; // should be supported at least -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsIntegrityEnhancementFacility( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInIndexDefinitions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInTableDefinitions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInTableDefinitions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInIndexDefinitions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInDataManipulation( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsOuterJoins( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxStatements( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxProcedureNameLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxSchemaNameLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsTransactions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::allProceduresAreCallable( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsStoredProcedures( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSelectForUpdate( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::allTablesAreSelectable( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::isReadOnly( ) throw(SQLException, RuntimeException) -+{ -+ // for the moment, we have read-only addresses, but this might change in the future -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::usesLocalFiles( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::usesLocalFilePerTable( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsTypeConversion( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::nullPlusNonNullIsNull( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsColumnAliasing( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsTableCorrelationNames( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsConvert( sal_Int32, sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsExpressionsInOrderBy( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsGroupBy( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsGroupByBeyondSelect( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsGroupByUnrelated( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsMultipleTransactions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsMultipleResultSets( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsLikeEscapeClause( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsOrderByUnrelated( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsUnion( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsUnionAll( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsMixedCaseIdentifiers( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsMixedCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedAtEnd( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedAtStart( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedHigh( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::nullsAreSortedLow( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInProcedureCalls( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSchemasInPrivilegeDefinitions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInProcedureCalls( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsCatalogsInPrivilegeDefinitions( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsCorrelatedSubqueries( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInComparisons( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInExists( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInIns( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsSubqueriesInQuantifieds( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsANSI92IntermediateSQL( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getURL( ) throw(SQLException, RuntimeException) -+{ -+ // if someday we support more than the default address book, -+ // this method should return the URL which was used to create it -+ ::rtl::OUString aValue = ::rtl::OUString::createFromAscii("sdbc:address:kab:"); -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getUserName( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aValue; -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getDriverName( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aValue = ::rtl::OUString::createFromAscii("kab"); -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getDriverVersion() throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aValue = ::rtl::OUString::createFromAscii(KAB_DRIVER_VERSION); -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getDatabaseProductVersion( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aValue; -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getDatabaseProductName( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aValue; -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getProcedureTerm( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aValue; -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getSchemaTerm( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aValue; -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getDriverMajorVersion( ) throw(RuntimeException) -+{ -+ return KAB_DRIVER_VERSION_MAJOR; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getDefaultTransactionIsolation( ) throw(SQLException, RuntimeException) -+{ -+ return TransactionIsolation::NONE; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getDriverMinorVersion( ) throw(RuntimeException) -+{ -+ return KAB_DRIVER_VERSION_MINOR; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getSQLKeywords( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aValue; -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getSearchStringEscape( ) throw(SQLException, RuntimeException) -+{ -+ ::rtl::OUString aValue; -+ return aValue; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getStringFunctions( ) throw(SQLException, RuntimeException) -+{ -+ return ::rtl::OUString(); -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getTimeDateFunctions( ) throw(SQLException, RuntimeException) -+{ -+ return ::rtl::OUString(); -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getSystemFunctions( ) throw(SQLException, RuntimeException) -+{ -+ return ::rtl::OUString(); -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabDatabaseMetaData::getNumericFunctions( ) throw(SQLException, RuntimeException) -+{ -+ return ::rtl::OUString(); -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsExtendedSQLGrammar( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsCoreSQLGrammar( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsMinimumSQLGrammar( ) throw(SQLException, RuntimeException) -+{ -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsFullOuterJoins( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsLimitedOuterJoins( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInGroupBy( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInOrderBy( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxColumnsInSelect( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDatabaseMetaData::getMaxUserNameLength( ) throw(SQLException, RuntimeException) -+{ -+ sal_Int32 nValue = 0; // 0 means no limit -+ return nValue; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsResultSetType( sal_Int32 setType ) throw(SQLException, RuntimeException) -+{ -+ switch (setType) -+ { -+ case ResultSetType::FORWARD_ONLY: -+ case ResultSetType::SCROLL_INSENSITIVE: -+ return sal_True; -+ } -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ switch (setType) -+ { -+ case ResultSetType::FORWARD_ONLY: -+ case ResultSetType::SCROLL_INSENSITIVE: -+ return sal_True; -+ } -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::ownUpdatesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::ownDeletesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::ownInsertsAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::othersUpdatesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::othersDeletesAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::othersInsertsAreVisible( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::updatesAreDetected( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::deletesAreDetected( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::insertsAreDetected( sal_Int32 ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDatabaseMetaData::supportsBatchUpdates( ) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+Reference< XConnection > SAL_CALL KabDatabaseMetaData::getConnection( ) throw(SQLException, RuntimeException) -+{ -+ return (Reference< XConnection >) m_xConnection.get(); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTableTypes( ) throw(SQLException, RuntimeException) -+{ -+ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTableTypes); -+ Reference< XResultSet > xRef = pResult; -+ -+ static ODatabaseMetaDataResultSet::ORows aRows; -+ static const ::rtl::OUString aTable(::rtl::OUString::createFromAscii("TABLE")); -+ -+ if (aRows.empty()) -+ { -+ ODatabaseMetaDataResultSet::ORow aRow(2); -+ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[1] = new ORowSetValueDecorator(aTable); -+ aRows.push_back(aRow); -+ } -+ pResult->setRows(aRows); -+ return xRef; -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTypeInfo( ) throw(SQLException, RuntimeException) -+{ -+ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); -+ Reference< XResultSet > xRef = pResult; -+ -+ static ODatabaseMetaDataResultSet::ORows aRows; -+ if (aRows.empty()) -+ { -+ ODatabaseMetaDataResultSet::ORow aRow(19); -+ -+ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("CHAR")); -+ aRow[2] = new ORowSetValueDecorator(DataType::CHAR); -+ aRow[3] = new ORowSetValueDecorator((sal_Int32) 254); -+ aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue(); -+ aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue(); -+ aRow[6] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[7] = new ORowSetValueDecorator((sal_Int32) ColumnValue::NULLABLE); -+ aRow[8] = ODatabaseMetaDataResultSet::get1Value(); -+ aRow[9] = new ORowSetValueDecorator((sal_Int32) ColumnSearch::CHAR); -+ aRow[10] = ODatabaseMetaDataResultSet::get1Value(); -+ aRow[11] = ODatabaseMetaDataResultSet::get0Value(); -+ aRow[12] = ODatabaseMetaDataResultSet::get0Value(); -+ aRow[13] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); -+ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); -+ aRow[16] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[17] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[18] = new ORowSetValueDecorator((sal_Int32) 10); -+ aRows.push_back(aRow); -+// Much more types might appear in TDE address books -+// To be completed -+ } -+ pResult->setRows(aRows); -+ return xRef; -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getCatalogs( ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eCatalogs ); -+} -+// ----------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getSchemas( ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eSchemas ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getColumnPrivileges( -+ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, -+ const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eColumnPrivileges ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getColumns( -+ const Any&, -+ const ::rtl::OUString&, -+ const ::rtl::OUString& tableNamePattern, -+ const ::rtl::OUString& columnNamePattern) throw(SQLException, RuntimeException) -+{ -+ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); -+ Reference< XResultSet > xRef = pResult; -+ -+ ODatabaseMetaDataResultSet::ORows aRows; -+ -+ if (match(tableNamePattern, getAddressBookTableName(), '\0')) -+ { -+ ODatabaseMetaDataResultSet::ORow aRow(19); -+ -+ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[3] = new ORowSetValueDecorator(getAddressBookTableName()); -+ aRow[8] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[9] = ODatabaseMetaDataResultSet::get0Value(); -+ aRow[10] = new ORowSetValueDecorator((sal_Int32) 10); -+ aRow[11] = ODatabaseMetaDataResultSet::get1Value(); -+ aRow[12] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[13] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[14] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[15] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[16] = new ORowSetValueDecorator((sal_Int32) 254); -+ aRow[18] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("YES")); -+ -+ sal_Int32 nPosition = 1; -+ TQString aQtName; -+ ::rtl::OUString sName; -+ -+ aQtName = ::KABC::Addressee::revisionLabel(); -+ sName = (const sal_Unicode *) aQtName.ucs2(); -+ if (match(columnNamePattern, sName, '\0')) -+ { -+ aRow[4] = new ORowSetValueDecorator(sName); -+ aRow[5] = new ORowSetValueDecorator(DataType::TIMESTAMP); -+ aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP")); -+ aRow[17] = new ORowSetValueDecorator(nPosition++); -+ aRows.push_back(aRow); -+ } -+ -+ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -+ ::KABC::Field::List::iterator aField; -+ -+ for ( aField = aFields.begin(); -+ aField != aFields.end(); -+ ++aField, ++nPosition) -+ { -+ aQtName = (*aField)->label(); -+ sName = (const sal_Unicode *) aQtName.ucs2(); -+ if (match(columnNamePattern, sName, '\0')) -+ { -+ aRow[4] = new ORowSetValueDecorator(sName); -+ aRow[5] = new ORowSetValueDecorator(DataType::CHAR); -+ aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("CHAR")); -+ aRow[7] = new ORowSetValueDecorator((sal_Int32) 256); -+// Might be VARCHAR and not CHAR[256]... -+ aRow[17] = new ORowSetValueDecorator(nPosition); -+ aRows.push_back(aRow); -+ } -+ } -+ } -+ pResult->setRows(aRows); -+ return xRef; -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTables( -+ const Any&, -+ const ::rtl::OUString&, -+ const ::rtl::OUString&, -+ const Sequence< ::rtl::OUString >& types) throw(SQLException, RuntimeException) -+{ -+ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTables); -+ Reference< XResultSet > xRef = pResult; -+ -+ // check whether we have tables in the requested types -+ // for the moment, we answer only the "TABLE" table type -+ // when no types are given at all, we return all the tables -+ static const ::rtl::OUString aTable(::rtl::OUString::createFromAscii("TABLE")); -+ sal_Bool bTableFound = sal_False; -+ const ::rtl::OUString* p = types.getConstArray(), -+ * pEnd = p + types.getLength(); -+ -+ if (p == pEnd) -+ { -+ bTableFound = sal_True; -+ } -+ else while (p < pEnd) -+ { -+ if (match(*p, aTable, '\0')) -+ { -+ bTableFound = sal_True; -+ break; -+ } -+ p++; -+ } -+ if (!bTableFound) -+ return xRef; -+ -+ static ODatabaseMetaDataResultSet::ORows aRows; -+ -+ if (aRows.empty()) -+ { -+ ODatabaseMetaDataResultSet::ORow aRow(6); -+ -+ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[3] = new ORowSetValueDecorator(getAddressBookTableName()); -+ aRow[4] = new ORowSetValueDecorator(aTable); -+ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRows.push_back(aRow); -+ } -+ pResult->setRows(aRows); -+ return xRef; -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedureColumns( -+ const Any&, const ::rtl::OUString&, -+ const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedureColumns ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedures( -+ const Any&, const ::rtl::OUString&, -+ const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedures ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getVersionColumns( -+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& table ) throw(SQLException, RuntimeException) -+{ -+ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eVersionColumns); -+ -+ Reference< XResultSet > xRef = pResult; -+ -+ ODatabaseMetaDataResultSet::ORows aRows; -+ -+ if (table == getAddressBookTableName()) -+ { -+ ODatabaseMetaDataResultSet::ORow aRow( 9 ); -+ TQString aQtName = ::KABC::Addressee::revisionLabel(); -+ ::rtl::OUString sName = (const sal_Unicode *) aQtName.ucs2(); -+ -+ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ -+ aRow[2] = new ORowSetValueDecorator(sName); -+ aRow[3] = new ORowSetValueDecorator(DataType::TIMESTAMP); -+ aRow[4] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP")); -+ -+ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[6] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[7] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ aRow[8] = ODatabaseMetaDataResultSet::getEmptyValue(); -+ -+ aRows.push_back(aRow); -+ } -+ pResult->setRows(aRows); -+ return xRef; -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getExportedKeys( -+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eExportedKeys ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getImportedKeys( -+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eImportedKeys ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getPrimaryKeys( -+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::ePrimaryKeys ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getIndexInfo( -+ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, -+ sal_Bool, sal_Bool ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eIndexInfo ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getBestRowIdentifier( -+ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, sal_Int32, -+ sal_Bool ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eBestRowIdentifier ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTablePrivileges( -+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTablePrivileges ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getCrossReference( -+ const Any&, const ::rtl::OUString&, -+ const ::rtl::OUString&, const Any&, -+ const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eCrossReference ); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getUDTs( const Any&, const ::rtl::OUString&, const ::rtl::OUString&, const Sequence< sal_Int32 >& ) throw(SQLException, RuntimeException) -+{ -+ OSL_ENSURE(0,"Not implemented yet!"); -+ throw SQLException(); -+} -+// ----------------------------------------------------------------------------- -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx b/connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx -new file mode 100644 -index 0000000..9ddc063 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx -@@ -0,0 +1,217 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ -+#define _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ -+ -+#include "KConnection.hxx" -+#include -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ //************************************************************** -+ //************ Class: KabDatabaseMetaData -+ //************************************************************** -+ -+ typedef ::cppu::WeakImplHelper1< ::com::sun::star::sdbc::XDatabaseMetaData> KabDatabaseMetaData_BASE; -+ -+ class KabDatabaseMetaData : public KabDatabaseMetaData_BASE -+ { -+ ::com::sun::star::uno::Reference< KabConnection > m_xConnection; -+ sal_Bool m_bUseCatalog; -+ -+ public: -+ -+ inline KabConnection* getOwnConnection() const { return m_xConnection.get(); } -+ -+ KabDatabaseMetaData(KabConnection* _pCon); -+ static const ::rtl::OUString & getAddressBookTableName(); -+ virtual ~KabDatabaseMetaData(); -+ -+ // this interface is really BIG -+ // XDatabaseMetaData -+ virtual sal_Bool SAL_CALL allProceduresAreCallable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL allTablesAreSelectable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getURL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getUserName( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL nullsAreSortedHigh( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL nullsAreSortedLow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL nullsAreSortedAtStart( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL nullsAreSortedAtEnd( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getDatabaseProductName( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getDatabaseProductVersion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getDriverName( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getDriverVersion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getDriverMajorVersion( ) throw(::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getDriverMinorVersion( ) throw(::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL usesLocalFiles( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL usesLocalFilePerTable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getIdentifierQuoteString( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getSQLKeywords( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getNumericFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getStringFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getSystemFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getTimeDateFunctions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getSearchStringEscape( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getExtraNameCharacters( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsAlterTableWithAddColumn( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsAlterTableWithDropColumn( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsColumnAliasing( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL nullPlusNonNullIsNull( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsTypeConversion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsTableCorrelationNames( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsOrderByUnrelated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsGroupBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsGroupByUnrelated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsLikeEscapeClause( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsMultipleResultSets( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsMultipleTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsNonNullableColumns( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsCoreSQLGrammar( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsANSI92FullSQL( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsOuterJoins( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsFullOuterJoins( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsLimitedOuterJoins( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getSchemaTerm( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getProcedureTerm( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getCatalogTerm( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isCatalogAtStart( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getCatalogSeparator( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSchemasInDataManipulation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSchemasInTableDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsCatalogsInDataManipulation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsCatalogsInTableDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsPositionedDelete( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsPositionedUpdate( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSelectForUpdate( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsStoredProcedures( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSubqueriesInExists( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSubqueriesInIns( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsUnion( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsUnionAll( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxCharLiteralLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxColumnNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxColumnsInIndex( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxColumnsInSelect( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxColumnsInTable( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxConnections( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxCursorNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxIndexLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxSchemaNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxProcedureNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxCatalogNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxRowSize( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxStatementLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxStatements( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxTableNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxTablesInSelect( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMaxUserNameLength( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getProcedures( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& procedureNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getProcedureColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& procedureNamePattern, const ::rtl::OUString& columnNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTables( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& types ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getSchemas( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getCatalogs( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTableTypes( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const ::rtl::OUString& columnNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getColumnPrivileges( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, const ::rtl::OUString& columnNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTablePrivileges( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getBestRowIdentifier( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, sal_Int32 scope, sal_Bool nullable ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getVersionColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getPrimaryKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getImportedKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getExportedKeys( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getCrossReference( const ::com::sun::star::uno::Any& primaryCatalog, const ::rtl::OUString& primarySchema, const ::rtl::OUString& primaryTable, const ::com::sun::star::uno::Any& foreignCatalog, const ::rtl::OUString& foreignSchema, const ::rtl::OUString& foreignTable ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTypeInfo( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getIndexInfo( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, sal_Bool unique, sal_Bool approximate ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsBatchUpdates( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getUDTs( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& typeNamePattern, const ::com::sun::star::uno::Sequence< sal_Int32 >& types ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KDriver.cxx b/connectivity/source/drivers/tdeab/KDriver.cxx -new file mode 100644 -index 0000000..cdf0463 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KDriver.cxx -@@ -0,0 +1,476 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KDriver.hxx" -+#include "TDEInit.h" -+#include "KConnection.hxx" -+ -+/** === begin UNO includes === **/ -+#include -+#include -+#include -+/** === end UNO includes === **/ -+#include -+#include -+#include "resource/tdeab_res.hrc" -+#include "resource/sharedresources.hxx" -+ -+using namespace com::sun::star::uno; -+using namespace com::sun::star::lang; -+using namespace com::sun::star::beans; -+using namespace com::sun::star::sdbc; -+using namespace com::sun::star::sdb; -+using namespace com::sun::star::frame; -+using namespace connectivity::kab; -+ -+// ======================================================================= -+// = KabImplModule -+// ======================================================================= -+// -------------------------------------------------------------------------------- -+KabImplModule::KabImplModule( const Reference< XMultiServiceFactory >& _rxFactory ) -+ :m_xORB(_rxFactory) -+ ,m_bAttemptedLoadModule(false) -+ ,m_bAttemptedInitialize(false) -+ ,m_hConnectorModule(NULL) -+ ,m_pConnectionFactoryFunc(NULL) -+ ,m_pApplicationInitFunc(NULL) -+ ,m_pApplicationShutdownFunc(NULL) -+ ,m_pTDEVersionCheckFunc(NULL) -+{ -+ if ( !m_xORB.is() ) -+ throw NullPointerException(); -+} -+ -+// -------------------------------------------------------------------------------- -+bool KabImplModule::isTDEPresent() -+{ -+ if ( !impl_loadModule() ) -+ return false; -+ -+ return true; -+} -+ -+// -------------------------------------------------------------------------------- -+KabImplModule::TDEVersionType KabImplModule::matchTDEVersion() -+{ -+ OSL_PRECOND( m_pTDEVersionCheckFunc, "KabImplModule::matchTDEVersion: module not loaded!" ); -+ -+ int nVersionInfo = (*m_pTDEVersionCheckFunc)(); -+ if ( nVersionInfo < 0 ) -+ return eTooOld; -+ if ( nVersionInfo > 0 ) -+ return eToNew; -+ return eSupported; -+} -+ -+// -------------------------------------------------------------------------------- -+namespace -+{ -+ template< typename FUNCTION > -+ void lcl_getFunctionFromModuleOrUnload( oslModule& _rModule, const sal_Char* _pAsciiSymbolName, FUNCTION& _rFunction ) -+ { -+ _rFunction = NULL; -+ if ( _rModule ) -+ { -+ // -+ const ::rtl::OUString sSymbolName = ::rtl::OUString::createFromAscii( _pAsciiSymbolName ); -+ _rFunction = (FUNCTION)( osl_getSymbol( _rModule, sSymbolName.pData ) ); -+ -+ if ( !_rFunction ) -+ { // did not find the symbol -+ OSL_ENSURE( false, ::rtl::OString( "lcl_getFunctionFromModuleOrUnload: could not find the symbol " ) + ::rtl::OString( _pAsciiSymbolName ) ); -+ osl_unloadModule( _rModule ); -+ _rModule = NULL; -+ } -+ } -+ } -+} -+ -+// -------------------------------------------------------------------------------- -+extern "C" { void SAL_CALL thisModule() {} } -+ -+bool KabImplModule::impl_loadModule() -+{ -+ if ( m_bAttemptedLoadModule ) -+ return ( m_hConnectorModule != NULL ); -+ m_bAttemptedLoadModule = true; -+ -+ OSL_ENSURE( !m_hConnectorModule && !m_pConnectionFactoryFunc && !m_pApplicationInitFunc && !m_pApplicationShutdownFunc && !m_pTDEVersionCheckFunc, -+ "KabImplModule::impl_loadModule: inconsistence: inconsistency (never attempted load before, but some values already set)!"); -+ -+ const ::rtl::OUString sModuleName = ::rtl::OUString::createFromAscii( SAL_MODULENAME( "kabdrv1" ) ); -+ m_hConnectorModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, SAL_LOADMODULE_NOW ); // LAZY! #i61335# -+ OSL_ENSURE( m_hConnectorModule, "KabImplModule::impl_loadModule: could not load the implementation library!" ); -+ if ( !m_hConnectorModule ) -+ return false; -+ -+ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "createKabConnection", m_pConnectionFactoryFunc ); -+ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "initKApplication", m_pApplicationInitFunc ); -+ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "shutdownKApplication", m_pApplicationShutdownFunc ); -+ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "matchTDEVersion", m_pTDEVersionCheckFunc ); -+ -+ if ( !m_hConnectorModule ) -+ // one of the symbols did not exist -+ throw RuntimeException(); -+ -+ return true; -+} -+ -+// -------------------------------------------------------------------------------- -+void KabImplModule::impl_unloadModule() -+{ -+ OSL_PRECOND( m_hConnectorModule != NULL, "KabImplModule::impl_unloadModule: no module!" ); -+ -+ osl_unloadModule( m_hConnectorModule ); -+ m_hConnectorModule = NULL; -+ -+ m_pConnectionFactoryFunc = NULL; -+ m_pApplicationInitFunc = NULL; -+ m_pApplicationShutdownFunc = NULL; -+ m_pTDEVersionCheckFunc = NULL; -+ -+ m_bAttemptedLoadModule = false; -+} -+ -+// -------------------------------------------------------------------------------- -+void KabImplModule::init() -+{ -+ if ( !impl_loadModule() ) -+ impl_throwNoKdeException(); -+ -+ // if we're not running on a supported version, throw -+ KabImplModule::TDEVersionType eTDEVersion = matchTDEVersion(); -+ -+ if ( eTDEVersion == eTooOld ) -+ impl_throwKdeTooOldException(); -+ -+ if ( ( eTDEVersion == eToNew ) && !impl_doAllowNewTDEVersion() ) -+ impl_throwKdeTooNewException(); -+ -+ if ( !m_bAttemptedInitialize ) -+ { -+ m_bAttemptedInitialize = true; -+ (*m_pApplicationInitFunc)(); -+ } -+} -+ -+// -------------------------------------------------------------------------------- -+bool KabImplModule::impl_doAllowNewTDEVersion() -+{ -+ try -+ { -+ Reference< XMultiServiceFactory > xConfigProvider( -+ m_xORB->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) ) ), -+ UNO_QUERY_THROW ); -+ Sequence< Any > aCreationArgs(1); -+ aCreationArgs[0] <<= PropertyValue( -+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) ), -+ 0, -+ makeAny( KabDriver::impl_getConfigurationSettingsPath() ), -+ PropertyState_DIRECT_VALUE ); -+ Reference< XPropertySet > xSettings( xConfigProvider->createInstanceWithArguments( -+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationAccess" ) ), -+ aCreationArgs ), -+ UNO_QUERY_THROW ); -+ -+ sal_Bool bDisableCheck = sal_False; -+ xSettings->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DisableTDEMaximumVersionCheck" ) ) ) >>= bDisableCheck; -+ -+ return bDisableCheck != sal_False; -+ } -+ catch( const Exception& ) -+ { -+ DBG_UNHANDLED_EXCEPTION(); -+ } -+ return false; -+} -+ -+// -------------------------------------------------------------------------------- -+void KabImplModule::impl_throwNoKdeException() -+{ -+ ::connectivity::SharedResources aResources; -+ const ::rtl::OUString sError( aResources.getResourceString( -+ STR_NO_TDE_INST -+ ) ); -+ impl_throwGenericSQLException( sError ); -+} -+ -+// -------------------------------------------------------------------------------- -+void KabImplModule::impl_throwKdeTooOldException() -+{ -+ ::connectivity::SharedResources aResources; -+ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution( -+ STR_TDE_VERSION_TOO_OLD, -+ "$major$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MAJOR), -+ "$minor$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MINOR) -+ ) ); -+ impl_throwGenericSQLException( sError ); -+} -+ -+// -------------------------------------------------------------------------------- -+void KabImplModule::impl_throwGenericSQLException( const ::rtl::OUString& _rMessage ) -+{ -+ SQLException aError; -+ aError.Message = _rMessage; -+ aError.SQLState = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) ); -+ aError.ErrorCode = 0; -+ throw aError; -+} -+ -+// -------------------------------------------------------------------------------- -+void KabImplModule::impl_throwKdeTooNewException() -+{ -+ ::connectivity::SharedResources aResources; -+ -+ SQLException aError; -+ aError.Message = aResources.getResourceStringWithSubstitution( -+ STR_TDE_VERSION_TOO_NEW, -+ "$major$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MAJOR), -+ "$minor$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MINOR) -+ ); -+ aError.SQLState = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) ); -+ aError.ErrorCode = 0; -+ -+ SQLContext aDetails; -+ ::rtl::OUStringBuffer aMessage; -+ aMessage.append( aResources.getResourceString(STR_TDE_VERSION_TOO_NEW_WORK_AROUND) ); -+ -+ aMessage.appendAscii( "Sub disableTDEMaxVersionCheck\n" ); -+ aMessage.appendAscii( " BasicLibraries.LoadLibrary( \"Tools\" )\n" ); -+ -+ aMessage.appendAscii( " Dim configNode as Object\n" ); -+ aMessage.appendAscii( " configNode = GetRegistryKeyContent( \"" ); -+ aMessage.append( KabDriver::impl_getConfigurationSettingsPath() ); -+ aMessage.appendAscii( "\", true )\n" ); -+ -+ aMessage.appendAscii( " configNode.DisableTDEMaximumVersionCheck = TRUE\n" ); -+ aMessage.appendAscii( " configNode.commitChanges\n" ); -+ aMessage.appendAscii( "End Sub\n" ); -+ -+ aDetails.Message = aMessage.makeStringAndClear(); -+ -+ aError.NextException <<= aDetails; -+ -+ throw aError; -+} -+ -+// -------------------------------------------------------------------------------- -+KabConnection* KabImplModule::createConnection( KabDriver* _pDriver ) const -+{ -+ OSL_PRECOND( m_hConnectorModule, "KabImplModule::createConnection: not initialized!" ); -+ -+ void* pUntypedConnection = (*m_pConnectionFactoryFunc)( _pDriver ); -+ if ( !pUntypedConnection ) -+ throw RuntimeException(); -+ -+ return static_cast< KabConnection* >( pUntypedConnection ); -+} -+ -+// -------------------------------------------------------------------------------- -+void KabImplModule::shutdown() -+{ -+ if ( !m_hConnectorModule ) -+ return; -+ -+ (*m_pApplicationShutdownFunc)(); -+ m_bAttemptedInitialize = false; -+ -+ impl_unloadModule(); -+} -+ -+// ======================================================================= -+// = KabDriver -+// ======================================================================= -+KabDriver::KabDriver( -+ const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) -+ : KDriver_BASE(m_aMutex), -+ m_xMSFactory(_rxFactory), -+ m_aImplModule(_rxFactory) -+{ -+ if ( !m_xMSFactory.is() ) -+ throw NullPointerException(); -+ -+ osl_incrementInterlockedCount( &m_refCount ); -+ try -+ { -+ Reference< XDesktop > xDesktop( -+ m_xMSFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ) ), -+ UNO_QUERY_THROW ); -+ xDesktop->addTerminateListener( this ); -+ } -+ catch( const Exception& ) -+ { -+ DBG_UNHANDLED_EXCEPTION(); -+ } -+ osl_decrementInterlockedCount( &m_refCount ); -+} -+// -------------------------------------------------------------------------------- -+void KabDriver::disposing() -+{ -+ ::osl::MutexGuard aGuard(m_aMutex); -+ -+ // when driver will be destroied so all our connections have to be destroied as well -+ for (OWeakRefArray::iterator i = m_xConnections.begin(); m_xConnections.end() != i; ++i) -+ { -+ Reference< XComponent > xComp(i->get(), UNO_QUERY); -+ if (xComp.is()) -+ xComp->dispose(); -+ } -+ m_xConnections.clear(); -+ -+ WeakComponentImplHelperBase::disposing(); -+} -+// static ServiceInfo -+//------------------------------------------------------------------------------ -+rtl::OUString KabDriver::getImplementationName_Static( ) throw(RuntimeException) -+{ -+ return rtl::OUString::createFromAscii( impl_getAsciiImplementationName() ); -+} -+//------------------------------------------------------------------------------ -+Sequence< ::rtl::OUString > KabDriver::getSupportedServiceNames_Static( ) throw (RuntimeException) -+{ -+ // which service is supported -+ // for more information @see com.sun.star.sdbc.Driver -+ Sequence< ::rtl::OUString > aSNS( 1 ); -+ aSNS[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdbc.Driver"); -+ -+ return aSNS; -+} -+//------------------------------------------------------------------ -+::rtl::OUString SAL_CALL KabDriver::getImplementationName( ) throw(RuntimeException) -+{ -+ return getImplementationName_Static(); -+} -+//------------------------------------------------------------------ -+sal_Bool SAL_CALL KabDriver::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException) -+{ -+ Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames()); -+ const ::rtl::OUString* pSupported = aSupported.getConstArray(); -+ const ::rtl::OUString* pEnd = pSupported + aSupported.getLength(); -+ -+ while (pSupported != pEnd && !pSupported->equals(_rServiceName)) -+ ++pSupported; -+ return pSupported != pEnd; -+} -+//------------------------------------------------------------------ -+Sequence< ::rtl::OUString > SAL_CALL KabDriver::getSupportedServiceNames( ) throw(RuntimeException) -+{ -+ return getSupportedServiceNames_Static(); -+} -+// -------------------------------------------------------------------------------- -+Reference< XConnection > SAL_CALL KabDriver::connect( const ::rtl::OUString& url, const Sequence< PropertyValue >& info ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard(m_aMutex); -+ -+ m_aImplModule.init(); -+ -+ // create a new connection with the given properties and append it to our vector -+ KabConnection* pConnection = m_aImplModule.createConnection( this ); -+ OSL_POSTCOND( pConnection, "KabDriver::connect: no connection has been created by the factory!" ); -+ -+ // by definition, the factory function returned an object which was acquired once -+ Reference< XConnection > xConnection = pConnection; -+ pConnection->release(); -+ -+ // late constructor call which can throw exception and allows a correct dtor call when so -+ pConnection->construct( url, info ); -+ -+ // remember it -+ m_xConnections.push_back( WeakReferenceHelper( *pConnection ) ); -+ -+ return xConnection; -+} -+// -------------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabDriver::acceptsURL( const ::rtl::OUString& url ) -+ throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard(m_aMutex); -+ -+ if ( !m_aImplModule.isTDEPresent() ) -+ return sal_False; -+ -+ // here we have to look whether we support this URL format -+ return (!url.compareTo(::rtl::OUString::createFromAscii("sdbc:address:kab:"), 16)); -+} -+// -------------------------------------------------------------------------------- -+Sequence< DriverPropertyInfo > SAL_CALL KabDriver::getPropertyInfo( const ::rtl::OUString&, const Sequence< PropertyValue >& ) throw(SQLException, RuntimeException) -+{ -+ // if you have something special to say, return it here :-) -+ return Sequence< DriverPropertyInfo >(); -+} -+// -------------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDriver::getMajorVersion( ) throw(RuntimeException) -+{ -+ return KAB_DRIVER_VERSION_MAJOR; -+} -+// -------------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabDriver::getMinorVersion( ) throw(RuntimeException) -+{ -+ return KAB_DRIVER_VERSION_MINOR; -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabDriver::queryTermination( const EventObject& ) throw (TerminationVetoException, RuntimeException) -+{ -+ // nothing to do, nothing to veto -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabDriver::notifyTermination( const EventObject& ) throw (RuntimeException) -+{ -+ m_aImplModule.shutdown(); -+} -+// -------------------------------------------------------------------------------- -+void SAL_CALL KabDriver::disposing( const EventObject& ) throw (RuntimeException) -+{ -+ // not interested in (this is the disposing of the desktop, if any) -+} -+// -------------------------------------------------------------------------------- -+const sal_Char* KabDriver::impl_getAsciiImplementationName() -+{ -+ return "com.sun.star.comp.sdbc.kab.Driver"; -+ // this name is referenced in the configuration and in the kab.xml -+ // Please be careful when changing it. -+} -+// -------------------------------------------------------------------------------- -+::rtl::OUString KabDriver::impl_getConfigurationSettingsPath() -+{ -+ ::rtl::OUStringBuffer aPath; -+ aPath.appendAscii( "/org.openoffice.Office.DataAccess/DriverSettings/" ); -+ aPath.appendAscii( "com.sun.star.comp.sdbc.kab.Driver" ); -+ return aPath.makeStringAndClear(); -+} -+// -------------------------------------------------------------------------------- -+Reference< XInterface > SAL_CALL KabDriver::Create( const Reference< XMultiServiceFactory >& _rxFactory ) throw( Exception ) -+{ -+ return *(new KabDriver(_rxFactory)); -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KDriver.hxx b/connectivity/source/drivers/tdeab/KDriver.hxx -new file mode 100644 -index 0000000..b09a7d2 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KDriver.hxx -@@ -0,0 +1,227 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_DRIVER_HXX_ -+#define _CONNECTIVITY_KAB_DRIVER_HXX_ -+ -+/** === begin UNO includes === **/ -+#include -+#include -+#include -+/** === end UNO includes === **/ -+#include -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ class KabConnection; -+ class KabDriver; -+ -+ typedef void* (SAL_CALL * ConnectionFactoryFunction)( void* _pDriver ); -+ typedef void (SAL_CALL * ApplicationInitFunction)( void ); -+ typedef void (SAL_CALL * ApplicationShutdownFunction)( void ); -+ typedef int (SAL_CALL * TDEVersionCheckFunction)( void ); -+ -+ typedef std::vector< ::com::sun::star::uno::WeakReferenceHelper > OWeakRefArray; -+ -+ // =============================================================== -+ // = KabImplModule -+ // =============================================================== -+ class KabImplModule -+ { -+ private: -+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > -+ m_xORB; -+ -+ /// Did we already attempt to load the module and to retrieve the symbols? -+ bool m_bAttemptedLoadModule; -+ /// Did we already check the TDE version and initialize the impl module (or at least attempted to)? -+ bool m_bAttemptedInitialize; -+ -+ oslModule m_hConnectorModule; -+ ConnectionFactoryFunction m_pConnectionFactoryFunc; -+ ApplicationInitFunction m_pApplicationInitFunc; -+ ApplicationShutdownFunction m_pApplicationShutdownFunc; -+ TDEVersionCheckFunction m_pTDEVersionCheckFunc; -+ -+ public: -+ KabImplModule( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); -+ -+ /** determines whether there is a TDE present in the environment -+ */ -+ bool isTDEPresent(); -+ -+ enum TDEVersionType -+ { -+ eTooOld, -+ eSupported, -+ eToNew -+ }; -+ /** checks whether the TDE version we're running against is supported -+ @precond -+ the module is loaded, i.e impl_loadModule has successfully been called -+ */ -+ TDEVersionType matchTDEVersion(); -+ -+ /** initializes the implementation module. -+ -+ @raises ::com::sun::star::uno::RuntimeException -+ if the module could be loaded, but required symbols are missing -+ @raises ::com::sun::star::sdbc::SQLException -+ if the TDE version we're running against is not supported, or no TDE was found at all -+ */ -+ void init(); -+ -+ /** shuts down the impl module (and the TDE application, if we own it) -+ */ -+ void shutdown(); -+ -+ /** creates a new connection -+ @precond -+ init has been called before -+ @raises ::com::sun::star::uno::RuntimeException -+ if no connection object could be created (which is a severe error, normally impossible) -+ */ -+ KabConnection* createConnection( KabDriver* _pDriver ) const; -+ -+ private: -+ /** loads the implementation module and retrieves the needed symbols -+ -+ Save against being called multiple times. -+ -+ @return if the module could be loaded successfully. -+ -+ @raises ::com::sun::star::uno::RuntimeException -+ if the module could be loaded, but required symbols are missing -+ */ -+ bool impl_loadModule(); -+ -+ /** unloads the implementation module, and resets all function pointers to -+ @precond m_hConnectorModule is not -+ */ -+ void impl_unloadModule(); -+ -+ /** throws an SQLException saying than no TDE installation was found -+ */ -+ void impl_throwNoKdeException(); -+ -+ /** throws an SQLException saying that the found TDE version is too old -+ */ -+ void impl_throwKdeTooOldException(); -+ -+ /** throws an SQLException saying that the found TDE version is too new -+ */ -+ void impl_throwKdeTooNewException(); -+ -+ /** throws a generic SQL exception with SQLState S1000 and error code 0 -+ */ -+ void impl_throwGenericSQLException( const ::rtl::OUString& _rMessage ); -+ -+ /** determines whether it's allowed to run on a too-new (not confirmed to work) version -+ */ -+ bool impl_doAllowNewTDEVersion(); -+ }; -+ -+ // =============================================================== -+ // = KabDriver -+ // =============================================================== -+ typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::sdbc::XDriver, -+ ::com::sun::star::lang::XServiceInfo, -+ ::com::sun::star::frame::XTerminateListener > KDriver_BASE; -+ class KabDriver : public KDriver_BASE -+ { -+ protected: -+ ::osl::Mutex m_aMutex; // mutex is need to control member access -+ OWeakRefArray m_xConnections; // vector containing a list of all the -+ // KabConnection objects for this Driver -+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > -+ m_xMSFactory; // the multi-service factory -+ KabImplModule m_aImplModule; -+ -+ public: -+ static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) throw( ::com::sun::star::uno::Exception ); -+ -+ // XServiceInfo - static versions -+ static ::rtl::OUString getImplementationName_Static( ) throw(::com::sun::star::uno::RuntimeException); -+ static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static( ) throw (::com::sun::star::uno::RuntimeException); -+ -+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& -+ getMSFactory() const { return m_xMSFactory; } -+ -+ /** returns the driver's implementation name (being pure ASCII) for reference in various places -+ */ -+ static const sal_Char* impl_getAsciiImplementationName(); -+ -+ /** returns the path of our configuration settings -+ */ -+ static ::rtl::OUString impl_getConfigurationSettingsPath(); -+ -+ protected: -+ KabDriver(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory); -+ -+ // OComponentHelper -+ virtual void SAL_CALL disposing(void); -+ -+ // XServiceInfo -+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); -+ -+ // XDriver -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL connect( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL acceptsURL( const ::rtl::OUString& url ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMajorVersion() throw(::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getMinorVersion() throw(::com::sun::star::uno::RuntimeException); -+ -+ // XTerminateListener -+ virtual void SAL_CALL queryTermination( const ::com::sun::star::lang::EventObject& Event ) throw (::com::sun::star::frame::TerminationVetoException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL notifyTermination( const ::com::sun::star::lang::EventObject& Event ) throw (::com::sun::star::uno::RuntimeException); -+ -+ // XEventListener -+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); -+ -+ private: -+ /** shuts down the library which contains the real implementations -+ -+ This method is safe against being called multiple times -+ -+ @precond our mutex is locked -+ */ -+ void impl_shutdownImplementationModule(); -+ }; -+ } -+ -+} -+ -+#endif // _CONNECTIVITY_KAB_DRIVER_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KPreparedStatement.cxx b/connectivity/source/drivers/tdeab/KPreparedStatement.cxx -new file mode 100644 -index 0000000..12816c2 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KPreparedStatement.cxx -@@ -0,0 +1,394 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KPreparedStatement.hxx" -+#include "propertyids.hxx" -+#include -+#include -+#include "resource/tdeab_res.hrc" -+#include "resource/sharedresources.hxx" -+ -+using namespace connectivity::kab; -+using namespace com::sun::star::uno; -+using namespace com::sun::star::lang; -+using namespace com::sun::star::sdbc; -+using namespace com::sun::star::util; -+ -+IMPLEMENT_SERVICE_INFO(KabPreparedStatement, "com.sun.star.sdbc.drivers.KabPreparedStatement", "com.sun.star.sdbc.PreparedStatement"); -+// ------------------------------------------------------------------------- -+void KabPreparedStatement::checkAndResizeParameters(sal_Int32 nParams) throw(SQLException) -+{ -+ if ( !m_aParameterRow.is() ) -+ m_aParameterRow = new OValueVector(); -+ -+ if (nParams < 1) -+ ::dbtools::throwInvalidIndexException(*(KabPreparedStatement *) this,Any()); -+ -+ if (nParams >= (sal_Int32) (m_aParameterRow->get()).size()) -+ (m_aParameterRow->get()).resize(nParams); -+} -+// ------------------------------------------------------------------------- -+void KabPreparedStatement::setKabFields() const throw(SQLException) -+{ -+ ::rtl::Reference xColumns; // selected columns -+ -+ xColumns = m_aSQLIterator.getSelectColumns(); -+ if (!xColumns.is()) -+ { -+ ::connectivity::SharedResources aResources; -+ const ::rtl::OUString sError( aResources.getResourceString( -+ STR_INVALID_COLUMN_SELECTION -+ ) ); -+ ::dbtools::throwGenericSQLException(sError,NULL); -+ } -+ m_xMetaData->setKabFields(xColumns); -+} -+// ------------------------------------------------------------------------- -+void KabPreparedStatement::resetParameters() const throw(SQLException) -+{ -+ m_nParameterIndex = 0; -+} -+// ------------------------------------------------------------------------- -+void KabPreparedStatement::getNextParameter(::rtl::OUString &rParameter) const throw(SQLException) -+{ -+ if (m_nParameterIndex >= (sal_Int32) (m_aParameterRow->get()).size()) -+ { -+ ::connectivity::SharedResources aResources; -+ const ::rtl::OUString sError( aResources.getResourceString( -+ STR_INVALID_PARA_COUNT -+ ) ); -+ ::dbtools::throwGenericSQLException(sError,*(KabPreparedStatement *) this); -+ } // if (m_nParameterIndex >= (sal_Int32) (*m_aParameterRow).size()) -+ -+ rParameter = (m_aParameterRow->get())[m_nParameterIndex]; -+ -+ m_nParameterIndex++; -+} -+// ------------------------------------------------------------------------- -+KabPreparedStatement::KabPreparedStatement( -+ KabConnection* _pConnection, -+ const ::rtl::OUString& sql) -+ : KabPreparedStatement_BASE(_pConnection), -+ m_sSqlStatement(sql), -+ m_bPrepared(sal_False), -+ m_nParameterIndex(0), -+ m_aParameterRow() -+{ -+} -+// ------------------------------------------------------------------------- -+KabPreparedStatement::~KabPreparedStatement() -+{ -+} -+// ------------------------------------------------------------------------- -+void KabPreparedStatement::disposing() -+{ -+ KabPreparedStatement_BASE::disposing(); -+ -+ if (m_aParameterRow.is()) -+ { -+ m_aParameterRow->get().clear(); -+ m_aParameterRow = NULL; -+ } -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSetMetaData > SAL_CALL KabPreparedStatement::getMetaData() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ if (!m_xMetaData.is()) -+ { -+ m_xMetaData = new KabResultSetMetaData(getOwnConnection()); -+ setKabFields(); -+ } -+ Reference< XResultSetMetaData > xMetaData = m_xMetaData.get(); -+ return xMetaData; -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::close() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ // Reset last warning message -+ try { -+ clearWarnings (); -+ KabCommonStatement::close(); -+ } -+ catch (SQLException &) { -+ // If we get an error, ignore -+ } -+ -+ // Remove this Statement object from the Connection object's -+ // list -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabPreparedStatement::execute() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ Reference< XResultSet> xRS = KabCommonStatement::executeQuery(m_sSqlStatement); -+ -+ return xRS.is(); -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabPreparedStatement::executeUpdate() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ // same as in statement with the difference that this statement also can contain parameter -+ return 0; -+} -+// ------------------------------------------------------------------------- -+Reference< XConnection > SAL_CALL KabPreparedStatement::getConnection() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ return (Reference< XConnection >) m_pConnection; -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabPreparedStatement::executeQuery() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ Reference< XResultSet > rs = KabCommonStatement::executeQuery(m_sSqlStatement); -+ -+ return rs; -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setNull(sal_Int32 parameterIndex, sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ checkAndResizeParameters(parameterIndex); -+ -+ (m_aParameterRow->get())[parameterIndex - 1].setNull(); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setObjectNull(sal_Int32, sal_Int32, const ::rtl::OUString&) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setObjectNull", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setBoolean(sal_Int32, sal_Bool) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setBoolean", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setByte(sal_Int32, sal_Int8) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setByte", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setShort(sal_Int32, sal_Int16) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setShort", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setInt(sal_Int32, sal_Int32) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setInt", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setLong(sal_Int32, sal_Int64) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setFloat(sal_Int32, float) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setFloat", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setDouble(sal_Int32, double) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setDouble", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setString(sal_Int32 parameterIndex, const ::rtl::OUString &x) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ checkAndResizeParameters(parameterIndex); -+ -+ (m_aParameterRow->get())[parameterIndex - 1] = x; -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setBytes(sal_Int32, const Sequence< sal_Int8 >&) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setBytes", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setDate(sal_Int32, const Date&) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setDate", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setTime(sal_Int32, const Time&) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setTime", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setTimestamp(sal_Int32, const DateTime&) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setTimestamp", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setBinaryStream(sal_Int32, const Reference< ::com::sun::star::io::XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setBinaryStream", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setCharacterStream(sal_Int32, const Reference< ::com::sun::star::io::XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setCharacterStream", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setObject(sal_Int32 parameterIndex, const Any& x) throw(SQLException, RuntimeException) -+{ -+ if(!::dbtools::implSetObject(this,parameterIndex,x)) -+ { -+ throw SQLException(); -+ } -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setObjectWithInfo(sal_Int32, const Any&, sal_Int32, sal_Int32) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setObjectWithInfo", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setRef(sal_Int32, const Reference< XRef >&) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setRef", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setBlob(sal_Int32, const Reference< XBlob >&) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setBlob", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setClob(sal_Int32, const Reference< XClob >&) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setClob", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::setArray(sal_Int32, const Reference< XArray >&) throw(SQLException, RuntimeException) -+{ -+ -+ -+ -+::dbtools::throwFunctionNotSupportedException("setArray", NULL); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabPreparedStatement::clearParameters() throw(SQLException, RuntimeException) -+{ -+::dbtools::throwFunctionNotSupportedException("clearParameters", NULL); -+} -+// ------------------------------------------------------------------------- -+void KabPreparedStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) throw (Exception) -+{ -+ switch (nHandle) -+ { -+ case PROPERTY_ID_RESULTSETCONCURRENCY: -+ break; -+ case PROPERTY_ID_RESULTSETTYPE: -+ break; -+ case PROPERTY_ID_FETCHDIRECTION: -+ break; -+ case PROPERTY_ID_USEBOOKMARKS: -+ break; -+ default: -+ KabCommonStatement::setFastPropertyValue_NoBroadcast(nHandle,rValue); -+ } -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KPreparedStatement.hxx b/connectivity/source/drivers/tdeab/KPreparedStatement.hxx -new file mode 100644 -index 0000000..25a7a01 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KPreparedStatement.hxx -@@ -0,0 +1,123 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ -+#define _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ -+ -+#include "KStatement.hxx" -+#include "KResultSetMetaData.hxx" -+#include -+#include -+#include -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ -+ class OBoundParam; -+ typedef ::cppu::ImplInheritanceHelper4< KabCommonStatement, -+ ::com::sun::star::sdbc::XPreparedStatement, -+ ::com::sun::star::sdbc::XParameters, -+ ::com::sun::star::sdbc::XResultSetMetaDataSupplier, -+ ::com::sun::star::lang::XServiceInfo> KabPreparedStatement_BASE; -+ -+ class KabPreparedStatement : public KabPreparedStatement_BASE -+ { -+ protected: -+ ::rtl::OUString m_sSqlStatement; -+ ::rtl::Reference< KabResultSetMetaData > -+ m_xMetaData; -+ sal_Bool m_bPrepared; -+ mutable sal_Int32 m_nParameterIndex; -+ OValueRow m_aParameterRow; -+ -+ void checkAndResizeParameters(sal_Int32 nParams) throw(::com::sun::star::sdbc::SQLException); -+ void setKabFields() const throw(::com::sun::star::sdbc::SQLException); -+ -+ protected: -+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( -+ sal_Int32 nHandle, -+ const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::uno::Exception); -+ -+ virtual void resetParameters() const throw(::com::sun::star::sdbc::SQLException); -+ virtual void getNextParameter(::rtl::OUString &rParameter) const throw(::com::sun::star::sdbc::SQLException); -+ virtual ~KabPreparedStatement(); -+ -+ public: -+ DECLARE_SERVICE_INFO(); -+ KabPreparedStatement(KabConnection* _pConnection, const ::rtl::OUString& sql); -+ -+ // OComponentHelper -+ virtual void SAL_CALL disposing(); -+ -+ // XPreparedStatement -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL executeQuery( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL executeUpdate( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL execute( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XParameters -+ virtual void SAL_CALL setNull( sal_Int32 parameterIndex, sal_Int32 sqlType ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& typeName ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setBoolean( sal_Int32 parameterIndex, sal_Bool x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setByte( sal_Int32 parameterIndex, sal_Int8 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setShort( sal_Int32 parameterIndex, sal_Int16 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setInt( sal_Int32 parameterIndex, sal_Int32 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setLong( sal_Int32 parameterIndex, sal_Int64 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setFloat( sal_Int32 parameterIndex, float x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setDouble( sal_Int32 parameterIndex, double x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setString( sal_Int32 parameterIndex, const ::rtl::OUString& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setBytes( sal_Int32 parameterIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setDate( sal_Int32 parameterIndex, const ::com::sun::star::util::Date& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setTime( sal_Int32 parameterIndex, const ::com::sun::star::util::Time& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setTimestamp( sal_Int32 parameterIndex, const ::com::sun::star::util::DateTime& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setBinaryStream( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setCharacterStream( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setObject( sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setObjectWithInfo( sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setRef( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setBlob( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setClob( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setArray( sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL clearParameters( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XCloseable -+ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XResultSetMetaDataSupplier -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KResultSet.cxx b/connectivity/source/drivers/tdeab/KResultSet.cxx -new file mode 100644 -index 0000000..a0d6b07 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KResultSet.cxx -@@ -0,0 +1,991 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KResultSet.hxx" -+#include "KResultSetMetaData.hxx" -+#include "KConnection.hxx" -+#include "kcondition.hxx" -+#include "korder.hxx" -+#include "kfields.hxx" -+#include -+#include -+#include "TConnection.hxx" -+#include -+#include "resource/tdeab_res.hrc" -+#include "resource/sharedresources.hxx" -+ -+using namespace connectivity::kab; -+using namespace cppu; -+using namespace com::sun::star::uno; -+using namespace com::sun::star::lang; -+using namespace com::sun::star::beans; -+using namespace com::sun::star::sdbc; -+using namespace com::sun::star::sdbcx; -+using namespace com::sun::star::io; -+using namespace com::sun::star::util; -+ -+IMPLEMENT_SERVICE_INFO(KabResultSet, "com.sun.star.sdbc.drivers.KabResultSet", "com.sun.star.sdbc.ResultSet"); -+// ------------------------------------------------------------------------- -+KabResultSet::KabResultSet(KabCommonStatement* pStmt) -+ : KabResultSet_BASE(m_aMutex), -+ OPropertySetHelper(KabResultSet_BASE::rBHelper), -+ m_xStatement(pStmt), -+ m_xMetaData(NULL), -+ m_aKabAddressees(), -+ m_nRowPos(-1), -+ m_bWasNull(sal_True) -+{ -+} -+// ------------------------------------------------------------------------- -+KabResultSet::~KabResultSet() -+{ -+} -+// ------------------------------------------------------------------------- -+void KabResultSet::allKabAddressees() -+{ -+ KabConnection* pConnection = static_cast< KabConnection *>(m_xStatement->getConnection().get()); -+ KABC::AddressBook* pAddressBook = pConnection->getAddressBook(); -+ -+ m_aKabAddressees = pAddressBook->allAddressees(); -+} -+// ------------------------------------------------------------------------- -+void KabResultSet::someKabAddressees(const KabCondition *pCondition) -+{ -+ KabConnection* pConnection = static_cast< KabConnection *>(m_xStatement->getConnection().get()); -+ KABC::AddressBook* pAddressBook = pConnection->getAddressBook(); -+ -+ KABC::AddressBook::Iterator iterator; -+ -+ for (iterator = pAddressBook->begin(); -+ iterator != pAddressBook->end(); -+ ++iterator) -+ { -+ if (pCondition->eval(*iterator)) -+ m_aKabAddressees.push_back(*iterator); -+ } -+} -+// ------------------------------------------------------------------------- -+void KabResultSet::sortKabAddressees(const KabOrder *pOrder) -+{ -+ // We do not use class KAddresseeList, which has a sorting algorithm in it, because -+ // it uses templates. It would expand to more or less the same code as the one -+ // which follows, but it would need not be called in a much less convenient way. -+ -+ KABC::Addressee::List::Iterator -+ begin = m_aKabAddressees.begin(), -+ end = m_aKabAddressees.end(), -+ iterator; -+ -+ // Bubble sort. Feel free to implement a better algorithm. -+ while (begin != end) -+ { -+ end--; -+ for (iterator = begin; iterator != end; ++iterator) -+ { -+ if (pOrder->compare(*iterator, *end) > 0) -+ qSwap(*iterator, *end); -+ } -+ } -+} -+// ------------------------------------------------------------------------- -+void KabResultSet::disposing() -+{ -+ OPropertySetHelper::disposing(); -+ -+ ::osl::MutexGuard aGuard(m_aMutex); -+ -+m_xStatement.clear(); -+m_xMetaData.clear(); -+} -+// ------------------------------------------------------------------------- -+Any SAL_CALL KabResultSet::queryInterface(const Type & rType) throw(RuntimeException) -+{ -+ Any aRet = OPropertySetHelper::queryInterface(rType); -+ if (!aRet.hasValue()) -+ aRet = KabResultSet_BASE::queryInterface(rType); -+ return aRet; -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::acquire() throw() -+{ -+ KabResultSet_BASE::acquire(); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::release() throw() -+{ -+ KabResultSet_BASE::release(); -+} -+// ------------------------------------------------------------------------- -+Sequence< Type > SAL_CALL KabResultSet::getTypes() throw(RuntimeException) -+{ -+ OTypeCollection aTypes( -+ ::getCppuType( (const Reference< ::com::sun::star::beans::XMultiPropertySet >*) 0), -+ ::getCppuType( (const Reference< ::com::sun::star::beans::XFastPropertySet >*) 0), -+ ::getCppuType( (const Reference< ::com::sun::star::beans::XPropertySet >*) 0)); -+ -+ return comphelper::concatSequences(aTypes.getTypes(), KabResultSet_BASE::getTypes()); -+} -+// ------------------------------------------------------------------------- -+::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL KabResultSet::getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException) -+{ -+ return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSet::findColumn(const ::rtl::OUString& columnName) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ // find the first column with the name columnName -+ Reference< XResultSetMetaData > xMeta = getMetaData(); -+ sal_Int32 nLen = xMeta->getColumnCount(); -+ -+ for (sal_Int32 i = 1; i <= nLen; ++i) -+ if (xMeta->isCaseSensitive(i) ? -+ columnName == xMeta->getColumnName(i) : -+ columnName.equalsIgnoreAsciiCase(xMeta->getColumnName(i))) -+ return i; -+ -+ ::connectivity::SharedResources aResources; -+ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution( -+ STR_INVALID_COLUMNNAME, -+ "$columnname$",columnName -+ ) ); -+ ::dbtools::throwGenericSQLException(sError,NULL); -+ -+ // Unreachable: -+ OSL_ASSERT(false); -+ return 0; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabResultSet::getString(sal_Int32 columnIndex) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ ::rtl::OUString aRet; -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -+ -+ if (m_nRowPos != -1 && m_nRowPos != nAddressees && m_xMetaData.is()) -+ { -+ sal_Int32 nFieldNumber = m_xMetaData->fieldAtColumn(columnIndex); -+ TQString aQtName; -+ -+ switch (nFieldNumber) -+ { -+ case KAB_FIELD_REVISION: -+// trigger an exception here -+m_bWasNull = true; -+return aRet; -+ default: -+ aQtName = aFields[nFieldNumber - KAB_DATA_FIELDS]->value(m_aKabAddressees[m_nRowPos]); -+ } -+// TDE address book currently does not use NULL values. -+// But it might do it someday -+ if (!aQtName.isNull()) -+ { -+ m_bWasNull = false; -+ aRet = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -+ return aRet; -+ } -+ } -+// Trigger an exception ? -+ m_bWasNull = true; -+ return aRet; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::getBoolean(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getBoolean", NULL); -+ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Int8 SAL_CALL KabResultSet::getByte(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getByte", NULL); -+ -+ sal_Int8 nRet = 0; -+ return nRet; -+} -+// ------------------------------------------------------------------------- -+sal_Int16 SAL_CALL KabResultSet::getShort(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getShort", NULL); -+ -+ sal_Int16 nRet = 0; -+ return nRet; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSet::getInt(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getInt", NULL); -+ -+ sal_Int32 nRet = 0; -+ return nRet; -+} -+// ------------------------------------------------------------------------- -+sal_Int64 SAL_CALL KabResultSet::getLong(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getLong", NULL); -+ -+ return sal_Int64(); -+} -+// ------------------------------------------------------------------------- -+float SAL_CALL KabResultSet::getFloat(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getFloat", NULL); -+ -+ float nVal(0); -+ return nVal; -+} -+// ------------------------------------------------------------------------- -+double SAL_CALL KabResultSet::getDouble(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getDouble", NULL); -+ -+ double nRet = 0; -+ return nRet; -+} -+// ------------------------------------------------------------------------- -+Sequence< sal_Int8 > SAL_CALL KabResultSet::getBytes(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("", NULL); -+ -+ return Sequence< sal_Int8 >(); -+} -+// ------------------------------------------------------------------------- -+Date SAL_CALL KabResultSet::getDate(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getDate", NULL); -+ -+ Date aRet; -+ return aRet; -+} -+// ------------------------------------------------------------------------- -+Time SAL_CALL KabResultSet::getTime(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getTime", NULL); -+ -+ Time nRet; -+ return nRet; -+} -+// ------------------------------------------------------------------------- -+DateTime SAL_CALL KabResultSet::getTimestamp(sal_Int32 columnIndex) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ DateTime nRet; -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ -+ if (m_nRowPos != -1 && m_nRowPos != nAddressees && m_xMetaData.is()) -+ { -+ KabResultSetMetaData *pMeta = static_cast(m_xMetaData.get()); -+ sal_Int32 nFieldNumber = pMeta->fieldAtColumn(columnIndex); -+ -+ if (nFieldNumber == KAB_FIELD_REVISION) -+ { -+ TQDateTime nRevision(m_aKabAddressees[m_nRowPos].revision()); -+ -+ if (!nRevision.isNull()) -+ { -+ m_bWasNull = false; -+ nRet.Year = nRevision.date().year(); -+ nRet.Month = nRevision.date().month(); -+ nRet.Day = nRevision.date().day(); -+ nRet.Hours = nRevision.time().hour(); -+ nRet.Minutes = nRevision.time().minute(); -+ nRet.Seconds = nRevision.time().second(); -+ nRet.HundredthSeconds = nRevision.time().msec() / 10; -+ return nRet; -+ } -+ } -+ else { -+ ; -+ } -+// trigger an exception here -+ } -+// Trigger an exception ? -+ m_bWasNull = true; -+ return nRet; -+} -+// ------------------------------------------------------------------------- -+Reference< XInputStream > SAL_CALL KabResultSet::getBinaryStream(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getBinaryStream", NULL); -+ -+ return NULL; -+} -+// ------------------------------------------------------------------------- -+Reference< XInputStream > SAL_CALL KabResultSet::getCharacterStream(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getCharacterStream", NULL); -+ -+ return NULL; -+} -+// ------------------------------------------------------------------------- -+Any SAL_CALL KabResultSet::getObject(sal_Int32, const Reference< ::com::sun::star::container::XNameAccess >&) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getObject", NULL); -+ -+ return Any(); -+} -+// ------------------------------------------------------------------------- -+Reference< XRef > SAL_CALL KabResultSet::getRef(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getRef", NULL); -+ -+ return NULL; -+} -+// ------------------------------------------------------------------------- -+Reference< XBlob > SAL_CALL KabResultSet::getBlob(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getBlob", NULL); -+ -+ return NULL; -+} -+// ------------------------------------------------------------------------- -+Reference< XClob > SAL_CALL KabResultSet::getClob(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getClob", NULL); -+ -+ return NULL; -+} -+// ------------------------------------------------------------------------- -+Reference< XArray > SAL_CALL KabResultSet::getArray(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+::dbtools::throwFunctionNotSupportedException("getArray", NULL); -+ -+ return NULL; -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSetMetaData > SAL_CALL KabResultSet::getMetaData() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ if (!m_xMetaData.is()) -+ m_xMetaData = new KabResultSetMetaData(m_xStatement->getOwnConnection()); -+ -+ Reference< XResultSetMetaData > xMetaData = m_xMetaData.get(); -+ return xMetaData; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::isBeforeFirst() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ if (m_nRowPos == -1) -+ return sal_True; -+ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::isAfterLast() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ if (m_nRowPos == nAddressees) -+ return sal_True; -+ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::isFirst() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ if (m_nRowPos == 0) -+ return sal_True; -+ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::isLast() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ if (m_nRowPos == nAddressees - 1) -+ return sal_True; -+ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::beforeFirst() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ // move before the first row -+ m_nRowPos = -1; -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::afterLast() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ // move after the last row -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ m_nRowPos = nAddressees; -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::close() throw(SQLException, RuntimeException) -+{ -+ { -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ } -+ dispose(); -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::first() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ if (nAddressees == 0) -+ return sal_False; -+ -+ m_nRowPos = 0; -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::last() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ if (nAddressees == 0) -+ return sal_False; -+ -+ m_nRowPos = nAddressees - 1; -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSet::getRow() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ return m_nRowPos; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::absolute(sal_Int32 row) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ if (row <= -1 || -+ row >= nAddressees) -+ return sal_False; -+ -+ m_nRowPos = row; -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::relative(sal_Int32 row) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ return absolute(m_nRowPos + row); -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::next() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ return absolute(m_nRowPos + 1); -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::previous() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ return absolute(m_nRowPos - 1); -+} -+// ------------------------------------------------------------------------- -+Reference< XInterface > SAL_CALL KabResultSet::getStatement() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ Reference< XStatement > xStatement = m_xStatement.get(); -+ return xStatement; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::rowDeleted() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::rowInserted() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::rowUpdated() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::wasNull() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ return m_bWasNull; -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::cancel() throw(RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::clearWarnings() throw(SQLException, RuntimeException) -+{ -+} -+// ------------------------------------------------------------------------- -+Any SAL_CALL KabResultSet::getWarnings() throw(SQLException, RuntimeException) -+{ -+ return Any(); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::insertRow() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ // you only have to implement this if you want to insert new rows -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateRow() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ // only when you allow updates -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::deleteRow() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::cancelRowUpdates() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::moveToInsertRow() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ // only when you allow inserts -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::moveToCurrentRow() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateNull(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateBoolean(sal_Int32, sal_Bool) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateByte(sal_Int32, sal_Int8) throw(SQLException, RuntimeException) -+{ -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateShort(sal_Int32, sal_Int16) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateInt(sal_Int32, sal_Int32) throw(SQLException, RuntimeException) -+{ -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateLong(sal_Int32, sal_Int64) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ----------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateFloat(sal_Int32, float) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateDouble(sal_Int32, double) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateString(sal_Int32, const ::rtl::OUString&) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateBytes(sal_Int32, const Sequence< sal_Int8 >&) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateDate(sal_Int32, const Date&) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateTime(sal_Int32, const Time&) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateTimestamp(sal_Int32, const DateTime&) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateBinaryStream(sal_Int32, const Reference< XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateCharacterStream(sal_Int32, const Reference< XInputStream >&, sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::refreshRow() throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateObject(sal_Int32, const Any&) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabResultSet::updateNumericObject(sal_Int32, const Any&, sal_Int32) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+} -+// ------------------------------------------------------------------------- -+// XRowLocate -+Any SAL_CALL KabResultSet::getBookmark() throw( SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ -+ if (m_nRowPos != -1 && m_nRowPos != nAddressees) -+ { -+ TQString aQtName = m_aKabAddressees[m_nRowPos].uid(); -+ ::rtl::OUString sUniqueIdentifier = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -+ return makeAny(sUniqueIdentifier); -+ } -+ return Any(); -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::moveToBookmark(const Any& bookmark) throw( SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ ::rtl::OUString sBookmark = comphelper::getString(bookmark); -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ -+ for (sal_Int32 nRow = 0; nRow < nAddressees; nRow++) -+ { -+ TQString aQtName = m_aKabAddressees[nRow].uid(); -+ ::rtl::OUString sUniqueIdentifier = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -+ -+ if (sUniqueIdentifier == sBookmark) -+ { -+ m_nRowPos = nRow; -+ return sal_True; -+ } -+ } -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::moveRelativeToBookmark(const Any& bookmark, sal_Int32 rows) throw( SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ sal_Int32 nRowSave = m_nRowPos; -+ -+ if (moveToBookmark(bookmark)) -+ { -+ sal_Int32 nAddressees = m_aKabAddressees.size(); -+ -+ m_nRowPos += rows; -+ -+ if (-1 < m_nRowPos && m_nRowPos < nAddressees) -+ return sal_True; -+ } -+ -+ m_nRowPos = nRowSave; -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSet::compareBookmarks(const Any& firstItem, const Any& secondItem) throw( SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ ::rtl::OUString sFirst = comphelper::getString(firstItem); -+ ::rtl::OUString sSecond = comphelper::getString(secondItem); -+ -+ if (sFirst < sSecond) -+ return CompareBookmark::LESS; -+ if (sFirst > sSecond) -+ return CompareBookmark::GREATER; -+ return CompareBookmark::EQUAL; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSet::hasOrderedBookmarks() throw( SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSet::hashBookmark(const Any& bookmark) throw( SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ ::rtl::OUString sBookmark = comphelper::getString(bookmark); -+ -+ return sBookmark.hashCode(); -+} -+// ------------------------------------------------------------------------- -+// XDeleteRows -+Sequence< sal_Int32 > SAL_CALL KabResultSet::deleteRows(const Sequence< Any >&) throw( SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed); -+ -+ return Sequence< sal_Int32 >(); -+} -+// ------------------------------------------------------------------------- -+IPropertyArrayHelper* KabResultSet::createArrayHelper() const -+{ -+ Sequence< Property > aProps(6); -+ Property* pProperties = aProps.getArray(); -+ sal_Int32 nPos = 0; -+ DECL_PROP1IMPL(CURSORNAME, ::rtl::OUString) PropertyAttribute::READONLY); -+ DECL_PROP0(FETCHDIRECTION, sal_Int32); -+ DECL_PROP0(FETCHSIZE, sal_Int32); -+ DECL_BOOL_PROP1IMPL(ISBOOKMARKABLE) PropertyAttribute::READONLY); -+ DECL_PROP1IMPL(RESULTSETCONCURRENCY,sal_Int32) PropertyAttribute::READONLY); -+ DECL_PROP1IMPL(RESULTSETTYPE, sal_Int32) PropertyAttribute::READONLY); -+ -+ return new OPropertyArrayHelper(aProps); -+} -+// ------------------------------------------------------------------------- -+IPropertyArrayHelper & KabResultSet::getInfoHelper() -+{ -+ return *static_cast(this)->getArrayHelper(); -+} -+// ------------------------------------------------------------------------- -+sal_Bool KabResultSet::convertFastPropertyValue( -+ Any &, -+ Any &, -+ sal_Int32 nHandle, -+ const Any& ) -+ throw (::com::sun::star::lang::IllegalArgumentException) -+{ -+ switch (nHandle) -+ { -+ case PROPERTY_ID_ISBOOKMARKABLE: -+ case PROPERTY_ID_CURSORNAME: -+ case PROPERTY_ID_RESULTSETCONCURRENCY: -+ case PROPERTY_ID_RESULTSETTYPE: -+ throw ::com::sun::star::lang::IllegalArgumentException(); -+ break; -+ case PROPERTY_ID_FETCHDIRECTION: -+ case PROPERTY_ID_FETCHSIZE: -+ default: -+ ; -+ } -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+void KabResultSet::setFastPropertyValue_NoBroadcast( -+ sal_Int32 nHandle, -+ const Any& ) -+ throw (Exception) -+{ -+ switch (nHandle) -+ { -+ case PROPERTY_ID_ISBOOKMARKABLE: -+ case PROPERTY_ID_CURSORNAME: -+ case PROPERTY_ID_RESULTSETCONCURRENCY: -+ case PROPERTY_ID_RESULTSETTYPE: -+ throw Exception(); -+ break; -+ case PROPERTY_ID_FETCHDIRECTION: -+ break; -+ case PROPERTY_ID_FETCHSIZE: -+ break; -+ default: -+ ; -+ } -+} -+// ------------------------------------------------------------------------- -+void KabResultSet::getFastPropertyValue( -+ Any& _rValue, -+ sal_Int32 nHandle) const -+{ -+ switch (nHandle) -+ { -+ case PROPERTY_ID_ISBOOKMARKABLE: -+ _rValue <<= (sal_Bool)sal_False; -+ break; -+ case PROPERTY_ID_CURSORNAME: -+ case PROPERTY_ID_RESULTSETCONCURRENCY: -+ case PROPERTY_ID_RESULTSETTYPE: -+ case PROPERTY_ID_FETCHDIRECTION: -+ case PROPERTY_ID_FETCHSIZE: -+ ; -+ } -+} -+// ----------------------------------------------------------------------------- -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KResultSet.hxx b/connectivity/source/drivers/tdeab/KResultSet.hxx -new file mode 100644 -index 0000000..d68f676 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KResultSet.hxx -@@ -0,0 +1,228 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_RESULTSET_HXX_ -+#define _CONNECTIVITY_KAB_RESULTSET_HXX_ -+ -+#include "KStatement.hxx" -+#include "KResultSetMetaData.hxx" -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ /* -+ ** KabResultSet -+ */ -+ typedef ::cppu::WeakComponentImplHelper12< ::com::sun::star::sdbc::XResultSet, -+ ::com::sun::star::sdbc::XRow, -+ ::com::sun::star::sdbc::XResultSetMetaDataSupplier, -+ ::com::sun::star::util::XCancellable, -+ ::com::sun::star::sdbc::XWarningsSupplier, -+ ::com::sun::star::sdbc::XResultSetUpdate, -+ ::com::sun::star::sdbc::XRowUpdate, -+ ::com::sun::star::sdbcx::XRowLocate, -+ ::com::sun::star::sdbcx::XDeleteRows, -+ ::com::sun::star::sdbc::XCloseable, -+ ::com::sun::star::sdbc::XColumnLocate, -+ ::com::sun::star::lang::XServiceInfo> KabResultSet_BASE; -+ -+ class KabResultSet : public comphelper::OBaseMutex, -+ public KabResultSet_BASE, -+ public ::cppu::OPropertySetHelper, -+ public comphelper::OPropertyArrayUsageHelper -+ { -+ protected: -+ ::rtl::Reference< KabCommonStatement > m_xStatement; // the statement that has created this result set -+ ::rtl::Reference< KabResultSetMetaData > m_xMetaData; // the description of the columns in this result set -+ ::KABC::Addressee::List m_aKabAddressees; // address book entries matching the query -+ sal_Int32 m_nRowPos; // the current row within the result set -+ sal_Bool m_bWasNull; // last entry retrieved from this result set was NULL -+ -+ // OPropertyArrayUsageHelper -+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const; -+ -+ // OPropertySetHelper -+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper(); -+ -+ virtual sal_Bool SAL_CALL convertFastPropertyValue( -+ ::com::sun::star::uno::Any & rConvertedValue, -+ ::com::sun::star::uno::Any & rOldValue, -+ sal_Int32 nHandle, -+ const ::com::sun::star::uno::Any& rValue) -+ throw (::com::sun::star::lang::IllegalArgumentException); -+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( -+ sal_Int32 nHandle, -+ const ::com::sun::star::uno::Any& rValue) -+ throw (::com::sun::star::uno::Exception); -+ virtual void SAL_CALL getFastPropertyValue( -+ ::com::sun::star::uno::Any& rValue, -+ sal_Int32 nHandle) const; -+ -+ // you can't delete objects of this type -+ virtual ~KabResultSet(); -+ -+ public: -+ DECLARE_SERVICE_INFO(); -+ -+ KabResultSet(KabCommonStatement *pStmt); -+ -+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > operator *() -+ { -+ return ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >(*(KabResultSet_BASE*) this); -+ } -+ -+ void allKabAddressees(); -+ void someKabAddressees(const class KabCondition *pCondition); -+ void sortKabAddressees(const class KabOrder *pOrder); -+ -+ // ::cppu::OComponentHelper -+ virtual void SAL_CALL disposing(void); -+ -+ // XInterface -+ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL acquire() throw(); -+ virtual void SAL_CALL release() throw(); -+ -+ // XTypeProvider -+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); -+ -+ // XPropertySet -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); -+ -+ // XResultSet -+ virtual sal_Bool SAL_CALL isBeforeFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isAfterLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL beforeFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL afterLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL first( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL last( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL next( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL previous( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL refreshRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL rowUpdated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL rowInserted( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL rowDeleted( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XRow -+ virtual sal_Bool SAL_CALL wasNull( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getString( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XResultSetMetaDataSupplier -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XCancellable -+ virtual void SAL_CALL cancel( ) throw(::com::sun::star::uno::RuntimeException); -+ -+ // XCloseable -+ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XWarningsSupplier -+ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XResultSetUpdate -+ virtual void SAL_CALL insertRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL deleteRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL cancelRowUpdates( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL moveToInsertRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL moveToCurrentRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ // XRowUpdate -+ virtual void SAL_CALL updateNull( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateBoolean( sal_Int32 columnIndex, sal_Bool x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateByte( sal_Int32 columnIndex, sal_Int8 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateShort( sal_Int32 columnIndex, sal_Int16 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateInt( sal_Int32 columnIndex, sal_Int32 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateLong( sal_Int32 columnIndex, sal_Int64 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateFloat( sal_Int32 columnIndex, float x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateDouble( sal_Int32 columnIndex, double x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateString( sal_Int32 columnIndex, const ::rtl::OUString& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateBytes( sal_Int32 columnIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateDate( sal_Int32 columnIndex, const ::com::sun::star::util::Date& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateTime( sal_Int32 columnIndex, const ::com::sun::star::util::Time& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateTimestamp( sal_Int32 columnIndex, const ::com::sun::star::util::DateTime& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateBinaryStream( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateCharacterStream( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Any& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL updateNumericObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Any& x, sal_Int32 scale ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XColumnLocate -+ virtual sal_Int32 SAL_CALL findColumn( const ::rtl::OUString& columnName ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XRowLocate -+ virtual ::com::sun::star::uno::Any SAL_CALL getBookmark( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL moveToBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL moveRelativeToBookmark( const ::com::sun::star::uno::Any& bookmark, sal_Int32 rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL compareBookmarks( const ::com::sun::star::uno::Any& firstItem, const ::com::sun::star::uno::Any& secondItem ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL hasOrderedBookmarks( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL hashBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XDeleteRows -+ virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL deleteRows( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_RESULTSET_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KResultSetMetaData.cxx b/connectivity/source/drivers/tdeab/KResultSetMetaData.cxx -new file mode 100644 -index 0000000..08dfb05 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KResultSetMetaData.cxx -@@ -0,0 +1,191 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KResultSetMetaData.hxx" -+#include "kfields.hxx" -+#include "KDatabaseMetaData.hxx" -+#include -+ -+using namespace connectivity::kab; -+using namespace com::sun::star::uno; -+using namespace com::sun::star::lang; -+using namespace com::sun::star::sdbc; -+ -+KabResultSetMetaData::KabResultSetMetaData(KabConnection* _pConnection) -+ : m_pConnection(_pConnection), -+ m_aKabFields() -+{ -+} -+// ------------------------------------------------------------------------- -+KabResultSetMetaData::~KabResultSetMetaData() -+{ -+} -+// ------------------------------------------------------------------------- -+void KabResultSetMetaData::setKabFields(const ::rtl::Reference &xColumns) throw(SQLException) -+{ -+ OSQLColumns::Vector::const_iterator aIter; -+ static const ::rtl::OUString aName(::rtl::OUString::createFromAscii("Name")); -+ -+ for (aIter = xColumns->get().begin(); aIter != xColumns->get().end(); ++aIter) -+ { -+ ::rtl::OUString aFieldName; -+ sal_uInt32 nFieldNumber; -+ -+ (*aIter)->getPropertyValue(aName) >>= aFieldName; -+ nFieldNumber = findKabField(aFieldName); -+ m_aKabFields.push_back(nFieldNumber); -+ } -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSetMetaData::getColumnDisplaySize(sal_Int32 column) throw(SQLException, RuntimeException) -+{ -+ return m_aKabFields[column - 1] < KAB_DATA_FIELDS? 20: 50; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSetMetaData::getColumnType(sal_Int32 column) throw(SQLException, RuntimeException) -+{ -+ return m_aKabFields[column - 1] == KAB_FIELD_REVISION? DataType::TIMESTAMP: DataType::CHAR; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSetMetaData::getColumnCount() throw(SQLException, RuntimeException) -+{ -+ return m_aKabFields.size(); -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSetMetaData::isCaseSensitive(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabResultSetMetaData::getSchemaName(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return ::rtl::OUString(); -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnName(sal_Int32 column) throw(SQLException, RuntimeException) -+{ -+ sal_uInt32 nFieldNumber = m_aKabFields[column - 1]; -+ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -+ TQString aQtName; -+ -+ switch (nFieldNumber) -+ { -+ case KAB_FIELD_REVISION: -+ aQtName = KABC::Addressee::revisionLabel(); -+ break; -+ default: -+ aQtName = aFields[nFieldNumber - KAB_DATA_FIELDS]->label(); -+ } -+ ::rtl::OUString aName((const sal_Unicode *) aQtName.ucs2()); -+ -+ return aName; -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabResultSetMetaData::getTableName(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return KabDatabaseMetaData::getAddressBookTableName(); -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabResultSetMetaData::getCatalogName(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return ::rtl::OUString(); -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnTypeName(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return ::rtl::OUString(); -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnLabel(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return ::rtl::OUString(); -+} -+// ------------------------------------------------------------------------- -+::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnServiceName(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return ::rtl::OUString(); -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSetMetaData::isCurrency(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSetMetaData::isAutoIncrement(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSetMetaData::isSigned(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSetMetaData::getPrecision(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return 0; -+} -+// ----------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSetMetaData::getScale(sal_Int32) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) -+{ -+ return 0; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabResultSetMetaData::isNullable(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return (sal_Int32) sal_True; -+// TDE address book currently does not use NULL values. -+// But it might do it someday -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSetMetaData::isSearchable(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSetMetaData::isReadOnly(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return sal_True; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSetMetaData::isDefinitelyWritable(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabResultSetMetaData::isWritable(sal_Int32) throw(SQLException, RuntimeException) -+{ -+ return sal_False; -+} -+// ------------------------------------------------------------------------- -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KResultSetMetaData.hxx b/connectivity/source/drivers/tdeab/KResultSetMetaData.hxx -new file mode 100644 -index 0000000..8a04fc0 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KResultSetMetaData.hxx -@@ -0,0 +1,95 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ -+#define _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ -+ -+#include "KConnection.hxx" -+#include -+#include -+#include -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ /* -+ ** KabResultSetMetaData -+ */ -+ typedef ::cppu::WeakImplHelper1< ::com::sun::star::sdbc::XResultSetMetaData> KabResultSetMetaData_BASE; -+ -+ class KabResultSetMetaData : public KabResultSetMetaData_BASE -+ { -+ KabConnection* m_pConnection; -+ ::std::vector m_aKabFields; // for each selected column, contains the number -+ // of the corresponding KAddressBook field -+ -+ protected: -+ virtual ~KabResultSetMetaData(); -+ -+ public: -+ KabResultSetMetaData(KabConnection* _pConnection); -+ -+ // avoid ambigous cast error from the compiler -+ inline operator ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > () throw() -+ { return this; } -+ -+ void setKabFields( -+ const ::rtl::Reference &xColumns) throw(::com::sun::star::sdbc::SQLException); -+ inline sal_uInt32 fieldAtColumn(sal_Int32 columnIndex) const -+ { return m_aKabFields[columnIndex - 1]; } -+ -+ virtual sal_Int32 SAL_CALL getColumnCount( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isAutoIncrement( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isCaseSensitive( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isSearchable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isCurrency( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL isNullable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isSigned( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getColumnDisplaySize( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getColumnLabel( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getColumnName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getSchemaName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getPrecision( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getScale( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getTableName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getCatalogName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getColumnType( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getColumnTypeName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isReadOnly( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isWritable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL isDefinitelyWritable( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getColumnServiceName( sal_Int32 column ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KServices.cxx b/connectivity/source/drivers/tdeab/KServices.cxx -new file mode 100644 -index 0000000..a82b756 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KServices.cxx -@@ -0,0 +1,180 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KDriver.hxx" -+#include -+#include -+ -+using namespace connectivity::kab; -+using ::rtl::OUString; -+using ::com::sun::star::uno::Reference; -+using ::com::sun::star::uno::Sequence; -+using ::com::sun::star::registry::XRegistryKey; -+using ::com::sun::star::lang::XSingleServiceFactory; -+using ::com::sun::star::lang::XMultiServiceFactory; -+ -+typedef Reference< XSingleServiceFactory > (SAL_CALL *createFactoryFunc) -+ ( -+ const Reference< XMultiServiceFactory > & rServiceManager, -+ const OUString & rComponentName, -+ ::cppu::ComponentInstantiation pCreateFunction, -+ const Sequence< OUString > & rServiceNames, -+ rtl_ModuleCount* _pTemp -+ ); -+ -+//*************************************************************************************** -+// -+// The following C Api must be provided! -+// It consists in three functions that must be exported by the module -+// -+ -+//--------------------------------------------------------------------------------------- -+void REGISTER_PROVIDER( -+ const OUString& aServiceImplName, -+ const Sequence< OUString>& Services, -+ const Reference< ::com::sun::star::registry::XRegistryKey > & xKey) -+{ -+ OUString aMainKeyName; -+ aMainKeyName = OUString::createFromAscii("/"); -+ aMainKeyName += aServiceImplName; -+ aMainKeyName += OUString::createFromAscii("/UNO/SERVICES"); -+ -+ Reference< ::com::sun::star::registry::XRegistryKey > xNewKey( xKey->createKey(aMainKeyName) ); -+ OSL_ENSURE(xNewKey.is(), "KAB::component_writeInfo : could not create a registry key !"); -+ -+ for (sal_Int32 i=0; icreateKey(Services[i]); -+} -+ -+ -+//--------------------------------------------------------------------------------------- -+struct ProviderRequest -+{ -+ Reference< XSingleServiceFactory > xRet; -+ Reference< XMultiServiceFactory > const xServiceManager; -+ OUString const sImplementationName; -+ -+ ProviderRequest( -+ void* pServiceManager, -+ sal_Char const* pImplementationName -+ ) -+ : xServiceManager(reinterpret_cast(pServiceManager)) -+ , sImplementationName(OUString::createFromAscii(pImplementationName)) -+ { -+ } -+ -+ inline -+ sal_Bool CREATE_PROVIDER( -+ const OUString& Implname, -+ const Sequence< OUString > & Services, -+ ::cppu::ComponentInstantiation Factory, -+ createFactoryFunc creator -+ ) -+ { -+ if (!xRet.is() && (Implname == sImplementationName)) -+ try -+ { -+ xRet = creator( xServiceManager, sImplementationName,Factory, Services,0); -+ } -+ catch(...) -+ { -+ } -+ return xRet.is(); -+ } -+ -+ void* getProvider() const { return xRet.get(); } -+}; -+ -+//--------------------------------------------------------------------------------------- -+ -+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment( -+ const sal_Char **ppEnvTypeName, -+ uno_Environment ** -+ ) -+{ -+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -+} -+ -+//--------------------------------------------------------------------------------------- -+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( -+ void*, -+ void* pRegistryKey -+ ) -+{ -+ if (pRegistryKey) -+ try -+ { -+ Reference< ::com::sun::star::registry::XRegistryKey > xKey(reinterpret_cast< ::com::sun::star::registry::XRegistryKey*>(pRegistryKey)); -+ -+ REGISTER_PROVIDER( -+ KabDriver::getImplementationName_Static(), -+ KabDriver::getSupportedServiceNames_Static(), xKey); -+ -+ return sal_True; -+ } -+ catch (::com::sun::star::registry::InvalidRegistryException& ) -+ { -+ OSL_ENSURE(sal_False, "KAB::component_writeInfo : could not create a registry key ! ## InvalidRegistryException !"); -+ } -+ -+ return sal_False; -+} -+ -+//--------------------------------------------------------------------------------------- -+extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory( -+ const sal_Char* pImplementationName, -+ void* pServiceManager, -+ void*) -+{ -+ void* pRet = 0; -+ if (pServiceManager) -+ { -+ ProviderRequest aReq(pServiceManager,pImplementationName); -+ -+ aReq.CREATE_PROVIDER( -+ KabDriver::getImplementationName_Static(), -+ KabDriver::getSupportedServiceNames_Static(), -+ &KabDriver::Create, -+ ::cppu::createSingleFactory) -+ ; -+ -+ if (aReq.xRet.is()) -+ aReq.xRet->acquire(); -+ -+ pRet = aReq.getProvider(); -+ } -+ -+ return pRet; -+}; -+ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KStatement.cxx b/connectivity/source/drivers/tdeab/KStatement.cxx -new file mode 100644 -index 0000000..1301349 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KStatement.cxx -@@ -0,0 +1,588 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KStatement.hxx" -+#include "KConnection.hxx" -+#include "KDriver.hxx" -+#include "KResultSet.hxx" -+#include "KResultSetMetaData.hxx" -+#include "kcondition.hxx" -+#include "korder.hxx" -+#include "TConnection.hxx" -+#include -+#include "resource/tdeab_res.hrc" -+#include "resource/sharedresources.hxx" -+ -+ -+#if OSL_DEBUG_LEVEL > 0 -+# define OUtoCStr( x ) ( ::rtl::OUStringToOString ( (x), RTL_TEXTENCODING_ASCII_US).getStr()) -+#else /* OSL_DEBUG_LEVEL */ -+# define OUtoCStr( x ) ("dummy") -+#endif /* OSL_DEBUG_LEVEL */ -+ -+using namespace connectivity::kab; -+using namespace com::sun::star::uno; -+using namespace com::sun::star::lang; -+using namespace com::sun::star::beans; -+using namespace com::sun::star::sdbc; -+using namespace com::sun::star::sdbcx; -+using namespace com::sun::star::container; -+using namespace com::sun::star::io; -+using namespace com::sun::star::util; -+ -+namespace -+{ -+ void lcl_throwError(sal_uInt16 _nErrorId) -+ { -+ ::connectivity::SharedResources aResources; -+ const ::rtl::OUString sError( aResources.getResourceString(_nErrorId) ); -+ ::dbtools::throwGenericSQLException(sError,NULL); -+ } -+} -+ -+IMPLEMENT_SERVICE_INFO(KabStatement, "com.sun.star.sdbc.drivers.KabStatement", "com.sun.star.sdbc.Statement"); -+//------------------------------------------------------------------------------ -+KabCommonStatement::KabCommonStatement(KabConnection* _pConnection ) -+ : KabCommonStatement_BASE(m_aMutex), -+ OPropertySetHelper(KabCommonStatement_BASE::rBHelper), -+ m_aParser(_pConnection->getDriver()->getMSFactory()), -+ m_aSQLIterator(_pConnection, _pConnection->createCatalog()->getTables(), m_aParser, NULL ), -+ m_pParseTree(NULL), -+ m_pConnection(_pConnection), -+ rBHelper(KabCommonStatement_BASE::rBHelper) -+{ -+ m_pConnection->acquire(); -+} -+// ----------------------------------------------------------------------------- -+KabCommonStatement::~KabCommonStatement() -+{ -+} -+// ----------------------------------------------------------------------------- -+void KabCommonStatement::disposing() -+{ -+ KabCommonStatement_BASE::disposing(); -+} -+// ----------------------------------------------------------------------------- -+void KabCommonStatement::resetParameters() const throw(::com::sun::star::sdbc::SQLException) -+{ -+ lcl_throwError(STR_PARA_ONLY_PREPARED); -+} -+// ----------------------------------------------------------------------------- -+void KabCommonStatement::getNextParameter(::rtl::OUString &) const throw(::com::sun::star::sdbc::SQLException) -+{ -+ lcl_throwError(STR_PARA_ONLY_PREPARED); -+} -+// ----------------------------------------------------------------------------- -+KabCondition *KabCommonStatement::analyseWhereClause(const OSQLParseNode *pParseNode) const throw(SQLException) -+{ -+ if (pParseNode->count() == 3) -+ { -+ const OSQLParseNode *pLeft = pParseNode->getChild(0), -+ *pMiddle = pParseNode->getChild(1), -+ *pRight = pParseNode->getChild(2); -+ -+ // WHERE ( ... ) ? -+ if (SQL_ISPUNCTUATION(pLeft, "(") && SQL_ISPUNCTUATION(pRight, ")")) -+ { -+ return analyseWhereClause(pMiddle); -+ } -+ else if (SQL_ISRULE(pParseNode, comparison_predicate)) -+ { -+ if (pLeft->isToken() && pRight->isToken()) -+ { -+ switch (pMiddle->getNodeType()) -+ { -+ case SQL_NODE_EQUAL: -+ // WHERE 0 = 1 -+ return new KabConditionConstant(pLeft->getTokenValue() == pRight->getTokenValue()); -+ -+ case SQL_NODE_NOTEQUAL: -+ // WHERE 0 <> 1 -+ // (might not be correct SQL... don't care, handling anyway) -+ return new KabConditionConstant(pLeft->getTokenValue() != pRight->getTokenValue()); -+ -+ default: -+ break; -+ } -+ } -+ else if (SQL_ISRULE(pLeft, column_ref)) -+ { -+ ::rtl::OUString sColumnName, -+ sTableRange; -+ -+ m_aSQLIterator.getColumnRange(pLeft, sColumnName, sTableRange); -+ -+ if (pRight->isToken() || SQL_ISRULE(pRight, parameter)) -+ { -+ ::rtl::OUString sMatchString; -+ -+ if (pRight->isToken()) // WHERE Name = 'Doe' -+ sMatchString = pRight->getTokenValue(); -+ else if (SQL_ISRULE(pRight, parameter)) // WHERE Name = ? -+ getNextParameter(sMatchString); -+ -+ switch (pMiddle->getNodeType()) -+ { -+ case SQL_NODE_EQUAL: -+ // WHERE Name = 'Smith' -+ return new KabConditionEqual(sColumnName, sMatchString); -+ -+ case SQL_NODE_NOTEQUAL: -+ // WHERE Name <> 'Jones' -+ return new KabConditionDifferent(sColumnName, sMatchString); -+ -+ default: -+ break; -+ } -+ } -+ } -+ } -+ else if (SQL_ISRULE(pParseNode, search_condition)) -+ { -+ if (SQL_ISTOKEN(pMiddle, OR)) -+ { -+ // WHERE Name = 'Smith' OR Name = 'Jones' -+ return new KabConditionOr( -+ analyseWhereClause(pLeft), -+ analyseWhereClause(pRight)); -+ } -+ } -+ else if (SQL_ISRULE(pParseNode, boolean_term)) -+ { -+ if (SQL_ISTOKEN(pMiddle, AND)) -+ { -+ // WHERE Name = 'Smith' AND "Given Name" = 'Peter' -+ return new KabConditionAnd( -+ analyseWhereClause(pLeft), -+ analyseWhereClause(pRight)); -+ } -+ } -+ } -+ else if (SQL_ISRULE(pParseNode, test_for_null) || SQL_ISRULE(pParseNode, like_predicate)) -+ { -+ const OSQLParseNode *pLeft = pParseNode->getChild(0); -+ const OSQLParseNode* pPart2 = pParseNode->getChild(1); -+ const OSQLParseNode *pMiddleLeft = pPart2->getChild(0), -+ *pMiddleRight = pPart2->getChild(1), -+ *pRight = pPart2->getChild(2); -+ -+ if (SQL_ISRULE(pParseNode, test_for_null)) -+ { -+ if (SQL_ISRULE(pLeft, column_ref) && -+ SQL_ISTOKEN(pMiddleLeft, IS) && -+ SQL_ISTOKEN(pRight, NULL)) -+ { -+ ::rtl::OUString sColumnName, -+ sTableRange; -+ -+ m_aSQLIterator.getColumnRange(pLeft, sColumnName, sTableRange); -+ -+ if (SQL_ISTOKEN(pMiddleRight, NOT)) -+ { -+ // WHERE "Mobile Phone" IS NOT NULL -+ return new KabConditionNotNull(sColumnName); -+ } -+ else -+ { -+ // WHERE "Mobile Phone" IS NULL -+ return new KabConditionNull(sColumnName); -+ } -+ } -+ } -+ else if (SQL_ISRULE(pParseNode, like_predicate)) -+ { -+ if (SQL_ISRULE(pLeft, column_ref)) -+ { -+ ::rtl::OUString sColumnName, -+ sTableRange; -+ -+ m_aSQLIterator.getColumnRange(pLeft, sColumnName, sTableRange); -+ -+ if (pMiddleRight->isToken() || SQL_ISRULE(pMiddleRight, parameter)) -+ { -+ ::rtl::OUString sMatchString; -+ -+ if (pMiddleRight->isToken()) // WHERE Name LIKE 'Sm%' -+ sMatchString = pMiddleRight->getTokenValue(); -+ else if (SQL_ISRULE(pMiddleRight, parameter)) // WHERE Name LIKE ? -+ getNextParameter(sMatchString); -+ -+ return new KabConditionSimilar(sColumnName, sMatchString); -+ } -+ } -+ } -+ } -+ -+ lcl_throwError(STR_QUERY_TOO_COMPLEX); -+ -+ // Unreachable: -+ OSL_ASSERT(false); -+ return 0; -+} -+// ----------------------------------------------------------------------------- -+KabOrder *KabCommonStatement::analyseOrderByClause(const OSQLParseNode *pParseNode) const throw(SQLException) -+{ -+ if (SQL_ISRULE(pParseNode, ordering_spec_commalist)) -+ { -+ KabComplexOrder *list = new KabComplexOrder(); -+ sal_uInt32 n = pParseNode->count(); -+ -+ // Iterate through the ordering columns -+ for (sal_uInt32 i = 0; i < n; i++) -+ { -+ list->addOrder -+ (analyseOrderByClause(pParseNode->getChild(i))); -+ } -+ -+ return list; -+ } -+ else if (SQL_ISRULE(pParseNode, ordering_spec)) -+ { -+ if (pParseNode->count() == 2) -+ { -+ OSQLParseNode* pColumnRef = pParseNode->getChild(0); -+ OSQLParseNode* pAscendingDescending = pParseNode->getChild(1); -+ -+ if (SQL_ISRULE(pColumnRef, column_ref)) -+ { -+ if (pColumnRef->count() == 3) -+ pColumnRef = pColumnRef->getChild(2); -+ -+ if (pColumnRef->count() == 1) -+ { -+ ::rtl::OUString sColumnName = -+ pColumnRef->getChild(0)->getTokenValue(); -+ sal_Bool bAscending = -+ SQL_ISTOKEN(pAscendingDescending, DESC)? -+ sal_False: -+ sal_True; -+ -+ return new KabSimpleOrder(sColumnName, bAscending); -+ } -+ } -+ } -+ } -+ lcl_throwError(STR_QUERY_TOO_COMPLEX); -+ // Unreachable: -+ OSL_ASSERT(false); -+ return 0; -+} -+//------------------------------------------------------------------------------ -+sal_Bool KabCommonStatement::isTableKnown(KabResultSet *pResult) const -+{ -+ // can handle requests like SELECT * FROM addresses addresses -+ // but cannot handle requests like SELECT * FROM addresses persons -+ if (m_aSQLIterator.getTables().size() != 1) -+ return sal_False; -+ -+ if (m_aSQLIterator.getTables().begin()->first != pResult->getMetaData()->getTableName(0)) -+ return sal_False; -+ -+ return sal_True; -+} -+//------------------------------------------------------------------------------ -+void KabCommonStatement::setKabFields(KabResultSet *pResult) const throw(SQLException) -+{ -+ ::rtl::Reference xColumns; // selected columns -+ KabResultSetMetaData *pMeta; // meta information - holds the list of KAddressBook fields -+ -+ xColumns = m_aSQLIterator.getSelectColumns(); -+ if (!xColumns.is()) -+ { -+ lcl_throwError(STR_INVALID_COLUMN_SELECTION); -+ } -+ pMeta = static_cast(pResult->getMetaData().get()); -+ pMeta->setKabFields(xColumns); -+} -+// ------------------------------------------------------------------------- -+void KabCommonStatement::selectAddressees(KabResultSet *pResult) const throw(SQLException) -+{ -+ const OSQLParseNode *pParseNode; -+ KabCondition *pCondition; -+ -+ pParseNode = m_aSQLIterator.getWhereTree(); -+ if (pParseNode != NULL) -+ { -+ if (SQL_ISRULE(pParseNode, where_clause)) -+ { -+ resetParameters(); -+ pParseNode = pParseNode->getChild(1); -+ pCondition = analyseWhereClause(pParseNode); -+ if (pCondition->isAlwaysTrue()) -+ pResult->allKabAddressees(); -+ else if (!pCondition->isAlwaysFalse()) -+ pResult->someKabAddressees(pCondition); -+ delete pCondition; -+ return; -+ } -+ } -+ -+ // no WHERE clause: get all rows -+ pResult->allKabAddressees(); -+} -+// ------------------------------------------------------------------------- -+void KabCommonStatement::sortAddressees(KabResultSet *pResult) const throw(SQLException) -+{ -+ const OSQLParseNode *pParseNode; -+ KabOrder *pOrder; -+ -+ pParseNode = m_aSQLIterator.getOrderTree(); -+ if (pParseNode != NULL) -+ { -+ if (SQL_ISRULE(pParseNode, opt_order_by_clause)) -+ { -+ pParseNode = pParseNode->getChild(2); -+ pOrder = analyseOrderByClause(pParseNode); -+ pResult->sortKabAddressees(pOrder); -+ delete pOrder; -+ } -+ } -+} -+//----------------------------------------------------------------------------- -+Any SAL_CALL KabCommonStatement::queryInterface( const Type & rType ) throw(RuntimeException) -+{ -+ Any aRet = KabCommonStatement_BASE::queryInterface(rType); -+ if (!aRet.hasValue()) -+ aRet = OPropertySetHelper::queryInterface(rType); -+ return aRet; -+} -+// ------------------------------------------------------------------------- -+Sequence< Type > SAL_CALL KabCommonStatement::getTypes( ) throw(RuntimeException) -+{ -+ ::cppu::OTypeCollection aTypes( ::getCppuType( (const Reference< XMultiPropertySet > *)0 ), -+ ::getCppuType( (const Reference< XFastPropertySet > *)0 ), -+ ::getCppuType( (const Reference< XPropertySet > *)0 )); -+ -+ return comphelper::concatSequences(aTypes.getTypes(),KabCommonStatement_BASE::getTypes()); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabCommonStatement::cancel( ) throw(RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ // cancel the current sql statement -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabCommonStatement::close( ) throw(SQLException, RuntimeException) -+{ -+ { -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ } -+ dispose(); -+} -+// ------------------------------------------------------------------------- -+sal_Bool SAL_CALL KabCommonStatement::execute( -+ const ::rtl::OUString& sql ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ Reference< XResultSet > xRS = executeQuery(sql); -+ -+ return xRS.is(); -+} -+// ------------------------------------------------------------------------- -+Reference< XResultSet > SAL_CALL KabCommonStatement::executeQuery( -+ const ::rtl::OUString& sql ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+OSL_TRACE("TDE Address book - SQL Request: %s", OUtoCStr(sql)); -+ -+ KabResultSet* pResult = new KabResultSet(this); -+ Reference< XResultSet > xRS = pResult; -+ ::rtl::OUString aErr; -+ -+ m_pParseTree = m_aParser.parseTree(aErr, sql); -+ if (m_pParseTree == NULL) -+ throw SQLException(aErr, *this, aErr, 0, Any()); -+ -+ m_aSQLIterator.setParseTree(m_pParseTree); -+ m_aSQLIterator.traverseAll(); -+ switch (m_aSQLIterator.getStatementType()) -+ { -+ case SQL_STATEMENT_SELECT: -+ if (isTableKnown(pResult)) // FROM which table ? -+ { -+ setKabFields(pResult); // SELECT which columns ? -+ selectAddressees(pResult); // WHERE which condition ? -+ sortAddressees(pResult); // ORDER BY which columns ? -+// To be continued: DISTINCT -+// etc... -+ } -+ break; -+ -+ default: -+// To be continued: UPDATE -+// DELETE -+// etc... -+ lcl_throwError(STR_QUERY_TOO_COMPLEX); -+ } -+ -+ return xRS; -+} -+// ------------------------------------------------------------------------- -+Reference< XConnection > SAL_CALL KabCommonStatement::getConnection( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ // just return our connection here -+ return (Reference< XConnection >) m_pConnection; -+} -+// ------------------------------------------------------------------------- -+sal_Int32 SAL_CALL KabCommonStatement::executeUpdate( const ::rtl::OUString& ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ // the return values gives information about how many rows are affected by executing the sql statement -+ return 0; -+} -+// ------------------------------------------------------------------------- -+Any SAL_CALL KabCommonStatement::getWarnings( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ return makeAny(m_aLastWarning); -+} -+// ------------------------------------------------------------------------- -+void SAL_CALL KabCommonStatement::clearWarnings( ) throw(SQLException, RuntimeException) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ checkDisposed(KabCommonStatement_BASE::rBHelper.bDisposed); -+ -+ m_aLastWarning = SQLWarning(); -+} -+// ------------------------------------------------------------------------- -+::cppu::IPropertyArrayHelper* KabCommonStatement::createArrayHelper( ) const -+{ -+ // this properties are defined by the service statement -+ // they must be in alphabetic order -+ Sequence< Property > aProps(10); -+ Property* pProperties = aProps.getArray(); -+ sal_Int32 nPos = 0; -+ DECL_PROP0(CURSORNAME, ::rtl::OUString); -+ DECL_BOOL_PROP0(ESCAPEPROCESSING); -+ DECL_PROP0(FETCHDIRECTION,sal_Int32); -+ DECL_PROP0(FETCHSIZE, sal_Int32); -+ DECL_PROP0(MAXFIELDSIZE,sal_Int32); -+ DECL_PROP0(MAXROWS, sal_Int32); -+ DECL_PROP0(QUERYTIMEOUT,sal_Int32); -+ DECL_PROP0(RESULTSETCONCURRENCY,sal_Int32); -+ DECL_PROP0(RESULTSETTYPE,sal_Int32); -+ DECL_BOOL_PROP0(USEBOOKMARKS); -+ -+ return new ::cppu::OPropertyArrayHelper(aProps); -+} -+// ------------------------------------------------------------------------- -+::cppu::IPropertyArrayHelper & KabCommonStatement::getInfoHelper() -+{ -+ return *const_cast(this)->getArrayHelper(); -+} -+// ------------------------------------------------------------------------- -+sal_Bool KabCommonStatement::convertFastPropertyValue( -+ Any &, -+ Any &, -+ sal_Int32, -+ const Any&) throw (::com::sun::star::lang::IllegalArgumentException) -+{ -+ sal_Bool bConverted = sal_False; -+ // here we have to try to convert -+ return bConverted; -+} -+// ------------------------------------------------------------------------- -+void KabCommonStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any&) throw (Exception) -+{ -+ // set the value to whatever is nescessary -+ switch (nHandle) -+ { -+ case PROPERTY_ID_QUERYTIMEOUT: -+ case PROPERTY_ID_MAXFIELDSIZE: -+ case PROPERTY_ID_MAXROWS: -+ case PROPERTY_ID_CURSORNAME: -+ case PROPERTY_ID_RESULTSETCONCURRENCY: -+ case PROPERTY_ID_RESULTSETTYPE: -+ case PROPERTY_ID_FETCHDIRECTION: -+ case PROPERTY_ID_FETCHSIZE: -+ case PROPERTY_ID_ESCAPEPROCESSING: -+ case PROPERTY_ID_USEBOOKMARKS: -+ default: -+ ; -+ } -+} -+// ------------------------------------------------------------------------- -+void KabCommonStatement::getFastPropertyValue(Any&,sal_Int32 nHandle) const -+{ -+ switch (nHandle) -+ { -+ case PROPERTY_ID_QUERYTIMEOUT: -+ case PROPERTY_ID_MAXFIELDSIZE: -+ case PROPERTY_ID_MAXROWS: -+ case PROPERTY_ID_CURSORNAME: -+ case PROPERTY_ID_RESULTSETCONCURRENCY: -+ case PROPERTY_ID_RESULTSETTYPE: -+ case PROPERTY_ID_FETCHDIRECTION: -+ case PROPERTY_ID_FETCHSIZE: -+ case PROPERTY_ID_ESCAPEPROCESSING: -+ case PROPERTY_ID_USEBOOKMARKS: -+ default: -+ ; -+ } -+} -+// ----------------------------------------------------------------------------- -+void SAL_CALL KabCommonStatement::acquire() throw() -+{ -+ KabCommonStatement_BASE::acquire(); -+} -+// ----------------------------------------------------------------------------- -+void SAL_CALL KabCommonStatement::release() throw() -+{ -+ KabCommonStatement_BASE::release(); -+} -+// ----------------------------------------------------------------------------- -+Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL KabCommonStatement::getPropertySetInfo( ) throw(RuntimeException) -+{ -+ return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); -+} -+// ----------------------------------------------------------------------------- -+KabStatement::KabStatement(KabConnection* _pConnection) -+ : KabStatement_BASE(_pConnection) -+{ -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KStatement.hxx b/connectivity/source/drivers/tdeab/KStatement.hxx -new file mode 100644 -index 0000000..c5f6564 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KStatement.hxx -@@ -0,0 +1,174 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_STATEMENT_HXX_ -+#define _CONNECTIVITY_KAB_STATEMENT_HXX_ -+ -+#include "KConnection.hxx" -+#include -+#include "connectivity/sqliterator.hxx" -+#include "connectivity/sqlparse.hxx" -+#include -+#include -+#include -+#include -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ typedef ::cppu::WeakComponentImplHelper4< ::com::sun::star::sdbc::XStatement, -+ ::com::sun::star::sdbc::XWarningsSupplier, -+ ::com::sun::star::util::XCancellable, -+ ::com::sun::star::sdbc::XCloseable> KabCommonStatement_BASE; -+ -+ //************************************************************** -+ // Class KabCommonStatement -+ // is a base class for the normal statement and for the prepared statement -+ //************************************************************** -+ class KabCommonStatement : public comphelper::OBaseMutex, -+ public KabCommonStatement_BASE, -+ public ::cppu::OPropertySetHelper, -+ public comphelper::OPropertyArrayUsageHelper -+ -+ { -+ ::com::sun::star::sdbc::SQLWarning m_aLastWarning; -+ -+ protected: -+ ::std::list< ::rtl::OUString> m_aBatchList; -+ connectivity::OSQLParser m_aParser; -+ connectivity::OSQLParseTreeIterator m_aSQLIterator; -+ connectivity::OSQLParseNode* m_pParseTree; -+ KabConnection* m_pConnection; // The owning Connection object -+ -+ protected: -+ class KabCondition *analyseWhereClause( -+ const OSQLParseNode *pParseNode) const throw(::com::sun::star::sdbc::SQLException); -+ class KabOrder *analyseOrderByClause( -+ const OSQLParseNode *pParseNode) const throw(::com::sun::star::sdbc::SQLException); -+ sal_Bool isTableKnown(class KabResultSet *pResult) const; -+ void setKabFields(class KabResultSet *pResult) const throw(::com::sun::star::sdbc::SQLException); -+ void selectAddressees(KabResultSet *pResult) const throw(::com::sun::star::sdbc::SQLException); -+ void sortAddressees(KabResultSet *pResult) const throw(::com::sun::star::sdbc::SQLException); -+ -+ // OPropertyArrayUsageHelper -+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const; -+ -+ // OPropertySetHelper -+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper(); -+ virtual sal_Bool SAL_CALL convertFastPropertyValue( -+ ::com::sun::star::uno::Any & rConvertedValue, -+ ::com::sun::star::uno::Any & rOldValue, -+ sal_Int32 nHandle, -+ const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::lang::IllegalArgumentException); -+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast( -+ sal_Int32 nHandle, -+ const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::uno::Exception); -+ virtual void SAL_CALL getFastPropertyValue( -+ ::com::sun::star::uno::Any& rValue, -+ sal_Int32 nHandle) const; -+ -+ virtual void resetParameters() const throw(::com::sun::star::sdbc::SQLException); -+ virtual void getNextParameter(::rtl::OUString &rParameter) const throw(::com::sun::star::sdbc::SQLException); -+ virtual ~KabCommonStatement(); -+ -+ public: -+ ::cppu::OBroadcastHelper& rBHelper; -+ -+ KabCommonStatement(KabConnection *_pConnection); -+ using KabCommonStatement_BASE::operator ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >; -+ -+ // OComponentHelper -+ virtual void SAL_CALL disposing(); -+ -+ // XInterface -+ virtual void SAL_CALL release() throw(); -+ virtual void SAL_CALL acquire() throw(); -+ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( -+ const ::com::sun::star::uno::Type & rType -+ ) throw(::com::sun::star::uno::RuntimeException); -+ -+ // XTypeProvider -+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( -+ ) throw(::com::sun::star::uno::RuntimeException); -+ -+ // XPropertySet -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( -+ ) throw(::com::sun::star::uno::RuntimeException); -+ -+ // XStatement -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL executeQuery( -+ const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL executeUpdate( -+ const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL execute( -+ const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL getConnection( -+ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XWarningsSupplier -+ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( -+ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL clearWarnings( -+ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // XCancellable -+ virtual void SAL_CALL cancel( -+ ) throw(::com::sun::star::uno::RuntimeException); -+ -+ // XCloseable -+ virtual void SAL_CALL close( -+ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); -+ -+ // other methods -+ inline KabConnection* getOwnConnection() const { return m_pConnection; } -+ }; -+ -+ //************************************************************** -+ // Class KabStatement -+ //************************************************************** -+ typedef ::cppu::ImplInheritanceHelper1< -+ KabCommonStatement, ::com::sun::star::lang::XServiceInfo > KabStatement_BASE; -+ -+ class KabStatement : public KabStatement_BASE -+ { -+ protected: -+ virtual ~KabStatement() { } -+ -+ public: -+ KabStatement(KabConnection* _pConnection); -+ DECLARE_SERVICE_INFO(); -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_STATEMENT_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KTable.cxx b/connectivity/source/drivers/tdeab/KTable.cxx -new file mode 100644 -index 0000000..6103ce9 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KTable.cxx -@@ -0,0 +1,100 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KTable.hxx" -+#include "KTables.hxx" -+#include "KColumns.hxx" -+#include "KCatalog.hxx" -+ -+using namespace connectivity::kab; -+using namespace connectivity; -+using namespace ::comphelper; -+using namespace ::com::sun::star::uno; -+using namespace ::com::sun::star::beans; -+using namespace ::com::sun::star::sdbcx; -+using namespace ::com::sun::star::sdbc; -+using namespace ::com::sun::star::container; -+using namespace ::com::sun::star::lang; -+ -+// ------------------------------------------------------------------------- -+KabTable::KabTable( sdbcx::OCollection* _pTables, KabConnection* _pConnection) -+ : KabTable_TYPEDEF(_pTables, sal_True), -+ m_pConnection(_pConnection) -+{ -+ construct(); -+} -+// ------------------------------------------------------------------------- -+KabTable::KabTable( sdbcx::OCollection* _pTables, -+ KabConnection* _pConnection, -+ const ::rtl::OUString& _Name, -+ const ::rtl::OUString& _Type, -+ const ::rtl::OUString& _Description , -+ const ::rtl::OUString& _SchemaName, -+ const ::rtl::OUString& _CatalogName -+ ) : KabTable_TYPEDEF(_pTables,sal_True, -+ _Name, -+ _Type, -+ _Description, -+ _SchemaName, -+ _CatalogName), -+ m_pConnection(_pConnection) -+{ -+ construct(); -+} -+// ------------------------------------------------------------------------- -+void KabTable::refreshColumns() -+{ -+ TStringVector aVector; -+ -+ if (!isNew()) -+ { -+ Reference< XResultSet > xResult = m_pConnection->getMetaData()->getColumns( -+ Any(), -+ m_SchemaName, -+ m_Name, -+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%"))); -+ -+ if (xResult.is()) -+ { -+ Reference< XRow > xRow(xResult, UNO_QUERY); -+ while (xResult->next()) -+ aVector.push_back(xRow->getString(4)); -+ } -+ } -+ -+ if (m_pColumns) -+ m_pColumns->reFill(aVector); -+ else -+ m_pColumns = new KabColumns(this,m_aMutex,aVector); -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KTable.hxx b/connectivity/source/drivers/tdeab/KTable.hxx -new file mode 100644 -index 0000000..608cf18 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KTable.hxx -@@ -0,0 +1,72 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_TABLE_HXX_ -+#define _CONNECTIVITY_KAB_TABLE_HXX_ -+ -+#include "KConnection.hxx" -+#include "connectivity/sdbcx/VTable.hxx" -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ typedef connectivity::sdbcx::OTable KabTable_TYPEDEF; -+ -+ ::rtl::OUString getTypeString(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xColProp); -+ -+ class KabTable : public KabTable_TYPEDEF -+ { -+ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; -+ KabConnection* m_pConnection; -+ -+ public: -+ KabTable( sdbcx::OCollection* _pTables, KabConnection* _pConnection); -+ KabTable( sdbcx::OCollection* _pTables, -+ KabConnection* _pConnection, -+ const ::rtl::OUString& _Name, -+ const ::rtl::OUString& _Type, -+ const ::rtl::OUString& _Description = ::rtl::OUString(), -+ const ::rtl::OUString& _SchemaName = ::rtl::OUString(), -+ const ::rtl::OUString& _CatalogName = ::rtl::OUString() -+ ); -+ -+ KabConnection* getConnection() { return m_pConnection;} -+ -+ virtual void refreshColumns(); -+ -+ ::rtl::OUString getTableName() const { return m_Name; } -+ ::rtl::OUString getSchema() const { return m_SchemaName; } -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_TABLE_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KTables.cxx b/connectivity/source/drivers/tdeab/KTables.cxx -new file mode 100644 -index 0000000..f63aaa9 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KTables.cxx -@@ -0,0 +1,94 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "KTables.hxx" -+#include "KTable.hxx" -+#include "KCatalog.hxx" -+#include "KConnection.hxx" -+#include -+ -+using namespace connectivity::kab; -+using namespace connectivity; -+using namespace ::comphelper; -+using namespace ::cppu; -+using namespace ::com::sun::star::uno; -+using namespace ::com::sun::star::beans; -+using namespace ::com::sun::star::sdbcx; -+using namespace ::com::sun::star::sdbc; -+using namespace ::com::sun::star::container; -+using namespace ::com::sun::star::lang; -+ -+sdbcx::ObjectType KabTables::createObject(const ::rtl::OUString& _rName) -+{ -+ ::rtl::OUString aName,aSchema; -+ aSchema = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")); -+ aName = _rName; -+ -+ Sequence< ::rtl::OUString > aTypes(1); -+ aTypes[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("%")); -+ ::rtl::OUString sEmpty; -+ -+ Reference< XResultSet > xResult = m_xMetaData->getTables(Any(), aSchema, aName, aTypes); -+ -+ sdbcx::ObjectType xRet = NULL; -+ if (xResult.is()) -+ { -+ Reference< XRow > xRow(xResult, UNO_QUERY); -+ if (xResult->next()) // there can be only one table with this name -+ { -+ KabTable* pRet = new KabTable( -+ this, -+ static_cast(m_rParent).getConnection(), -+ aName, -+ xRow->getString(4), -+ xRow->getString(5), -+ sEmpty); -+ xRet = pRet; -+ } -+ } -+ ::comphelper::disposeComponent(xResult); -+ -+ return xRet; -+} -+// ------------------------------------------------------------------------- -+void KabTables::impl_refresh( ) throw(RuntimeException) -+{ -+ static_cast(m_rParent).refreshTables(); -+} -+// ------------------------------------------------------------------------- -+void KabTables::disposing(void) -+{ -+m_xMetaData.clear(); -+ OCollection::disposing(); -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/KTables.hxx b/connectivity/source/drivers/tdeab/KTables.hxx -new file mode 100644 -index 0000000..8c1c036 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/KTables.hxx -@@ -0,0 +1,65 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_TABLES_HXX_ -+#define _CONNECTIVITY_KAB_TABLES_HXX_ -+ -+#include "connectivity/sdbcx/VCollection.hxx" -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ class KabTables : public sdbcx::OCollection -+ { -+ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; -+ -+ protected: -+ virtual sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); -+ virtual void impl_refresh() throw(::com::sun::star::uno::RuntimeException); -+ -+ public: -+ KabTables( -+ const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rMetaData, -+ ::cppu::OWeakObject& _rParent, -+ ::osl::Mutex& _rMutex, -+ const TStringVector &_rVector) -+ : sdbcx::OCollection(_rParent,sal_True,_rMutex,_rVector), -+ m_xMetaData(_rMetaData) -+ { } -+ -+ virtual void SAL_CALL disposing(void); -+ }; -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_TABLES_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/TDEInit.cxx b/connectivity/source/drivers/tdeab/TDEInit.cxx -new file mode 100644 -index 0000000..375b158 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/TDEInit.cxx -@@ -0,0 +1,158 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+#include "TDEInit.h" -+#include -+#include -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ // =============================================================== -+ // = TDEInit -+ // =============================================================== -+ class TDEInit -+ { -+ private: -+ /// TDE application if we own it -+ static KApplication* s_pKApplication; -+ static bool s_bDidInsertCatalogue; -+ -+ public: -+ static void Init(); -+ static void Shutdown(); -+ }; -+ -+ // --------------------------------------------------------------- -+ KApplication* TDEInit::s_pKApplication = NULL; -+ bool TDEInit::s_bDidInsertCatalogue = false; -+ -+ // --------------------------------------------------------------- -+ void TDEInit::Init() -+ { -+ // TODO: All this is not thread-safe -+ -+ // we create a TDE application only if it is not already done -+ if (KApplication::kApplication() == NULL) -+ { -+ OSL_ENSURE(s_pKApplication == NULL, "TDEInit::Init: inconsistency in the application pointers!"); -+ -+ char *kabargs[1] = {(char*)"libkab1"}; -+ KCmdLineArgs::init(1, kabargs, "KAddressBook", *kabargs, "Address Book driver", KAB_DRIVER_VERSION); -+ -+ s_pKApplication = new KApplication(false, false); -+ } -+ -+ // set language -+ rtl_Locale *pProcessLocale; -+ osl_getProcessLocale(&pProcessLocale); -+ // sal_Unicode and TQChar are (currently) both 16 bits characters -+ TQString aLanguage( -+ (const TQChar *) pProcessLocale->Language->buffer, -+ (int) pProcessLocale->Language->length); -+ KGlobal::locale()->setLanguage(aLanguage); -+ -+ // load TDE address book's localized messages -+ KGlobal::locale()->insertCatalogue("kaddressbook"); -+ s_bDidInsertCatalogue = true; -+ } -+ -+ // --------------------------------------------------------------- -+ void TDEInit::Shutdown() -+ { -+ if ( s_bDidInsertCatalogue ) -+ // this guard is necessary, since TDE 3.3 seems to crash if we remove a catalogue -+ // which we did not previously insert -+ KGlobal::locale()->removeCatalogue("kaddressbook"); -+ -+ if ( s_pKApplication != NULL ) -+ { -+ delete s_pKApplication; -+ s_pKApplication = NULL; -+ } -+ } -+ } -+} -+ -+// ======================================================================= -+namespace -+{ -+ double normalizeVersion( unsigned int major, unsigned int minor ) -+ { -+ return major + 1.0 * minor / 1000; -+ } -+} -+ -+// ----------------------------------------------------------------------- -+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL initKApplication() -+{ -+ ::connectivity::kab::TDEInit::Init(); -+} -+ -+// ----------------------------------------------------------------------- -+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL shutdownKApplication() -+{ -+ ::connectivity::kab::TDEInit::Shutdown(); -+} -+// ----------------------------------------------------------------------- -+/** checks whether the TDE version on the system we're running at is supported -+ by the driver -+ -+ Has to be called before any other code from this library, in particular, -+ it has to be called before initKApplication() -+ -+ If this function returns 0, then no other code from this library -+ has to be called, else the results are unpredictable. -+ -+ @return -+
  • 0 if the TDE version is supportednon
  • -+
  • a negative value if the version is too old
  • -+
  • a positive value if the version is too new to know whether it works with this driver
  • -+
-+ -+ #i60062# / 2006-01-06 / frank.schoenheit@sun.com -+*/ -+extern "C" SAL_DLLPUBLIC_EXPORT int SAL_CALL matchTDEVersion() -+{ -+ double nMinVersion = normalizeVersion( MIN_TDE_VERSION_MAJOR, MIN_TDE_VERSION_MINOR ); -+ double nCurVersion = normalizeVersion( ::KDE::versionMajor(), ::KDE::versionMinor() ); -+ double nMaxVersion = normalizeVersion( MAX_TDE_VERSION_MAJOR, MAX_TDE_VERSION_MINOR ); -+ -+ if ( nCurVersion < nMinVersion ) -+ return -1; -+ if ( nCurVersion > nMaxVersion ) -+ return 1; -+ -+ return 0; -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/TDEInit.h b/connectivity/source/drivers/tdeab/TDEInit.h -new file mode 100644 -index 0000000..350502d ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/TDEInit.h -@@ -0,0 +1,47 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef CONNECTIVITY_KAB_TDEINIT_H -+#define CONNECTIVITY_KAB_TDEINIT_H -+ -+// the address book driver's version -+#define KAB_DRIVER_VERSION "0.2" -+#define KAB_DRIVER_VERSION_MAJOR 0 -+#define KAB_DRIVER_VERSION_MINOR 2 -+ -+// the minimum TDE version which is required at runtime -+#define MIN_TDE_VERSION_MAJOR 3 -+#define MIN_TDE_VERSION_MINOR 2 -+ -+#define MAX_TDE_VERSION_MAJOR 3 -+#define MAX_TDE_VERSION_MINOR 6 -+ -+ -+#endif // CONNECTIVITY_KAB_TDEINIT_H -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/exports.dxp b/connectivity/source/drivers/tdeab/exports.dxp -new file mode 100644 -index 0000000..9630d7e ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/exports.dxp -@@ -0,0 +1,3 @@ -+component_getImplementationEnvironment -+component_writeInfo -+component_getFactory -diff --git a/connectivity/source/drivers/tdeab/kcondition.cxx b/connectivity/source/drivers/tdeab/kcondition.cxx -new file mode 100644 -index 0000000..57d2745 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/kcondition.cxx -@@ -0,0 +1,233 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "kcondition.hxx" -+#include "kfields.hxx" -+#include "connectivity/CommonTools.hxx" -+ -+using namespace ::connectivity::kab; -+using namespace ::com::sun::star::sdbc; -+// ----------------------------------------------------------------------------- -+KabCondition::~KabCondition() -+{ -+} -+// ----------------------------------------------------------------------------- -+KabConditionConstant::KabConditionConstant(const sal_Bool bValue) -+ : KabCondition(), -+ m_bValue(bValue) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionConstant::isAlwaysTrue() const -+{ -+ return m_bValue; -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionConstant::isAlwaysFalse() const -+{ -+ return !m_bValue; -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionConstant::eval(const ::KABC::Addressee &) const -+{ -+ return m_bValue; -+} -+// ----------------------------------------------------------------------------- -+KabConditionColumn::KabConditionColumn(const ::rtl::OUString &sColumnName) throw(SQLException) -+ : KabCondition(), -+ m_nFieldNumber(findKabField(sColumnName)) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionColumn::isAlwaysTrue() const -+{ -+ // Sometimes true, sometimes false -+ return sal_False; -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionColumn::isAlwaysFalse() const -+{ -+ // Sometimes true, sometimes false -+ return sal_False; -+} -+// ----------------------------------------------------------------------------- -+KabConditionNull::KabConditionNull(const ::rtl::OUString &sColumnName) throw(SQLException) -+ : KabConditionColumn(sColumnName) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionNull::eval(const ::KABC::Addressee &aAddressee) const -+{ -+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -+ -+ return aQtName.isNull(); -+// TDE address book currently does not use NULL values. -+// But it might do it someday -+} -+// ----------------------------------------------------------------------------- -+KabConditionNotNull::KabConditionNotNull(const ::rtl::OUString &sColumnName) throw(SQLException) -+ : KabConditionColumn(sColumnName) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionNotNull::eval(const ::KABC::Addressee &aAddressee) const -+{ -+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -+ -+ return !aQtName.isNull(); -+// TDE address book currently does not use NULL values. -+// But it might do it someday -+} -+// ----------------------------------------------------------------------------- -+KabConditionCompare::KabConditionCompare(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -+ : KabConditionColumn(sColumnName), -+ m_sMatchString(sMatchString) -+{ -+} -+// ----------------------------------------------------------------------------- -+KabConditionEqual::KabConditionEqual(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -+ : KabConditionCompare(sColumnName, sMatchString) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionEqual::eval(const ::KABC::Addressee &aAddressee) const -+{ -+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -+// Timestamps should not be compared according to their string value -+// The syntax for such queries should be like -+// {ts '2004-03-29 12:55:00.000000'} -+// They should also support operators like '<' or '>=' -+ -+ if (aQtName.isNull()) return sal_False; -+ -+ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2()); -+ return sValue == m_sMatchString; -+} -+// ----------------------------------------------------------------------------- -+KabConditionDifferent::KabConditionDifferent(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -+ : KabConditionCompare(sColumnName, sMatchString) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionDifferent::eval(const ::KABC::Addressee &aAddressee) const -+{ -+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -+ -+ if (aQtName.isNull()) return sal_False; -+ -+ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2()); -+ return sValue != m_sMatchString; -+} -+// ----------------------------------------------------------------------------- -+KabConditionSimilar::KabConditionSimilar(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException) -+ : KabConditionCompare(sColumnName, sMatchString) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionSimilar::eval(const ::KABC::Addressee &aAddressee) const -+{ -+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber); -+ -+ if (aQtName.isNull()) return sal_False; -+ -+ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2()); -+ return match(m_sMatchString, sValue, '\0'); -+} -+// ----------------------------------------------------------------------------- -+KabConditionBoolean::KabConditionBoolean(KabCondition *pLeft, KabCondition *pRight) -+ : KabCondition(), -+ m_pLeft(pLeft), -+ m_pRight(pRight) -+{ -+} -+// ----------------------------------------------------------------------------- -+KabConditionBoolean::~KabConditionBoolean() -+{ -+ delete m_pLeft; -+ delete m_pRight; -+} -+// ----------------------------------------------------------------------------- -+KabConditionOr::KabConditionOr(KabCondition *pLeft, KabCondition *pRight) -+ : KabConditionBoolean(pLeft, pRight) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionOr::isAlwaysTrue() const -+{ -+ return m_pLeft->isAlwaysTrue() || m_pRight->isAlwaysTrue(); -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionOr::isAlwaysFalse() const -+{ -+ return m_pLeft->isAlwaysFalse() && m_pRight->isAlwaysFalse(); -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionOr::eval(const ::KABC::Addressee &aAddressee) const -+{ -+ // We avoid evaluating terms as much as we can -+ if (m_pLeft->isAlwaysTrue() || m_pRight->isAlwaysTrue()) return sal_True; -+ if (m_pLeft->isAlwaysFalse() && m_pRight->isAlwaysFalse()) return sal_False; -+ -+ if (m_pLeft->eval(aAddressee)) return sal_True; -+ if (m_pRight->eval(aAddressee)) return sal_True; -+ -+ return sal_False; -+} -+// ----------------------------------------------------------------------------- -+KabConditionAnd::KabConditionAnd(KabCondition *pLeft, KabCondition *pRight) -+ : KabConditionBoolean(pLeft, pRight) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionAnd::isAlwaysTrue() const -+{ -+ return m_pLeft->isAlwaysTrue() && m_pRight->isAlwaysTrue(); -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionAnd::isAlwaysFalse() const -+{ -+ return m_pLeft->isAlwaysFalse() || m_pRight->isAlwaysFalse(); -+} -+// ----------------------------------------------------------------------------- -+sal_Bool KabConditionAnd::eval(const ::KABC::Addressee &aAddressee) const -+{ -+ // We avoid evaluating terms as much as we can -+ if (m_pLeft->isAlwaysFalse() || m_pRight->isAlwaysFalse()) return sal_False; -+ if (m_pLeft->isAlwaysTrue() && m_pRight->isAlwaysTrue()) return sal_True; -+ -+ if (!m_pLeft->eval(aAddressee)) return sal_False; -+ if (!m_pRight->eval(aAddressee)) return sal_False; -+ -+ return sal_True; -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/kcondition.hxx b/connectivity/source/drivers/tdeab/kcondition.hxx -new file mode 100644 -index 0000000..a8b729f ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/kcondition.hxx -@@ -0,0 +1,164 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_CONDITION_HXX_ -+#define _CONNECTIVITY_KAB_CONDITION_HXX_ -+ -+#include -+#include -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+// ----------------------------------------------------------------------------- -+class KabCondition -+{ -+ public: -+ virtual ~KabCondition(); -+ virtual sal_Bool isAlwaysTrue() const = 0; -+ virtual sal_Bool isAlwaysFalse() const = 0; -+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const = 0; -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionConstant : public KabCondition -+{ -+ protected: -+ sal_Bool m_bValue; -+ -+ public: -+ KabConditionConstant(const sal_Bool bValue); -+ virtual sal_Bool isAlwaysTrue() const; -+ virtual sal_Bool isAlwaysFalse() const; -+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionColumn : public KabCondition -+{ -+ protected: -+ sal_Int32 m_nFieldNumber; -+ -+ TQString value(const ::KABC::Addressee &aAddressee) const; -+ -+ public: -+ KabConditionColumn( -+ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException); -+ virtual sal_Bool isAlwaysTrue() const; -+ virtual sal_Bool isAlwaysFalse() const; -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionNull : public KabConditionColumn -+{ -+ public: -+ KabConditionNull( -+ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException); -+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionNotNull : public KabConditionColumn -+{ -+ public: -+ KabConditionNotNull( -+ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException); -+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionCompare : public KabConditionColumn -+{ -+ protected: -+ const ::rtl::OUString m_sMatchString; -+ -+ public: -+ KabConditionCompare( -+ const ::rtl::OUString &sColumnName, -+ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionEqual : public KabConditionCompare -+{ -+ public: -+ KabConditionEqual( -+ const ::rtl::OUString &sColumnName, -+ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionDifferent : public KabConditionCompare -+{ -+ public: -+ KabConditionDifferent( -+ const ::rtl::OUString &sColumnName, -+ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionSimilar : public KabConditionCompare -+{ -+ public: -+ KabConditionSimilar( -+ const ::rtl::OUString &sColumnName, -+ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException); -+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionBoolean : public KabCondition -+{ -+ protected: -+ KabCondition *m_pLeft, *m_pRight; -+ -+ public: -+ KabConditionBoolean(KabCondition *pLeft, KabCondition *pRight); -+ virtual ~KabConditionBoolean(); -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionOr : public KabConditionBoolean -+{ -+ public: -+ KabConditionOr(KabCondition *pLeft, KabCondition *pRight); -+ virtual sal_Bool isAlwaysTrue() const; -+ virtual sal_Bool isAlwaysFalse() const; -+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const; -+}; -+// ----------------------------------------------------------------------------- -+class KabConditionAnd : public KabConditionBoolean -+{ -+ public: -+ KabConditionAnd(KabCondition *pLeft, KabCondition *pRight); -+ virtual sal_Bool isAlwaysTrue() const; -+ virtual sal_Bool isAlwaysFalse() const; -+ virtual sal_Bool eval(const ::KABC::Addressee &addressee) const; -+}; -+// ----------------------------------------------------------------------------- -+ } -+} -+ -+#endif // _CONNECTIVITY_KAB_CONDITION_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/kfields.cxx b/connectivity/source/drivers/tdeab/kfields.cxx -new file mode 100644 -index 0000000..2d375d7 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/kfields.cxx -@@ -0,0 +1,98 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "kfields.hxx" -+#include "resource/common_res.hrc" -+#include "resource/sharedresources.hxx" -+ -+using namespace ::connectivity::kab; -+using namespace ::com::sun::star::sdbc; -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+// ----------------------------------------------------------------------------- -+// return the value of a TDE address book field, given an addressee and a field number -+TQString valueOfKabField(const ::KABC::Addressee &aAddressee, sal_Int32 nFieldNumber) -+{ -+ switch (nFieldNumber) -+ { -+ case KAB_FIELD_REVISION: -+ return aAddressee.revision().toString("yyyy-MM-dd hh:mm:ss"); -+ default: -+ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -+ return aFields[nFieldNumber - KAB_DATA_FIELDS]->value(aAddressee); -+ } -+} -+// ------------------------------------------------------------------------------ -+// search the TDE address book field number of a given column name -+sal_uInt32 findKabField(const ::rtl::OUString& columnName) throw(SQLException) -+{ -+ TQString aQtName; -+ ::rtl::OUString aName; -+ -+ aQtName = KABC::Addressee::revisionLabel(); -+ aName = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -+ if (columnName == aName) -+ return KAB_FIELD_REVISION; -+ -+ ::KABC::Field::List aFields = ::KABC::Field::allFields(); -+ ::KABC::Field::List::iterator aField; -+ sal_uInt32 nResult; -+ -+ for ( aField = aFields.begin(), nResult = KAB_DATA_FIELDS; -+ aField != aFields.end(); -+ ++aField, ++nResult) -+ { -+ aQtName = (*aField)->label(); -+ aName = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2()); -+ -+ if (columnName == aName) -+ return nResult; -+ } -+ -+ ::connectivity::SharedResources aResources; -+ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution( -+ STR_INVALID_COLUMNNAME, -+ "$columnname$",columnName -+ ) ); -+ ::dbtools::throwGenericSQLException(sError,NULL); -+ // Unreachable: -+ OSL_ASSERT(false); -+ return 0; -+} -+// ------------------------------------------------------------------------------ -+ } -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/kfields.hxx b/connectivity/source/drivers/tdeab/kfields.hxx -new file mode 100644 -index 0000000..2c5c63b ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/kfields.hxx -@@ -0,0 +1,51 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_FIELDS_HXX_ -+#define _CONNECTIVITY_KAB_FIELDS_HXX_ -+ -+#include -+#include -+#include -+ -+#define KAB_FIELD_REVISION 0 -+#define KAB_DATA_FIELDS 1 -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ TQString valueOfKabField(const ::KABC::Addressee &aAddressee, sal_Int32 nFieldNumber); -+ sal_uInt32 findKabField(const ::rtl::OUString& columnName) throw(::com::sun::star::sdbc::SQLException); -+ } -+} -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/korder.cxx b/connectivity/source/drivers/tdeab/korder.cxx -new file mode 100644 -index 0000000..994c41f ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/korder.cxx -@@ -0,0 +1,92 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_connectivity.hxx" -+ -+#include "korder.hxx" -+#include "kfields.hxx" -+ -+using namespace ::connectivity::kab; -+ -+KabOrder::~KabOrder() -+{ -+} -+// ----------------------------------------------------------------------------- -+KabSimpleOrder::KabSimpleOrder(::rtl::OUString &sColumnName, sal_Bool bAscending) -+ : KabOrder(), -+ m_nFieldNumber(findKabField(sColumnName)), -+ m_bAscending(bAscending) -+{ -+} -+// ----------------------------------------------------------------------------- -+sal_Int32 KabSimpleOrder::compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const -+{ -+ sal_Int32 result; -+ -+ result = TQString::compare( -+ valueOfKabField(aAddressee1, m_nFieldNumber), -+ valueOfKabField(aAddressee2, m_nFieldNumber)); -+// Timestamps should be compared differently than with their string value -+ -+ if (!m_bAscending) result = -result; -+ -+ return result; -+} -+// ----------------------------------------------------------------------------- -+KabComplexOrder::KabComplexOrder() -+ : KabOrder(), -+ m_aOrders() -+{ -+} -+// ----------------------------------------------------------------------------- -+KabComplexOrder::~KabComplexOrder() -+{ -+ for (sal_uInt32 i = 0; i < m_aOrders.size(); i++) -+ delete m_aOrders[i]; -+} -+// ----------------------------------------------------------------------------- -+void KabComplexOrder::addOrder(KabOrder *pOrder) -+{ -+ m_aOrders.push_back(pOrder); -+} -+// ----------------------------------------------------------------------------- -+sal_Int32 KabComplexOrder::compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const -+{ -+ for (sal_uInt32 i = 0; i < m_aOrders.size(); i++) -+ { -+ const KabOrder *pOrder = m_aOrders[i]; -+ sal_Int32 result = pOrder->compare(aAddressee1, aAddressee2); -+ -+ if (result) return result; -+ } -+ return 0; -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/korder.hxx b/connectivity/source/drivers/tdeab/korder.hxx -new file mode 100644 -index 0000000..8e62b79 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/korder.hxx -@@ -0,0 +1,78 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _CONNECTIVITY_KAB_ORDER_HXX_ -+#define _CONNECTIVITY_KAB_ORDER_HXX_ -+ -+#include "rtl/ustring.hxx" -+#include -+ -+#include -+ -+namespace connectivity -+{ -+ namespace kab -+ { -+ class KabOrder -+ { -+ public: -+ virtual ~KabOrder(); -+ -+ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const = 0; -+ }; -+ -+ class KabSimpleOrder : public KabOrder -+ { -+ sal_Int32 m_nFieldNumber; -+ sal_Bool m_bAscending; -+ -+ TQString value(const ::KABC::Addressee &aAddressee) const; -+ public: -+ KabSimpleOrder(::rtl::OUString &sColumnName, sal_Bool bAscending); -+ -+ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const; -+ }; -+ -+ class KabComplexOrder : public KabOrder -+ { -+ ::std::vector m_aOrders; -+ -+ public: -+ KabComplexOrder(); -+ virtual ~KabComplexOrder(); -+ -+ void addOrder(KabOrder *pOrder); -+ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const; -+ }; -+ } -+} -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/connectivity/source/drivers/tdeab/makefile.mk b/connectivity/source/drivers/tdeab/makefile.mk -new file mode 100644 -index 0000000..cde838a ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/makefile.mk -@@ -0,0 +1,139 @@ -+#************************************************************************* -+# -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# Copyright 2000, 2010 Oracle and/or its affiliates. -+# Copyright 2011 Timothy Pearson -+# -+# OpenOffice.org - a multi-platform office productivity suite -+# -+# This file is part of OpenOffice.org. -+# -+# OpenOffice.org is free software: you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License version 3 -+# only, as published by the Free Software Foundation. -+# -+# OpenOffice.org 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 Lesser General Public License version 3 for more details -+# (a copy is included in the LICENSE file that accompanied this code). -+# -+# You should have received a copy of the GNU Lesser General Public License -+# version 3 along with OpenOffice.org. If not, see -+# -+# for a copy of the LGPLv3 License. -+# -+#************************************************************************* -+ -+PRJ=..$/..$/.. -+PRJINC=..$/.. -+PRJNAME=connectivity -+TARGET=tdeab -+TARGET2=$(TARGET)drv -+ -+ENABLE_EXCEPTIONS=TRUE -+VISIBILITY_HIDDEN=TRUE -+ -+# --- Settings ---------------------------------- -+ -+.INCLUDE : $(PRJ)$/makefile.pmk -+.INCLUDE : $(PRJ)$/version.mk -+ -+.IF "$(GUI)" == "UNX" -+.IF "$(ENABLE_TDEAB)" == "TRUE" -+ -+CFLAGS+=$(TDE_CFLAGS) -+ -+.IF "$(TDE_ROOT)"!="" -+EXTRALIBPATHS+=-L$(TDE_ROOT)$/lib -+.ENDIF -+ -+# === TDEAB base library ========================== -+ -+# --- Files ------------------------------------- -+ -+SLOFILES= \ -+ $(SLO)$/KDriver.obj \ -+ $(SLO)$/KServices.obj -+ -+DEPOBJFILES= \ -+ $(SLO2FILES) -+ -+# --- Library ----------------------------------- -+ -+SHL1VERSIONMAP=$(SOLARENV)/src/component.map -+ -+SHL1TARGET= $(TARGET)$(TDEAB_MAJOR) -+SHL1OBJS=$(SLOFILES) -+SHL1STDLIBS=\ -+ $(CPPULIB) \ -+ $(CPPUHELPERLIB) \ -+ $(DBTOOLSLIB) \ -+ $(SALLIB) \ -+ $(SALHELPERLIB) -+ -+SHL1DEPN= -+SHL1IMPLIB= i$(TARGET) -+ -+SHL1DEF= $(MISC)$/$(SHL1TARGET).def -+ -+DEF1NAME= $(SHL1TARGET) -+ -+# === TDEAB impl library ========================== -+ -+# --- Files ------------------------------------- -+ -+SLO2FILES=\ -+ $(SLO)$/KColumns.obj \ -+ $(SLO)$/KTable.obj \ -+ $(SLO)$/KTables.obj \ -+ $(SLO)$/KCatalog.obj \ -+ $(SLO)$/KResultSet.obj \ -+ $(SLO)$/KStatement.obj \ -+ $(SLO)$/KPreparedStatement.obj \ -+ $(SLO)$/KDatabaseMetaData.obj \ -+ $(SLO)$/KConnection.obj \ -+ $(SLO)$/KResultSetMetaData.obj \ -+ $(SLO)$/kcondition.obj \ -+ $(SLO)$/korder.obj \ -+ $(SLO)$/kfields.obj \ -+ $(SLO)$/TDEInit.obj -+ -+TDEAB_LIB=$(TDE_LIBS) -lkabc -+ -+# --- Library ----------------------------------- -+ -+SHL2VERSIONMAP=$(TARGET2).map -+ -+SHL2TARGET= $(TARGET2)$(TDEAB_MAJOR) -+SHL2OBJS=$(SLO2FILES) -+SHL2LINKFLAGS+=$(TDEAB_LIB) -+SHL2STDLIBS=\ -+ $(CPPULIB) \ -+ $(CPPUHELPERLIB) \ -+ $(SALLIB) \ -+ $(SALHELPERLIB) \ -+ $(DBTOOLSLIB) \ -+ $(COMPHELPERLIB) -+ -+SHL2DEPN= -+SHL2IMPLIB= i$(TARGET2) -+ -+SHL2DEF= $(MISC)$/$(SHL2TARGET).def -+ -+DEF2NAME= $(SHL2TARGET) -+ -+# --- Targets ----------------------------------- -+.ELSE # "$(ENABLE_TDEAB)" == "TRUE" -+dummy: -+ @echo TDE Addressbook disabled - nothing to build -+.ENDIF -+ -+.ELSE # "$(GUI)" == "UNX" -+dummy: -+ @echo "Nothing to build for GUI $(GUI)" -+.ENDIF -+ -+.INCLUDE : $(PRJ)$/target.pmk -+ -diff --git a/connectivity/source/drivers/tdeab/tdeab.xcu b/connectivity/source/drivers/tdeab/tdeab.xcu -new file mode 100644 -index 0000000..63b2761 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/tdeab.xcu -@@ -0,0 +1,47 @@ -+ -+ -+ -+ -+ -+ -+ com.sun.star.comp.sdbc.kab.Driver -+ -+ -+ TDE Address Book -+ -+ -+ -+ -+ true -+ -+ -+ -+ -+ -+ -diff --git a/connectivity/source/drivers/tdeab/tdeab.xml b/connectivity/source/drivers/tdeab/tdeab.xml -new file mode 100644 -index 0000000..4deb1d1 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/tdeab.xml -@@ -0,0 +1,77 @@ -+ -+ -+ -+ kab1 -+ -+ Eric Bischoff -+ com.sun.star.comp.sdbc.kab.Driver -+ This library implements the database driver for TDE address book formats. -+ com.sun.star.loader.SharedLibrary -+ c++ -+ -+ com.sun.star.sdbc.Driver -+ ... -+ -+ cppuhelper -+ cppu -+ sal -+ -+ cppuhelper -+ cppu1 -+ sal1 -+ -+ com.sun.star.registry.XRegistryKey -+ com.sun.star.util.XCancellable -+ com.sun.star.util.XNumberFormatter -+ com.sun.star.uno.TypeClass -+ com.sun.star.uno.XWeak -+ com.sun.star.uno.XAggregation -+ com.sun.star.uno.XComponentContext -+ com.sun.star.beans.PropertyAttribute -+ com.sun.star.beans.XPropertyState -+ com.sun.star.beans.XPropertySet -+ com.sun.star.beans.PropertyValue -+ com.sun.star.beans.XMultiPropertySet -+ com.sun.star.beans.XFastPropertySet -+ com.sun.star.lang.XSingleServiceFactory -+ com.sun.star.lang.XTypeProvider -+ com.sun.star.lang.XSingleComponentFactory -+ com.sun.star.lang.EventObject -+ com.sun.star.lang.XComponent -+ com.sun.star.lang.IllegalArgumentException -+ com.sun.star.lang.DisposedException -+ com.sun.star.lang.XMultiServiceFactory -+ com.sun.star.lang.XServiceInfo -+ com.sun.star.lang.XUnoTunnel -+ com.sun.star.java.XJavaThreadRegister_11 -+ com.sun.star.java.XJavaVM -+ com.sun.star.sdbc.FetchDirection -+ com.sun.star.sdbc.XConnection -+ com.sun.star.sdbc.XStatement -+ com.sun.star.sdbc.XResultSet -+ com.sun.star.sdbc.XResultSetMetaDataSupplier -+ com.sun.star.sdbc.XColumnLocate -+ com.sun.star.sdbc.XResultSetUpdate -+ com.sun.star.sdbc.XWarningsSupplier -+ com.sun.star.sdbc.XRowUpdate -+ com.sun.star.sdbc.XMultipleResults -+ com.sun.star.sdbc.XBatchExecution -+ com.sun.star.sdbc.XPreparedBatchExecution -+ com.sun.star.sdbc.XParameters -+ com.sun.star.sdbc.XOutParameters -+ com.sun.star.sdbc.DriverPropertyInfo -+ com.sun.star.sdbc.SQLWarning -+ com.sun.star.sdbc.XRow -+ com.sun.star.sdbc.ColumnSearch -+ com.sun.star.sdbc.ColumnValue -+ com.sun.star.sdbc.DataType -+ com.sun.star.sdbc.XDriver -+ com.sun.star.sdbc.TransactionIsolation -+ com.sun.star.sdbc.ResultSetType -+ com.sun.star.sdbc.ResultSetConcurrency -+ com.sun.star.sdbcx.XRowLocate -+ com.sun.star.sdbcx.XDeleteRows -+ com.sun.star.sdbcx.CompareBookmark -+ com.sun.star.sdb.XColumnUpdate -+ com.sun.star.sdb.XColumn -+ -diff --git a/connectivity/source/drivers/tdeab/tdeabdrv.map b/connectivity/source/drivers/tdeab/tdeabdrv.map -new file mode 100644 -index 0000000..2c828d8 ---- /dev/null -+++ b/connectivity/source/drivers/tdeab/tdeabdrv.map -@@ -0,0 +1,9 @@ -+UDK_3_0_0 { -+ global: -+ createKabConnection; -+ initKApplication; -+ shutdownKApplication; -+ matchTDEVersion; -+ local: -+ *; -+}; -diff --git a/connectivity/source/inc/resource/tdeab_res.hrc b/connectivity/source/inc/resource/tdeab_res.hrc -new file mode 100644 -index 0000000..ff6a7b2 ---- /dev/null -+++ b/connectivity/source/inc/resource/tdeab_res.hrc -@@ -0,0 +1,44 @@ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef CONNECTIVITY_RESOURCE_KAB_HRC -+#define CONNECTIVITY_RESOURCE_KAB_HRC -+ -+#include "resource/conn_shared_res.hrc" -+#include "resource/common_res.hrc" -+// ============================================================================ -+// = the tdeab driver's resource strings -+// ============================================================================ -+ -+#define STR_NO_TDE_INST ( STR_KAB_BASE + 0 ) -+#define STR_TDE_VERSION_TOO_OLD ( STR_KAB_BASE + 1 ) -+#define STR_TDE_VERSION_TOO_NEW ( STR_KAB_BASE + 2 ) -+#define STR_TDE_VERSION_TOO_NEW_WORK_AROUND ( STR_KAB_BASE + 3 ) -+ -+#endif // CONNECTIVITY_RESOURCE_KAB_HRC -+ -diff --git a/connectivity/version.mk b/connectivity/version.mk -index fd2235c..9ff6151 100755 ---- a/connectivity/version.mk -+++ b/connectivity/version.mk -@@ -101,6 +101,16 @@ KAB_MINOR=0 - # the micro - KAB_MICRO=0 - -+# ----------------------------Tdeab settings-------------------------------------# -+# target -+TDEAB_TARGET=tdeab -+ -+# the major -+TDEAB_MAJOR=1 -+# the minor -+TDEAB_MINOR=0 -+# the micro -+TDEAB_MICRO=0 - - # ----------------------------Macab settings-------------------------------------# - # target -diff --git a/cui/Library_cui.mk b/cui/Library_cui.mk -index 94d8a4a..1113ab0 100644 ---- a/cui/Library_cui.mk -+++ b/cui/Library_cui.mk -@@ -41,6 +41,7 @@ $(eval $(call gb_Library_set_include,cui,\ - $(eval $(call gb_Library_add_defs,cui,\ - $(if $(filter TRUE,$(ENABLE_GTK)),-DENABLE_GTK) \ - $(if $(filter TRUE,$(ENABLE_KDE)),-DENABLE_KDE) \ -+ $(if $(filter TRUE,$(ENABLE_TDE)),-DENABLE_TDE) \ - $(if $(filter TRUE,$(ENABLE_KDE4)),-DENABLE_KDE4) \ - )) - -diff --git a/cui/source/options/optgdlg.cxx b/cui/source/options/optgdlg.cxx -index e08dcc7..8237c02 100644 ---- a/cui/source/options/optgdlg.cxx -+++ b/cui/source/options/optgdlg.cxx -@@ -153,6 +153,14 @@ namespace - return rtl::OUString(); - #endif - } -+ else if ( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "tde" ) ) -+ { -+ #ifdef ENABLE_TDE -+ return ::rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.TDEFilePicker" ); -+ #else -+ return rtl::OUString(); -+ #endif -+ } - #if defined WNT - return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ui.dialogs.SystemFilePicker") ); - #elif (defined MACOSX && defined QUARTZ) -diff --git a/desktop/Pagein_common.mk b/desktop/Pagein_common.mk -index 3b0330c..e119474 100644 ---- a/desktop/Pagein_common.mk -+++ b/desktop/Pagein_common.mk -@@ -46,6 +46,7 @@ $(eval $(call desktop_Pagein_add_libs,common,\ - vclplug_gen \ - $(if $(findstring TRUE,$(ENABLE_GTK)),vclplug_gtk) \ - $(if $(findstring TRUE,$(ENABLE_KDE)),vclplug_kde) \ -+ $(if $(findstring TRUE,$(ENABLE_TDE)),vclplug_tde) \ - basegfx \ - sot \ - xcr \ -diff --git a/fpicker/prj/build.lst b/fpicker/prj/build.lst -index 114a301..b4f0898f 100644 ---- a/fpicker/prj/build.lst -+++ b/fpicker/prj/build.lst -@@ -7,8 +7,10 @@ fp fpicker\source\unx\gnome nmake - u fp_gnome_filepicker fp_inc NULL - fp fpicker\source\unx\kde4 nmake - u fp_kde4_filepicker fp_inc NULL - fp fpicker\source\unx\kde_unx nmake - u fp_unx_common fp_inc NULL - fp fpicker\source\unx\kde nmake - u fp_unx_kde_filepicker fp_inc NULL -+fp fpicker\source\unx\tde_unx nmake - u fp_unx_tdecommon fp_inc NULL -+fp fpicker\source\unx\tde nmake - u fp_unx_tde_filepicker fp_inc NULL - fp fpicker\source\aqua nmake - u fp_macosx_filepicker NULL - fp fpicker\source\win32\filepicker nmake - w fp_win32_filepicker fp_inc NULL - fp fpicker\source\win32\folderpicker nmake - w fp_win32_folderpicker fp_inc NULL - fp fpicker\source\win32\misc nmake - w fp_win32_misc fp_win32_filepicker.w fp_win32_folderpicker.w fp_inc NULL --fp fpicker\util nmake - all fp_util fp_gnome_filepicker.u fp_unx_common.u fp_unx_kde_filepicker.u fp_win32_filepicker.w fp_win32_misc.w fp_win32_folderpicker.w NULL -+fp fpicker\util nmake - all fp_util fp_gnome_filepicker.u fp_unx_common.u fp_unx_kde_filepicker.u fp_unx_tdecommon.u fp_unx_tde_filepicker.u fp_win32_filepicker.w fp_win32_misc.w fp_win32_folderpicker.w NULL -diff --git a/fpicker/prj/d.lst b/fpicker/prj/d.lst -index 71ec565..bef8b71 100644 ---- a/fpicker/prj/d.lst -+++ b/fpicker/prj/d.lst -@@ -5,6 +5,7 @@ mkdir: %COMMON_DEST%\bin\hid - ..\%__SRC%\bin\f*.res %_DEST%\bin\ - ..\%__SRC%\bin\f*.dll %_DEST%\bin\ - ..\%__SRC%\bin\kdefilepicker %_DEST%\bin\kdefilepicker -+..\%__SRC%\bin\tdefilepicker %_DEST%\bin\tdefilepicker - ..\%__SRC%\lib\f*.so %_DEST%\lib\ - ..\%__SRC%\lib\*.dylib %_DEST%\lib\*.dylib - -diff --git a/fpicker/source/generic/fpicker.cxx b/fpicker/source/generic/fpicker.cxx -index 1444fde..fa5b2ec 100644 ---- a/fpicker/source/generic/fpicker.cxx -+++ b/fpicker/source/generic/fpicker.cxx -@@ -65,6 +65,8 @@ static OUString FilePicker_getSystemPickerServiceName() - return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDEFilePicker")); - else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde4")) - return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDE4FilePicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("tde")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.TDEFilePicker")); - else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("macosx")) - return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.AquaFilePicker")); - else -@@ -141,6 +143,8 @@ static OUString FolderPicker_getSystemPickerServiceName() - return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.GtkFolderPicker")); - else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde")) - return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDEFolderPicker")); -+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("tde")) -+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.TDEFolderPicker")); - else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("macosx")) - return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.AquaFolderPicker")); - #endif -diff --git a/fpicker/source/unx/kde/makefile.mk b/fpicker/source/unx/kde/makefile.mk -index 1548d7b..768c946 100644 ---- a/fpicker/source/unx/kde/makefile.mk -+++ b/fpicker/source/unx/kde/makefile.mk -@@ -29,8 +29,8 @@ PRJ=..$/..$/.. - - PRJNAME=fpicker - TARGET=kdefilepicker --LIBTARGET=NO - ENABLE_EXCEPTIONS=TRUE -+LIBTARGET=NO - EXTERNAL_WARNINGS_NOT_ERRORS=TRUE - - # --- Settings ----------------------------------------------------- -@@ -63,7 +63,7 @@ SLOFILES =\ - - APP1TARGET=$(TARGET) - APP1OBJS=$(SLOFILES) --APP1RPATH=OOO -+APP1RPATH=BRAND - APP1LINKFLAGS=$(KDE_LIBS) -lkio -lX11 - APP1STDLIBS=$(SALLIB) - -diff --git a/fpicker/source/unx/tde/makefile.mk b/fpicker/source/unx/tde/makefile.mk -new file mode 100644 -index 0000000..26d7979 ---- /dev/null -+++ b/fpicker/source/unx/tde/makefile.mk -@@ -0,0 +1,78 @@ -+#************************************************************************* -+# -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# Copyright 2010 Novell, Inc. -+# Copyright 2011 Timothy Pearson -+# -+# OpenOffice.org - a multi-platform office productivity suite -+# -+# This file is part of OpenOffice.org. -+# -+# OpenOffice.org is free software: you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License version 3 -+# only, as published by the Free Software Foundation. -+# -+# OpenOffice.org 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 Lesser General Public License version 3 for more details -+# (a copy is included in the LICENSE file that accompanied this code). -+# -+# You should have received a copy of the GNU Lesser General Public License -+# version 3 along with OpenOffice.org. If not, see -+# -+# for a copy of the LGPLv3 License. -+# -+#************************************************************************* -+ -+PRJ=..$/..$/.. -+ -+PRJNAME=fpicker -+TARGET=tdefilepicker -+ENABLE_EXCEPTIONS=TRUE -+LIBTARGET=NO -+EXTERNAL_WARNINGS_NOT_ERRORS=TRUE -+ -+# --- Settings ----------------------------------------------------- -+ -+.INCLUDE : settings.mk -+ -+# ------------------------------------------------------------------ -+ -+.IF "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -+ -+dummy: -+ @echo "Nothing to build. GUIBASE == $(GUIBASE), ENABLE_TDE is not set" -+ -+.ELSE # we build for TDE -+ -+CFLAGS+= $(TDE_CFLAGS) -+ -+.IF "$(COM)" == "GCC" -+CFLAGSCXX+=-Wno-shadow -+.ENDIF -+ -+# --- Files -------------------------------------------------------- -+ -+SLOFILES =\ -+ $(SLO)$/tdecommandthread.obj \ -+ $(SLO)$/tdefilepicker.obj \ -+ $(SLO)$/tdefilepicker.moc.obj \ -+ $(SLO)$/tdefpmain.obj \ -+ $(SLO)$/tdemodalityfilter.obj -+ -+APP1TARGET=$(TARGET) -+APP1OBJS=$(SLOFILES) -+APP1RPATH=OOO -+APP1LINKFLAGS=$(TDE_LIBS) -lkio -lX11 -+APP1STDLIBS=$(SALLIB) -+ -+.ENDIF # "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -+ -+# --- Targets ------------------------------------------------------ -+ -+.INCLUDE : target.mk -+ -+$(MISC)$/tdefilepicker.moc.cxx : tdefilepicker.hxx -+ $(MOC) $< -o $@ -diff --git a/fpicker/source/unx/tde/tdecommandthread.cxx b/fpicker/source/unx/tde/tdecommandthread.cxx -new file mode 100644 -index 0000000..8da50d2 ---- /dev/null -+++ b/fpicker/source/unx/tde/tdecommandthread.cxx -@@ -0,0 +1,183 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#include -+ -+#include -+ -+#include -+ -+#include -+ -+#if OSL_DEBUG_LEVEL > 1 -+#include -+#endif -+ -+////////////////////////////////////////////////////////////////////////// -+// CommandEvent -+////////////////////////////////////////////////////////////////////////// -+ -+TDECommandEvent::TDECommandEvent( const TQString &qCommand, TQStringList *pStringList ) -+ : TQCustomEvent( TypeId, pStringList ), -+ m_eCommand( Unknown ) -+{ -+ struct { -+ const char *pName; -+ CommandEventType eType; -+ } *pIdx, pMapping[] = -+ { -+ { "appendControl", AppendControl }, -+ { "enableControl", EnableControl }, -+ { "getValue", GetValue }, -+ { "setValue", SetValue }, -+ { "appendFilter", AppendFilter }, -+ { "appendFilterGroup", AppendFilterGroup }, -+ { "getCurrentFilter", GetCurrentFilter }, -+ { "setCurrentFilter", SetCurrentFilter }, -+ { "getDirectory", GetDirectory }, -+ { "setDirectory", SetDirectory }, -+ { "getFiles", GetFiles }, -+ { "setTitle", SetTitle }, -+ { "setType", SetType }, -+ { "setDefaultName", SetDefaultName }, -+ { "setMultiSelection", SetMultiSelection }, -+ { "exec", Exec }, -+ { 0, Unknown } -+ }; -+ -+ for ( pIdx = pMapping; pIdx->pName && qCommand != pIdx->pName; ++pIdx ) -+ ; -+ -+ m_eCommand = pIdx->eType; -+} -+ -+////////////////////////////////////////////////////////////////////////// -+// CommandThread -+////////////////////////////////////////////////////////////////////////// -+ -+TDECommandThread::TDECommandThread( TQWidget *pObject ) -+ : m_pObject( pObject ) -+{ -+} -+ -+TDECommandThread::~TDECommandThread() -+{ -+} -+ -+void TDECommandThread::run() -+{ -+ TQTextIStream qStream( stdin ); -+ qStream.setEncoding( TQTextStream::UnicodeUTF8 ); -+ -+ TQString qLine; -+ bool bQuit = false; -+ while ( !bQuit && !qStream.atEnd() ) -+ { -+ qLine = qStream.readLine(); -+ handleCommand( qLine, bQuit ); -+ } -+} -+ -+void TDECommandThread::handleCommand( const TQString &rString, bool &bQuit ) -+{ -+ TQMutexLocker qMutexLocker( &m_aMutex ); -+ -+#if OSL_DEBUG_LEVEL > 1 -+ ::std::cerr << "tdefilepicker received: " << rString.latin1() << ::std::endl; -+#endif -+ -+ bQuit = false; -+ TQStringList *pTokens = tokenize( rString ); -+ -+ if ( !pTokens ) -+ return; -+ if ( pTokens->empty() ) -+ { -+ delete pTokens, pTokens = NULL; -+ return; -+ } -+ -+ TQString qCommand = pTokens->front(); -+ pTokens->pop_front(); -+ -+ if ( qCommand == "exit" ) -+ { -+ bQuit = true; -+ kapp->exit(); -+ kapp->wakeUpGuiThread(); -+ _exit(0); // FIXME This prevents a SIGABRT on some systems Why? -+ } -+ else -+ kapp->postEvent( m_pObject, new TDECommandEvent( qCommand, pTokens ) ); -+} -+ -+TQStringList* TDECommandThread::tokenize( const TQString &rString ) -+{ -+ // Commands look like: -+ // command arg1 arg2 arg3 ... -+ // Args may be enclosed in '"', if they contain spaces. -+ -+ TQStringList *pList = new TQStringList(); -+ -+ TQString qBuffer; -+ qBuffer.reserve( 1024 ); -+ -+ const TQChar *pUnicode = rString.unicode(); -+ const TQChar *pEnd = pUnicode + rString.length(); -+ bool bQuoted = false; -+ -+ for ( ; pUnicode != pEnd; ++pUnicode ) -+ { -+ if ( *pUnicode == '\\' ) -+ { -+ ++pUnicode; -+ if ( pUnicode != pEnd ) -+ { -+ if ( *pUnicode == 'n' ) -+ qBuffer.append( '\n' ); -+ else -+ qBuffer.append( *pUnicode ); -+ } -+ } -+ else if ( *pUnicode == '"' ) -+ bQuoted = !bQuoted; -+ else if ( *pUnicode == ' ' && !bQuoted ) -+ { -+ pList->push_back( qBuffer ); -+ qBuffer.setLength( 0 ); -+ } -+ else -+ qBuffer.append( *pUnicode ); -+ } -+ pList->push_back( qBuffer ); -+ -+ return pList; -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde/tdecommandthread.hxx b/fpicker/source/unx/tde/tdecommandthread.hxx -new file mode 100644 -index 0000000..8697de9 ---- /dev/null -+++ b/fpicker/source/unx/tde/tdecommandthread.hxx -@@ -0,0 +1,98 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _TDECOMMANDTHREAD_HXX_ -+#define _TDECOMMANDTHREAD_HXX_ -+ -+#include -+#include -+#include -+ -+class TDECommandEvent : public TQCustomEvent -+{ -+public: -+ enum CommandEventType { -+ Unknown = 0, -+ -+ AppendControl, -+ EnableControl, -+ GetValue, -+ SetValue, -+ -+ AppendFilter, -+ AppendFilterGroup, -+ UpdateFilters, -+ GetCurrentFilter, -+ SetCurrentFilter, -+ -+ GetDirectory, -+ SetDirectory, -+ -+ GetFiles, -+ -+ SetTitle, -+ SetType, -+ SetDefaultName, -+ SetMultiSelection, -+ -+ Exec -+ }; -+ static const TQEvent::Type TypeId = (TQEvent::Type) ( (int) TQEvent::User + 42 /*random magic value*/ ); -+ -+protected: -+ CommandEventType m_eCommand; -+ -+public: -+ TDECommandEvent( const TQString &qCommand, TQStringList *pStringList ); -+ -+ CommandEventType command() const { return m_eCommand; } -+ TQStringList* stringList() { return static_cast< TQStringList* >( data() ); } -+}; -+ -+class TDECommandThread : public TQThread -+{ -+protected: -+ TQObject *m_pObject; -+ -+ TQMutex m_aMutex; -+ -+public: -+ TDECommandThread( TQWidget *pObject ); -+ virtual ~TDECommandThread(); -+ -+ virtual void run(); -+ -+protected: -+ void handleCommand( const TQString &rString, bool &bQuit ); -+ TQStringList* tokenize( const TQString &rString ); -+}; -+ -+#endif // _TDECOMMANDTHREAD_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde/tdefilepicker.cxx b/fpicker/source/unx/tde/tdefilepicker.cxx -new file mode 100644 -index 0000000..46ab20d ---- /dev/null -+++ b/fpicker/source/unx/tde/tdefilepicker.cxx -@@ -0,0 +1,735 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#include -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#ifdef TQT_NO_EMIT -+#define emit -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+ -+////////////////////////////////////////////////////////////////////////// -+// TDEFileDialog -+////////////////////////////////////////////////////////////////////////// -+ -+TDEFileDialog::TDEFileDialog( const TQString &startDir, const TQString &filter, -+ TQWidget *parent, const char *name ) -+ : KFileDialog( startDir, filter, parent, name, true, m_pCustomWidget = new TQVBox() ), -+ m_pCombosAndButtons( new TQHBox( m_pCustomWidget ) ), -+ m_pLabels( new TQVBox( m_pCombosAndButtons ) ), -+ m_pComboBoxes( new TQVBox( m_pCombosAndButtons ) ), -+ m_pPushButtons( new TQVBox( m_pCombosAndButtons ) ), -+ m_pCheckBoxes( new TQGrid( 2, m_pCustomWidget ) ), -+ m_bIsSave( false ), -+ m_bIsExecuting( false ), -+ m_bCanNotifySelection( true ) -+{ -+ connect( this, TQT_SIGNAL( fileHighlighted( const TQString & ) ), -+ this, TQT_SLOT( fileHighlightedCommand( const TQString & ) ) ); -+ -+ connect( this, TQT_SIGNAL( selectionChanged() ), -+ this, TQT_SLOT( selectionChangedCommand() ) ); -+ -+ m_pCustomWidget->setSpacing( KDialog::spacingHint() ); -+ m_pCombosAndButtons->setSpacing( KDialog::spacingHint() ); -+ -+ updateCustomWidgetLayout(); -+} -+ -+TDEFileDialog::~TDEFileDialog() -+{ -+} -+ -+void TDEFileDialog::resizeEvent( TQResizeEvent *pEvent ) -+{ -+ KFileDialog::resizeEvent( pEvent ); -+ -+ updateCustomWidgetLayout(); -+} -+ -+void TDEFileDialog::showEvent( TQShowEvent *pEvent ) -+{ -+ KFileDialog::showEvent( pEvent ); -+ -+ updateCustomWidgetLayout(); -+} -+ -+void TDEFileDialog::updateCustomWidgetLayout() -+{ -+ TQPoint qReferencePoint = filterWidget->mapTo( this, TQPoint( 0, 0 ) ); -+ TQPoint qCustomPoint = m_pCustomWidget->mapTo( this, TQPoint( 0, 0 ) ); -+ -+ int nLeft = qReferencePoint.x() - qCustomPoint.x(); -+ int nRight = m_pCustomWidget->width() - filterWidget->width() - nLeft; -+ -+ nLeft -= KDialog::spacingHint(); -+ nRight -= KDialog::spacingHint(); -+ m_pLabels->setFixedWidth( ( nLeft > 0 )? nLeft: 80 ); -+ // FIXME The following call sets the width of m_pPushButtons all right, -+ // but it also increases the width of m_pComboBoxes rapidly. Can we do -+ // anything about it? -+ m_pPushButtons->setFixedWidth( ( nRight > 0 )? nRight: 100 ); -+} -+ -+void TDEFileDialog::customEvent( TQCustomEvent *pEvent ) -+{ -+ if ( pEvent && pEvent->type() == TDECommandEvent::TypeId ) -+ { -+ TDECommandEvent *pCommandEvent = static_cast< TDECommandEvent* >( pEvent ); -+ TQStringList *pStringList = pCommandEvent->stringList(); -+ -+ int nListSize = -1; -+ if ( pStringList ) -+ nListSize = pStringList->size(); -+ -+ switch ( pCommandEvent->command() ) -+ { -+ case TDECommandEvent::AppendControl: -+ if ( nListSize >= 3 ) -+ { -+ appendControl( (*pStringList)[0], (*pStringList)[1], (*pStringList)[2] ); -+ } -+ break; -+ case TDECommandEvent::EnableControl: -+ if ( nListSize >= 2 ) -+ { -+ enableControl( (*pStringList)[0], (*pStringList)[1] ); -+ } -+ break; -+ case TDECommandEvent::GetValue: -+ if ( nListSize >= 2 ) -+ { -+ getValue( (*pStringList)[0], (*pStringList)[1] ); -+ } -+ break; -+ case TDECommandEvent::SetValue: -+ if ( nListSize >= 2 ) -+ { -+ TQStringList qStringList = (*pStringList); -+ qStringList.pop_front(); -+ qStringList.pop_front(); -+ -+ setValue( (*pStringList)[0], (*pStringList)[1], qStringList ); -+ } -+ break; -+ case TDECommandEvent::AppendFilter: -+ if ( nListSize >= 2 ) -+ { -+ appendFilter( (*pStringList)[0], (*pStringList)[1] ); -+ -+ // update the filters widget -+ setFilter( filters() ); -+ } -+ break; -+ case TDECommandEvent::AppendFilterGroup: -+ if ( nListSize >= 1 ) -+ { -+ TQStringList::const_iterator it = pStringList->begin(); -+ ++it; // We ignore the filter group name -+ -+ while ( it != pStringList->end() ) -+ { -+ TQString qTitle = *it; -+ ++it; -+ if ( it != pStringList->end() ) -+ { -+ appendFilter( qTitle, (*it) ); -+ ++it; -+ } -+ } -+ -+ // update the filters widget -+ setFilter( filters() ); -+ } -+ break; -+ case TDECommandEvent::GetCurrentFilter: -+ { -+ TQString qCurrentFilter = filterWidget->currentText(); -+ sendCommand( "currentFilter " + escapeString( qCurrentFilter ) ); -+ } -+ break; -+ case TDECommandEvent::SetCurrentFilter: -+ if ( nListSize >= 1 ) -+ { -+ static_cast< TDEFileFilterComboHack* >( filterWidget )->setCurrentFilter( pStringList->front() ); -+ } -+ break; -+ case TDECommandEvent::GetDirectory: -+ { -+ TQString qDirectory = baseURL().url(); -+ if ( qDirectory.startsWith( "file:/" ) && qDirectory.mid( 6, 1 ) != "/" ) -+ qDirectory.replace( "file:/", "file:///" ); -+ sendCommand( "currentDirectory " + escapeString( qDirectory ) ); -+ } -+ break; -+ case TDECommandEvent::SetDirectory: -+ if ( nListSize >= 1 ) -+ { -+ setURL( pStringList->front() ); -+ } -+ break; -+ case TDECommandEvent::GetFiles: -+ { -+ TQString qString; -+ qString.reserve( 1024 ); -+ -+ qString.append( "files" ); -+ -+ if ( result() == TQDialog::Accepted ) -+ { -+ KURL::List qList( selectedURLs() ); -+ for ( KURL::List::const_iterator it = qList.begin(); it != qList.end(); ++it ) -+ appendURL( qString, (*it) ); -+ } -+ else -+ { -+ // we have to return the selected files anyway -+ const KFileItemList *pItems = ops->selectedItems(); -+ for ( KFileItemListIterator it( *pItems ); it.current(); ++it ) -+ appendURL( qString, (*it)->url() ); -+ } -+ -+ sendCommand( qString ); -+ setCanNotifySelection( true ); -+ } -+ break; -+ case TDECommandEvent::SetTitle: -+ if ( nListSize >= 1 ) -+ { -+ setCaption( pStringList->front() ); -+ } -+ break; -+ case TDECommandEvent::SetType: -+ if ( nListSize >= 1 ) -+ { -+ TQString qType( pStringList->front() ); -+ if ( qType == "open" ) -+ { -+ setIsSave( false ); -+ setCaption( i18n( "Open" ) ); -+ } -+ else if ( qType == "save" ) -+ { -+ setIsSave( true ); -+ setCaption( i18n( "Save As" ) ); -+ } -+ } -+ break; -+ case TDECommandEvent::SetDefaultName: -+ if ( nListSize >= 1 ) -+ { -+ setKeepLocation( true ); -+ setSelection( pStringList->front() ); -+ } -+ break; -+ case TDECommandEvent::SetMultiSelection: -+ if ( nListSize >= 1 ) -+ { -+ if ( pStringList->front() == "true" ) -+ setMode( KFile::Files ); -+ else -+ setMode( KFile::File ); -+ } -+ break; -+ case TDECommandEvent::Exec: -+ { -+ filterWidget->setEditable( false ); -+ setIsExecuting( true ); -+ bool bCanExit = false; -+ do { -+ setCanNotifySelection( true ); -+ exec(); -+ -+ KURL qLocalSelectedURL = mostLocalURL( selectedURL() ); -+ TQString qProtocol( qLocalSelectedURL.protocol() ); -+ -+ if ( isSave() && result() == TQDialog::Accepted ) -+ { -+ if ( qProtocol == "file" ) -+ { -+ TQString qFileName( addExtension( qLocalSelectedURL.path() ) ); -+ bCanExit = -+ !QFile::exists( qFileName ) || -+ ( KMessageBox::warningYesNo( 0, -+ i18n( "A file named \"%1\" already exists. " -+ "Are you sure you want to overwrite it?" ).arg( qFileName ), -+ i18n( "Overwrite File?" ), -+ i18n( "Overwrite" ), KStdGuiItem::cancel() ) == KMessageBox::Yes ); -+ } -+ else if ( !isSupportedProtocol( qProtocol ) ) -+ { -+ KMessageBox::sorry( 0, -+ i18n( "Saving using protocol \"%1\" is not supported." ).arg( qProtocol ) ); -+ bCanExit = false; -+ } -+ else -+ bCanExit = true; -+ } -+ else if ( !isSave() && result() == TQDialog::Accepted && !isSupportedProtocol( qProtocol ) ) -+ { -+ KMessageBox::information( 0, -+ i18n( "Protocol \"%1\" is supported only partially. " -+ "Local copy of the file will be created." ).arg( qProtocol ) ); -+ bCanExit = true; -+ } -+ else -+ bCanExit = true; -+ } while ( !bCanExit ); -+ setIsExecuting( false ); -+ -+ if ( result() == TQDialog::Accepted ) -+ sendCommand( "accept" ); -+ else -+ sendCommand( "reject" ); -+ } -+ break; -+ default: -+ break; -+ } -+ -+ // FIXME Some cleanup of pEvent? delete something, etc.? -+ } -+} -+ -+void TDEFileDialog::appendControl( const TQString &rId, const TQString &rType, const TQString &rTitle ) -+{ -+ TQString qLabel( rTitle ); -+ qLabel.replace( '~', '&' ); -+ -+ if ( rType == "checkbox" ) -+ { -+ TQCheckBox *pCheckBox = new TQCheckBox( qLabel, m_pCheckBoxes, rId.utf8() ); -+ -+ pCheckBox->setEnabled( true ); -+ pCheckBox->setChecked( false ); -+ } -+ else if ( rType == "listbox" ) -+ { -+ TQLabel *pComboLabel = new TQLabel( qLabel, m_pLabels ); -+ TQComboBox *pComboBox = new TQComboBox( m_pComboBoxes, rId.utf8() ); -+ -+ pComboLabel->setBuddy( pComboBox ); -+ pComboBox->setEnabled( true ); -+ } -+ else if ( rType == "pushbutton" ) -+ { -+ TQPushButton *pPushButton = new TQPushButton( qLabel, m_pPushButtons, rId.utf8() ); -+ pPushButton->setEnabled( true ); -+ } -+} -+ -+TQWidget* TDEFileDialog::findControl( const TQString &rId ) const -+{ -+ TQObjectList *pList = m_pCustomWidget->queryList(); -+ TQCString qName( rId.utf8() ); -+ TQObjectList::const_iterator it = pList->begin(); -+ -+ for ( ; it != pList->end() && qName != (*it)->name(); ++it ) -+ ; -+ -+ TQWidget *pWidget = NULL; -+ if ( it != pList->end() ) -+ pWidget = static_cast< TQWidget* >( *it ); -+ -+ delete pList; -+ -+ return pWidget; -+} -+ -+void TDEFileDialog::enableControl( const TQString &rId, const TQString &rValue ) -+{ -+ TQWidget *pWidget = findControl( rId ); -+ -+ if ( pWidget ) -+ pWidget->setEnabled( rValue.lower() == "true" ); -+} -+ -+void TDEFileDialog::getValue( const TQString &rId, const TQString &rAction ) -+{ -+ TQWidget *pWidget = findControl( rId ); -+ TQString qString; -+ qString.reserve( 1024 ); -+ qString.append( "value" ); -+ -+ if ( pWidget ) -+ { -+ TQCString qClassName = pWidget->className(); -+ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING ) -+ { -+ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget ); -+ -+ if ( pCheckBox->isChecked() ) -+ qString.append( " bool true" ); -+ else -+ qString.append( " bool false" ); -+ } -+ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING ) -+ { -+ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget ); -+ if ( rAction == "getItems" ) -+ { -+ qString.append( " stringList" ); -+ for ( int nIdx = 0; nIdx < pComboBox->count(); ++nIdx ) -+ { -+ qString.append( ' ' ); -+ appendEscaped( qString, pComboBox->text( nIdx ) ); -+ } -+ } -+ else if ( rAction == "getSelectedItem" ) -+ { -+ qString.append( " string " ); -+ appendEscaped( qString, pComboBox->currentText() ); -+ } -+ else if ( rAction == "getSelectedItemIndex" ) -+ { -+ qString.append( " int " ); -+ qString.append( TQString().setNum( pComboBox->currentItem() ) ); -+ } -+ // TODO getHelpURL -+ } -+ // TODO push button -+ } -+ -+ sendCommand( qString ); -+} -+ -+void TDEFileDialog::setValue( const TQString &rId, const TQString &rAction, const TQStringList &rValue ) -+{ -+ TQWidget *pWidget = findControl( rId ); -+ -+ if ( pWidget ) -+ { -+ TQCString qClassName = pWidget->className(); -+ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING ) -+ { -+ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget ); -+ -+ bool bValue = ( !rValue.isEmpty() ) && ( rValue.front().lower() == "true" ); -+ pCheckBox->setChecked( bValue ); -+ } -+ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING ) -+ { -+ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget ); -+ if ( rAction == "addItem" ) -+ { -+ if ( !rValue.isEmpty() ) -+ pComboBox->insertItem( rValue.front() ); -+ } -+ else if ( rAction == "addItems" ) -+ { -+ pComboBox->insertStringList( rValue ); -+ } -+ else if ( rAction == "deleteItem" ) -+ { -+ if ( !rValue.isEmpty() ) -+ pComboBox->removeItem( rValue.front().toInt() ); -+ } -+ else if ( rAction == "deleteItems" ) -+ { -+ pComboBox->clear(); -+ } -+ else if ( rAction == "setSelectedItem" ) -+ { -+ if ( !rValue.isEmpty() ) -+ pComboBox->setCurrentItem( rValue.front().toInt() ); -+ } -+ // FIXME setHelpURL is ignored -+ } -+ // TODO push button -+ } -+} -+ -+void TDEFileDialog::appendFilter( const TQString &rTitle, const TQString &rFilter ) -+{ -+ // Filters are separated by ';' -+ TQString qFilter( rFilter ); -+ qFilter.replace( TQChar( ';' ), TQChar( ' ' ) ).replace( "*.*", "*" ); -+ -+ // Workaround for too wide (*.bmp;...) entry -+ TQString qTitle( rTitle ); -+ qTitle.replace( TQRegExp( "^<([^>]*)> \\(.*" ), "<\\1>" ); -+ -+ m_aFilters.push_back( qMakePair( qTitle, qFilter ) ); -+} -+ -+TQString TDEFileDialog::filters() const -+{ -+ TQString qString, qTmp; -+ bool bFirstFilter = true; -+ -+ for ( FilterList::const_iterator it = m_aFilters.begin(); it != m_aFilters.end(); ++it ) -+ { -+ if ( bFirstFilter ) -+ bFirstFilter = false; -+ else -+ qString.append( '\n' ); -+ -+ qString.append( (*it).second ); -+ qString.append( '|' ); -+ -+ qTmp = (*it).first; -+ qString.append( qTmp.replace( '/', "\\/" ) ); -+ } -+ -+ return qString; -+} -+ -+TQString TDEFileDialog::addExtension( const TQString &rFileName ) const -+{ -+ if ( !isSave() ) -+ return rFileName; -+ -+ TQString qExtension; -+ -+ TQWidget *pExtensionWidget = findControl( "100" ); // CHECKBOX_AUTOEXTENSION -+ TQCheckBox *pExtensionCB = pExtensionWidget? static_cast< TQCheckBox* >( pExtensionWidget->qt_cast( TQCHECKBOX_OBJECT_NAME_STRING ) ): NULL; -+ if ( pExtensionCB && pExtensionCB->isChecked() ) -+ { -+ // FIXME: qFilter can be a MIME; we ignore it now... -+ TQStringList qFilterList = TQStringList::split( " ", currentFilter() ); -+ for ( TQStringList::const_iterator it = qFilterList.begin(); -+ qExtension.isEmpty() && it != qFilterList.end(); -+ ++it ) -+ { -+ int nUnwanted = (*it).findRev( '*' ); -+ if ( nUnwanted < 0 ) -+ nUnwanted = (*it).findRev( '?' ); -+ else -+ nUnwanted = ::std::max( nUnwanted, (*it).find( '?', nUnwanted ) ); -+ -+ int nIdx = (*it).find( '.', ::std::max( nUnwanted, 0 ) ); -+ if ( nIdx >= 0 ) -+ qExtension = (*it).mid( nIdx ).lower(); -+ } -+ } -+ -+ if ( qExtension.isEmpty() || qExtension == "." || rFileName.endsWith( qExtension ) ) -+ return rFileName; -+ else -+ return rFileName + qExtension; -+} -+ -+bool TDEFileDialog::isSupportedProtocol( const TQString &rProtocol ) const -+{ -+ // TODO Get this information directly from OOo -+ const char * pOOoProtocols[] = { "", "smb", "ftp", "http", "file", "mailto", -+ "vnd.sun.star.webdav", "news", "private", "vnd.sun.star.help", -+ "https", "slot", "macro", "javascript", "imap", "pop3", "data", -+ "cid", "out", "vnd.sun.star.wfs", "vnd.sun.star.hier", "vim", -+ ".uno", ".component", "vnd.sun.star.pkg", "ldap", "db", -+ "vnd.sun.star.cmd", "vnd.sun.star.script", "vnd.sun.star.odma", -+ "telnet", -+ NULL }; -+ -+ for ( const char **pIndex = pOOoProtocols; *pIndex != NULL; ++pIndex ) -+ { -+ if ( rProtocol == *pIndex ) -+ return true; -+ } -+ -+ // TODO gnome-vfs bits here -+ -+ return false; -+} -+ -+KURL TDEFileDialog::mostLocalURL( const KURL &rURL ) const -+{ -+#if KDE_IS_VERSION(3,5,0) -+ KURL qMostLocalURL( KIO::NetAccess::mostLocalURL( rURL, const_cast( this ) ) ); -+ if ( qMostLocalURL.isLocalFile() ) -+ return qMostLocalURL; -+ else -+ { -+ // Terrible hack to get even non-existing media:// files right -+ qMostLocalURL.cd( ".." ); -+ KURL qMostLocalPath( KIO::NetAccess::mostLocalURL( qMostLocalURL, const_cast( this ) ) ); -+ if ( qMostLocalPath.isLocalFile() ) -+ { -+ qMostLocalPath.addPath( rURL.fileName() ); -+ return qMostLocalPath; -+ } -+ } -+#endif -+ -+ return rURL; -+} -+ -+TQString TDEFileDialog::localCopy( const TQString &rFileName ) const -+{ -+ // 106 == MIB enum for UTF-8 -+ KURL qLocalURL = mostLocalURL( KURL( rFileName, 106 ) ); -+ if ( qLocalURL.isLocalFile() ) -+ return qLocalURL.url(); -+ -+ int nExtensionPos = rFileName.findRev( '/' ); -+ if ( nExtensionPos >= 0 ) -+ nExtensionPos = rFileName.find( '.', nExtensionPos ); -+ else -+ nExtensionPos = rFileName.find( '.' ); -+ -+ KTempFile qTempFile( TQString::null, ( nExtensionPos < 0 )? TQString(): rFileName.mid( nExtensionPos ) ); -+ KURL qDestURL; -+ qDestURL.setPath( qTempFile.name() ); -+ -+ if ( !KIO::NetAccess::file_copy( rFileName, qDestURL, 0600, true, false, NULL ) ) -+ { -+ KMessageBox::error( 0, KIO::NetAccess::lastErrorString() ); -+ return TQString::null; -+ } -+ -+ return qDestURL.url(); -+} -+ -+void TDEFileDialog::fileHighlightedCommand( const TQString & ) -+{ -+ if ( canNotifySelection() ) -+ { -+ sendCommand( "fileSelectionChanged" ); -+ setCanNotifySelection( false ); -+ } -+} -+ -+void TDEFileDialog::selectionChangedCommand() -+{ -+ if ( canNotifySelection() ) -+ { -+ sendCommand( "fileSelectionChanged" ); -+ setCanNotifySelection( false ); -+ } -+} -+ -+void TDEFileDialog::sendCommand( const TQString &rCommand ) -+{ -+#if OSL_DEBUG_LEVEL > 1 -+ ::std::cerr << "tdefilepicker sent: " << rCommand.latin1() << ::std::endl; -+#endif -+ -+ //m_aOutputStream << rCommand << endl; -+ ::std::cout << rCommand.utf8() << ::std::endl; -+} -+ -+void TDEFileDialog::appendURL( TQString &rBuffer, const KURL &rURL ) -+{ -+ // From Martin Kretzschmar: -+ // file:///path/to/test%E0.odt is not a valid URL from OOo's point of -+ // view. (?Most modern parts of?) OOo assume(s) that the URL contains only -+ // ASCII characters (which test%E0.odt does) and is UTF-8 after unescaping -+ // (which file:///path/test%E0.odt is not). -+ // Cf. the comment in sal/inc/osl/file.h. -+ // 106 == MIB enum for UTF-8 -+ TQString qUrlStr = addExtension( rURL.url( 0, 106 ) ); -+ -+ if ( !isExecuting() && !isSupportedProtocol( rURL.protocol() ) ) -+ qUrlStr = localCopy( qUrlStr ); -+ -+ if ( qUrlStr.startsWith( "file:/" ) && qUrlStr.mid( 6, 1 ) != "/" ) -+ qUrlStr.replace( "file:/", "file:///" ); -+ -+ rBuffer.append( " " ); -+ if ( !qUrlStr.isEmpty() ) -+ appendEscaped( rBuffer, qUrlStr ); -+} -+ -+void TDEFileDialog::appendEscaped( TQString &rBuffer, const TQString &rString ) -+{ -+ const TQChar *pUnicode = rString.unicode(); -+ const TQChar *pEnd = pUnicode + rString.length(); -+ -+ rBuffer.append( '"' ); -+ for ( ; pUnicode != pEnd; ++pUnicode ) -+ { -+ if ( *pUnicode == '\\' ) -+ rBuffer.append( "\\\\" ); -+ else if ( *pUnicode == '"' ) -+ rBuffer.append( "\\\"" ); -+ else if ( *pUnicode == '\n' ) -+ rBuffer.append( "\\\n" ); -+ else -+ rBuffer.append( *pUnicode ); -+ } -+ rBuffer.append( '"' ); -+} -+ -+TQString TDEFileDialog::escapeString( const TQString &rString ) -+{ -+ TQString qString; -+ qString.reserve( 2*rString.length() + 2 ); // every char escaped + quotes -+ -+ appendEscaped( qString, rString ); -+ -+ return qString; -+} -+ -+ -+void TDEFileFilterComboHack::setCurrentFilter( const TQString& filter ) -+{ -+ setCurrentText( filter ); -+ filterChanged(); -+ -+ // Workaround for 'Filter name (*.blah)' vs. 'Filter name' -+ if ( currentText() != text( currentItem() ) ) -+ { -+ int nItem = 0; -+ for ( ; nItem < count() && !text( nItem ).startsWith( filter ); ++nItem ); -+ -+ if ( nItem < count() ) -+ setCurrentItem( nItem ); -+ else -+ setCurrentItem( 0 ); -+ -+ filterChanged(); -+ } -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde/tdefilepicker.hxx b/fpicker/source/unx/tde/tdefilepicker.hxx -new file mode 100644 -index 0000000..f411db5 ---- /dev/null -+++ b/fpicker/source/unx/tde/tdefilepicker.hxx -@@ -0,0 +1,128 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _TDEFILEPICKER_HXX_ -+#define _TDEFILEPICKER_HXX_ -+ -+#include -+ -+#include -+#include -+ -+class TQGrid; -+class TQHBox; -+class TQVBox; -+ -+class TDEFileDialog : public KFileDialog -+{ -+ Q_OBJECT -+ -+protected: -+ typedef TQPair< TQString, TQString > FilterEntry; -+ typedef TQValueList< FilterEntry > FilterList; -+ -+ TQVBox *m_pCustomWidget; -+ TQHBox *m_pCombosAndButtons; -+ -+ TQVBox *m_pLabels; -+ TQVBox *m_pComboBoxes; -+ TQVBox *m_pPushButtons; -+ -+ TQGrid *m_pCheckBoxes; -+ -+ FilterList m_aFilters; -+ -+ /** Are we a "Save As" dialog? -+ * -+ * We cannot use KFileDialog::setOperationMode() here, because then -+ * it automatically adds an "Automatically select filename extension" -+ * check box, and completely destroys the dialog's layout -+ * (custom list boxes are under this check box, which looks ugly). -+ */ -+ bool m_bIsSave; -+ bool m_bIsExecuting; -+ -+ bool m_bCanNotifySelection; -+ -+public: -+ TDEFileDialog( const TQString &startDir, const TQString &filter, -+ TQWidget *parent, const char *name ); -+ virtual ~TDEFileDialog(); -+ -+protected: -+ virtual void resizeEvent( TQResizeEvent *pEvent ); -+ virtual void showEvent( TQShowEvent *pEvent ); -+ void updateCustomWidgetLayout(); -+ -+ virtual void customEvent( TQCustomEvent *pEvent ); -+ -+protected: -+ void appendControl( const TQString &rId, const TQString &rType, const TQString &rTitle ); -+ TQWidget* findControl( const TQString &rId ) const; -+ void enableControl( const TQString &rId, const TQString &rValue ); -+ void getValue( const TQString &rId, const TQString &rAction ); -+ void setValue( const TQString &rId, const TQString &rAction, const TQStringList &rValue ); -+ -+ void appendFilter( const TQString &rTitle, const TQString &rFilter ); -+ TQString filters() const; -+ TQString addExtension( const TQString &rFileName ) const; -+ -+ void setIsSave( bool bIsSave ) { m_bIsSave = bIsSave; } -+ bool isSave( void ) const { return m_bIsSave; } -+ -+ void setIsExecuting( bool bIsExecuting ) { m_bIsExecuting = bIsExecuting; } -+ bool isExecuting( void ) const { return m_bIsExecuting; } -+ -+ bool isSupportedProtocol( const TQString &rProtocol ) const; -+ KURL mostLocalURL( const KURL &rURL ) const; -+ TQString localCopy( const TQString &rFileName ) const; -+ -+ void setCanNotifySelection( bool bCanNotifySelection ) { m_bCanNotifySelection = bCanNotifySelection; } -+ bool canNotifySelection( void ) const { return m_bCanNotifySelection; } -+ -+protected slots: -+ void fileHighlightedCommand( const TQString & ); -+ void selectionChangedCommand(); -+ -+protected: -+ void sendCommand( const TQString &rCommand ); -+ void appendURL( TQString &rBuffer, const KURL &rURL ); -+ void appendEscaped( TQString &rBuffer, const TQString &rString ); -+ TQString escapeString( const TQString &rString ); -+}; -+ -+class TDEFileFilterComboHack : public KFileFilterCombo -+{ -+public: -+ void setCurrentFilter( const TQString& filter ); -+}; -+ -+#endif // _TDEFILEPICKER_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde/tdefpmain.cxx b/fpicker/source/unx/tde/tdefpmain.cxx -new file mode 100644 -index 0000000..eb20aa3 ---- /dev/null -+++ b/fpicker/source/unx/tde/tdefpmain.cxx -@@ -0,0 +1,95 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#include -+ -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+#include -+#include -+ -+////////////////////////////////////////////////////////////////////////// -+// Main -+////////////////////////////////////////////////////////////////////////// -+ -+static KCmdLineOptions sOptions[] = -+{ -+ { "winid ", I18N_NOOP("Window ID to which is the fpicker modal"), "0" }, -+ KCmdLineLastOption -+}; -+ -+int main( int argc, char* argv[] ) -+{ -+ // we fake the name of the application to have "OpenOffice.org" in the -+ // title -+ KAboutData qAboutData( "tdefilepicker", I18N_NOOP( "OpenOffice.org" ), -+ "0.1", I18N_NOOP( "tdefilepicker is an implementation of the TDE file dialog for OpenOffice.org." ), -+ KAboutData::License_LGPL, -+ "(c) 2004, Jan Holesovsky" ); -+ qAboutData.addAuthor( "Jan Holesovsky", I18N_NOOP("Original author and current maintainer"), "kendy@openoffice.org" ); -+ -+ // Let the user see that this does something... -+ ::std::cerr << "tdefilepicker, an implementation of TDE file dialog for OOo." << ::std::endl -+ << "Type 'exit' and press Enter to finish." << ::std::endl; -+ -+ KCmdLineArgs::addCmdLineOptions( sOptions ); -+ KCmdLineArgs::init( argc, argv, &qAboutData ); -+ -+ KLocale::setMainCatalogue( "kdialog" ); -+ -+ KApplication kApplication; -+ -+ // Setup the modality -+ KCmdLineArgs *pArgs = KCmdLineArgs::parsedArgs(); -+ long nWinId = atol( pArgs->getOption( "winid" ) ); -+ pArgs->clear(); -+ -+ TDEModalityFilter qModalityFilter( nWinId ); -+ -+ TDEFileDialog aFileDialog( NULL, TQString(), NULL, "tdefiledialog" ); -+ -+ TDECommandThread qCommandThread( &aFileDialog ); -+ qCommandThread.start(); -+ -+ kApplication.exec(); -+ -+ qCommandThread.wait(); -+ -+ ::std::cout << "exited" << ::std::endl; -+ -+ return 0; -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde/tdemodalityfilter.cxx b/fpicker/source/unx/tde/tdemodalityfilter.cxx -new file mode 100644 -index 0000000..6ced314 ---- /dev/null -+++ b/fpicker/source/unx/tde/tdemodalityfilter.cxx -@@ -0,0 +1,70 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#include -+ -+#include -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+////////////////////////////////////////////////////////////////////////// -+// Modality filter -+////////////////////////////////////////////////////////////////////////// -+ -+TDEModalityFilter::TDEModalityFilter( WId nWinId ) -+ : m_nWinId( nWinId ) -+{ -+ kapp->installEventFilter( this ); -+} -+ -+TDEModalityFilter::~TDEModalityFilter() -+{ -+ kapp->removeEventFilter( this ); -+} -+ -+bool TDEModalityFilter::eventFilter( TQObject *pObject, TQEvent *pEvent ) -+{ -+ if ( pObject->isWidgetType() && pEvent->type() == TQEvent::Show ) -+ { -+ KDialogBase* pDlg = ::qt_cast< KDialogBase* >( pObject ); -+ if ( pDlg != NULL && m_nWinId != 0 ) -+ { -+ XSetTransientForHint( qt_xdisplay(), pDlg->winId(), m_nWinId ); -+ m_nWinId = 0; -+ } -+ } -+ return false; -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde/tdemodalityfilter.hxx b/fpicker/source/unx/tde/tdemodalityfilter.hxx -new file mode 100644 -index 0000000..b00f9a3 ---- /dev/null -+++ b/fpicker/source/unx/tde/tdemodalityfilter.hxx -@@ -0,0 +1,49 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _TDEMODALITYFILTER_HXX_ -+#define _TDEMODALITYFILTER_HXX_ -+ -+#include -+ -+class TDEModalityFilter : public TQObject -+{ -+private: -+ WId m_nWinId; -+ -+public: -+ TDEModalityFilter( WId nWinId ); -+ virtual ~TDEModalityFilter(); -+ -+ virtual bool eventFilter( TQObject *pObject, TQEvent *pEvent ); -+}; -+ -+#endif // _TDEMODALITYFILTER_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde_unx/FPServiceInfo.hxx b/fpicker/source/unx/tde_unx/FPServiceInfo.hxx -new file mode 100644 -index 0000000..2dcbe6d ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/FPServiceInfo.hxx -@@ -0,0 +1,48 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _FPSERVICEINFO_HXX_ -+#define _FPSERVICEINFO_HXX_ -+ -+// the service names -+#define FILE_PICKER_SERVICE_NAME "com.sun.star.ui.dialogs.TDEFilePicker" -+ -+// the implementation names -+#define FILE_PICKER_IMPL_NAME "com.sun.star.ui.dialogs.UnxFilePicker" -+ -+// the registry key names -+// a key under which this service will be registered, -+// Format: -> "/ImplName/UNO/SERVICES/ServiceName" -+// -+#define FILE_PICKER_REGKEY_NAME "/com.sun.star.ui.dialogs.UnxFilePicker/UNO/SERVICES/com.sun.star.ui.dialogs.TDEFilePicker" -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde_unx/UnxCommandThread.cxx b/fpicker/source/unx/tde_unx/UnxCommandThread.cxx -new file mode 100644 -index 0000000..e6ae0bb ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/UnxCommandThread.cxx -@@ -0,0 +1,315 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#include -+#include -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+using namespace ::com::sun::star; -+ -+////////////////////////////////////////////////////////////////////////// -+// UnxFilePickerCommandThread -+////////////////////////////////////////////////////////////////////////// -+ -+UnxFilePickerCommandThread::UnxFilePickerCommandThread( UnxFilePickerNotifyThread *pNotifyThread, int nReadFD ) -+ : m_pNotifyThread( pNotifyThread ), -+ m_nReadFD( nReadFD ) -+{ -+} -+ -+UnxFilePickerCommandThread::~UnxFilePickerCommandThread() -+{ -+} -+ -+sal_Bool SAL_CALL UnxFilePickerCommandThread::result() -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_aResult; -+} -+ -+::rtl::OUString SAL_CALL UnxFilePickerCommandThread::getCurrentFilter() -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_aGetCurrentFilter; -+} -+ -+::rtl::OUString SAL_CALL UnxFilePickerCommandThread::getDirectory() -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_aGetDirectory; -+} -+ -+uno::Sequence< ::rtl::OUString > SAL_CALL UnxFilePickerCommandThread::getFiles() -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ sal_Int32 nSize = m_aGetFiles.size(); -+ uno::Sequence< ::rtl::OUString > aFiles( ( nSize > 1 )? nSize + 1: nSize ); -+ -+ if ( nSize == 1 ) -+ aFiles[0] = m_aGetFiles.front(); -+ else if ( nSize > 1 ) -+ { -+ // First entry in the sequence must be the dirname, the others are the -+ // filenames, so we have to rearrange the list... -+ -+ ::rtl::OUString aFront = m_aGetFiles.front(); -+ sal_Int32 nLastSlash = aFront.lastIndexOf( '/' ); -+ -+ aFiles[0] = ( nLastSlash >= 0 )? aFront.copy( 0, nLastSlash ): ::rtl::OUString(); -+ ++nLastSlash; -+ -+ sal_Int32 nIdx = 1; -+ for ( ::std::list< ::rtl::OUString >::const_iterator it = m_aGetFiles.begin(); -+ it != m_aGetFiles.end(); ++it, ++nIdx ) -+ { -+ sal_Int32 nLength = (*it).getLength() - nLastSlash; -+ aFiles[nIdx] = ( nLength >= 0 )? (*it).copy( nLastSlash, nLength ): ::rtl::OUString(); -+ } -+ } -+ -+ return aFiles; -+} -+ -+uno::Any SAL_CALL UnxFilePickerCommandThread::getValue() -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_aGetValue; -+} -+ -+void SAL_CALL UnxFilePickerCommandThread::run() -+{ -+ if ( m_nReadFD < 0 ) -+ return; -+ -+ sal_Int32 nBufferSize = 1024; // 1 is for testing, 1024 for real use -+ sal_Char *pBuffer = new sal_Char[nBufferSize]; -+ sal_Char *pBufferEnd = pBuffer + nBufferSize; -+ -+ sal_Char *pWhereToRead = pBuffer; -+ sal_Char *pEntryBegin = pBuffer; -+ sal_Int32 nBytesRead = 0; -+ sal_Bool bShouldExit = sal_False; -+ while ( !bShouldExit && ( nBytesRead = read( m_nReadFD, pWhereToRead, pBufferEnd - pWhereToRead ) ) > 0 ) -+ { -+ sal_Bool bFoundNL = sal_False; -+ sal_Char *pWhereToReadEnd = pWhereToRead + nBytesRead; -+ sal_Char *pEntryEnd = pWhereToRead; -+ do { -+ for ( ; pEntryEnd < pWhereToReadEnd && *pEntryEnd != '\n'; ++pEntryEnd ) -+ ; -+ -+ if ( pEntryEnd < pWhereToReadEnd ) -+ { -+ bFoundNL = sal_True; -+ *pEntryEnd = 0; -+ -+ if ( strcmp( pEntryBegin, "exited" ) == 0 ) -+ bShouldExit = sal_True; -+ else -+ handleCommand( ::rtl::OUString( pEntryBegin, pEntryEnd - pEntryBegin, RTL_TEXTENCODING_UTF8 )/*, bQuit*/ ); -+ -+ pEntryBegin = pEntryEnd + 1; -+ } -+ } while ( pEntryEnd < pWhereToReadEnd ); -+ -+ if ( bFoundNL ) -+ { -+ if ( pEntryBegin < pBufferEnd ) -+ memmove( pBuffer, pEntryBegin, pWhereToReadEnd - pEntryBegin ); -+ } -+ else -+ { -+ // enlarge the buffer size -+ nBufferSize *= 2; -+ sal_Char *pNewBuffer = new sal_Char[nBufferSize]; -+ if ( pEntryBegin < pBufferEnd ) -+ memmove( pNewBuffer, pEntryBegin, pWhereToReadEnd - pEntryBegin ); -+ -+ delete[] pBuffer; -+ pBuffer = pNewBuffer; -+ pBufferEnd = pBuffer + nBufferSize; -+ } -+ -+ pWhereToRead = pBuffer + ( pWhereToReadEnd - pEntryBegin ); -+ pEntryBegin = pBuffer; -+ } -+} -+ -+void SAL_CALL UnxFilePickerCommandThread::handleCommand( const ::rtl::OUString &rCommand ) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+#if OSL_DEBUG_LEVEL > 0 -+ ::std::cerr << "UnxFilePicker received: \"" << -+ OUStringToOString( rCommand, RTL_TEXTENCODING_ASCII_US ).getStr() << "\"" << ::std::endl; -+#endif -+ -+ ::std::list< ::rtl::OUString > aList = tokenize( rCommand ); -+ -+ if ( aList.size() == 0 ) -+ return; -+ -+ ::rtl::OUString aCommandName = aList.front(); -+ aList.pop_front(); -+ -+ if ( aCommandName.equalsAscii( "accept" ) ) -+ { -+ m_aResult = sal_True; -+ m_aExecCondition.set(); -+ } -+ else if ( aCommandName.equalsAscii( "reject" ) ) -+ { -+ m_aResult = sal_False; -+ m_aExecCondition.set(); -+ } -+ else if ( aCommandName.equalsAscii( "fileSelectionChanged" ) ) -+ { -+ if ( m_pNotifyThread ) -+ m_pNotifyThread->fileSelectionChanged(); -+ } -+ else if ( aCommandName.equalsAscii( "files" ) ) -+ { -+ m_aGetFiles = aList; -+ m_aGetFilesCondition.set(); -+ } -+ else if ( aCommandName.equalsAscii( "value" ) ) -+ { -+ ::rtl::OUString aType; -+ if ( !aList.empty() ) -+ { -+ aType = aList.front(); -+ aList.pop_front(); -+ } -+ -+ if ( aType.equalsAscii( "bool" ) ) -+ { -+ sal_Bool bValue = !aList.empty() && aList.front().equalsIgnoreAsciiCaseAscii( "true" ); -+ -+ m_aGetValue <<= bValue; -+ m_aGetValueCondition.set(); -+ } -+ else if ( aType.equalsAscii( "int" ) ) -+ { -+ sal_Int32 nValue = 0; -+ if ( !aList.empty() ) -+ nValue = aList.front().toInt32(); -+ -+ m_aGetValue <<= nValue; -+ m_aGetValueCondition.set(); -+ } -+ else if ( aType.equalsAscii( "string" ) ) -+ { -+ ::rtl::OUString aValue; -+ if ( !aList.empty() ) -+ aValue = aList.front(); -+ -+ m_aGetValue <<= aValue; -+ m_aGetValueCondition.set(); -+ } -+ else if ( aType.equalsAscii( "stringList" ) ) -+ { -+ uno::Sequence< ::rtl::OUString > aSequence( aList.size() ); -+ sal_Int32 nIdx = 0; -+ for ( ::std::list< ::rtl::OUString >::const_iterator it = aList.begin(); it != aList.end(); ++it, ++nIdx ) -+ aSequence[nIdx] = (*it); -+ -+ m_aGetValue <<= aSequence; -+ m_aGetValueCondition.set(); -+ } -+ else -+ { -+ m_aGetValue = uno::Any(); -+ m_aGetValueCondition.set(); -+ } -+ } -+ else if ( aCommandName.equalsAscii( "currentFilter" ) ) -+ { -+ m_aGetCurrentFilter = aList.empty()? ::rtl::OUString(): aList.front(); -+ m_aGetCurrentFilterCondition.set(); -+ } -+ else if ( aCommandName.equalsAscii( "currentDirectory" ) ) -+ { -+ m_aGetDirectory = aList.empty()? ::rtl::OUString(): aList.front(); -+ m_aGetDirectoryCondition.set(); -+ } -+ else -+ { -+#if OSL_DEBUG_LEVEL > 0 -+ ::std::cerr << "Unrecognized command: " -+ << OUStringToOString( aCommandName, RTL_TEXTENCODING_ASCII_US ).getStr() << "\"" << ::std::endl; -+#endif -+ } -+} -+ -+::std::list< ::rtl::OUString > SAL_CALL UnxFilePickerCommandThread::tokenize( const ::rtl::OUString &rCommand ) -+{ -+ ::std::list< ::rtl::OUString > aList; -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ const sal_Unicode *pUnicode = rCommand.getStr(); -+ const sal_Unicode *pEnd = pUnicode + rCommand.getLength(); -+ sal_Bool bQuoted = sal_False; -+ -+ for ( ; pUnicode != pEnd; ++pUnicode ) -+ { -+ if ( *pUnicode == '\\' ) -+ { -+ ++pUnicode; -+ if ( pUnicode != pEnd ) -+ { -+ if ( *pUnicode == 'n' ) -+ aBuffer.appendAscii( "\n", 1 ); -+ else -+ aBuffer.append( *pUnicode ); -+ } -+ } -+ else if ( *pUnicode == '"' ) -+ bQuoted = !bQuoted; -+ else if ( *pUnicode == ' ' && !bQuoted ) -+ aList.push_back( aBuffer.makeStringAndClear() ); -+ else -+ aBuffer.append( *pUnicode ); -+ } -+ aList.push_back( aBuffer.makeStringAndClear() ); -+ -+ return aList; -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde_unx/UnxCommandThread.hxx b/fpicker/source/unx/tde_unx/UnxCommandThread.hxx -new file mode 100644 -index 0000000..41b82bd ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/UnxCommandThread.hxx -@@ -0,0 +1,136 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _UNXCOMMANDTHREAD_HXX_ -+#define _UNXCOMMANDTHREAD_HXX_ -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+ -+class UnxFilePickerNotifyThread; -+ -+/** Synchronization for the 'thread-less' version of the fpicker. -+ -+ Something like osl::Condition, but calls Application::Yield() while in -+ wait(). -+*/ -+class YieldingCondition -+{ -+ ::osl::Mutex m_aMutex; -+ bool m_bValue; -+ -+ bool get() -+ { -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ return m_bValue; -+ } -+ -+public: -+ YieldingCondition() { reset(); } -+ -+ void reset() -+ { -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ m_bValue = false; -+ } -+ -+ void set() -+ { -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ m_bValue = true; -+ } -+ -+ void wait() -+ { -+ while ( !get() ) -+ Application::Yield(); -+ } -+}; -+ -+class UnxFilePickerCommandThread : public ::osl::Thread -+{ -+protected: -+ UnxFilePickerNotifyThread *m_pNotifyThread; -+ int m_nReadFD; -+ -+ ::osl::Mutex m_aMutex; -+ -+ YieldingCondition m_aExecCondition; -+ sal_Bool m_aResult; -+ -+ ::osl::Condition m_aGetCurrentFilterCondition; -+ ::rtl::OUString m_aGetCurrentFilter; -+ -+ ::osl::Condition m_aGetDirectoryCondition; -+ ::rtl::OUString m_aGetDirectory; -+ -+ ::osl::Condition m_aGetFilesCondition; -+ ::std::list< ::rtl::OUString > m_aGetFiles; -+ -+ ::osl::Condition m_aGetValueCondition; -+ ::com::sun::star::uno::Any m_aGetValue; -+ -+public: -+ UnxFilePickerCommandThread( UnxFilePickerNotifyThread *pNotifyThread, int nReadFD ); -+ ~UnxFilePickerCommandThread(); -+ -+ YieldingCondition& SAL_CALL execCondition() { return m_aExecCondition; } -+ sal_Bool SAL_CALL result(); -+ -+ ::osl::Condition& SAL_CALL getCurrentFilterCondition() { return m_aGetCurrentFilterCondition; } -+ ::rtl::OUString SAL_CALL getCurrentFilter(); -+ -+ ::osl::Condition& SAL_CALL getDirectoryCondition() { return m_aGetDirectoryCondition; } -+ ::rtl::OUString SAL_CALL getDirectory(); -+ -+ ::osl::Condition& SAL_CALL getFilesCondition() { return m_aGetFilesCondition; } -+ ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles(); -+ -+ ::osl::Condition& SAL_CALL getValueCondition() { return m_aGetValueCondition; } -+ ::com::sun::star::uno::Any SAL_CALL getValue(); -+ -+protected: -+ virtual void SAL_CALL run(); -+ -+ virtual void SAL_CALL handleCommand( const ::rtl::OUString &rCommand/*, sal_Bool &rQuit*/ ); -+ ::std::list< ::rtl::OUString > SAL_CALL tokenize( const ::rtl::OUString &rCommand ); -+}; -+ -+#endif // _UNXCOMMANDTHREAD_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde_unx/UnxFPentry.cxx b/fpicker/source/unx/tde_unx/UnxFPentry.cxx -new file mode 100644 -index 0000000..bd4582d ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/UnxFPentry.cxx -@@ -0,0 +1,112 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#include -+ -+#include -+#include -+ -+#include "UnxFilePicker.hxx" -+#include "FPServiceInfo.hxx" -+ -+using namespace ::rtl; -+using namespace ::com::sun::star::uno; -+using namespace ::com::sun::star::container; -+using namespace ::com::sun::star::lang; -+using namespace ::com::sun::star::registry; -+using namespace ::cppu; -+using ::com::sun::star::ui::dialogs::XFilePicker; -+ -+////////////////////////////////////////////////////////////////////////// -+// -+////////////////////////////////////////////////////////////////////////// -+ -+static Reference< XInterface > SAL_CALL createInstance( const Reference< XMultiServiceFactory >& rServiceManager ) -+{ -+ return Reference< XInterface >( -+ static_cast< XFilePicker* >( new UnxFilePicker( rServiceManager ) ) ); -+} -+ -+extern "C" -+{ -+ -+sal_Bool SAL_CALL component_writeInfo( void* /*pServiceManager*/, void* pRegistryKey ) -+{ -+ sal_Bool bRetVal = sal_True; -+ -+ if ( pRegistryKey ) -+ { -+ try -+ { -+ Reference< XRegistryKey > pXNewKey( static_cast< XRegistryKey* >( pRegistryKey ) ); -+ pXNewKey->createKey( OUString(RTL_CONSTASCII_USTRINGPARAM( FILE_PICKER_REGKEY_NAME ) )); -+ } -+ catch( InvalidRegistryException& ) -+ { -+ OSL_FAIL( "InvalidRegistryException caught" ); -+ bRetVal = sal_False; -+ } -+ } -+ -+ return bRetVal; -+} -+ -+////////////////////////////////////////////////////////////////////////// -+// -+////////////////////////////////////////////////////////////////////////// -+ -+SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory( const sal_Char* pImplName, uno_Interface* pSrvManager, uno_Interface* /*pRegistryKey*/ ) -+{ -+ void* pRet = 0; -+ -+ if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FILE_PICKER_IMPL_NAME ) ) ) -+// if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FILE_PICKER_SERVICE_NAME ) ) ) -+ { -+ Sequence< OUString > aSNS( 1 ); -+ aSNS.getArray( )[0] = OUString(RTL_CONSTASCII_USTRINGPARAM( FILE_PICKER_SERVICE_NAME )); -+ -+ Reference< XSingleServiceFactory > xFactory ( createSingleFactory( -+ reinterpret_cast< XMultiServiceFactory* > ( pSrvManager ), -+ OUString::createFromAscii( pImplName ), -+ createInstance, -+ aSNS ) ); -+ if ( xFactory.is() ) -+ { -+ xFactory->acquire(); -+ pRet = xFactory.get(); -+ } -+ } -+ -+ return pRet; -+} -+ -+} // extern "C" -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde_unx/UnxFilePicker.cxx b/fpicker/source/unx/tde_unx/UnxFilePicker.cxx -new file mode 100644 -index 0000000..c2a5ca8 ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/UnxFilePicker.cxx -@@ -0,0 +1,932 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include -+ -+using namespace ::com::sun::star; -+ -+using namespace ::com::sun::star::ui::dialogs; -+using namespace ::com::sun::star::ui::dialogs::TemplateDescription; -+ -+////////////////////////////////////////////////////////////////////////// -+// helper functions -+////////////////////////////////////////////////////////////////////////// -+ -+namespace -+{ -+ // controling event notifications -+ const bool STARTUP_SUSPENDED = true; -+ const bool STARTUP_ALIVE = false; -+ -+ uno::Sequence SAL_CALL FilePicker_getSupportedServiceNames() -+ { -+ uno::Sequence aRet(3); -+ aRet[0] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.FilePicker"); -+ aRet[1] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.SystemFilePicker"); -+ aRet[2] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.TDEFilePicker"); -+ return aRet; -+ } -+} -+ -+////////////////////////////////////////////////////////////////////////// -+// UnxFilePicker -+////////////////////////////////////////////////////////////////////////// -+ -+UnxFilePicker::UnxFilePicker( const uno::Reference& xServiceMgr ) -+ : cppu::WeakComponentImplHelper8< -+ XFilterManager, -+ XFilterGroupManager, -+ XFilePickerControlAccess, -+ XFilePickerNotifier, -+// TODO XFilePreview, -+ lang::XInitialization, -+ util::XCancellable, -+ lang::XEventListener, -+ lang::XServiceInfo>( m_rbHelperMtx ), -+ m_xServiceMgr( xServiceMgr ), -+ m_nFilePickerPid( -1 ), -+ m_nFilePickerWrite( -1 ), -+ m_nFilePickerRead( -1 ), -+ m_pNotifyThread( NULL ), -+ m_pCommandThread( NULL ), -+ m_pResMgr( CREATEVERSIONRESMGR( fps_office ) ) -+{ -+} -+ -+UnxFilePicker::~UnxFilePicker() -+{ -+ if ( m_nFilePickerPid > 0 ) -+ { -+ sendCommand( ::rtl::OUString::createFromAscii( "exit" ) ); -+ waitpid( m_nFilePickerPid, NULL, 0 ); -+ } -+ -+ if ( m_pCommandThread ) -+ { -+ m_pCommandThread->join(); -+ -+ delete m_pCommandThread, m_pCommandThread = NULL; -+ } -+ -+ if ( m_pNotifyThread ) -+ { -+ m_pNotifyThread->exit(); -+ -+ m_pNotifyThread->join(); -+ -+ delete m_pNotifyThread, m_pNotifyThread = NULL; -+ } -+ -+ if ( m_nFilePickerWrite >= 0 ) -+ close( m_nFilePickerWrite ); -+ -+ if ( m_nFilePickerRead >= 0 ) -+ close( m_nFilePickerRead ); -+ -+ delete m_pResMgr, m_pResMgr = NULL; -+} -+ -+void SAL_CALL UnxFilePicker::addFilePickerListener( const uno::Reference& xListener ) -+ throw( uno::RuntimeException ) -+{ -+ OSL_ASSERT( m_pNotifyThread ); -+ osl::MutexGuard aGuard( m_aMutex ); -+ -+ m_pNotifyThread->addFilePickerListener( xListener ); -+} -+ -+void SAL_CALL UnxFilePicker::removeFilePickerListener( const uno::Reference& xListener ) -+ throw( uno::RuntimeException ) -+{ -+ OSL_ASSERT( m_pNotifyThread ); -+ osl::MutexGuard aGuard( m_aMutex ); -+ -+ m_pNotifyThread->removeFilePickerListener( xListener ); -+} -+ -+void SAL_CALL UnxFilePicker::setTitle( const rtl::OUString &rTitle ) -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "setTitle " ); -+ appendEscaped( aBuffer, rTitle ); -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+} -+ -+sal_Int16 SAL_CALL UnxFilePicker::execute() -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ -+ // this is _not_ an osl::Condition, see i#93366 -+ m_pCommandThread->execCondition().reset(); -+ -+ sendCommand( ::rtl::OUString::createFromAscii( "exec" ) ); -+ -+ m_pCommandThread->execCondition().wait(); -+ -+ return m_pCommandThread->result(); -+} -+ -+void SAL_CALL UnxFilePicker::setMultiSelectionMode( sal_Bool bMode ) -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUString aString = bMode? -+ ::rtl::OUString::createFromAscii( "setMultiSelection true" ): -+ ::rtl::OUString::createFromAscii( "setMultiSelection false" ); -+ -+ sendCommand( aString ); -+} -+ -+void SAL_CALL UnxFilePicker::setDefaultName( const ::rtl::OUString &rName ) -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "setDefaultName " ); -+ appendEscaped( aBuffer, rName ); -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+} -+ -+void SAL_CALL UnxFilePicker::setDisplayDirectory( const rtl::OUString &rDirectory ) -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "setDirectory " ); -+ appendEscaped( aBuffer, rDirectory ); -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+} -+ -+rtl::OUString SAL_CALL UnxFilePicker::getDisplayDirectory() -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ sendCommand( ::rtl::OUString::createFromAscii( "getDirectory" ), -+ m_pCommandThread->getDirectoryCondition() ); -+ -+ return m_pCommandThread->getDirectory(); -+} -+ -+uno::Sequence< ::rtl::OUString > SAL_CALL UnxFilePicker::getFiles() -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ sendCommand( ::rtl::OUString::createFromAscii( "getFiles" ), -+ m_pCommandThread->getFilesCondition() ); -+ -+ return m_pCommandThread->getFiles(); -+} -+ -+void SAL_CALL UnxFilePicker::appendFilter( const ::rtl::OUString &rTitle, const ::rtl::OUString &rFilter ) -+ throw( lang::IllegalArgumentException, uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "appendFilter " ); -+ appendEscaped( aBuffer, rTitle ); -+ aBuffer.appendAscii( " ", 1 ); -+ appendEscaped( aBuffer, rFilter ); -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+} -+ -+void SAL_CALL UnxFilePicker::setCurrentFilter( const rtl::OUString &rTitle ) -+ throw( lang::IllegalArgumentException, uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "setCurrentFilter " ); -+ appendEscaped( aBuffer, rTitle ); -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+} -+ -+rtl::OUString SAL_CALL UnxFilePicker::getCurrentFilter() -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ sendCommand( ::rtl::OUString::createFromAscii( "getCurrentFilter" ), -+ m_pCommandThread->getCurrentFilterCondition() ); -+ -+ return m_pCommandThread->getCurrentFilter(); -+} -+ -+void SAL_CALL UnxFilePicker::appendFilterGroup( const rtl::OUString &rGroupTitle, const uno::Sequence &rFilters ) -+ throw( lang::IllegalArgumentException, uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "appendFilterGroup " ); -+ appendEscaped( aBuffer, rGroupTitle ); -+ -+ for ( sal_Int32 i = 0; i < rFilters.getLength(); ++i ) -+ { -+ beans::StringPair aPair = rFilters[i]; -+ -+ aBuffer.appendAscii( " ", 1 ); -+ appendEscaped( aBuffer, aPair.First ); -+ aBuffer.appendAscii( " ", 1 ); -+ appendEscaped( aBuffer, aPair.Second ); -+ } -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+} -+ -+void SAL_CALL UnxFilePicker::setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const uno::Any &rValue ) -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUString aType; -+ ::rtl::OUString aAction; -+ sal_Int32 nTitleId; -+ -+ if ( controlIdInfo( nControlId, aType, nTitleId ) && controlActionInfo( nControlAction, aAction ) ) -+ { -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "setValue " ); -+ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -+ aBuffer.appendAscii( " ", 1 ); -+ aBuffer.append( aAction ); -+ -+ if ( aType.equalsAscii( "checkbox" ) ) -+ { -+ sal_Bool bControlValue; -+ if ( ( rValue >>= bControlValue ) && bControlValue ) -+ aBuffer.appendAscii( " true" ); -+ else -+ aBuffer.appendAscii( " false" ); -+ } -+ else if ( aType.equalsAscii( "listbox" ) ) -+ { -+ switch ( nControlAction ) -+ { -+ case ControlActions::ADD_ITEM: -+ case ControlActions::SET_HELP_URL: -+ { -+ ::rtl::OUString aString; -+ if ( rValue >>= aString ) -+ { -+ aBuffer.appendAscii( " ", 1 ); -+ appendEscaped( aBuffer, aString ); -+ } -+ } -+ break; -+ -+ case ControlActions::ADD_ITEMS: -+ { -+ uno::Sequence< ::rtl::OUString > aSequence; -+ if ( rValue >>= aSequence ) -+ { -+ for ( sal_Int32 nIdx = 0; nIdx < aSequence.getLength(); ++nIdx ) -+ { -+ aBuffer.appendAscii( " ", 1 ); -+ appendEscaped( aBuffer, aSequence[nIdx] ); -+ } -+ -+ } -+ } -+ break; -+ -+ case ControlActions::DELETE_ITEM: -+ case ControlActions::SET_SELECT_ITEM: -+ { -+ sal_Int32 nInt; -+ if ( rValue >>= nInt ) -+ { -+ aBuffer.appendAscii( " ", 1 ); -+ aBuffer.append( nInt ); -+ } -+ } -+ break; -+ -+ default: -+ // nothing -+ break; -+ } -+ } -+ // TODO else if push button... -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+ } -+} -+ -+uno::Any SAL_CALL UnxFilePicker::getValue( sal_Int16 nControlId, sal_Int16 nControlAction ) -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUString aAction; -+ -+ if ( controlActionInfo( nControlAction, aAction ) ) -+ { -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "getValue " ); -+ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -+ aBuffer.appendAscii( " ", 1 ); -+ aBuffer.append( aAction ); -+ -+ sendCommand( aBuffer.makeStringAndClear(), -+ m_pCommandThread->getValueCondition() ); -+ -+ return m_pCommandThread->getValue(); -+ } -+ -+ return uno::Any(); -+} -+ -+void SAL_CALL UnxFilePicker::enableControl( sal_Int16 nControlId, sal_Bool bEnable ) -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "enableControl " ); -+ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -+ aBuffer.appendAscii( bEnable? " true": " false" ); -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+} -+ -+void SAL_CALL UnxFilePicker::setLabel( sal_Int16 nControlId, const ::rtl::OUString &rLabel ) -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "setLabel " ); -+ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -+ aBuffer.appendAscii( " ", 1 ); -+ appendEscaped( aBuffer, rLabel ); -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+} -+ -+rtl::OUString SAL_CALL UnxFilePicker::getLabel(sal_Int16 /*nControlId*/) -+ throw ( uno::RuntimeException ) -+{ -+ // FIXME getLabel() is not yet implemented -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ // TODO return m_pImpl->getLabel(nControlId); -+ return ::rtl::OUString(); -+} -+ -+/* TODO -+uno::Sequence SAL_CALL UnxFilePicker::getSupportedImageFormats() -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_pImpl->getSupportedImageFormats(); -+} -+ -+sal_Int32 SAL_CALL UnxFilePicker::getTargetColorDepth() -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_pImpl->getTargetColorDepth(); -+} -+ -+sal_Int32 SAL_CALL UnxFilePicker::getAvailableWidth() -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_pImpl->getAvailableWidth(); -+} -+ -+sal_Int32 SAL_CALL UnxFilePicker::getAvailableHeight() -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_pImpl->getAvailableHeight(); -+} -+ -+void SAL_CALL UnxFilePicker::setImage( sal_Int16 aImageFormat, const uno::Any &rImage ) -+ throw( lang::IllegalArgumentException, uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ m_pImpl->setImage( aImageFormat, aImage ); -+} -+ -+sal_Bool SAL_CALL UnxFilePicker::setShowState( sal_Bool bShowState ) -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_pImpl->setShowState( bShowState ); -+} -+ -+sal_Bool SAL_CALL UnxFilePicker::getShowState() -+ throw( uno::RuntimeException ) -+{ -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ return m_pImpl->getShowState(); -+} -+*/ -+ -+void SAL_CALL UnxFilePicker::initialize( const uno::Sequence &rArguments ) -+ throw( uno::Exception, uno::RuntimeException ) -+{ -+ initFilePicker(); -+ -+ // parameter checking -+ uno::Any aAny; -+ if ( 0 == rArguments.getLength( ) ) -+ throw lang::IllegalArgumentException( -+ rtl::OUString::createFromAscii( "no arguments" ), -+ static_cast< XFilePicker* >( this ), 1 ); -+ -+ aAny = rArguments[0]; -+ -+ if ( ( aAny.getValueType() != ::getCppuType( (sal_Int16*)0 ) ) && ( aAny.getValueType() != ::getCppuType( (sal_Int8*)0 ) ) ) -+ throw lang::IllegalArgumentException( -+ rtl::OUString::createFromAscii( "invalid argument type" ), -+ static_cast< XFilePicker* >( this ), 1 ); -+ -+ sal_Int16 templateId = -1; -+ aAny >>= templateId; -+ -+ ::rtl::OUString aTypeOpen = ::rtl::OUString::createFromAscii( "setType \"open\"" ); -+ ::rtl::OUString aTypeSaveAs = ::rtl::OUString::createFromAscii( "setType \"save\"" ); -+ -+ switch ( templateId ) -+ { -+ case FILEOPEN_SIMPLE: -+ sendCommand( aTypeOpen ); -+ break; -+ -+ case FILESAVE_SIMPLE: -+ sendCommand( aTypeSaveAs ); -+ break; -+ -+ case FILESAVE_AUTOEXTENSION_PASSWORD: -+ sendCommand( aTypeSaveAs ); -+ -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PASSWORD ); -+ break; -+ -+ case FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS: -+ sendCommand( aTypeSaveAs ); -+ -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PASSWORD ); -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS ); -+ break; -+ -+ case FILESAVE_AUTOEXTENSION_SELECTION: -+ sendCommand( aTypeSaveAs ); -+ -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_SELECTION ); -+ break; -+ -+ case FILESAVE_AUTOEXTENSION_TEMPLATE: -+ sendCommand( aTypeSaveAs ); -+ -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -+ sendAppendControlCommand( ExtendedFilePickerElementIds::LISTBOX_TEMPLATE ); -+ break; -+ -+ case FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE: -+ sendCommand( aTypeOpen ); -+ -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_LINK ); -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PREVIEW ); -+ sendAppendControlCommand( ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE ); -+ break; -+ -+ case FILEOPEN_PLAY: -+ sendCommand( aTypeOpen ); -+ -+ sendAppendControlCommand( ExtendedFilePickerElementIds::PUSHBUTTON_PLAY ); -+ break; -+ -+ case FILEOPEN_READONLY_VERSION: -+ sendCommand( aTypeOpen ); -+ -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_READONLY ); -+ sendAppendControlCommand( ExtendedFilePickerElementIds::LISTBOX_VERSION ); -+ break; -+ -+ case FILEOPEN_LINK_PREVIEW: -+ sendCommand( aTypeOpen ); -+ -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_LINK ); -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_PREVIEW ); -+ break; -+ -+ case FILESAVE_AUTOEXTENSION: -+ sendCommand( aTypeSaveAs ); -+ -+ sendAppendControlCommand( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION ); -+ break; -+ -+ default: -+ throw lang::IllegalArgumentException( -+ rtl::OUString::createFromAscii( "Unknown template" ), -+ static_cast< XFilePicker* >( this ), -+ 1 ); -+ } -+} -+ -+void SAL_CALL UnxFilePicker::cancel() -+ throw ( uno::RuntimeException ) -+{ -+ // FIXME cancel() is not implemented -+ checkFilePicker(); -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ // TODO m_pImpl->cancel(); -+} -+ -+void SAL_CALL UnxFilePicker::disposing( const lang::EventObject &rEvent ) -+ throw( uno::RuntimeException ) -+{ -+ uno::Reference xFilePickerListener( rEvent.Source, uno::UNO_QUERY ); -+ -+ if ( xFilePickerListener.is() ) -+ removeFilePickerListener( xFilePickerListener ); -+} -+ -+rtl::OUString SAL_CALL UnxFilePicker::getImplementationName() -+ throw( uno::RuntimeException ) -+{ -+ return rtl::OUString::createFromAscii( FILE_PICKER_IMPL_NAME ); -+} -+ -+sal_Bool SAL_CALL UnxFilePicker::supportsService( const rtl::OUString& ServiceName ) -+ throw( uno::RuntimeException ) -+{ -+ uno::Sequence< ::rtl::OUString > SupportedServicesNames = FilePicker_getSupportedServiceNames(); -+ -+ for ( sal_Int32 n = SupportedServicesNames.getLength(); n--; ) -+ { -+ if ( SupportedServicesNames[n].compareTo( ServiceName ) == 0 ) -+ return sal_True; -+ } -+ -+ return sal_False; -+} -+ -+uno::Sequence< ::rtl::OUString > SAL_CALL UnxFilePicker::getSupportedServiceNames() -+ throw( uno::RuntimeException ) -+{ -+ return FilePicker_getSupportedServiceNames(); -+} -+ -+void UnxFilePicker::initFilePicker() -+{ -+ int aFiledesStdin[2], aFiledesStdout[2]; -+ if ( pipe( aFiledesStdin ) < 0 || pipe( aFiledesStdout ) < 0 ) -+ return; -+ -+ m_nFilePickerPid = fork(); -+ if ( m_nFilePickerPid < 0 ) -+ return; -+ -+ if ( m_nFilePickerPid == 0 ) -+ { -+ // Child... -+ close( aFiledesStdin[1] ); // write end of the pipe -+ dup2( aFiledesStdin[0], 0 ); -+ close( aFiledesStdin[0] ); -+ -+ close( aFiledesStdout[0] ); // read end of the pipe -+ dup2( aFiledesStdout[1], 1 ); -+ close( aFiledesStdout[1] ); -+ -+#if OSL_DEBUG_LEVEL == 0 -+ int nRedirect = open( "/dev/null", O_WRONLY ); -+ if( nRedirect != -1 ) -+ { -+ dup2( nRedirect, 2 ); -+ } -+#endif -+ -+ // The executable name -+ char pFname[1024]; snprintf(pFname, sizeof pFname, "%s/%s", getenv("OLDPWD"), "tdefilepicker"); -+ -+ // ID of the main window -+ const int nIdLen = 20; -+ char pWinId[nIdLen] = "0"; -+ -+ // TODO pass here the real parent (not possible for system dialogs -+ // yet), and default to GetDefDialogParent() only when the real parent -+ // is NULL -+ Window *pParentWin = Application::GetDefDialogParent(); -+ if ( pParentWin ) -+ { -+ const SystemEnvData* pSysData = ((SystemWindow *)pParentWin)->GetSystemData(); -+ if ( pSysData ) -+ { -+ snprintf( pWinId, nIdLen, "%ld", pSysData->aWindow ); // unx only -+ pWinId[nIdLen-1] = 0; -+ } -+ } -+ -+ // Execute the fpicker implementation -+ execlp( pFname, pFname, "--winid", pWinId, NULL ); -+ -+ // Error, finish the child -+ exit( -1 ); -+ } -+ -+ // Parent continues -+ close( aFiledesStdin[0] ); -+ m_nFilePickerWrite = aFiledesStdin[1]; -+ -+ close( aFiledesStdout[1] ); -+ m_nFilePickerRead = aFiledesStdout[0]; -+ -+ // Create the notify thread -+ if ( !m_pNotifyThread ) -+ m_pNotifyThread = new UnxFilePickerNotifyThread( this ); -+ -+ // Create the command thread -+ if ( !m_pCommandThread ) -+ m_pCommandThread = new UnxFilePickerCommandThread( m_pNotifyThread, m_nFilePickerRead ); -+ -+ // Start the threads -+ m_pNotifyThread->create(); -+ m_pCommandThread->create(); -+ -+ return; -+} -+ -+void UnxFilePicker::checkFilePicker() throw( ::com::sun::star::uno::RuntimeException ) -+{ -+ if ( m_nFilePickerPid > 0 ) -+ { -+ // TODO check if external file picker is runnning -+ } -+ else -+ { -+ throw uno::RuntimeException( -+ ::rtl::OUString::createFromAscii( "the external file picker does not run" ), -+ *this ); -+ } -+} -+ -+void UnxFilePicker::sendCommand( const ::rtl::OUString &rCommand ) -+{ -+ if ( m_nFilePickerWrite < 0 ) -+ return; -+ -+ ::rtl::OString aUtfString = OUStringToOString( rCommand + ::rtl::OUString::createFromAscii( "\n" ), RTL_TEXTENCODING_UTF8 ); -+ -+#if OSL_DEBUG_LEVEL > 0 -+ ::std::cerr << "UnxFilePicker sent: \"" << aUtfString.getStr() << "\"" << ::std::endl; -+#endif -+ -+ write( m_nFilePickerWrite, aUtfString.getStr(), aUtfString.getLength() ); -+} -+ -+void UnxFilePicker::sendCommand( const ::rtl::OUString &rCommand, ::osl::Condition &rCondition ) -+{ -+ rCondition.reset(); -+ -+ sendCommand( rCommand ); -+ -+ rCondition.wait(); -+} -+ -+void UnxFilePicker::appendEscaped( ::rtl::OUStringBuffer &rBuffer, const ::rtl::OUString &rString ) -+{ -+ const sal_Unicode *pUnicode = rString.getStr(); -+ const sal_Unicode *pEnd = pUnicode + rString.getLength(); -+ -+ rBuffer.appendAscii( "\"" , 1 ); -+ -+ for ( ; pUnicode != pEnd; ++pUnicode ) -+ { -+ if ( *pUnicode == '\\' ) -+ rBuffer.appendAscii( "\\\\", 2 ); -+ else if ( *pUnicode == '"' ) -+ rBuffer.appendAscii( "\\\"", 2 ); -+ else if ( *pUnicode == '\n' ) -+ rBuffer.appendAscii( "\\n", 2 ); -+ else -+ rBuffer.append( *pUnicode ); -+ } -+ -+ rBuffer.appendAscii( "\"", 1 ); -+} -+ -+sal_Bool UnxFilePicker::controlIdInfo( sal_Int16 nControlId, ::rtl::OUString &rType, sal_Int32 &rTitleId ) -+{ -+ typedef struct { -+ sal_Int16 nId; -+ const ::rtl::OUString *pType; -+ sal_Int32 nTitle; -+ } ElementToName; -+ -+ const ::rtl::OUString aCheckBox( RTL_CONSTASCII_USTRINGPARAM( "checkbox" ) ); -+ const ::rtl::OUString aControl( RTL_CONSTASCII_USTRINGPARAM( "control" ) ); -+ const ::rtl::OUString aEdit( RTL_CONSTASCII_USTRINGPARAM( "edit" ) ); -+ const ::rtl::OUString aLabel( RTL_CONSTASCII_USTRINGPARAM( "label" ) ); -+ const ::rtl::OUString aListBox( RTL_CONSTASCII_USTRINGPARAM( "listbox" ) ); -+ const ::rtl::OUString aPushButton( RTL_CONSTASCII_USTRINGPARAM( "pushbutton" ) ); -+ -+ const ElementToName *pPtr; -+ const ElementToName pArray[] = -+ { -+ { CommonFilePickerElementIds::PUSHBUTTON_OK, &aPushButton, 0/*FIXME?*/ }, -+ { CommonFilePickerElementIds::PUSHBUTTON_CANCEL, &aPushButton, 0/*FIXME?*/ }, -+ { CommonFilePickerElementIds::LISTBOX_FILTER, &aListBox, 0/*FIXME?*/ }, -+ { CommonFilePickerElementIds::CONTROL_FILEVIEW, &aControl, 0/*FIXME?*/ }, -+ { CommonFilePickerElementIds::EDIT_FILEURL, &aEdit, 0/*FIXME?*/ }, -+ { CommonFilePickerElementIds::LISTBOX_FILTER_LABEL, &aLabel, 0/*FIXME?*/ }, -+ { CommonFilePickerElementIds::EDIT_FILEURL_LABEL, &aLabel, 0/*FIXME?*/ }, -+ -+ { ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, &aCheckBox, STR_SVT_FILEPICKER_AUTO_EXTENSION }, -+ { ExtendedFilePickerElementIds::CHECKBOX_PASSWORD, &aCheckBox, STR_SVT_FILEPICKER_PASSWORD }, -+ { ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS, &aCheckBox, STR_SVT_FILEPICKER_FILTER_OPTIONS }, -+ { ExtendedFilePickerElementIds::CHECKBOX_READONLY, &aCheckBox, STR_SVT_FILEPICKER_READONLY }, -+ { ExtendedFilePickerElementIds::CHECKBOX_LINK, &aCheckBox, STR_SVT_FILEPICKER_INSERT_AS_LINK }, -+ { ExtendedFilePickerElementIds::CHECKBOX_PREVIEW, &aCheckBox, STR_SVT_FILEPICKER_SHOW_PREVIEW }, -+ { ExtendedFilePickerElementIds::PUSHBUTTON_PLAY, &aPushButton, STR_SVT_FILEPICKER_PLAY }, -+ { ExtendedFilePickerElementIds::LISTBOX_VERSION, &aListBox, STR_SVT_FILEPICKER_VERSION }, -+ { ExtendedFilePickerElementIds::LISTBOX_TEMPLATE, &aListBox, STR_SVT_FILEPICKER_TEMPLATES }, -+ { ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE, &aListBox, STR_SVT_FILEPICKER_IMAGE_TEMPLATE }, -+ { ExtendedFilePickerElementIds::CHECKBOX_SELECTION, &aCheckBox, STR_SVT_FILEPICKER_SELECTION }, -+ { 0, 0, 0 } -+ }; -+ -+ for ( pPtr = pArray; pPtr->nId && ( pPtr->nId != nControlId ); ++pPtr ) -+ ; -+ -+ if ( pPtr->nId == nControlId ) -+ { -+ rType = *(pPtr->pType); -+ rTitleId = pPtr->nTitle; -+ -+ return sal_True; -+ } -+ -+ return sal_False; -+} -+ -+sal_Bool UnxFilePicker::controlActionInfo( sal_Int16 nControlAction, ::rtl::OUString &rType ) -+{ -+ typedef struct { -+ sal_Int16 nId; -+ const ::rtl::OUString pType; -+ } ElementToName; -+ -+ const ElementToName *pPtr; -+ const ElementToName pArray[] = -+ { -+ { ControlActions::ADD_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "addItem" ) ) }, -+ { ControlActions::ADD_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "addItems" ) ) }, -+ { ControlActions::DELETE_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "deleteItem" ) ) }, -+ { ControlActions::DELETE_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "deleteItems" ) ) }, -+ { ControlActions::SET_SELECT_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setSelectedItem" ) ) }, -+ { ControlActions::GET_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getItems" ) ) }, -+ { ControlActions::GET_SELECTED_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getSelectedItem" ) ) }, -+ { ControlActions::GET_SELECTED_ITEM_INDEX, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getSelectedItemIndex" ) ) }, -+ { ControlActions::SET_HELP_URL, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setHelpURL" ) ) }, -+ { ControlActions::GET_HELP_URL, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getHelpURL" ) ) }, -+ { 0, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "noAction" ) ) } -+ }; -+ -+ for ( pPtr = pArray; pPtr->nId && ( pPtr->nId != nControlAction ); ++pPtr ) -+ ; -+ -+ rType = pPtr->pType; -+ -+ return sal_True; -+} -+ -+void UnxFilePicker::sendAppendControlCommand( sal_Int16 nControlId ) -+{ -+ ::rtl::OUString aType; -+ sal_Int32 nTitleId; -+ -+ if ( controlIdInfo( nControlId, aType, nTitleId ) ) -+ { -+ ::rtl::OUStringBuffer aBuffer( 1024 ); -+ -+ aBuffer.appendAscii( "appendControl " ); -+ aBuffer.append( static_cast< sal_Int32 >( nControlId ) ); -+ aBuffer.appendAscii( " ", 1 ); -+ appendEscaped( aBuffer, aType ); -+ aBuffer.appendAscii( " ", 1 ); -+ appendEscaped( aBuffer, m_pResMgr? String( ResId( nTitleId, *m_pResMgr ) ): String() ); -+ -+ sendCommand( aBuffer.makeStringAndClear() ); -+ } -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde_unx/UnxFilePicker.hxx b/fpicker/source/unx/tde_unx/UnxFilePicker.hxx -new file mode 100644 -index 0000000..4e0b526 ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/UnxFilePicker.hxx -@@ -0,0 +1,178 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _UNXFILEPICKER_HXX_ -+#define _UNXFILEPICKER_HXX_ -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+class UnxFilePickerCommandThread; -+class UnxFilePickerNotifyThread; -+class ResMgr; -+ -+class UnxFilePickerDummy -+{ -+protected: -+ osl::Mutex m_aMutex; -+ osl::Mutex m_rbHelperMtx; -+}; -+ -+class UnxFilePicker : -+ public UnxFilePickerDummy, -+ public cppu::WeakComponentImplHelper8< -+ ::com::sun::star::ui::dialogs::XFilterManager, -+ ::com::sun::star::ui::dialogs::XFilterGroupManager, -+ ::com::sun::star::ui::dialogs::XFilePickerControlAccess, -+ ::com::sun::star::ui::dialogs::XFilePickerNotifier, -+// TODO ::com::sun::star::ui::dialogs::XFilePreview, -+ ::com::sun::star::lang::XInitialization, -+ ::com::sun::star::util::XCancellable, -+ ::com::sun::star::lang::XEventListener, -+ ::com::sun::star::lang::XServiceInfo > -+{ -+protected: -+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xServiceMgr; // to instanciate own services -+ -+ pid_t m_nFilePickerPid; -+ int m_nFilePickerWrite; // (tde|...)filepicker gets it as stdin -+ int m_nFilePickerRead; // (tde|...)filepicker gets it as stdout -+ -+ UnxFilePickerNotifyThread *m_pNotifyThread; -+ UnxFilePickerCommandThread *m_pCommandThread; -+ -+ ResMgr *m_pResMgr; -+ -+public: -+ UnxFilePicker( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceMgr ); -+ virtual ~UnxFilePicker(); -+ -+ // XFilePickerNotifier -+ -+ virtual void SAL_CALL addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw( ::com::sun::star::uno::RuntimeException ); -+ virtual void SAL_CALL removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw( ::com::sun::star::uno::RuntimeException ); -+ -+ // XExecutableDialog functions -+ -+ virtual void SAL_CALL setTitle( const ::rtl::OUString &rTitle ) throw( ::com::sun::star::uno::RuntimeException ); -+ virtual sal_Int16 SAL_CALL execute() throw( ::com::sun::star::uno::RuntimeException ); -+ -+ // XFilePicker functions -+ -+ virtual void SAL_CALL setMultiSelectionMode( sal_Bool bMode ) throw( ::com::sun::star::uno::RuntimeException ); -+ virtual void SAL_CALL setDefaultName( const ::rtl::OUString &rName ) throw( ::com::sun::star::uno::RuntimeException ); -+ virtual void SAL_CALL setDisplayDirectory( const ::rtl::OUString &rDirectory ) throw( ::com::sun::star::uno::RuntimeException ); -+ virtual ::rtl::OUString SAL_CALL getDisplayDirectory() throw( ::com::sun::star::uno::RuntimeException ); -+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles() throw( ::com::sun::star::uno::RuntimeException ); -+ -+ // XFilterManager functions -+ -+ virtual void SAL_CALL appendFilter( const ::rtl::OUString &rTitle, const ::rtl::OUString &rFilter ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); -+ virtual void SAL_CALL setCurrentFilter( const ::rtl::OUString &rTitle ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); -+ virtual ::rtl::OUString SAL_CALL getCurrentFilter() throw( ::com::sun::star::uno::RuntimeException ); -+ -+ // XFilterGroupManager functions -+ -+ virtual void SAL_CALL appendFilterGroup( const ::rtl::OUString &rGroupTitle, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > &rFilters ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); -+ -+ // XFilePickerControlAccess functions -+ -+ virtual void SAL_CALL setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const ::com::sun::star::uno::Any &rValue ) throw (::com::sun::star::uno::RuntimeException); -+ virtual ::com::sun::star::uno::Any SAL_CALL getValue( sal_Int16 nControlId, sal_Int16 nControlAction ) throw (::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL enableControl( sal_Int16 nControlId, sal_Bool bEnable ) throw( ::com::sun::star::uno::RuntimeException ); -+ virtual void SAL_CALL setLabel( sal_Int16 nControlId, const ::rtl::OUString &rLabel ) throw (::com::sun::star::uno::RuntimeException); -+ virtual ::rtl::OUString SAL_CALL getLabel( sal_Int16 nControlId ) throw (::com::sun::star::uno::RuntimeException); -+ -+ /* TODO XFilePreview -+ -+ virtual ::com::sun::star::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats( ) throw (::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getTargetColorDepth( ) throw (::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getAvailableWidth( ) throw (::com::sun::star::uno::RuntimeException); -+ virtual sal_Int32 SAL_CALL getAvailableHeight( ) throw (::com::sun::star::uno::RuntimeException); -+ virtual void SAL_CALL setImage( sal_Int16 aImageFormat, const ::com::sun::star::uno::Any &rImage ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL setShowState( sal_Bool bShowState ) throw (::com::sun::star::uno::RuntimeException); -+ virtual sal_Bool SAL_CALL getShowState( ) throw (::com::sun::star::uno::RuntimeException); -+ */ -+ -+ // XInitialization -+ -+ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > &rArguments ) throw( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException ); -+ -+ // XCancellable -+ -+ virtual void SAL_CALL cancel( ) throw( ::com::sun::star::uno::RuntimeException ); -+ -+ // XEventListener -+ -+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject &rEvent ) throw( ::com::sun::star::uno::RuntimeException ); -+ -+ // XServiceInfo -+ -+ virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); -+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString &rServiceName ) throw( ::com::sun::star::uno::RuntimeException ); -+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException ); -+ -+private: -+ // prevent copy and assignment -+ UnxFilePicker( const UnxFilePicker& ); -+ UnxFilePicker& operator=( const UnxFilePicker& ); -+ -+protected: -+ void initFilePicker(); -+ void checkFilePicker() throw( ::com::sun::star::uno::RuntimeException ); -+ -+ // Async sendCommand -+ void sendCommand( const ::rtl::OUString &rCommand ); -+ // Synchronized sendCommand -+ void sendCommand( const ::rtl::OUString &rCommand, ::osl::Condition &rCondition ); -+ void appendEscaped( ::rtl::OUStringBuffer &rBuffer, const ::rtl::OUString &rString ); -+ -+private: -+ sal_Bool controlIdInfo( sal_Int16 nControlId, ::rtl::OUString &rType, sal_Int32 &rTitleId ); -+ sal_Bool controlActionInfo( sal_Int16 nControlId, ::rtl::OUString &rType ); -+ void sendAppendControlCommand( sal_Int16 nControlId ); -+}; -+ -+#endif // _UNXFILEPICKER_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde_unx/UnxNotifyThread.cxx b/fpicker/source/unx/tde_unx/UnxNotifyThread.cxx -new file mode 100644 -index 0000000..3bc96b1 ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/UnxNotifyThread.cxx -@@ -0,0 +1,116 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#include -+#include -+ -+using namespace ::com::sun::star; -+ -+////////////////////////////////////////////////////////////////////////// -+// UnxFilePickerNotifyThread -+////////////////////////////////////////////////////////////////////////// -+ -+UnxFilePickerNotifyThread::UnxFilePickerNotifyThread( UnxFilePicker *pUnxFilePicker ) -+ : m_pUnxFilePicker( pUnxFilePicker ), -+ m_bExit( sal_False ), -+ m_eNotifyType( Nothing ), -+ m_nControlId( 0 ) -+{ -+} -+ -+void SAL_CALL UnxFilePickerNotifyThread::addFilePickerListener( const uno::Reference< ui::dialogs::XFilePickerListener >& xListener ) -+ throw( uno::RuntimeException ) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ m_xListener = xListener; -+} -+ -+void SAL_CALL UnxFilePickerNotifyThread::removeFilePickerListener( const uno::Reference< ui::dialogs::XFilePickerListener >& xListener ) -+ throw( uno::RuntimeException ) -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ m_xListener.clear(); -+} -+ -+void SAL_CALL UnxFilePickerNotifyThread::exit() -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ m_bExit = sal_True; -+ -+ m_aExitCondition.reset(); -+ m_aNotifyCondition.set(); -+ -+ m_aExitCondition.wait(); -+} -+ -+void SAL_CALL UnxFilePickerNotifyThread::fileSelectionChanged() -+{ -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ m_eNotifyType = FileSelectionChanged; -+ m_nControlId = 0; -+ -+ m_aNotifyCondition.set(); -+} -+ -+void SAL_CALL UnxFilePickerNotifyThread::run() -+{ -+ do { -+ m_aNotifyCondition.reset(); -+ m_aNotifyCondition.wait(); -+ -+ if ( m_xListener.is() && m_pUnxFilePicker ) -+ { -+ ::osl::MutexGuard aGuard( m_aMutex ); -+ -+ ui::dialogs::FilePickerEvent aEvent( *m_pUnxFilePicker, m_nControlId ); -+ -+ switch ( m_eNotifyType ) -+ { -+ case FileSelectionChanged: -+ m_xListener->fileSelectionChanged( aEvent ); -+ break; -+ -+ // TODO More to come... -+ -+ default: -+ // nothing -+ break; -+ } -+ } -+ } while ( !m_bExit ); -+ -+ m_aExitCondition.set(); -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde_unx/UnxNotifyThread.hxx b/fpicker/source/unx/tde_unx/UnxNotifyThread.hxx -new file mode 100644 -index 0000000..9f5d1a5 ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/UnxNotifyThread.hxx -@@ -0,0 +1,90 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2010 Novell, Inc. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _UNXNOTIFYTHREAD_HXX_ -+#define _UNXNOTIFYTHREAD_HXX_ -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+class UnxFilePicker; -+ -+class UnxFilePickerNotifyThread : public ::osl::Thread -+{ -+protected: -+ enum NotifyType -+ { -+ Nothing = 0, -+ FileSelectionChanged -+ // TODO More to come... -+ }; -+ -+ UnxFilePicker *m_pUnxFilePicker; -+ -+ ::osl::Mutex m_aMutex; -+ -+ ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener > m_xListener; -+ -+ sal_Bool m_bExit; -+ ::osl::Condition m_aExitCondition; -+ -+ NotifyType m_eNotifyType; -+ ::osl::Condition m_aNotifyCondition; -+ sal_Int16 m_nControlId; -+ -+public: -+ UnxFilePickerNotifyThread( UnxFilePicker *pUnxFilePicker ); -+ -+ virtual void SAL_CALL addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) -+ throw( ::com::sun::star::uno::RuntimeException ); -+ virtual void SAL_CALL removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) -+ throw( ::com::sun::star::uno::RuntimeException ); -+ -+ void SAL_CALL exit(); -+ -+ void SAL_CALL fileSelectionChanged(); -+ /* TODO -+ void SAL_CALL directoryChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ); -+ rtl::OUString SAL_CALL helpRequested( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ) const; -+ void SAL_CALL controlStateChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ); -+ void SAL_CALL dialogSizeChanged( ); -+ */ -+ -+protected: -+ virtual void SAL_CALL run(); -+}; -+ -+#endif // _UNXNOTIFYTHREAD_HXX_ -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/fpicker/source/unx/tde_unx/fps_tde.component b/fpicker/source/unx/tde_unx/fps_tde.component -new file mode 100644 -index 0000000..e7a201d ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/fps_tde.component -@@ -0,0 +1,35 @@ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/fpicker/source/unx/tde_unx/fps_tde.xml b/fpicker/source/unx/tde_unx/fps_tde.xml -new file mode 100644 -index 0000000..fc1ed68 ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/fps_tde.xml -@@ -0,0 +1,51 @@ -+ -+ -+ -+ fps_tde -+ -+ Jan Holesovsky -+ com.sun.star.comp.ui.dialogs.FilePicker -+ -+ The TDE implementation of the FilePicker service. -+ -+ com.sun.star.loader.SharedLibrary -+ c++ -+ -+ com.sun.star.ui.dialogs.FilePicker -+ ... -+ com.sun.star.ui.dialogs.XExecutableDialog -+ com.sun.star.ui.dialogs.XFilePicker -+ com.sun.star.ui.dialogs.XFilterManager -+ com.sun.star.ui.dialogs.XFilterGroupManager -+ com.sun.star.ui.dialogs.XFilePickerListener -+ com.sun.star.ui.dialogs.ExecutableDialogException -+ com.sun.star.ui.dialogs.XFilePickerNotifier -+ com.sun.star.ui.dialogs.XFilePickerControlAccess -+ com.sun.star.ui.dialogs.XFilePreview -+ com.sun.star.ui.dialogs.ExtendedFilePickerElementIds -+ com.sun.star.ui.dialogs.ExecutableDialogResults -+ com.sun.star.ui.dialogs.FilePickerEvent -+ com.sun.star.ui.dialogs.CommonFilePickerElementIds -+ com.sun.star.ui.dialogs.ListboxControlActions -+ com.sun.star.ui.dialogs.TemplateDescription -+ com.sun.star.ui.dialogs.FilePreviewImageFormats -+ com.sun.star.util.XCancellable -+ com.sun.star.lang.XComponent -+ com.sun.star.lang.XMultiServiceFactory -+ com.sun.star.lang.XSingleServiceFactory -+ com.sun.star.lang.XServiceInfo -+ com.sun.star.lang.XTypeProvider -+ com.sun.star.lang.IllegalArgumentException -+ com.sun.star.uno.TypeClass -+ com.sun.star.uno.XWeak -+ com.sun.star.uno.XAggregation -+ com.sun.star.registry.XRegistryKey -+ com.sun.star.container.XSet -+ -+ cppuhelper -+ cppu -+ sal -+ cppuhelper -+ cppu2 -+ sal2 -+ -diff --git a/fpicker/source/unx/tde_unx/makefile.mk b/fpicker/source/unx/tde_unx/makefile.mk -new file mode 100644 -index 0000000..196c948 ---- /dev/null -+++ b/fpicker/source/unx/tde_unx/makefile.mk -@@ -0,0 +1,86 @@ -+#************************************************************************* -+# -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# Copyright 2000, 2010 Oracle and/or its affiliates. -+# Copyright 2010 Novell, Inc. -+# Copyright 2011 Timothy Pearson -+# -+# OpenOffice.org - a multi-platform office productivity suite -+# -+# This file is part of OpenOffice.org. -+# -+# OpenOffice.org is free software: you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License version 3 -+# only, as published by the Free Software Foundation. -+# -+# OpenOffice.org 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 Lesser General Public License version 3 for more details -+# (a copy is included in the LICENSE file that accompanied this code). -+# -+# You should have received a copy of the GNU Lesser General Public License -+# version 3 along with OpenOffice.org. If not, see -+# -+# for a copy of the LGPLv3 License. -+# -+#************************************************************************* -+ -+PRJ=..$/..$/.. -+ -+PRJNAME=fpicker -+TARGET=fps_tde.uno -+LIBTARGET=NO -+ENABLE_EXCEPTIONS=TRUE -+ -+# --- Settings ----------------------------------------------------- -+ -+.INCLUDE : settings.mk -+DLLPRE= -+ -+# ------------------------------------------------------------------ -+ -+# Currently just TDE is supported... -+.IF "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -+ -+dummy: -+ @echo "Nothing to build. GUIBASE == $(GUIBASE), ENABLE_TDE is not set" -+ -+.ELSE # we build for TDE -+ -+# --- Files -------------------------------------------------------- -+ -+SLOFILES =\ -+ $(SLO)$/UnxCommandThread.obj \ -+ $(SLO)$/UnxFilePicker.obj \ -+ $(SLO)$/UnxNotifyThread.obj \ -+ $(SLO)$/UnxFPentry.obj -+ -+SHL1NOCHECK=TRUE -+SHL1TARGET=fps_tde.uno -+SHL1STDLIBS=$(CPPULIB)\ -+ $(CPPUHELPERLIB)\ -+ $(SALLIB)\ -+ $(VCLLIB)\ -+ $(TOOLSLIB) -+ -+SHL1OBJS=$(SLOFILES) -+SHL1DEF=$(MISC)$/$(SHL1TARGET).def -+ -+DEF1NAME=$(SHL1TARGET) -+DEF1VERSIONMAP=$(SOLARENV)/src/component.map -+ -+.ENDIF # "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE" -+ -+# --- Targets ------------------------------------------------------ -+ -+.INCLUDE : target.mk -+ -+ALLTAR : $(MISC)/fps_tde.component -+ -+$(MISC)/fps_tde.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ -+ fps_tde.component -+ $(XSLTPROC) --nonet --stringparam uri \ -+ '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ -+ $(SOLARENV)/bin/createcomponent.xslt fps_tde.component -diff --git a/postprocess/packcomponents/makefile.mk b/postprocess/packcomponents/makefile.mk -index b983928..a47e9c6 100644 ---- a/postprocess/packcomponents/makefile.mk -+++ b/postprocess/packcomponents/makefile.mk -@@ -235,6 +235,10 @@ my_components += kab1 - my_components += kdebe1 - .END - -+.IF "$(ENABLE_TDE)" != "" -+my_components += tdebe1 -+.END -+ - .IF "$(ENABLE_KDE4)" != "" - my_components += kde4be1 - .END -@@ -354,6 +358,10 @@ my_components += fps_gnome - my_components += fps_kde4 - .END - -+.IF "$(ENABLE_TDE)" != "" -+my_components += fps_tde -+.END -+ - .IF "$(OS)" != "WNT" - my_components += cmdmail - .END -diff --git a/postprocess/packregistry/makefile.mk b/postprocess/packregistry/makefile.mk -index d82c9ef..a3a6de4 100644 ---- a/postprocess/packregistry/makefile.mk -+++ b/postprocess/packregistry/makefile.mk -@@ -328,6 +328,9 @@ MY_FILES_main += \ - .IF "$(ENABLE_KAB)" == "TRUE" - MY_FILES_main += $(MY_MOD)/DataAccess/kab.xcu - .END -+.IF "$(ENABLE_TDEAB)" == "TRUE" -+MY_FILES_main += $(MY_MOD)/DataAccess/tdeab.xcu -+.END - .IF "$(SYSTEM_MOZILLA)" != "YES" && "$(WITH_MOZILLA)" != "NO" && \ - "$(OS)" != "MACOSX" - .IF "$(OS)" == "WNT" -diff --git a/scp2/prj/build.lst b/scp2/prj/build.lst -index f225c3e..41be4f3 100644 ---- a/scp2/prj/build.lst -+++ b/scp2/prj/build.lst -@@ -14,6 +14,7 @@ cp scp2\source\graphicfilter nmake - all cp_graphicfilter cp_langm - cp scp2\source\impress nmake - all cp_impress cp_langmacros cp_langtemplates NULL - cp scp2\source\javafilter nmake - all cp_javafilter cp_langmacros cp_langtemplates NULL - cp scp2\source\kde nmake - all cp_kde cp_langmacros cp_langtemplates NULL -+cp scp2\source\tde nmake - all cp_tde cp_langmacros cp_langtemplates NULL - cp scp2\source\layout nmake - all cp_layout cp_langmacros NULL - cp scp2\source\math nmake - all cp_math cp_langmacros cp_langtemplates NULL - cp scp2\source\ooo nmake - all cp_ooo cp_langmacros cp_langtemplates NULL -@@ -27,4 +28,4 @@ cp scp2\source\xsltfilter nmake - all cp_xsltfilter cp_langmacr - cp scp2\source\winexplorerext nmake - all cp_winexplorerext cp_langmacros cp_langtemplates NULL - cp scp2\source\onlineupdate nmake - all cp_update cp_langmacros cp_langtemplates NULL - cp scp2\source\accessories nmake - all cp_accessories cp_langmacros NULL --cp scp2\util nmake - all cp_util cp_activex cp_binfilter cp_calc cp_canvas cp_crashrep cp_draw cp_extensions cp_gnome cp_graphicfilter cp_impress cp_javafilter cp_kde cp_layout cp_math cp_ooo cp_python cp_quickstart cp_testtool cp_writer cp_base cp_xsltfilter cp_winexplorerext cp_sdkoo cp_update cp_accessories NULL -+cp scp2\util nmake - all cp_util cp_activex cp_binfilter cp_calc cp_canvas cp_crashrep cp_draw cp_extensions cp_gnome cp_graphicfilter cp_impress cp_javafilter cp_kde cp_tde cp_layout cp_math cp_ooo cp_python cp_quickstart cp_testtool cp_writer cp_base cp_xsltfilter cp_winexplorerext cp_sdkoo cp_update cp_accessories NULL -diff --git a/scp2/source/ooo/file_library_ooo.scp b/scp2/source/ooo/file_library_ooo.scp -index d83d6cf..fe378e1 100644 ---- a/scp2/source/ooo/file_library_ooo.scp -+++ b/scp2/source/ooo/file_library_ooo.scp -@@ -425,6 +425,24 @@ End - - #endif - -+#ifdef ENABLE_TDEAB -+File gid_File_Lib_Tdeab_1 -+ TXT_FILE_BODY; -+ Styles = (PACKED,UNO_COMPONENT); -+ RegistryID = gid_Starregistry_Services_Rdb; -+ Dir = SCP2_OOO_BIN_DIR; -+ Name = STRING(CONCAT2(libtdeab1,UNXSUFFIX)); -+End -+ -+File gid_File_Lib_Tdeab_Drv_1 -+ TXT_FILE_BODY; -+ Styles = (PACKED); -+ Dir = SCP2_OOO_BIN_DIR; -+ Name = STRING(CONCAT2(libtdeabdrv1,UNXSUFFIX)); -+End -+ -+#endif -+ - #ifdef MACOSX - File gid_File_Lib_Macab_1 - TXT_FILE_BODY; -@@ -525,6 +543,23 @@ File gid_File_Bin_KdeFilePicker - End - #endif - #endif -+#ifdef ENABLE_TDE -+#ifndef MACOSX -+File gid_File_Lib_Fps_Tde -+ TXT_FILE_BODY; -+ Styles = (PACKED); -+ Dir = SCP2_OOO_BIN_DIR; -+ Name = SPECIAL_COMPONENT_LIB_NAME(fps_tde.uno); -+End -+File gid_File_Bin_TdeFilePicker -+ BIN_FILE_BODY; -+ Styles = (PACKED); -+ Dir = gid_Brand_Dir_Program; -+ Name = "tdefilepicker"; -+End -+#endif -+#endif -+ - #endif - - #ifdef QUARTZ -@@ -992,6 +1027,17 @@ File gid_File_Lib_Vclplug_Kde4 - End - #endif - #endif -+#ifdef ENABLE_TDE -+#ifndef MACOSX -+File gid_File_Lib_Vclplug_Tde -+ Name = LIBNAME(vclplug_tde); -+ TXT_FILE_BODY; -+ Styles = (PACKED); -+ Dir = SCP2_OOO_BIN_DIR; -+End -+#endif -+#endif -+ - #endif - - #if defined(QUARTZ) -diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp -index 34ed8a9..5291d0d 100644 ---- a/scp2/source/ooo/file_ooo.scp -+++ b/scp2/source/ooo/file_ooo.scp -@@ -169,6 +169,13 @@ File gid_File_Bin_Kde_Open_Url - Styles = (PACKED); - End - -+File gid_File_Bin_Tde_Open_Url -+ BIN_FILE_BODY; -+ Dir = gid_Brand_Dir_Program; -+ Name = "tde-open-url"; -+ Styles = (PACKED); -+End -+ - File gid_File_Bin_Cde_Open_Url - BIN_FILE_BODY; - Dir = gid_Brand_Dir_Program; -diff --git a/scp2/source/ooo/makefile.mk b/scp2/source/ooo/makefile.mk -index ce2ab52..0b8d12b 100644 ---- a/scp2/source/ooo/makefile.mk -+++ b/scp2/source/ooo/makefile.mk -@@ -84,6 +84,14 @@ SCPDEFS+=-DENABLE_KDE4 - SCPDEFS+=-DENABLE_KAB - .ENDIF - -+.IF "$(ENABLE_TDE)" != "" -+SCPDEFS+=-DENABLE_TDE -+.ENDIF -+ -+.IF "$(ENABLE_TDEAB)" != "" -+SCPDEFS+=-DENABLE_TDEAB -+.ENDIF -+ - .IF "$(ENABLE_EVOAB2)" != "" - SCPDEFS+=-DENABLE_EVOAB2 - .ENDIF -diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp -index 20d9b16..fce92ce 100644 ---- a/scp2/source/ooo/module_hidden_ooo.scp -+++ b/scp2/source/ooo/module_hidden_ooo.scp -@@ -84,6 +84,7 @@ Module gid_Module_Root_Files_2 - Styles = (HIDDEN_ROOT); - Files = (gid_File_Bin_Cde_Open_Url, - gid_File_Bin_Kde_Open_Url, -+ gid_File_Bin_Tde_Open_Url, - gid_File_Bin_Open_Url, - gid_File_Bin_Pagein, - gid_File_Bin_Pluginapp, -@@ -277,6 +278,7 @@ Module gid_Module_Root_Files_4 - gid_File_Lib_Vclplug_Gen, - gid_File_Lib_Vclplug_Kde, - gid_File_Lib_Vclplug_Kde4, -+ gid_File_Lib_Vclplug_Tde, - gid_File_Lib_Vclplug_Svp, - gid_File_Lib_Basctl, - gid_File_Lib_CanvasTools, -@@ -348,6 +350,8 @@ Module gid_Module_Root_Files_5 - gid_File_Lib_Emboleobj, - gid_File_Lib_Kab_1, - gid_File_Lib_Kab_Drv_1, -+ gid_File_Lib_Tdeab_1, -+ gid_File_Lib_Tdeab_Drv_1, - gid_File_Lib_Macab_1, - gid_File_Lib_Macab_Drv_1, - gid_File_Lib_Evtatt, -diff --git a/scp2/source/tde/file_tde.scp b/scp2/source/tde/file_tde.scp -new file mode 100644 -index 0000000..6387a57 ---- /dev/null -+++ b/scp2/source/tde/file_tde.scp -@@ -0,0 +1,37 @@ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+#include "macros.inc" -+ -+#ifdef ENABLE_TDE -+File gid_File_Lib_Tdebe -+ TXT_FILE_BODY; -+ Styles = (PACKED); -+ Dir = SCP2_OOO_BIN_DIR; -+ Name = STRING(CONCAT2(tdebe1.uno,UNXSUFFIX)); -+End -+#endif -diff --git a/scp2/source/tde/makefile.mk b/scp2/source/tde/makefile.mk -new file mode 100644 -index 0000000..78d5728 ---- /dev/null -+++ b/scp2/source/tde/makefile.mk -@@ -0,0 +1,59 @@ -+#************************************************************************* -+# -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# Copyright 2000, 2010 Oracle and/or its affiliates. -+# Copyright 2011 Timothy Pearson -+# -+# OpenOffice.org - a multi-platform office productivity suite -+# -+# This file is part of OpenOffice.org. -+# -+# OpenOffice.org is free software: you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License version 3 -+# only, as published by the Free Software Foundation. -+# -+# OpenOffice.org 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 Lesser General Public License version 3 for more details -+# (a copy is included in the LICENSE file that accompanied this code). -+# -+# You should have received a copy of the GNU Lesser General Public License -+# version 3 along with OpenOffice.org. If not, see -+# -+# for a copy of the LGPLv3 License. -+# -+#************************************************************************* -+ -+PRJ=..$/.. -+ -+PRJPCH= -+ -+PRJNAME=scp2 -+TARGET=tde -+TARGETTYPE=CUI -+ -+# --- Settings ----------------------------------------------------- -+ -+.INCLUDE : settings.mk -+ -+SCP_PRODUCT_TYPE=osl -+ -+.IF "$(ENABLE_TDE)" == "TRUE" -+ -+.IF "$(ENABLE_TDE)" != "" -+SCPDEFS+=-DENABLE_TDE -+.ENDIF -+ -+PARFILES = \ -+ module_tde.par \ -+ file_tde.par -+ -+ULFFILES= \ -+ module_tde.ulf -+.ENDIF -+ -+# --- File --------------------------------------------------------- -+ -+.INCLUDE : target.mk -diff --git a/scp2/source/tde/module_tde.scp b/scp2/source/tde/module_tde.scp -new file mode 100644 -index 0000000..9fdfecd ---- /dev/null -+++ b/scp2/source/tde/module_tde.scp -@@ -0,0 +1,45 @@ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * Copyright 2011 Timothy Pearson -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#include "macros.inc" -+ -+#if defined( ENABLE_TDE ) -+Module gid_Module_Optional_Tde -+ ParentID = gid_Module_Optional; -+ Default = YES; -+ PackageInfo = "packinfo_office.txt"; -+ MOD_NAME_DESC(MODULE_OPTIONAL_TDE); -+ Styles = (DONTSHOWINUSERINSTALL); -+ Files = ( -+#ifdef ENABLE_TDE -+ gid_File_Lib_Tdebe -+#endif // ENABLE_TDE -+ ); -+End -+#endif -+ -diff --git a/scp2/source/tde/module_tde.ulf b/scp2/source/tde/module_tde.ulf -new file mode 100644 -index 0000000..e55735f ---- /dev/null -+++ b/scp2/source/tde/module_tde.ulf -@@ -0,0 +1,34 @@ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+[STR_NAME_MODULE_OPTIONAL_TDE] -+en-US = "TDE Integration" -+ -+[STR_DESC_MODULE_OPTIONAL_TDE] -+en-US = "System integration of %PRODUCTNAME %PRODUCTVERSION into TDE." -+ -diff --git a/scp2/util/makefile.mk b/scp2/util/makefile.mk -index 1d6d694..c59e04c 100644 ---- a/scp2/util/makefile.mk -+++ b/scp2/util/makefile.mk -@@ -200,6 +200,12 @@ SCP1FILES += \ - module_kde.par \ - file_kde.par - .ENDIF -+ -+.IF "$(ENABLE_TDE)" == "TRUE" -+SCP1FILES += \ -+ module_tde.par \ -+ file_tde.par -+.ENDIF - .ENDIF - - .IF "$(ENABLE_CRASHDUMP)" != "" -diff --git a/set_soenv.in b/set_soenv.in -index dc2d996..e0d7c39 100755 ---- a/set_soenv.in -+++ b/set_soenv.in -@@ -1546,6 +1546,10 @@ ToFile( "KDE_GLIB_CFLAGS", "@KDE_GLIB_CFLAGS@", "e" ); - ToFile( "KDE_GLIB_LIBS", "@KDE_GLIB_LIBS@", "e" ); - ToFile( "KDE_HAVE_GLIB", "@KDE_HAVE_GLIB@", "e" ); - ToFile( "ENABLE_KAB", "@ENABLE_KAB@", "e" ); -+ToFile( "ENABLE_TDE", "@ENABLE_TDE@", "e" ); -+ToFile( "TDE_CFLAGS", "@TDE_CFLAGS@", "e" ); -+ToFile( "TDE_LIBS", "@TDE_LIBS@", "e" ); -+ToFile( "ENABLE_TDEAB", "@ENABLE_TDEAB@", "e" ); - ToFile( "PSPRINT", "TRUE", "e" ); - ToFile( "MKDEPENDSOLVER", "TRUE", "e" ); - ToFile( "nodep", "@nodep@", "e" ); -diff --git a/setup_native/source/packinfo/packinfo_office.txt b/setup_native/source/packinfo/packinfo_office.txt -index 63bb1fe..c5bb1d1 100644 ---- a/setup_native/source/packinfo/packinfo_office.txt -+++ b/setup_native/source/packinfo/packinfo_office.txt -@@ -48,6 +48,21 @@ packageversion = "%OOOPACKAGEVERSION" - End - - Start -+module = "gid_Module_Optional_Tde" -+solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-tde-integration" -+solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01" -+packagename = "%BASISPACKAGEPREFIX%OOOBASEVERSION-tde-integration" -+freebsdrequires = "%BASISPACKAGEPREFIX%OOOBASEVERSION-core01" -+requires = "%BASISPACKAGEPREFIX%OOOBASEVERSION-core01" -+copyright = "1999-2009 by OpenOffice.org" -+solariscopyright = "solariscopyrightfile" -+vendor = "The Document Foundation" -+description = "TDE integration module for LibreOffice %OOOBASEVERSION" -+destpath = "/opt" -+packageversion = "%OOOPACKAGEVERSION" -+End -+ -+Start - module = "gid_Module_Root" - # script = "shellscripts_core01.txt" - solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01" -diff --git a/shell/inc/tde_headers.h b/shell/inc/tde_headers.h -new file mode 100644 -index 0000000..91f59f9 ---- /dev/null -+++ b/shell/inc/tde_headers.h -@@ -0,0 +1,98 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef INCLUDED_VCL_TDE_HEADERS_H -+#define INCLUDED_VCL_TDE_HEADERS_H -+ -+/* ********* Suppress warnings if needed */ -+#include "sal/config.h" -+ -+#if defined __GNUC__ -+#pragma GCC system_header -+#endif -+ -+ -+/* ********* Hack, but needed because of conflicting types... */ -+#define Region QtXRegion -+ -+ -+/* ********* TQt headers */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* ********* See hack on top of this file */ -+#undef Region -+ -+ -+/* ********* TDE base headers */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+ -+/* ********* TDE address book connectivity headers */ -+#include -+#include -+#include -+#include -+ -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/shell/prj/build.lst b/shell/prj/build.lst -index 6dc5270..700c989 100644 ---- a/shell/prj/build.lst -+++ b/shell/prj/build.lst -@@ -25,5 +25,6 @@ sl shell\source\backends\macbe nmake - u sl_backends_m - sl shell\source\backends\gconfbe nmake - u sl_backends_gconfbe sl_inc NULL - sl shell\source\backends\kdebe nmake - u sl_backends_kdebe sl_inc NULL - sl shell\source\backends\kde4be nmake - u sl_backends_kde4be sl_inc NULL -+sl shell\source\backends\tdebe nmake - u sl_backends_tdebe sl_inc NULL - sl shell\source\backends\desktopbe nmake - u sl_backends_desktopbe sl_inc NULL - sl shell\source\win32\shlxthandler\ooofilt nmake - w sl_win32_shlxthandler_ooofilt sl_win32_zipfile.w sl_win32_ooofilereader.w sl_win32_shlxthandler_util.w sl_all sl_inc NULL -diff --git a/shell/prj/d.lst b/shell/prj/d.lst -index 62dfa80..7665b62 100644 ---- a/shell/prj/d.lst -+++ b/shell/prj/d.lst -@@ -15,6 +15,7 @@ - ..\%__SRC%\bin\open-url %_DEST%\bin\open-url - ..\%__SRC%\bin\cde-open-url %_DEST%\bin\cde-open-url - ..\%__SRC%\bin\kde-open-url %_DEST%\bin\kde-open-url -+..\%__SRC%\bin\tde-open-url %_DEST%\bin\tde-open-url - ..\%__SRC%\bin\gnome-open-url %_DEST%\bin\gnome-open-url - ..\%__SRC%\bin\gnome-open-url.bin %_DEST%\bin\gnome-open-url.bin - ..\%__SRC%\bin\senddoc %_DEST%\bin\senddoc -@@ -27,7 +28,9 @@ - ..\%__SRC%\misc\gconfbe1.component %_DEST%\xml\gconfbe1.component - ..\%__SRC%\misc\kde4be1.component %_DEST%\xml\kde4be1.component - ..\%__SRC%\misc\kdebe1.component %_DEST%\xml\kdebe1.component -+..\%__SRC%\misc\tdebe1.component %_DEST%\xml\tdebe1.component - ..\inc\kde_headers.h %_DEST%\inc\shell\kde_headers.h -+..\inc\tde_headers.h %_DEST%\inc\shell\tde_headers.h - ..\%__SRC%\misc\localebe1.component %_DEST%\xml\localebe1.component - ..\%__SRC%\misc\macbe1.component %_DEST%\xml\macbe1.component - ..\%__SRC%\misc\smplmail.component %_DEST%\xml\smplmail.component -diff --git a/shell/source/backends/tdebe/makefile.mk b/shell/source/backends/tdebe/makefile.mk -new file mode 100644 -index 0000000..5243da4 ---- /dev/null -+++ b/shell/source/backends/tdebe/makefile.mk -@@ -0,0 +1,88 @@ -+#************************************************************************* -+# -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# Copyright 2000, 2010 Oracle and/or its affiliates. -+# Copyright 2011 Timothy Pearson -+# -+# OpenOffice.org - a multi-platform office productivity suite -+# -+# This file is part of OpenOffice.org. -+# -+# OpenOffice.org is free software: you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License version 3 -+# only, as published by the Free Software Foundation. -+# -+# OpenOffice.org 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 Lesser General Public License version 3 for more details -+# (a copy is included in the LICENSE file that accompanied this code). -+# -+# You should have received a copy of the GNU Lesser General Public License -+# version 3 along with OpenOffice.org. If not, see -+# -+# for a copy of the LGPLv3 License. -+# -+#************************************************************************* -+PRJ=..$/..$/.. -+ -+PRJNAME=shell -+TARGET=tdebe -+ -+LIBTARGET=NO -+ENABLE_EXCEPTIONS=TRUE -+VISIBILITY_HIDDEN=TRUE -+ -+# --- Settings --- -+ -+.INCLUDE : settings.mk -+ -+# For some of the included external TDE headers, GCC complains about shadowed -+# symbols in instantiated template code only at the end of a compilation unit, -+# so the only solution is to disable that warning here: -+.IF "$(COM)" == "GCC" -+CFLAGSCXX+=-Wno-shadow -+.ENDIF -+ -+# no "lib" prefix -+DLLPRE = -+ -+.IF "$(ENABLE_TDE)" == "TRUE" -+ -+CFLAGS+=$(TDE_CFLAGS) -+ -+# --- Files --- -+ -+SLOFILES=\ -+ $(SLO)$/tdeaccess.obj \ -+ $(SLO)$/tdebackend.obj -+ -+SHL1NOCHECK=TRUE -+SHL1TARGET=$(TARGET)1.uno -+SHL1OBJS=$(SLOFILES) -+SHL1DEF=$(MISC)$/$(SHL1TARGET).def -+ -+SHL1IMPLIB=i$(SHL1TARGET) -+SHL1LINKFLAGS+=$(TDE_LIBS) -lkio -+SHL1STDLIBS= \ -+ $(CPPUHELPERLIB) \ -+ $(CPPULIB) \ -+ $(SALLIB) -+ -+SHL1DEF=$(MISC)$/$(SHL1TARGET).def -+DEF1NAME=$(SHL1TARGET) -+ -+.ENDIF # "$(ENABLE_TDE)" == "TRUE" -+ -+# --- Targets --- -+ -+.INCLUDE : target.mk -+ -+ALLTAR : $(MISC)/tdebe1.component -+ -+$(MISC)/tdebe1.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ -+ tdebe1.component -+ $(XSLTPROC) --nonet --stringparam uri \ -+ '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ -+ $(SOLARENV)/bin/createcomponent.xslt tdebe1.component -diff --git a/shell/source/backends/tdebe/tdeaccess.cxx b/shell/source/backends/tdebe/tdeaccess.cxx -new file mode 100644 -index 0000000..1dbd64f ---- /dev/null -+++ b/shell/source/backends/tdebe/tdeaccess.cxx -@@ -0,0 +1,319 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+* -+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+* -+* Copyright 2000, 2010 Oracle and/or its affiliates. -+* Copyright 2011 Timothy Pearson -+* -+* OpenOffice.org - a multi-platform office productivity suite -+* -+* This file is part of OpenOffice.org. -+* -+* OpenOffice.org is free software: you can redistribute it and/or modify -+* it under the terms of the GNU Lesser General Public License version 3 -+* only, as published by the Free Software Foundation. -+* -+* OpenOffice.org 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 Lesser General Public License version 3 for more details -+* (a copy is included in the LICENSE file that accompanied this code). -+* -+* You should have received a copy of the GNU Lesser General Public License -+* version 3 along with OpenOffice.org. If not, see -+* -+* for a copy of the LGPLv3 License. -+* -+************************************************************************/ -+ -+#include "precompiled_shell.hxx" -+#include "sal/config.h" -+ -+#include "com/sun/star/uno/Any.hxx" -+#include "cppu/unotype.hxx" -+#include "osl/diagnose.h" -+#include "osl/file.h" -+#include "rtl/string.h" -+#include "rtl/ustring.hxx" -+ -+#include "tde_headers.h" -+ -+#include "tdeaccess.hxx" -+ -+#define SPACE ' ' -+#define COMMA ',' -+#define SEMI_COLON ';' -+ -+namespace tdeaccess { -+ -+namespace { -+ -+namespace css = com::sun::star ; -+namespace uno = css::uno ; -+ -+} -+ -+css::beans::Optional< css::uno::Any > getValue(rtl::OUString const & id) { -+ if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ExternalMailer"))) { -+ KEMailSettings aEmailSettings; -+ TQString aClientProgram; -+ ::rtl::OUString sClientProgram; -+ -+ aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram ); -+ if ( aClientProgram.isEmpty() ) -+ aClientProgram = "kmail"; -+ else -+ aClientProgram = aClientProgram.section(SPACE, 0, 0); -+ sClientProgram = (const sal_Unicode *) aClientProgram.ucs2(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( sClientProgram ) ); -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight"))) -+ { -+ TQFont aFixedFont; -+ short nFontHeight; -+ -+ aFixedFont = KGlobalSettings::fixedFont(); -+ nFontHeight = aFixedFont.pointSize(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( nFontHeight ) ); -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName"))) -+ { -+ TQFont aFixedFont; -+ TQString aFontName; -+ :: rtl::OUString sFontName; -+ -+ aFixedFont = KGlobalSettings::fixedFont(); -+ aFontName = aFixedFont.family(); -+ sFontName = (const sal_Unicode *) aFontName.ucs2(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( sFontName ) ); -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport"))) -+ { -+ /* does not make much sense without an accessibility bridge */ -+ sal_Bool ATToolSupport = sal_False; -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( rtl::OUString::valueOf( ATToolSupport ) ) ); -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable"))) -+ { -+ TQString aDocumentsDir( KGlobalSettings::documentPath() ); -+ rtl::OUString sDocumentsDir; -+ rtl::OUString sDocumentsURL; -+ if ( aDocumentsDir.endsWith(TQChar('/')) ) -+ aDocumentsDir.truncate ( aDocumentsDir.length() - 1 ); -+ sDocumentsDir = (const sal_Unicode *) aDocumentsDir.ucs2(); -+ osl_getFileURLFromSystemPath( sDocumentsDir.pData, &sDocumentsURL.pData ); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( sDocumentsURL ) ); -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName"))) -+ { -+ TQString aFTPProxy; -+ switch ( KProtocolManager::proxyType() ) -+ { -+ case KProtocolManager::ManualProxy: // Proxies are manually configured -+ aFTPProxy = KProtocolManager::proxyFor( "FTP" ); -+ break; -+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -+// In such cases, the proxy address is not stored in TDE, but determined dynamically. -+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -+// The best we can do here is to ask the current value for a given address. -+ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" ); -+ break; -+ default: // No proxy is used -+ break; -+ } -+ if ( !aFTPProxy.isEmpty() ) -+ { -+ KURL aProxy(aFTPProxy); -+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( sProxy ) ); -+ } -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort"))) -+ { -+ TQString aFTPProxy; -+ switch ( KProtocolManager::proxyType() ) -+ { -+ case KProtocolManager::ManualProxy: // Proxies are manually configured -+ aFTPProxy = KProtocolManager::proxyFor( "FTP" ); -+ break; -+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -+// In such cases, the proxy address is not stored in TDE, but determined dynamically. -+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -+// The best we can do here is to ask the current value for a given address. -+ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" ); -+ break; -+ default: // No proxy is used -+ break; -+ } -+ if ( !aFTPProxy.isEmpty() ) -+ { -+ KURL aProxy(aFTPProxy); -+ sal_Int32 nPort = aProxy.port(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( nPort ) ); -+ } -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName"))) -+ { -+ TQString aHTTPProxy; -+ switch ( KProtocolManager::proxyType() ) -+ { -+ case KProtocolManager::ManualProxy: // Proxies are manually configured -+ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" ); -+ break; -+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -+// In such cases, the proxy address is not stored in TDE, but determined dynamically. -+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -+// The best we can do here is to ask the current value for a given address. -+ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" ); -+ break; -+ default: // No proxy is used -+ break; -+ } -+ if ( !aHTTPProxy.isEmpty() ) -+ { -+ KURL aProxy(aHTTPProxy); -+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( sProxy ) ); -+ } -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort"))) -+ { -+ TQString aHTTPProxy; -+ switch ( KProtocolManager::proxyType() ) -+ { -+ case KProtocolManager::ManualProxy: // Proxies are manually configured -+ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" ); -+ break; -+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -+// In such cases, the proxy address is not stored in TDE, but determined dynamically. -+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -+// The best we can do here is to ask the current value for a given address. -+ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" ); -+ break; -+ default: // No proxy is used -+ break; -+ } -+ if ( !aHTTPProxy.isEmpty() ) -+ { -+ KURL aProxy(aHTTPProxy); -+ sal_Int32 nPort = aProxy.port(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( nPort ) ); -+ } -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName"))) -+ { -+ TQString aHTTPSProxy; -+ switch ( KProtocolManager::proxyType() ) -+ { -+ case KProtocolManager::ManualProxy: // Proxies are manually configured -+ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" ); -+ break; -+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -+// In such cases, the proxy address is not stored in TDE, but determined dynamically. -+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -+// The best we can do here is to ask the current value for a given address. -+ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" ); -+ break; -+ default: // No proxy is used -+ break; -+ } -+ if ( !aHTTPSProxy.isEmpty() ) -+ { -+ KURL aProxy(aHTTPSProxy); -+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( sProxy ) ); -+ } -+ } else if (id.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort"))) -+ { -+ TQString aHTTPSProxy; -+ switch ( KProtocolManager::proxyType() ) -+ { -+ case KProtocolManager::ManualProxy: // Proxies are manually configured -+ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" ); -+ break; -+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -+// In such cases, the proxy address is not stored in TDE, but determined dynamically. -+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind... -+// The best we can do here is to ask the current value for a given address. -+ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" ); -+ break; -+ default: // No proxy is used -+ break; -+ } -+ if ( !aHTTPSProxy.isEmpty() ) -+ { -+ KURL aProxy(aHTTPSProxy); -+ sal_Int32 nPort = aProxy.port(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( nPort ) ); -+ } -+ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy"))) { -+ TQString aNoProxyFor; -+ switch ( KProtocolManager::proxyType() ) -+ { -+ case KProtocolManager::ManualProxy: // Proxies are manually configured -+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -+ aNoProxyFor = KProtocolManager::noProxyFor(); -+ break; -+ default: // No proxy is used -+ break; -+ } -+ if ( !aNoProxyFor.isEmpty() ) -+ { -+ ::rtl::OUString sNoProxyFor; -+ -+ aNoProxyFor = aNoProxyFor.replace( COMMA, SEMI_COLON ); -+ sNoProxyFor = (const sal_Unicode *) aNoProxyFor.ucs2(); -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( sNoProxyFor ) ); -+ } -+ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) { -+ int nProxyType; -+ switch ( KProtocolManager::proxyType() ) -+ { -+ case KProtocolManager::ManualProxy: // Proxies are manually configured -+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given -+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered -+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables -+ nProxyType = 1; -+ break; -+ default: // No proxy is used -+ nProxyType = 0; -+ } -+ return css::beans::Optional< css::uno::Any >( -+ true, uno::makeAny( (sal_Int32) nProxyType ) ); -+ } else { -+ OSL_ASSERT(false); // this cannot happen -+ } -+ return css::beans::Optional< css::uno::Any >(); -+} -+ -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/shell/source/backends/tdebe/tdeaccess.hxx b/shell/source/backends/tdebe/tdeaccess.hxx -new file mode 100644 -index 0000000..5029c12 ---- /dev/null -+++ b/shell/source/backends/tdebe/tdeaccess.hxx -@@ -0,0 +1,51 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+* -+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+* -+* Copyright 2000, 2010 Oracle and/or its affiliates. -+* Copyright 2011 Timothy Pearson -+* -+* OpenOffice.org - a multi-platform office productivity suite -+* -+* This file is part of OpenOffice.org. -+* -+* OpenOffice.org is free software: you can redistribute it and/or modify -+* it under the terms of the GNU Lesser General Public License version 3 -+* only, as published by the Free Software Foundation. -+* -+* OpenOffice.org 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 Lesser General Public License version 3 for more details -+* (a copy is included in the LICENSE file that accompanied this code). -+* -+* You should have received a copy of the GNU Lesser General Public License -+* version 3 along with OpenOffice.org. If not, see -+* -+* for a copy of the LGPLv3 License. -+* -+************************************************************************/ -+ -+#ifndef INCLUDED_SHELL_SOURCE_BACKENDS_TDEBE_TDEACCESS_HXX -+#define INCLUDED_SHELL_SOURCE_BACKENDS_TDEBE_TDEACCESS_HXX -+ -+#include "sal/config.h" -+ -+#include "com/sun/star/beans/Optional.hpp" -+ -+namespace com { namespace sun { namespace star { namespace uno { -+ class Any; -+} } } } -+namespace rtl { class OUString; } -+ -+namespace tdeaccess { -+ -+com::sun::star::beans::Optional< com::sun::star::uno::Any > getValue( -+ rtl::OUString const & id); -+ -+} -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/shell/source/backends/tdebe/tdebackend.cxx b/shell/source/backends/tdebe/tdebackend.cxx -new file mode 100644 -index 0000000..19eaa60 ---- /dev/null -+++ b/shell/source/backends/tdebe/tdebackend.cxx -@@ -0,0 +1,262 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+* -+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+* -+* Copyright 2000, 2010 Oracle and/or its affiliates. -+* Copyright 2011 Timothy Pearson -+* -+* OpenOffice.org - a multi-platform office productivity suite -+* -+* This file is part of OpenOffice.org. -+* -+* OpenOffice.org is free software: you can redistribute it and/or modify -+* it under the terms of the GNU Lesser General Public License version 3 -+* only, as published by the Free Software Foundation. -+* -+* OpenOffice.org 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 Lesser General Public License version 3 for more details -+* (a copy is included in the LICENSE file that accompanied this code). -+* -+* You should have received a copy of the GNU Lesser General Public License -+* version 3 along with OpenOffice.org. If not, see -+* -+* for a copy of the LGPLv3 License. -+* -+************************************************************************/ -+ -+#include "precompiled_shell.hxx" -+#include "sal/config.h" -+ -+#include "boost/noncopyable.hpp" -+#include "com/sun/star/beans/Optional.hpp" -+#include "com/sun/star/beans/PropertyVetoException.hpp" -+#include "com/sun/star/beans/UnknownPropertyException.hpp" -+#include "com/sun/star/beans/XPropertyChangeListener.hpp" -+#include "com/sun/star/beans/XPropertySet.hpp" -+#include "com/sun/star/beans/XPropertySetInfo.hpp" -+#include "com/sun/star/beans/XVetoableChangeListener.hpp" -+#include "com/sun/star/lang/IllegalArgumentException.hpp" -+#include "com/sun/star/lang/WrappedTargetException.hpp" -+#include "com/sun/star/lang/XMultiComponentFactory.hpp" -+#include "com/sun/star/lang/XServiceInfo.hpp" -+#include "com/sun/star/lang/WrappedTargetException.hpp" -+#include "com/sun/star/uno/Any.hxx" -+#include "com/sun/star/uno/Reference.hxx" -+#include "com/sun/star/uno/RuntimeException.hpp" -+#include "com/sun/star/uno/Sequence.hxx" -+#include "com/sun/star/uno/XComponentContext.hpp" -+#include "com/sun/star/uno/XCurrentContext.hpp" -+#include "cppuhelper/factory.hxx" -+#include "cppuhelper/implbase2.hxx" -+#include "cppuhelper/implementationentry.hxx" -+#include "cppuhelper/weak.hxx" -+#include "rtl/string.h" -+#include "rtl/ustring.h" -+#include "rtl/ustring.hxx" -+#include "sal/types.h" -+#include "uno/current_context.hxx" -+#include "uno/lbnames.h" -+ -+#include "tde_headers.h" -+ -+#include "tdeaccess.hxx" -+ -+namespace { -+ -+namespace css = com::sun::star; -+ -+rtl::OUString SAL_CALL getServiceImplementationName() { -+ return rtl::OUString( -+ RTL_CONSTASCII_USTRINGPARAM( -+ "com.sun.star.comp.configuration.backend.TDEBackend")); -+} -+ -+css::uno::Sequence< rtl::OUString > SAL_CALL getServiceSupportedServiceNames() { -+ rtl::OUString name( -+ RTL_CONSTASCII_USTRINGPARAM( -+ "com.sun.star.configuration.backend.TDEBackend")); -+ return css::uno::Sequence< rtl::OUString >(&name, 1); -+} -+ -+class Service: -+ public cppu::WeakImplHelper2< -+ css::lang::XServiceInfo, css::beans::XPropertySet >, -+ private boost::noncopyable -+{ -+public: -+ Service(); -+ -+private: -+ virtual ~Service() {} -+ -+ virtual rtl::OUString SAL_CALL getImplementationName() -+ throw (css::uno::RuntimeException) -+ { return getServiceImplementationName(); } -+ -+ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName) -+ throw (css::uno::RuntimeException) -+ { return ServiceName == getSupportedServiceNames()[0]; } -+ -+ virtual css::uno::Sequence< rtl::OUString > SAL_CALL -+ getSupportedServiceNames() throw (css::uno::RuntimeException) -+ { return getServiceSupportedServiceNames(); } -+ -+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL -+ getPropertySetInfo() throw (css::uno::RuntimeException) -+ { return css::uno::Reference< css::beans::XPropertySetInfo >(); } -+ -+ virtual void SAL_CALL setPropertyValue( -+ rtl::OUString const &, css::uno::Any const &) -+ throw ( -+ css::beans::UnknownPropertyException, -+ css::beans::PropertyVetoException, -+ css::lang::IllegalArgumentException, -+ css::lang::WrappedTargetException, css::uno::RuntimeException); -+ -+ virtual css::uno::Any SAL_CALL getPropertyValue( -+ rtl::OUString const & PropertyName) -+ throw ( -+ css::beans::UnknownPropertyException, -+ css::lang::WrappedTargetException, css::uno::RuntimeException); -+ -+ virtual void SAL_CALL addPropertyChangeListener( -+ rtl::OUString const &, -+ css::uno::Reference< css::beans::XPropertyChangeListener > const &) -+ throw ( -+ css::beans::UnknownPropertyException, -+ css::lang::WrappedTargetException, css::uno::RuntimeException) -+ {} -+ -+ virtual void SAL_CALL removePropertyChangeListener( -+ rtl::OUString const &, -+ css::uno::Reference< css::beans::XPropertyChangeListener > const &) -+ throw ( -+ css::beans::UnknownPropertyException, -+ css::lang::WrappedTargetException, css::uno::RuntimeException) -+ {} -+ -+ virtual void SAL_CALL addVetoableChangeListener( -+ rtl::OUString const &, -+ css::uno::Reference< css::beans::XVetoableChangeListener > const &) -+ throw ( -+ css::beans::UnknownPropertyException, -+ css::lang::WrappedTargetException, css::uno::RuntimeException) -+ {} -+ -+ virtual void SAL_CALL removeVetoableChangeListener( -+ rtl::OUString const &, -+ css::uno::Reference< css::beans::XVetoableChangeListener > const &) -+ throw ( -+ css::beans::UnknownPropertyException, -+ css::lang::WrappedTargetException, css::uno::RuntimeException) -+ {} -+ -+ bool enabled_; -+}; -+ -+Service::Service(): enabled_(false) { -+ css::uno::Reference< css::uno::XCurrentContext > context( -+ css::uno::getCurrentContext()); -+ if (context.is()) { -+ rtl::OUString desktop; -+ context->getValueByName( -+ rtl::OUString( -+ RTL_CONSTASCII_USTRINGPARAM("system.desktop-environment"))) >>= -+ desktop; -+ enabled_ = desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("TDE")) && -+ KApplication::kApplication() != 0; -+ } -+} -+ -+void Service::setPropertyValue(rtl::OUString const &, css::uno::Any const &) -+ throw ( -+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException, -+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException, -+ css::uno::RuntimeException) -+{ -+ throw css::lang::IllegalArgumentException( -+ rtl::OUString( -+ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")), -+ static_cast< cppu::OWeakObject * >(this), -1); -+} -+ -+css::uno::Any Service::getPropertyValue(rtl::OUString const & PropertyName) -+ throw ( -+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException, -+ css::uno::RuntimeException) -+{ -+ if (PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ExternalMailer")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")) || -+ PropertyName.equalsAsciiL( -+ RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) -+ { -+ return css::uno::makeAny( -+ enabled_ -+ ? tdeaccess::getValue(PropertyName) -+ : css::beans::Optional< css::uno::Any >()); -+ } -+ throw css::beans::UnknownPropertyException( -+ PropertyName, static_cast< cppu::OWeakObject * >(this)); -+} -+ -+css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance( -+ css::uno::Reference< css::uno::XComponentContext > const &) -+{ -+ return static_cast< cppu::OWeakObject * >(new Service); -+} -+ -+static cppu::ImplementationEntry const services[] = { -+ { &createInstance, &getServiceImplementationName, -+ &getServiceSupportedServiceNames, &cppu::createSingleComponentFactory, 0, -+ 0 }, -+ { 0, 0, 0, 0, 0, 0 } -+}; -+ -+} -+ -+extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( -+ char const * pImplName, void * pServiceManager, void * pRegistryKey) -+{ -+ return cppu::component_getFactoryHelper( -+ pImplName, pServiceManager, pRegistryKey, services); -+} -+ -+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL -+component_getImplementationEnvironment( -+ char const ** ppEnvTypeName, uno_Environment **) -+{ -+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -+} -+ -+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( -+ void * pServiceManager, void * pRegistryKey) -+{ -+ return component_writeInfoHelper(pServiceManager, pRegistryKey, services); -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/shell/source/backends/tdebe/tdebe1.component b/shell/source/backends/tdebe/tdebe1.component -new file mode 100755 -index 0000000..9eb7ca2 ---- /dev/null -+++ b/shell/source/backends/tdebe/tdebe1.component -@@ -0,0 +1,35 @@ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/shell/source/unix/misc/makefile.mk b/shell/source/unix/misc/makefile.mk -index 840f372..df4efa8 100644 ---- a/shell/source/unix/misc/makefile.mk -+++ b/shell/source/unix/misc/makefile.mk -@@ -45,7 +45,8 @@ SCRIPTFILES = \ - $(BIN)$/open-url \ - $(BIN)$/cde-open-url \ - $(BIN)$/gnome-open-url \ -- $(BIN)$/kde-open-url -+ $(BIN)$/kde-open-url \ -+ $(BIN)$/tde-open-url - - APP1TARGET = gnome-open-url.bin - APP1OBJS = \ -diff --git a/shell/source/unix/misc/tde-open-url.sh b/shell/source/unix/misc/tde-open-url.sh -new file mode 100644 -index 0000000..fa05bde ---- /dev/null -+++ b/shell/source/unix/misc/tde-open-url.sh -@@ -0,0 +1,10 @@ -+#!/bin/sh -+ -+# special handling for mailto: uris -+if echo $1 | grep '^mailto:' > /dev/null; then -+ kmailservice "$1" & -+else -+ kfmclient openURL "$1" & -+fi -+ -+exit 0 -diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk -index 4ff643a..d871b05 100644 ---- a/solenv/gbuild/gbuild.mk -+++ b/solenv/gbuild/gbuild.mk -@@ -268,6 +268,10 @@ ifneq ($(strip $(ENABLE_KDE)),) - gb_GLOBALDEFS += -DENABLE_KDE - endif - -+ifneq ($(strip $(ENABLE_TDE)),) -+gb_GLOBALDEFS += -DENABLE_TDE -+endif -+ - ifneq ($(strip $(ENABLE_KDE4)),) - gb_GLOBALDEFS += -DENABLE_KDE4 - endif -diff --git a/solenv/inc/unx.mk b/solenv/inc/unx.mk -index 74ed8d5..d6ce918 100644 ---- a/solenv/inc/unx.mk -+++ b/solenv/inc/unx.mk -@@ -179,4 +179,13 @@ SOLARLIB+=-L$(KDE_ROOT)/lib64 - .ENDIF # "$(KDE_ROOT)"!="" - .ENDIF # "$(ENABLE_KDE)" != "" - -+# enable building/linking TDE-dependent code in both OOo and SO build environment -+.IF "$(ENABLE_TDE)" != "" -+.IF "$(TDE_ROOT)"!="" -+TDE_CFLAGS:=-I$(TDE_ROOT)/include -I/usr/include/tqt -DQT_CLEAN_NAMESPACE -+TDE_LIBS:=-lkdeui -lkdecore -ltqt -lqt-mt -+SOLARLIB+=-L$(TDE_ROOT)/lib -+.ENDIF # "$(TDE_ROOT)"!="" -+.ENDIF # "$(ENABLE_TDE)" != "" -+ - OOO_LIBRARY_PATH_VAR *= LD_LIBRARY_PATH -diff --git a/toolkit/source/layout/core/dialogbuttonhbox.cxx b/toolkit/source/layout/core/dialogbuttonhbox.cxx -index 9c19306..741fc1c 100644 ---- a/toolkit/source/layout/core/dialogbuttonhbox.cxx -+++ b/toolkit/source/layout/core/dialogbuttonhbox.cxx -@@ -48,6 +48,8 @@ DialogButtonHBox::Ordering const DialogButtonHBox::DEFAULT_ORDERING = - DialogButtonHBox::WINDOWS; - #elif defined( ENABLE_KDE ) - DialogButtonHBox::KDE; -+#elif defined( ENABLE_TDE ) -+DialogButtonHBox::TDE; - #else /* !MACOSX && !SAL_W32 && !ENABLE_KDE */ - DialogButtonHBox::GNOME; - #endif /* !MACOSX && !SAL_W32 && !ENABLE_KDE */ -@@ -75,6 +77,8 @@ DialogButtonHBox::setOrdering( rtl::OUString const& ordering ) - mnOrdering = GNOME; - else if ( ordering.equalsIgnoreAsciiCaseAscii( "KDE" ) ) - mnOrdering = KDE; -+ else if ( ordering.equalsIgnoreAsciiCaseAscii( "TDE" ) ) -+ mnOrdering = TDE; - else if ( ordering.equalsIgnoreAsciiCaseAscii( "MacOS" ) ) - mnOrdering = MACOS; - else if ( ordering.equalsIgnoreAsciiCaseAscii( "Windows" ) ) -@@ -135,6 +139,8 @@ DialogButtonHBox::orderChildren() - macosOrdering(); - else if ( mnOrdering == KDE ) - kdeOrdering(); -+ else if ( mnOrdering == TDE ) -+ tdeOrdering(); - else if ( 1 || mnOrdering == GNOME ) - gnomeOrdering(); - } -@@ -229,6 +235,30 @@ DialogButtonHBox::kdeOrdering() - } - - void -+DialogButtonHBox::tdeOrdering() -+{ -+ std::list< Box_Base::ChildData * > ordered; -+ if ( mpHelp ) -+ ordered.push_back( mpHelp ); -+ if ( mpReset ) -+ ordered.push_back( mpReset ); -+ if ( mpFlow && ( mpHelp || mpReset ) ) -+ ordered.push_back( mpFlow ); -+ ordered.insert( ordered.end(), maOther.begin(), maOther.end() ); -+ if ( mpAction ) -+ ordered.push_back( mpAction ); -+ if ( mpAffirmative ) -+ ordered.push_back( mpAffirmative ); -+ if ( mpApply ) -+ ordered.push_back( mpApply ); -+ if ( mpAlternate ) -+ ordered.push_back( mpAlternate ); -+ if ( mpCancel ) -+ ordered.push_back( mpCancel ); -+ maChildren = ordered; -+} -+ -+void - DialogButtonHBox::macosOrdering() - { - std::list< Box_Base::ChildData * > ordered; -diff --git a/toolkit/source/layout/core/dialogbuttonhbox.hxx b/toolkit/source/layout/core/dialogbuttonhbox.hxx -index aead7fc..67845a1 100644 ---- a/toolkit/source/layout/core/dialogbuttonhbox.hxx -+++ b/toolkit/source/layout/core/dialogbuttonhbox.hxx -@@ -45,11 +45,12 @@ public: - void SAL_CALL removeChild( css::uno::Reference< css::awt::XLayoutConstrains > const& xChild ) throw ( css::uno::RuntimeException ); - - private: -- enum Ordering { PLATFORM, GNOME, KDE, MACOS, WINDOWS }; -+ enum Ordering { PLATFORM, GNOME, KDE, TDE, MACOS, WINDOWS }; - - void orderChildren(); - void gnomeOrdering(); - void kdeOrdering(); -+ void tdeOrdering(); - void macosOrdering(); - void windowsOrdering(); - -diff --git a/vcl/Library_vclplug_kde.mk b/vcl/Library_vclplug_kde.mk -index 19c42e0..014a96e 100644 ---- a/vcl/Library_vclplug_kde.mk -+++ b/vcl/Library_vclplug_kde.mk -@@ -4,6 +4,7 @@ - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - # - # Copyright 2000, 2010 Oracle and/or its affiliates. -+# Copyright 2011 Timothy Pearson - # - # OpenOffice.org - a multi-platform office productivity suite - # -@@ -26,9 +27,9 @@ - # - #************************************************************************* - --$(eval $(call gb_Library_Library,vclplug_kde)) -+$(eval $(call gb_Library_Library,vclplug_tde)) - --$(eval $(call gb_Library_set_include,vclplug_kde,\ -+$(eval $(call gb_Library_set_include,vclplug_tde,\ - $$(INCLUDE) \ - -I$(SRCDIR)/vcl/inc \ - -I$(SRCDIR)/vcl/inc/pch \ -@@ -36,25 +37,25 @@ $(eval $(call gb_Library_set_include,vclplug_kde,\ - -I$(OUTDIR)/inc \ - )) - --$(eval $(call gb_Library_set_include,vclplug_kde,\ -+$(eval $(call gb_Library_set_include,vclplug_tde,\ - $$(INCLUDE) \ -- $$(KDE_CFLAGS) \ -+ $$(TDE_CFLAGS) \ - )) - --$(eval $(call gb_Library_add_defs,vclplug_kde,\ -- -DVCLPLUG_KDE_IMPLEMENTATION \ -+$(eval $(call gb_Library_add_defs,vclplug_tde,\ -+ -DVCLPLUG_TDE_IMPLEMENTATION \ - )) - --$(eval $(call gb_Library_add_api,vclplug_kde,\ -+$(eval $(call gb_Library_add_api,vclplug_tde,\ - offapi \ - udkapi \ - )) - --$(eval $(call gb_Library_add_libs,vclplug_kde,\ -- $$(KDE_LIBS) \ -+$(eval $(call gb_Library_add_libs,vclplug_tde,\ -+ $$(TDE_LIBS) \ - )) - --$(eval $(call gb_Library_add_linked_libs,vclplug_kde,\ -+$(eval $(call gb_Library_add_linked_libs,vclplug_tde,\ - vclplug_gen \ - vcl \ - tl \ -@@ -76,18 +77,18 @@ $(eval $(call gb_Library_add_linked_libs,vclplug_kde,\ - ICE \ - )) - --$(eval $(call gb_Library_use_externals,vclplug_kde,\ -+$(eval $(call gb_Library_use_externals,vclplug_tde,\ - icule \ - icuuc \ - )) - --$(eval $(call gb_Library_add_exception_objects,vclplug_kde,\ -- vcl/unx/kde/kdedata \ -- vcl/unx/kde/salnativewidgets-kde \ -+$(eval $(call gb_Library_add_exception_objects,vclplug_tde,\ -+ vcl/unx/tde/tdedata \ -+ vcl/unx/tde/salnativewidgets-tde \ - )) - - ifeq ($(OS),LINUX) --$(eval $(call gb_Library_add_linked_libs,vclplug_kde,\ -+$(eval $(call gb_Library_add_linked_libs,vclplug_tde,\ - dl \ - m \ - pthread \ -diff --git a/vcl/Library_vclplug_tde.mk b/vcl/Library_vclplug_tde.mk -new file mode 100644 -index 0000000..9a324a8 ---- /dev/null -+++ b/vcl/Library_vclplug_tde.mk -@@ -0,0 +1,96 @@ -+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -+#************************************************************************* -+# -+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+# -+# Copyright 2000, 2010 Oracle and/or its affiliates. -+# -+# OpenOffice.org - a multi-platform office productivity suite -+# -+# This file is part of OpenOffice.org. -+# -+# OpenOffice.org is free software: you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License version 3 -+# only, as published by the Free Software Foundation. -+# -+# OpenOffice.org 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 Lesser General Public License version 3 for more details -+# (a copy is included in the LICENSE file that accompanied this code). -+# -+# You should have received a copy of the GNU Lesser General Public License -+# version 3 along with OpenOffice.org. If not, see -+# -+# for a copy of the LGPLv3 License. -+# -+#************************************************************************* -+ -+$(eval $(call gb_Library_Library,vclplug_tde)) -+ -+$(eval $(call gb_Library_set_include,vclplug_tde,\ -+ $$(INCLUDE) \ -+ -I$(SRCDIR)/vcl/inc \ -+ -I$(SRCDIR)/vcl/inc/pch \ -+ -I$(SRCDIR)/solenv/inc \ -+ -I$(OUTDIR)/inc \ -+)) -+ -+$(eval $(call gb_Library_set_include,vclplug_tde,\ -+ $$(INCLUDE) \ -+ $$(TDE_CFLAGS) \ -+)) -+ -+$(eval $(call gb_Library_add_defs,vclplug_tde,\ -+ -DVCLPLUG_TDE_IMPLEMENTATION \ -+)) -+ -+$(eval $(call gb_Library_add_api,vclplug_tde,\ -+ offapi \ -+ udkapi \ -+)) -+ -+$(eval $(call gb_Library_add_libs,vclplug_tde,\ -+ $$(TDE_LIBS) \ -+)) -+ -+$(eval $(call gb_Library_add_linked_libs,vclplug_tde,\ -+ vclplug_gen \ -+ vcl \ -+ tl \ -+ utl \ -+ sot \ -+ ucbhelper \ -+ basegfx \ -+ comphelper \ -+ cppuhelper \ -+ i18nisolang1 \ -+ i18npaper \ -+ i18nutil \ -+ jvmaccess \ -+ cppu \ -+ sal \ -+ X11 \ -+ Xext \ -+ SM \ -+ ICE \ -+)) -+ -+$(eval $(call gb_Library_use_externals,vclplug_tde,\ -+ icule \ -+ icuuc \ -+)) -+ -+$(eval $(call gb_Library_add_exception_objects,vclplug_tde,\ -+ vcl/unx/tde/tdedata \ -+ vcl/unx/tde/salnativewidgets-tde \ -+)) -+ -+ifeq ($(OS),LINUX) -+$(eval $(call gb_Library_add_linked_libs,vclplug_tde,\ -+ dl \ -+ m \ -+ pthread \ -+)) -+endif -+# vim: set noet sw=4 ts=4: -diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk -index 0a91f87..1de0022 100644 ---- a/vcl/Module_vcl.mk -+++ b/vcl/Module_vcl.mk -@@ -59,6 +59,11 @@ $(eval $(call gb_Module_add_targets,vcl,\ - Library_vclplug_kde \ - )) - endif -+ifneq ($(ENABLE_TDE),) -+$(eval $(call gb_Module_add_targets,vcl,\ -+ Library_vclplug_tde \ -+)) -+endif - ifneq ($(ENABLE_KDE4),) - $(eval $(call gb_Module_add_targets,vcl,\ - Library_vclplug_kde4 \ -diff --git a/vcl/inc/generic/gendata.hxx b/vcl/inc/generic/gendata.hxx -index c52e891..e5b7b25 100644 ---- a/vcl/inc/generic/gendata.hxx -+++ b/vcl/inc/generic/gendata.hxx -@@ -38,7 +38,7 @@ class SalGenericDisplay; - class SalDisplay; - class GtkSalDisplay; - enum SalGenericDataType { SAL_DATA_GTK, SAL_DATA_GTK3, -- SAL_DATA_KDE3, SAL_DATA_KDE4, -+ SAL_DATA_KDE3, SAL_DATA_TDE, SAL_DATA_KDE4, - SAL_DATA_UNX, SAL_DATA_SVP }; - - class VCL_DLLPUBLIC SalGenericData : public SalData -diff --git a/vcl/inc/unx/desktops.hxx b/vcl/inc/unx/desktops.hxx -index de4ebb8..1d29c7d 100644 ---- a/vcl/inc/unx/desktops.hxx -+++ b/vcl/inc/unx/desktops.hxx -@@ -34,6 +34,7 @@ enum DesktopType { - DESKTOP_UNKNOWN, // unknown desktop, simple WM, etc. - DESKTOP_GNOME, - DESKTOP_KDE, -+ DESKTOP_TDE, - DESKTOP_KDE4, - DESKTOP_CDE - }; // keep in sync with desktop_strings[] in salplug.cxx -diff --git a/vcl/inc/unx/tde/tde_headers.h b/vcl/inc/unx/tde/tde_headers.h -new file mode 100644 -index 0000000..9c9f008 ---- /dev/null -+++ b/vcl/inc/unx/tde/tde_headers.h -@@ -0,0 +1,98 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef INCLUDED_VCL_TDE_HEADERS_H -+#define INCLUDED_VCL_TDE_HEADERS_H -+ -+/* ********* Suppress warnings if needed */ -+#include "sal/config.h" -+ -+#include -+ -+#if defined __GNUC__ -+#pragma GCC system_header -+#endif -+ -+ -+/* ********* Hack, but needed because of conflicting types... */ -+#define Region TQtXRegion -+ -+ -+/* ********* TQt headers */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* ********* See hack on top of this file */ -+#undef Region -+ -+ -+/* ********* TDE base headers */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+ -+/* ********* TDE address book connectivity headers */ -+#include -+#include -+#include -+#include -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/vcl/inc/unx/tde/tdedata.hxx b/vcl/inc/unx/tde/tdedata.hxx -new file mode 100644 -index 0000000..fccdb49 ---- /dev/null -+++ b/vcl/inc/unx/tde/tdedata.hxx -@@ -0,0 +1,114 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+#ifndef _VCL_TDEDATA_HXX -+#define _VCL_TDEDATA_HXX -+ -+#include -+#include -+#include -+ -+class TDEData : public X11SalData -+{ -+public: -+ TDEData( SalInstance *pInstance ) : X11SalData( SAL_DATA_TDE, pInstance ) {} -+ virtual ~TDEData(); -+ -+ virtual void Init(); -+ virtual void initNWF(); -+ virtual void deInitNWF(); -+}; -+ -+class SalTDEDisplay : public SalX11Display -+{ -+public: -+ SalTDEDisplay( Display* pDisp ); -+ virtual ~SalTDEDisplay(); -+}; -+ -+class TDESalFrame : public X11SalFrame -+{ -+ static const int nMaxGraphics = 2; -+ -+ struct GraphicsHolder -+ { -+ X11SalGraphics* pGraphics; -+ bool bInUse; -+ GraphicsHolder() -+ : pGraphics( NULL ), -+ bInUse( false ) -+ {} -+ ~GraphicsHolder(); -+ }; -+ GraphicsHolder m_aGraphics[ nMaxGraphics ]; -+ -+public: -+ TDESalFrame( SalFrame* pParent, sal_uLong ); -+ virtual ~TDESalFrame(); -+ -+ virtual SalGraphics* GetGraphics(); -+ virtual void ReleaseGraphics( SalGraphics *pGraphics ); -+ virtual void updateGraphics( bool bClear ); -+ virtual void UpdateSettings( AllSettings& rSettings ); -+ virtual void Show( sal_Bool bVisible, sal_Bool bNoActivate ); -+}; -+ -+class TDESalInstance : public X11SalInstance -+{ -+public: -+ TDESalInstance( SalYieldMutex* pMutex ) -+ : X11SalInstance( pMutex ) {} -+ virtual ~TDESalInstance() {} -+ virtual SalFrame* CreateFrame( SalFrame* pParent, sal_uLong nStyle ); -+}; -+ -+class TDEXLib : public SalXLib -+{ -+ bool m_bStartupDone; -+ void* m_pApplication; -+ char** m_pFreeCmdLineArgs; -+ char** m_pAppCmdLineArgs; -+ int m_nFakeCmdLineArgs; -+public: -+ TDEXLib() : SalXLib(), -+ m_bStartupDone( false ), -+ m_pApplication( NULL ), -+ m_pFreeCmdLineArgs( NULL ), -+ m_pAppCmdLineArgs( NULL ), -+ m_nFakeCmdLineArgs( 0 ) -+ {} -+ virtual ~TDEXLib(); -+ virtual void Init(); -+ -+ void doStartup(); -+}; -+ -+#endif // _VCL_TDEDATA_HXX -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/vcl/inc/vclpluginapi.h b/vcl/inc/vclpluginapi.h -index 462943b..ae4123e 100644 ---- a/vcl/inc/vclpluginapi.h -+++ b/vcl/inc/vclpluginapi.h -@@ -50,6 +50,12 @@ - #define VCLPLUG_KDE_PUBLIC SAL_DLLPUBLIC_IMPORT - #endif - -+#if defined VCLPLUG_TDE_IMPLEMENTATION -+#define VCLPLUG_TDE_PUBLIC SAL_DLLPUBLIC_EXPORT -+#else -+#define VCLPLUG_TDE_PUBLIC SAL_DLLPUBLIC_IMPORT -+#endif -+ - #if defined VCLPLUG_KDE4_IMPLEMENTATION - #define VCLPLUG_KDE4_PUBLIC SAL_DLLPUBLIC_EXPORT - #else -diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx -index 1795d5a..62ebffd 100644 ---- a/vcl/source/app/settings.cxx -+++ b/vcl/source/app/settings.cxx -@@ -831,6 +831,8 @@ sal_uLong StyleSettings::GetAutoSymbolsStyle() const - nRet = STYLE_SYMBOLS_CRYSTAL; - else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "kde4" ) ) - nRet = STYLE_SYMBOLS_OXYGEN; -+ else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "tde" ) ) -+ nRet = STYLE_SYMBOLS_CRYSTAL; - } - - // falback to any existing style -diff --git a/vcl/unx/generic/desktopdetect/desktopdetector.cxx b/vcl/unx/generic/desktopdetect/desktopdetector.cxx -index 12ea4fc..2b9e2c9 100644 ---- a/vcl/unx/generic/desktopdetect/desktopdetector.cxx -+++ b/vcl/unx/generic/desktopdetect/desktopdetector.cxx -@@ -210,6 +210,15 @@ static bool is_kde_desktop( Display* pDisplay ) - return false; - } - -+static bool is_tde_desktop( Display* pDisplay ) -+{ -+ if ( NULL != getenv( "TDE_FULL_SESSION" ) ) -+ { -+ return true; -+ } -+ return false; -+} -+ - static bool is_kde4_desktop( Display* pDisplay ) - { - if ( NULL != getenv( "KDE_FULL_SESSION" ) ) -@@ -238,6 +247,8 @@ DESKTOP_DETECTOR_PUBLIC DesktopType get_desktop_environment() - { - OString aOver( pOverride ); - -+ if ( aOver.equalsIgnoreAsciiCase( "tde" ) ) -+ return DESKTOP_TDE; - if ( aOver.equalsIgnoreAsciiCase( "kde4" ) ) - return DESKTOP_KDE4; - if ( aOver.equalsIgnoreAsciiCase( "gnome" ) ) -@@ -301,7 +312,9 @@ DESKTOP_DETECTOR_PUBLIC DesktopType get_desktop_environment() - - XErrorHandler pOldHdl = XSetErrorHandler( autodect_error_handler ); - -- if ( is_kde4_desktop( pDisplay ) ) -+ if ( is_tde_desktop( pDisplay ) ) -+ ret = DESKTOP_TDE; -+ else if ( is_kde4_desktop( pDisplay ) ) - ret = DESKTOP_KDE4; - else if ( is_gnome_desktop( pDisplay ) ) - ret = DESKTOP_GNOME; -diff --git a/vcl/unx/generic/plugadapt/salplug.cxx b/vcl/unx/generic/plugadapt/salplug.cxx -index 90f0d3e..875a9fb 100644 ---- a/vcl/unx/generic/plugadapt/salplug.cxx -+++ b/vcl/unx/generic/plugadapt/salplug.cxx -@@ -148,7 +148,12 @@ static SalInstance* autodetect_plugin() - { - static const char* pKDEFallbackList[] = - { -- "kde4", "kde", "gtk3", "gtk", "gen", 0 -+ "kde4", "kde", "tde", "gtk3", "gtk", "gen", 0 -+ }; -+ -+ static const char* pTDEFallbackList[] = -+ { -+ "tde", "gtk3", "gtk", "gen", 0 - }; - - static const char* pStandardFallbackList[] = -@@ -177,6 +182,8 @@ static SalInstance* autodetect_plugin() - } - else if( desktop == DESKTOP_KDE4 ) - pList = pKDEFallbackList; -+ else if( desktop == DESKTOP_TDE ) -+ pList = pTDEFallbackList; - - SalInstance* pInst = NULL; - while( pList[nListEntry] && pInst == NULL ) -@@ -224,7 +231,7 @@ SalInstance *CreateSalInstance() - pInst = autodetect_plugin(); - - // fallback, try everything -- const char* pPlugin[] = { "gtk3", "gtk", "kde4", "kde", "gen", 0 }; -+ const char* pPlugin[] = { "gtk3", "gtk", "kde4", "kde", "tde", "gen", 0 }; - - for ( int i = 0; !pInst && pPlugin[ i ]; ++i ) - pInst = tryInstance( OUString::createFromAscii( pPlugin[ i ] ) ); -@@ -279,7 +286,7 @@ void SalAbort( const XubString& rErrorText, bool bDumpCore ) - _exit(1); - } - --static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4" }; -+static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "TDE", "KDE4" }; - - const OUString& SalGetDesktopEnvironment() - { -diff --git a/vcl/unx/tde/salnativewidgets-tde.cxx b/vcl/unx/tde/salnativewidgets-tde.cxx -new file mode 100644 -index 0000000..7c173cc ---- /dev/null -+++ b/vcl/unx/tde/salnativewidgets-tde.cxx -@@ -0,0 +1,2119 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_vcl.hxx" -+ -+#define _SV_SALNATIVEWIDGETS_TDE_CXX -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#define USHORT unsigned short -+#define BYTE unsigned char -+ -+using namespace ::rtl; -+ -+/** Cached native widgets. -+ -+ A class which caches and paints the native widgets. -+*/ -+class WidgetPainter -+{ -+ protected: -+ /** Cached push button. -+ -+ It is necessary for the TQStyle::drawControl(). The buttons are created -+ on demand and they are still hidden (no TQWidget::show() is called). -+ */ -+ TQPushButton *m_pPushButton; -+ -+ /** Cached radio button. -+ -+ @see m_pPushButton -+ */ -+ TQRadioButton *m_pRadioButton; -+ -+ /** Cached check box. -+ -+ @see m_pPushButton -+ */ -+ TQCheckBox *m_pCheckBox; -+ -+ /** Cached combo box. -+ -+ @see m_pPushButton -+ */ -+ TQComboBox *m_pComboBox; -+ -+ /** Cached editable combo box. -+ -+ Needed, because some styles do not like dynamic changes -+ (TQComboBox::setEditable()). -+ -+ @see m_pPushButton -+ */ -+ TQComboBox *m_pEditableComboBox; -+ -+ /** Cached line edit box. -+ -+ @see m_pPushButton -+ */ -+ TQLineEdit *m_pLineEdit; -+ -+ /** Cached spin box. -+ -+ @see m_pPushButton -+ */ -+ TQSpinWidget *m_pSpinWidget; -+ -+ /** Cached spin box'es line edit. -+ -+ @see m_pPushButton -+ */ -+ TQLineEdit *m_pSpinEdit; -+ -+ /** Cached tab. -+ -+ Left, middle, right tab and a tab which is alone. -+ -+ @see m_pPushButton -+ */ -+ TQTab *m_pTabLeft, *m_pTabMiddle, *m_pTabRight, *m_pTabAlone; -+ -+ /** Cached tab bar's parent widget. -+ -+ Needed, because the Qt windows style checks for the availability -+ of tab bar's parent. We cannot use m_pTabWidget, because -+ TabWidget::setTabBar() and TabWidget::tabBar() methods are -+ protected. -+ -+ @see m_pPushButton, m_pTabWidget -+ */ -+ TQWidget *m_pTabBarParent; -+ -+ /** Cached tab bar widget. -+ -+ @see m_pPushButton -+ */ -+ TQTabBar *m_pTabBar; -+ -+ /** Cached tab widget. -+ -+ We need it to draw the tab page. It cannot be used to draw the -+ tabs themselves, because the drawing has to be tweaked a little -+ due to not enough information from VCL. -+ -+ @see m_pPushButton, m_pTabBarParent -+ */ -+ TQTabWidget *m_pTabWidget; -+ -+ /** Cached list view. -+ -+ @see m_pPushButton -+ */ -+ TQListView *m_pListView; -+ -+ /** Cached scroll bar. -+ -+ @see m_pPushButton -+ */ -+ TQScrollBar *m_pScrollBar; -+ -+ /** Cached dock area. Needed for proper functionality of tool bars. -+ -+ @see m_pPushButton -+ */ -+ TQMainWindow *m_pMainWindow; -+ -+ /** Cached tool bar. -+ -+ @see m_pPushButton -+ */ -+ TQToolBar *m_pToolBarHoriz, *m_pToolBarVert; -+ -+ /** Cached tool button. -+ -+ @see m_pPushButton -+ */ -+ TQToolButton *m_pToolButton; -+ -+ /** Cached menu bar. -+ -+ @see m_pPushButton -+ */ -+ TQMenuBar *m_pMenuBar; -+ -+ /** Identifiers of menu bar items. -+ */ -+ int m_nMenuBarEnabledItem, m_nMenuBarDisabledItem; -+ -+ /** Cached popup menu. -+ -+ @see m_pPushButton -+ */ -+ TQPopupMenu *m_pPopupMenu; -+ -+ /** Identifiers of popup menu items. -+ */ -+ int m_nPopupMenuEnabledItem, m_nPopupMenuDisabledItem; -+ -+ /** cached progress bar -+ */ -+ TQProgressBar *m_pProgressBar; -+ -+ // TODO other widgets -+ -+ public: -+ /** Implicit constructor. -+ -+ It creates an empty WidgetPainter with all the cached widgets initialized -+ to NULL. The widgets are created on demand and they are still hidden -+ (no TQWidget::show()), because they are needed just as a parameter for -+ TQStyle::drawControl(). -+ -+ @see m_pPushButton -+ */ -+ WidgetPainter( void ); -+ -+ /** Destructor. -+ -+ Destruct all the cached widgets. -+ */ -+ virtual ~WidgetPainter( void ); -+ -+ /** Paints the specified widget to the X window. -+ -+ Use X calls to bitblt (bit block transfer) the widget qWidget to -+ the window specified by drawable with the style defined by nStyle. -+ -+ @param qWidget -+ A pointer to the cached widget. -+ -+ @param nState -+ The state of the control (focused, on/off, ...) -+ -+ @param aValue -+ The value (true/false, ...) -+ -+ @param dpy -+ The display to be used by the X calls. -+ -+ @param drawable -+ The destination X window. -+ -+ @param gc -+ The graphics context. -+ */ -+ sal_Bool drawStyledWidget( TQWidget *pWidget, -+ ControlState nState, const ImplControlValue& aValue, -+ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc, -+ ControlPart nPart = PART_ENTIRE_CONTROL ); -+ -+ /** 'Get' method for push button. -+ -+ The method returns the cached push button. It is constructed if it -+ does not exist. It has NULL as a parent and it stays hidden, but it -+ is necessary for the drawStyledWidget() method. -+ -+ @return valid push button. -+ */ -+ TQPushButton *pushButton( const Rectangle& rControlRegion, sal_Bool bDefault ); -+ -+ /** 'Get' method for radio button. -+ -+ @see pushButton() -+ */ -+ TQRadioButton *radioButton( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for check box. -+ -+ @see pushButton() -+ */ -+ TQCheckBox *checkBox( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for combo box. -+ -+ It returns m_pComboBox or m_pEditableComboBox according to -+ bEditable. -+ -+ @see pushButton(), m_pEditableComboBox -+ */ -+ TQComboBox *comboBox( const Rectangle& rControlRegion, sal_Bool bEditable ); -+ -+ /** 'Get' method for line edit box. -+ -+ @see pushButton() -+ */ -+ TQLineEdit *lineEdit( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for spin box. -+ -+ @see pushButton() -+ */ -+ TQSpinWidget *spinWidget( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for tab bar. -+ -+ @see pushButton() -+ */ -+ TQTabBar *tabBar( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for tab widget. -+ -+ @see pushButton() -+ */ -+ TQTabWidget *tabWidget( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for list view. -+ -+ @see pushButton() -+ */ -+ TQListView *listView( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for scroll bar. -+ -+ @see pushButton() -+ */ -+ TQScrollBar *scrollBar( const Rectangle& rControlRegion, -+ sal_Bool bHorizontal, const ImplControlValue& aValue ); -+ -+ /** 'Get' method for tool bar. -+ -+ @see pushButton() -+ */ -+ TQToolBar *toolBar( const Rectangle& rControlRegion, sal_Bool bHorizontal ); -+ -+ /** 'Get' method for tool button. -+ -+ @see pushButton() -+ */ -+ TQToolButton *toolButton( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for menu bar. -+ -+ @see pushButton() -+ */ -+ TQMenuBar *menuBar( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for popup menu. -+ -+ @see pushButton() -+ */ -+ TQPopupMenu *popupMenu( const Rectangle& rControlRegion ); -+ -+ /** 'Get' method for progress bar -+ -+ @see pushButton() -+ */ -+ TQProgressBar *progressBar( const Rectangle& rControlRegion ); -+ -+ // TODO other widgets -+ -+ protected: -+ /** Style conversion function. -+ -+ Conversion function between VCL ControlState together with -+ ImplControlValue and Qt state flags. -+ -+ @param nState -+ State of the widget (default, focused, ...) as defined in Native -+ Widget Framework. -+ -+ @param aValue -+ Value held by the widget (on, off, ...) -+ */ -+ TQStyle::SFlags vclStateValue2SFlags( ControlState nState, const ImplControlValue& aValue ); -+ -+ public: -+ /** Convert VCL Rectangle to TQRect. -+ -+ @param rControlRegion -+ The region to convert. -+ -+ @return -+ The bounding box of the region. -+ */ -+ static TQRect region2TQRect( const Rectangle& rControlRegion ); -+}; -+ -+WidgetPainter::WidgetPainter( void ) -+ : m_pPushButton( NULL ), -+ m_pRadioButton( NULL ), -+ m_pCheckBox( NULL ), -+ m_pComboBox( NULL ), -+ m_pEditableComboBox( NULL ), -+ m_pLineEdit( NULL ), -+ m_pSpinWidget( NULL ), -+ m_pSpinEdit( NULL ), -+ m_pTabLeft( NULL ), -+ m_pTabMiddle( NULL ), -+ m_pTabRight( NULL ), -+ m_pTabAlone( NULL ), -+ m_pTabBarParent( NULL ), -+ m_pTabBar( NULL ), -+ m_pTabWidget( NULL ), -+ m_pListView( NULL ), -+ m_pScrollBar( NULL ), -+ m_pMainWindow( NULL ), -+ m_pToolBarHoriz( NULL ), -+ m_pToolBarVert( NULL ), -+ m_pToolButton( NULL ), -+ m_pMenuBar( NULL ), -+ m_pPopupMenu( NULL ), -+ m_pProgressBar( NULL ) -+{ -+} -+ -+WidgetPainter::~WidgetPainter( void ) -+{ -+ delete m_pPushButton, m_pPushButton = NULL; -+ delete m_pRadioButton, m_pRadioButton = NULL; -+ delete m_pCheckBox, m_pCheckBox = NULL; -+ delete m_pComboBox, m_pComboBox = NULL; -+ delete m_pEditableComboBox, m_pEditableComboBox = NULL; -+ delete m_pLineEdit, m_pLineEdit = NULL; -+ delete m_pSpinWidget, m_pSpinWidget = NULL; -+ m_pSpinEdit = NULL; // Deleted in m_pSpinWidget's destructor -+ delete m_pTabAlone, m_pTabAlone = NULL; -+ delete m_pTabBarParent, m_pTabBarParent = NULL; -+ m_pTabBar = NULL; // Deleted in m_pTabBarParent's destructor -+ m_pTabLeft = NULL; -+ m_pTabMiddle = NULL; -+ m_pTabRight = NULL; -+ delete m_pTabWidget, m_pTabWidget = NULL; -+ delete m_pListView, m_pListView = NULL; -+ delete m_pScrollBar, m_pScrollBar = NULL; -+ delete m_pToolBarHoriz, m_pToolBarHoriz = NULL; -+ delete m_pToolBarVert, m_pToolBarVert = NULL; -+ delete m_pMainWindow, m_pMainWindow = NULL; -+ delete m_pToolButton, m_pToolButton = NULL; -+ delete m_pMenuBar, m_pMenuBar = NULL; -+ delete m_pPopupMenu, m_pPopupMenu = NULL; -+ delete m_pProgressBar, m_pProgressBar = NULL; -+} -+ -+sal_Bool WidgetPainter::drawStyledWidget( TQWidget *pWidget, -+ ControlState nState, const ImplControlValue& aValue, -+ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc, -+ ControlPart nPart ) -+{ -+ if ( !pWidget ) -+ return FALSE; -+ -+ // Normalize the widget -+ TQPoint qWidgetPos( pWidget->pos() ); -+ pWidget->move( 0, 0 ); -+ -+ // Enable/disable the widget -+ pWidget->setEnabled( nState & CTRL_STATE_ENABLED ); -+ -+ // Create pixmap to paint to -+ TQPixmap qPixmap( pWidget->width(), pWidget->height() ); -+ TQPainter qPainter( &qPixmap ); -+ TQRect qRect( 0, 0, pWidget->width(), pWidget->height() ); -+ -+ // Use the background of the widget -+ qPixmap.fill( pWidget, TQPoint(0, 0) ); -+ -+ // Convert the flags -+ TQStyle::SFlags nStyle = vclStateValue2SFlags( nState, aValue ); -+ -+ // Store the widget class -+ const char *pClassName = pWidget->className(); -+ -+ // Draw the widget to the pixmap -+ if ( strcmp( TQPUSHBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ // Workaround for the Platinum style. -+ // Platinum takes the state directly from the widget, not from SFlags. -+ TQPushButton *pPushButton = static_cast( pWidget->qt_cast( TQPUSHBUTTON_OBJECT_NAME_STRING ) ); -+ if ( pPushButton ) -+ { -+ pPushButton->setDown ( nStyle & TQStyle::Style_Down ); -+ pPushButton->setOn ( nStyle & TQStyle::Style_On ); -+ pPushButton->setEnabled( nStyle & TQStyle::Style_Enabled ); -+ } -+ -+ kapp->style().drawControl( TQStyle::CE_PushButton, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle ); -+ } -+ else if ( strcmp( TQRADIOBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ // Bitblt from the screen, because the radio buttons are usually not -+ // rectangular, and there could be a bitmap under them -+ GC aTmpGC = XCreateGC( dpy, qPixmap.handle(), 0, NULL ); -+ X11SalGraphics::CopyScreenArea( dpy, -+ drawable, nScreen, nDepth, -+ qPixmap.handle(), qPixmap.x11Screen(), qPixmap.x11Depth(), -+ aTmpGC, -+ qWidgetPos.x(), qWidgetPos.y(), qRect.width(), qRect.height(), -+ 0, 0 ); -+ XFreeGC( dpy, aTmpGC ); -+ -+ kapp->style().drawControl( TQStyle::CE_RadioButton, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle ); -+ } -+ else if ( strcmp( TQCHECKBOX_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ kapp->style().drawControl( TQStyle::CE_CheckBox, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle ); -+ } -+ else if ( strcmp( TQCOMBOBOX_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ kapp->style().drawComplexControl( TQStyle::CC_ComboBox, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle ); -+ -+ // Editable combo box uses the background of the associated edit box -+ TQComboBox *pComboBox = static_cast( pWidget->qt_cast( TQCOMBOBOX_OBJECT_NAME_STRING ) ); -+ if ( pComboBox && pComboBox->editable() && pComboBox->lineEdit() ) -+ { -+ TQColorGroup::ColorRole eColorRole = ( pComboBox->isEnabled() )? -+ TQColorGroup::Base: TQColorGroup::Background; -+ qPainter.fillRect( -+ kapp->style().querySubControlMetrics( TQStyle::CC_ComboBox, -+ pComboBox, TQStyle::SC_ComboBoxEditField ), -+ pComboBox->lineEdit()->colorGroup().brush( eColorRole ) ); -+ } -+ } -+ else if ( strcmp( TQLINEEDIT_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ kapp->style().drawPrimitive( TQStyle::PE_PanelLineEdit, -+ &qPainter, qRect, -+ pWidget->colorGroup(), nStyle | TQStyle::Style_Sunken ); -+ } -+ else if ( strcmp( TQSPINWIDGET_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ const SpinbuttonValue *pValue = static_cast ( &aValue ); -+ -+ // Is any of the buttons pressed? -+ TQStyle::SCFlags eActive = TQStyle::SC_None; -+ if ( pValue ) -+ { -+ if ( pValue->mnUpperState & CTRL_STATE_PRESSED ) -+ eActive = TQStyle::SC_SpinWidgetUp; -+ else if ( pValue->mnLowerState & CTRL_STATE_PRESSED ) -+ eActive = TQStyle::SC_SpinWidgetDown; -+ -+ // Update the enable/disable state of the widget -+ if ( ( nState & CTRL_STATE_ENABLED ) || -+ ( pValue->mnUpperState & CTRL_STATE_ENABLED ) || -+ ( pValue->mnLowerState & CTRL_STATE_ENABLED ) ) -+ { -+ pWidget->setEnabled( true ); -+ nStyle |= TQStyle::Style_Enabled; -+ } -+ else -+ pWidget->setEnabled( false ); -+ -+ // Mouse-over effect -+ if ( (pValue->mnUpperState & CTRL_STATE_ROLLOVER) || -+ (pValue->mnLowerState & CTRL_STATE_ROLLOVER) ) -+ nStyle |= TQStyle::Style_MouseOver; -+ } -+ -+ // Spin widget uses the background of the associated edit box -+ TQSpinWidget *pSpinWidget = static_cast( pWidget->qt_cast( TQSPINWIDGET_OBJECT_NAME_STRING ) ); -+ if ( pSpinWidget && pSpinWidget->editWidget() ) -+ { -+ TQColorGroup::ColorRole eColorRole = ( pSpinWidget->isEnabled() )? -+ TQColorGroup::Base: TQColorGroup::Background; -+ qPainter.fillRect( -+ kapp->style().querySubControlMetrics( TQStyle::CC_SpinWidget, -+ pSpinWidget, TQStyle::SC_SpinWidgetEditField ), -+ pSpinWidget->editWidget()->colorGroup().brush( eColorRole ) ); -+ } -+ -+ // Adjust the frame (needed for Motif Plus style) -+ TQRect qFrameRect = kapp->style().querySubControlMetrics( TQStyle::CC_SpinWidget, -+ pWidget, TQStyle::SC_SpinWidgetFrame ); -+ -+ kapp->style().drawComplexControl( TQStyle::CC_SpinWidget, -+ &qPainter, pWidget, qFrameRect, -+ pWidget->colorGroup(), nStyle, -+ TQStyle::SC_All, eActive ); -+ } -+ else if ( strcmp( TQTABBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ const TabitemValue *pValue = static_cast ( &aValue ); -+ -+ TQTab *pTab = NULL; -+ if ( pValue ) -+ { -+ if ( ( pValue->isFirst() || pValue->isLeftAligned() ) && ( pValue->isLast() || pValue->isRightAligned() ) ) -+ pTab = m_pTabAlone; -+ else if ( pValue->isFirst() || pValue->isLeftAligned() ) -+ pTab = m_pTabLeft; -+ else if ( pValue->isLast() || pValue->isRightAligned() ) -+ pTab = m_pTabRight; -+ else -+ pTab = m_pTabMiddle; -+ } -+ if ( !pTab ) -+ return FALSE; -+ -+ pTab->setRect( qRect ); -+ -+ kapp->style().drawControl( TQStyle::CE_TabBarTab, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle, -+ TQStyleOption( pTab ) ); -+ } -+ else if ( strcmp( TQTABWIDGET_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ kapp->style().drawPrimitive( TQStyle::PE_PanelTabWidget, -+ &qPainter, qRect, -+ pWidget->colorGroup(), nStyle ); -+ } -+ else if ( strcmp( TQLISTVIEW_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ kapp->style().drawPrimitive( TQStyle::PE_Panel, -+ &qPainter, qRect, -+ pWidget->colorGroup(), nStyle | TQStyle::Style_Sunken ); -+ } -+ else if ( strcmp( TQSCROLLBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ const ScrollbarValue *pValue = static_cast ( &aValue ); -+ -+ TQStyle::SCFlags eActive = TQStyle::SC_None; -+ if ( pValue ) -+ { -+ // Workaround for Style_MouseOver-aware themes. -+ // Quite ugly, but I do not know about a better solution. -+ const char *pStyleName = kapp->style().className(); -+ if ( strcmp( "QMotifPlusStyle", pStyleName ) == 0 ) -+ { -+ nStyle |= TQStyle::Style_MouseOver; -+ if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER ) -+ eActive = TQStyle::SC_ScrollBarSlider; -+ } -+ else if ( strcmp( "QSGIStyle", pStyleName ) == 0 ) -+ { -+ nStyle |= TQStyle::Style_MouseOver; -+ if ( pValue->mnButton1State & CTRL_STATE_ROLLOVER ) -+ eActive = TQStyle::SC_ScrollBarSubLine; -+ else if ( pValue->mnButton2State & CTRL_STATE_ROLLOVER ) -+ eActive = TQStyle::SC_ScrollBarAddLine; -+ else if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER ) -+ eActive = TQStyle::SC_ScrollBarSlider; -+ } -+ -+ if ( pValue->mnButton1State & CTRL_STATE_PRESSED ) -+ eActive = TQStyle::SC_ScrollBarSubLine; -+ else if ( pValue->mnButton2State & CTRL_STATE_PRESSED ) -+ eActive = TQStyle::SC_ScrollBarAddLine; -+ else if ( pValue->mnThumbState & CTRL_STATE_PRESSED ) -+ eActive = TQStyle::SC_ScrollBarSlider; -+ else if ( pValue->mnPage1State & CTRL_STATE_PRESSED ) -+ eActive = TQStyle::SC_ScrollBarSubPage; -+ else if ( pValue->mnPage2State & CTRL_STATE_PRESSED ) -+ eActive = TQStyle::SC_ScrollBarAddPage; -+ -+ // Update the enable/disable state of the widget -+ if ( ( nState & CTRL_STATE_ENABLED ) || -+ ( pValue->mnButton1State & CTRL_STATE_ENABLED ) || -+ ( pValue->mnButton2State & CTRL_STATE_ENABLED ) || -+ ( pValue->mnThumbState & CTRL_STATE_ENABLED ) || -+ ( pValue->mnPage1State & CTRL_STATE_ENABLED ) || -+ ( pValue->mnPage2State & CTRL_STATE_ENABLED ) ) -+ { -+ pWidget->setEnabled( true ); -+ nStyle |= TQStyle::Style_Enabled; -+ } -+ else -+ pWidget->setEnabled( false ); -+ } -+ -+ // Is it a horizontal scroll bar? -+ TQScrollBar *pScrollBar = static_cast ( pWidget->qt_cast( TQSCROLLBAR_OBJECT_NAME_STRING ) ); -+ TQStyle::StyleFlags eHoriz = TQStyle::Style_Default; -+ if ( pScrollBar && pScrollBar->orientation() == Qt::Horizontal ) -+ eHoriz = TQStyle::Style_Horizontal; -+ -+ kapp->style().drawComplexControl( TQStyle::CC_ScrollBar, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle | eHoriz, -+ TQStyle::SC_All, eActive ); -+ } -+ else if ( strcmp( TQTOOLBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ TQToolBar *pToolBar = static_cast< TQToolBar * >( pWidget->qt_cast( TQTOOLBAR_OBJECT_NAME_STRING ) ); -+ bool bIsHorizontal = false; -+ if ( pToolBar && pToolBar->orientation() == Qt::Horizontal ) -+ { -+ nStyle |= TQStyle::Style_Horizontal; -+ bIsHorizontal = true; -+ } -+ -+ kapp->style().drawControl( TQStyle::CE_DockWindowEmptyArea, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle ); -+ -+ kapp->style().drawPrimitive( TQStyle::PE_PanelDockWindow, -+ &qPainter, qRect, pWidget->colorGroup(), nStyle ); -+ -+ if ( nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT ) -+ { -+ const ToolbarValue *pValue = static_cast< const ToolbarValue * >( &aValue ); -+ -+ TQRect qThumbRect = region2TQRect( pValue->maGripRect ); -+ qThumbRect.moveBy( -qWidgetPos.x(), -qWidgetPos.y() ); -+ if ( bIsHorizontal ) -+ qThumbRect.addCoords( 0, 2, 0, -3 ); // make the thumb a bit nicer -+ else -+ qThumbRect.addCoords( 2, 0, -3, 0 ); // make the thumb a bit nicer -+ -+ if ( kapp->style().inherits( "HighColorStyle" ) || -+ kapp->style().inherits( "HighContrastStyle" ) || -+ kapp->style().inherits( "KeramikStyle" ) || -+ kapp->style().inherits( "KThemeStyle" ) || -+ kapp->style().inherits( "ThinKeramikStyle" ) ) -+ { -+ // Workaround for the workaround in KStyle::drawPrimitive() -+ KStyle *pStyle = static_cast< KStyle * >( &kapp->style() ); -+ pStyle->drawKStylePrimitive( KStyle::KPE_ToolBarHandle, -+ &qPainter, pToolBar, qThumbRect, -+ pWidget->colorGroup(), nStyle ); -+ } -+ else -+ kapp->style().drawPrimitive( TQStyle::PE_DockWindowHandle, -+ &qPainter, qThumbRect, pWidget->colorGroup(), nStyle ); -+ } -+ } -+ else if ( strcmp( TQTOOLBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ if( (nStyle & TQStyle::Style_MouseOver) ) -+ nStyle &= ~TQStyle::Style_Off; -+ kapp->style().drawComplexControl( TQStyle::CC_ToolButton, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle, -+ TQStyle::SC_ToolButton ); -+ } -+ else if ( strcmp( TQMENUBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ if ( nPart == PART_ENTIRE_CONTROL ) -+ { -+ kapp->style().drawControl( TQStyle::CE_MenuBarEmptyArea, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle ); -+ } -+ else if ( nPart == PART_MENU_ITEM ) -+ { -+ int nMenuItem = ( nStyle & TQStyle::Style_Enabled )? m_nMenuBarEnabledItem: m_nMenuBarDisabledItem; -+ TQMenuItem *pMenuItem = static_cast( pWidget )->findItem( nMenuItem ); -+ -+ if ( nStyle & TQStyle::Style_Selected ) -+ nStyle |= TQStyle::Style_Active | TQStyle::Style_Down | TQStyle::Style_HasFocus; -+ -+ kapp->style().drawControl( TQStyle::CE_MenuBarItem, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle, -+ TQStyleOption( pMenuItem ) ); -+ } -+ } -+ else if ( strcmp( TQPOPUPMENU_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ int nMenuItem = ( nStyle & TQStyle::Style_Enabled )? m_nPopupMenuEnabledItem: m_nPopupMenuDisabledItem; -+ TQMenuItem *pMenuItem = static_cast( pWidget )->findItem( nMenuItem ); -+ -+ if ( nStyle & TQStyle::Style_Selected ) -+ nStyle |= TQStyle::Style_Active; -+ -+ kapp->style().drawControl( TQStyle::CE_PopupMenuItem, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle, -+ TQStyleOption( pMenuItem, 0, 0 ) ); -+ } -+ else if ( strcmp( TQPROGRESSBAR_OBJECT_NAME_STRING, pClassName ) == 0 ) -+ { -+ long nProgressWidth = aValue.getNumericVal(); -+ TQProgressBar* pProgress = static_cast(pWidget); -+ pProgress->setProgress( nProgressWidth, qRect.width() ); -+ -+ kapp->style().drawControl( TQStyle::CE_ProgressBarGroove, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle ); -+ kapp->style().drawControl( TQStyle::CE_ProgressBarContents, -+ &qPainter, pWidget, qRect, -+ pWidget->colorGroup(), nStyle ); -+ } -+ else -+ return FALSE; -+ -+ // Bitblt it to the screen -+ X11SalGraphics::CopyScreenArea( dpy, -+ qPixmap.handle(), qPixmap.x11Screen(), qPixmap.x11Depth(), -+ drawable, nScreen, nDepth, -+ gc, -+ 0, 0, qRect.width(), qRect.height(), -+ qWidgetPos.x(), qWidgetPos.y() ); -+ -+ // Restore widget's position -+ pWidget->move( qWidgetPos ); -+ -+ return TRUE; -+} -+ -+TQPushButton *WidgetPainter::pushButton( const Rectangle& rControlRegion, -+ sal_Bool bDefault ) -+{ -+ if ( !m_pPushButton ) -+ m_pPushButton = new TQPushButton( NULL, "push_button" ); -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ // Workaround for broken styles which do not add -+ // TQStyle::PM_ButtonDefaultIndicator to the size of the default button -+ // (for example Keramik) -+ // FIXME Fix Keramik style to be consistant with Qt built-in styles. Aargh! -+ if ( bDefault ) -+ { -+ TQSize qContentsSize( 50, 50 ); -+ m_pPushButton->setDefault( false ); -+ TQSize qNormalSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton, -+ m_pPushButton, qContentsSize ); -+ m_pPushButton->setDefault( true ); -+ TQSize qDefSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton, -+ m_pPushButton, qContentsSize ); -+ -+ int nIndicatorSize = kapp->style().pixelMetric( -+ TQStyle::PM_ButtonDefaultIndicator, m_pPushButton ); -+ if ( qNormalSize.width() == qDefSize.width() ) -+ qRect.addCoords( nIndicatorSize, 0, -nIndicatorSize, 0 ); -+ if ( qNormalSize.height() == qDefSize.height() ) -+ qRect.addCoords( 0, nIndicatorSize, 0, -nIndicatorSize ); -+ } -+ -+ m_pPushButton->move( qRect.topLeft() ); -+ m_pPushButton->resize( qRect.size() ); -+ m_pPushButton->setDefault( bDefault ); -+ -+ return m_pPushButton; -+} -+ -+TQRadioButton *WidgetPainter::radioButton( const Rectangle& rControlRegion ) -+{ -+ if ( !m_pRadioButton ) -+ m_pRadioButton = new TQRadioButton( NULL, "radio_button" ); -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ // Workaround for broken themes which do not honor the given size. -+ // Quite ugly, but I do not know about a better solution. -+ const char *pStyleName = kapp->style().className(); -+ if ( strcmp( "KThemeStyle", pStyleName ) == 0 ) -+ { -+ TQRect qOldRect( qRect ); -+ -+ qRect.setWidth( kapp->style().pixelMetric( -+ TQStyle::PM_ExclusiveIndicatorWidth, m_pRadioButton ) ); -+ qRect.setHeight( kapp->style().pixelMetric( -+ TQStyle::PM_ExclusiveIndicatorHeight, m_pRadioButton ) ); -+ -+ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2, -+ ( qOldRect.height() - qRect.height() ) / 2 ); -+ } -+ -+ m_pRadioButton->move( qRect.topLeft() ); -+ m_pRadioButton->resize( qRect.size() ); -+ -+ return m_pRadioButton; -+} -+ -+TQCheckBox *WidgetPainter::checkBox( const Rectangle& rControlRegion ) -+{ -+ if ( !m_pCheckBox ) -+ m_pCheckBox = new TQCheckBox( NULL, "check_box" ); -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ // Workaround for broken themes which do not honor the given size. -+ // Quite ugly, but I do not know about a better solution. -+ const char *pStyleName = kapp->style().className(); -+ if ( strcmp( "KThemeStyle", pStyleName ) == 0 ) -+ { -+ TQRect qOldRect( qRect ); -+ -+ qRect.setWidth( kapp->style().pixelMetric( -+ TQStyle::PM_IndicatorWidth, m_pCheckBox ) ); -+ qRect.setHeight( kapp->style().pixelMetric( -+ TQStyle::PM_IndicatorHeight, m_pCheckBox ) ); -+ -+ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2, -+ ( qOldRect.height() - qRect.height() ) / 2 ); -+ } -+ -+ m_pCheckBox->move( qRect.topLeft() ); -+ m_pCheckBox->resize( qRect.size() ); -+ -+ return m_pCheckBox; -+} -+ -+TQComboBox *WidgetPainter::comboBox( const Rectangle& rControlRegion, -+ sal_Bool bEditable ) -+{ -+ TQComboBox *pComboBox = NULL; -+ if ( bEditable ) -+ { -+ if ( !m_pEditableComboBox ) -+ m_pEditableComboBox = new TQComboBox( true, NULL, "combo_box_edit" ); -+ pComboBox = m_pEditableComboBox; -+ } -+ else -+ { -+ if ( !m_pComboBox ) -+ m_pComboBox = new TQComboBox( false, NULL, "combo_box" ); -+ pComboBox = m_pComboBox; -+ } -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ pComboBox->move( qRect.topLeft() ); -+ pComboBox->resize( qRect.size() ); -+ -+ return pComboBox; -+} -+ -+TQLineEdit *WidgetPainter::lineEdit( const Rectangle& rControlRegion ) -+{ -+ if ( !m_pLineEdit ) -+ m_pLineEdit = new TQLineEdit( NULL, "line_edit" ); -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ m_pLineEdit->move( qRect.topLeft() ); -+ m_pLineEdit->resize( qRect.size() ); -+ -+ return m_pLineEdit; -+} -+ -+TQSpinWidget *WidgetPainter::spinWidget( const Rectangle& rControlRegion ) -+{ -+ if ( !m_pSpinWidget ) -+ { -+ m_pSpinWidget = new TQSpinWidget( NULL, "spin_widget" ); -+ -+ m_pSpinEdit = new TQLineEdit( NULL, "line_edit_spin" ); -+ m_pSpinWidget->setEditWidget( m_pSpinEdit ); -+ } -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ m_pSpinWidget->move( qRect.topLeft() ); -+ m_pSpinWidget->resize( qRect.size() ); -+ m_pSpinWidget->arrange(); -+ -+ return m_pSpinWidget; -+} -+ -+TQTabBar *WidgetPainter::tabBar( const Rectangle& rControlRegion ) -+{ -+ if ( !m_pTabBar ) -+ { -+ if ( !m_pTabBarParent ) -+ m_pTabBarParent = new TQWidget( NULL, "tab_bar_parent" ); -+ -+ m_pTabBar = new TQTabBar( m_pTabBarParent, "tab_bar" ); -+ -+ m_pTabLeft = new TQTab(); -+ m_pTabMiddle = new TQTab(); -+ m_pTabRight = new TQTab(); -+ m_pTabAlone = new TQTab(); -+ -+ m_pTabBar->addTab( m_pTabLeft ); -+ m_pTabBar->addTab( m_pTabMiddle ); -+ m_pTabBar->addTab( m_pTabRight ); -+ } -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ m_pTabBar->move( qRect.topLeft() ); -+ m_pTabBar->resize( qRect.size() ); -+ -+ m_pTabBar->setShape( TQTabBar::RoundedAbove ); -+ -+ return m_pTabBar; -+} -+ -+TQTabWidget *WidgetPainter::tabWidget( const Rectangle& rControlRegion ) -+{ -+ if ( !m_pTabWidget ) -+ m_pTabWidget = new TQTabWidget( NULL, "tab_widget" ); -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ --qRect.rTop(); -+ -+ m_pTabWidget->move( qRect.topLeft() ); -+ m_pTabWidget->resize( qRect.size() ); -+ -+ return m_pTabWidget; -+} -+ -+TQListView *WidgetPainter::listView( const Rectangle& rControlRegion ) -+{ -+ if ( !m_pListView ) -+ m_pListView = new TQListView( NULL, "list_view" ); -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ m_pListView->move( qRect.topLeft() ); -+ m_pListView->resize( qRect.size() ); -+ -+ return m_pListView; -+} -+ -+TQScrollBar *WidgetPainter::scrollBar( const Rectangle& rControlRegion, -+ sal_Bool bHorizontal, const ImplControlValue& aValue ) -+{ -+ if ( !m_pScrollBar ) -+ { -+ m_pScrollBar = new TQScrollBar( NULL, "scroll_bar" ); -+ m_pScrollBar->setTracking( false ); -+ m_pScrollBar->setLineStep( 1 ); -+ } -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ m_pScrollBar->move( qRect.topLeft() ); -+ m_pScrollBar->resize( qRect.size() ); -+ m_pScrollBar->setOrientation( bHorizontal? Qt::Horizontal: Qt::Vertical ); -+ -+ const ScrollbarValue *pValue = static_cast ( &aValue ); -+ if ( pValue ) -+ { -+ m_pScrollBar->setMinValue( pValue->mnMin ); -+ m_pScrollBar->setMaxValue( pValue->mnMax - pValue->mnVisibleSize ); -+ m_pScrollBar->setValue( pValue->mnCur ); -+ m_pScrollBar->setPageStep( pValue->mnVisibleSize ); -+ } -+ -+ return m_pScrollBar; -+} -+ -+TQToolBar *WidgetPainter::toolBar( const Rectangle& rControlRegion, sal_Bool bHorizontal ) -+{ -+ if ( !m_pMainWindow ) -+ m_pMainWindow = new TQMainWindow( NULL, "main_window" ); -+ -+ TQToolBar *pToolBar; -+ if ( bHorizontal ) -+ { -+ if ( !m_pToolBarHoriz ) -+ { -+ m_pToolBarHoriz = new TQToolBar( m_pMainWindow, "tool_bar_horiz" ); -+ m_pMainWindow->moveDockWindow( m_pToolBarHoriz, Qt::DockTop ); -+ } -+ pToolBar = m_pToolBarHoriz; -+ } -+ else -+ { -+ if ( !m_pToolBarVert ) -+ { -+ m_pToolBarVert = new TQToolBar( m_pMainWindow, "tool_bar_horiz" ); -+ m_pMainWindow->moveDockWindow( m_pToolBarVert, Qt::DockLeft ); -+ } -+ pToolBar = m_pToolBarVert; -+ } -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ pToolBar->move( qRect.topLeft() ); -+ pToolBar->resize( qRect.size() ); -+ -+ return pToolBar; -+} -+ -+TQToolButton *WidgetPainter::toolButton( const Rectangle& rControlRegion) -+{ -+ if ( !m_pToolButton ) -+ m_pToolButton = new TQToolButton( NULL, "tool_button" ); -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ m_pToolButton->move( qRect.topLeft() ); -+ m_pToolButton->resize( qRect.size() ); -+ -+ return m_pToolButton; -+} -+ -+TQMenuBar *WidgetPainter::menuBar( const Rectangle& rControlRegion) -+{ -+ if ( !m_pMenuBar ) -+ { -+ m_pMenuBar = new TQMenuBar( NULL, "menu_bar" ); -+ -+ m_nMenuBarEnabledItem = m_pMenuBar->insertItem( "" ); -+ m_nMenuBarDisabledItem = m_pMenuBar->insertItem( "" ); -+ -+ m_pMenuBar->setItemEnabled( m_nMenuBarEnabledItem, true ); -+ m_pMenuBar->setItemEnabled( m_nMenuBarDisabledItem, false ); -+ } -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ m_pMenuBar->move( qRect.topLeft() ); -+ m_pMenuBar->resize( qRect.size() ); -+ -+ return m_pMenuBar; -+} -+ -+TQPopupMenu *WidgetPainter::popupMenu( const Rectangle& rControlRegion) -+{ -+ if ( !m_pPopupMenu ) -+ { -+ m_pPopupMenu = new TQPopupMenu( NULL, "popup_menu" ); -+ -+ m_nPopupMenuEnabledItem = m_pPopupMenu->insertItem( "" ); -+ m_nPopupMenuDisabledItem = m_pPopupMenu->insertItem( "" ); -+ -+ m_pPopupMenu->setItemEnabled( m_nPopupMenuEnabledItem, true ); -+ m_pPopupMenu->setItemEnabled( m_nPopupMenuDisabledItem, false ); -+ } -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ m_pPopupMenu->move( qRect.topLeft() ); -+ m_pPopupMenu->resize( qRect.size() ); -+ -+ return m_pPopupMenu; -+} -+ -+TQProgressBar *WidgetPainter::progressBar( const Rectangle& rControlRegion ) -+{ -+ if ( !m_pProgressBar ) -+ m_pProgressBar = new TQProgressBar( NULL, "progress_bar" ); -+ -+ TQRect qRect = region2TQRect( rControlRegion ); -+ -+ m_pProgressBar->move( qRect.topLeft() ); -+ m_pProgressBar->resize( qRect.size() ); -+ -+ return m_pProgressBar; -+} -+ -+TQStyle::SFlags WidgetPainter::vclStateValue2SFlags( ControlState nState, -+ const ImplControlValue& aValue ) -+{ -+ TQStyle::SFlags nStyle = -+ ( (nState & CTRL_STATE_DEFAULT)? TQStyle::Style_ButtonDefault: TQStyle::Style_Default ) | -+ ( (nState & CTRL_STATE_ENABLED)? TQStyle::Style_Enabled: TQStyle::Style_Default ) | -+ ( (nState & CTRL_STATE_FOCUSED)? TQStyle::Style_HasFocus: TQStyle::Style_Default ) | -+ ( (nState & CTRL_STATE_PRESSED)? TQStyle::Style_Down: TQStyle::Style_Raised ) | -+ ( (nState & CTRL_STATE_SELECTED)? TQStyle::Style_Selected : TQStyle::Style_Default ) | -+ ( (nState & CTRL_STATE_ROLLOVER)? TQStyle::Style_MouseOver: TQStyle::Style_Default ); -+ //TODO ( (nState & CTRL_STATE_HIDDEN)? TQStyle::Style_: TQStyle::Style_Default ) | -+ -+ switch ( aValue.getTristateVal() ) -+ { -+ case BUTTONVALUE_ON: nStyle |= TQStyle::Style_On; break; -+ case BUTTONVALUE_OFF: nStyle |= TQStyle::Style_Off; break; -+ case BUTTONVALUE_MIXED: nStyle |= TQStyle::Style_NoChange; break; -+ default: break; -+ } -+ -+ return nStyle; -+} -+ -+TQRect WidgetPainter::region2TQRect( const Rectangle& rControlRegion ) -+{ -+ return TQRect( TQPoint( rControlRegion.Left(), rControlRegion.Top() ), -+ TQPoint( rControlRegion.Right(), rControlRegion.Bottom() ) ); -+} -+ -+/** Instance of WidgetPainter. -+ -+ It is used to paint the widgets requested by NWF. -+*/ -+static WidgetPainter *pWidgetPainter; -+ -+class TDESalGraphics : public X11SalGraphics -+{ -+ public: -+ TDESalGraphics() {} -+ virtual ~TDESalGraphics() {} -+ virtual sal_Bool IsNativeControlSupported( ControlType nType, ControlPart nPart ); -+ virtual sal_Bool hitTestNativeControl( ControlType nType, ControlPart nPart, -+ const Rectangle& rControlRegion, const Point& aPos, -+ sal_Bool& rIsInside ); -+ virtual sal_Bool drawNativeControl( ControlType nType, ControlPart nPart, -+ const Rectangle& rControlRegion, ControlState nState, -+ const ImplControlValue& aValue, -+ const OUString& aCaption ); -+ virtual sal_Bool drawNativeControlText( ControlType nType, ControlPart nPart, -+ const Rectangle& rControlRegion, ControlState nState, -+ const ImplControlValue& aValue, -+ const OUString& aCaption ); -+ virtual sal_Bool getNativeControlRegion( ControlType nType, ControlPart nPart, -+ const Rectangle& rControlRegion, ControlState nState, -+ const ImplControlValue& aValue, -+ const OUString& aCaption, -+ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ); -+}; -+ -+/** What widgets can be drawn the native way. -+ -+ @param nType -+ Type of the widget. -+ -+ @param nPart -+ Specification of the widget's part if it consists of more than one. -+ -+ @return TRUE if the platform supports native drawing of the widget nType -+ defined by nPart. -+*/ -+sal_Bool TDESalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nPart ) -+{ -+ return -+ ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) || -+ ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) || -+ ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) ) || -+ ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) || -+ ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) || -+ ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_WINDOW || nPart == HAS_BACKGROUND_TEXTURE ) ) || -+ ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) || -+ // no CTRL_SPINBUTTONS for TDE -+ ( (nType == CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) ) || -+ ( (nType == CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) ) || -+ // no CTRL_TAB_BODY for TDE -+ ( (nType == CTRL_SCROLLBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) ) || -+ ( (nType == CTRL_SCROLLBAR) && (nPart == HAS_THREE_BUTTONS) ) || // TODO small optimization is possible here: return this only if the style really has 3 buttons -+ // CTRL_GROUPBOX not supported -+ // CTRL_FIXEDLINE not supported -+ // CTRL_FIXEDBORDER not supported -+ ( (nType == CTRL_TOOLBAR) && (nPart == PART_ENTIRE_CONTROL || -+ nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT || -+ nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT || -+ nPart == PART_BUTTON) ) || -+ ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) || -+ ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) || -+ ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) ) -+ ; -+} -+ -+ -+/** Test whether the position is in the native widget. -+ -+ If the return value is TRUE, bIsInside contains information whether -+ aPos was or was not inside the native widget specified by the -+ nType/nPart combination. -+*/ -+sal_Bool TDESalGraphics::hitTestNativeControl( ControlType nType, ControlPart nPart, -+ const Rectangle& rControlRegion, const Point& rPos, -+ sal_Bool& rIsInside ) -+{ -+ if ( nType == CTRL_SCROLLBAR ) -+ { -+ // make position relative to rControlRegion -+ Point aPos = rPos - rControlRegion.TopLeft(); -+ rIsInside = FALSE; -+ -+ sal_Bool bHorizontal = ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT ); -+ -+ TQScrollBar *pScrollBar = pWidgetPainter->scrollBar( rControlRegion, -+ bHorizontal, ImplControlValue() ); -+ TQRect qRectSubLine = kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubLine ); -+ TQRect qRectAddLine = kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarAddLine ); -+ -+ // There are 2 buttons on the right/bottom side of the scrollbar -+ sal_Bool bTwoSubButtons = FALSE; -+ -+ // It is a Platinum style scroll bar -+ sal_Bool bPlatinumStyle = FALSE; -+ -+ // Workaround for Platinum and 3 button style scroll bars. -+ // It makes the right/down button bigger. -+ if ( bHorizontal ) -+ { -+ qRectAddLine.setLeft( kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pScrollBar, -+ TQStyle::SC_ScrollBarAddPage ).right() + 1 ); -+ if ( qRectAddLine.width() > qRectSubLine.width() ) -+ bTwoSubButtons = TRUE; -+ if ( qRectSubLine.left() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).left() ) -+ bPlatinumStyle = TRUE; -+ } -+ else -+ { -+ qRectAddLine.setTop( kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pScrollBar, -+ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 ); -+ if ( qRectAddLine.height() > qRectSubLine.height() ) -+ bTwoSubButtons = TRUE; -+ if ( qRectSubLine.top() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).top() ) -+ bPlatinumStyle = TRUE; -+ } -+ -+ switch ( nPart ) -+ { -+ case PART_BUTTON_LEFT: -+ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) ) -+ rIsInside = TRUE; -+ else if ( bTwoSubButtons ) -+ { -+ qRectAddLine.setWidth( qRectAddLine.width() / 2 ); -+ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -+ } -+ break; -+ -+ case PART_BUTTON_UP: -+ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) ) -+ rIsInside = TRUE; -+ else if ( bTwoSubButtons ) -+ { -+ qRectAddLine.setHeight( qRectAddLine.height() / 2 ); -+ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -+ } -+ break; -+ -+ case PART_BUTTON_RIGHT: -+ if ( bTwoSubButtons ) -+ qRectAddLine.setLeft( qRectAddLine.left() + qRectAddLine.width() / 2 ); -+ -+ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -+ break; -+ -+ case PART_BUTTON_DOWN: -+ if ( bTwoSubButtons ) -+ qRectAddLine.setTop( qRectAddLine.top() + qRectAddLine.height() / 2 ); -+ -+ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() ); -+ break; -+ -+ // cases PART_TRACK_HORZ_AREA and PART_TRACK_VERT_AREA -+ default: -+ return FALSE; -+ } -+ -+ return TRUE; -+ } -+ -+ return FALSE; -+} -+ -+ -+/** Draw the requested control described by nPart/nState. -+ -+ @param rControlRegion -+ The bounding region of the complete control in VCL frame coordinates. -+ -+ @param aValue -+ An optional value (tristate/numerical/string). -+ -+ @param aCaption -+ A caption or title string (like button text etc.) -+*/ -+sal_Bool TDESalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, -+ const Rectangle& rControlRegion, ControlState nState, -+ const ImplControlValue& aValue, -+ const OUString& ) -+{ -+ sal_Bool bReturn = FALSE; -+ -+ Display *dpy = GetXDisplay(); -+ XLIB_Window drawable = GetDrawable(); -+ GC gc = SelectPen(); //SelectFont(); // GC with current clipping region set -+ -+ if ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->pushButton( rControlRegion, (nState & CTRL_STATE_DEFAULT) ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->radioButton( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->checkBox( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->comboBox( rControlRegion, TRUE ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->lineEdit( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->comboBox( rControlRegion, FALSE ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_WINDOW) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->listView( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->spinWidget( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType==CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->tabBar( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType==CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->tabWidget( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_SCROLLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->scrollBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ, aValue ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT || nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->toolBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_THUMB_VERT ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart ); -+ } -+ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_BUTTON) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->toolButton( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart ); -+ } -+ else if ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->menuBar( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart ); -+ } -+ else if ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->popupMenu( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ else if ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) ) -+ { -+ bReturn = pWidgetPainter->drawStyledWidget( -+ pWidgetPainter->progressBar( rControlRegion ), -+ nState, aValue, -+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc ); -+ } -+ -+ return bReturn; -+} -+ -+ -+/** Draw text on the widget. -+ -+ OPTIONAL. Draws the requested text for the control described by nPart/nState. -+ Used if text is not drawn by DrawNativeControl(). -+ -+ @param rControlRegion -+ The bounding region of the complete control in VCL frame coordinates. -+ -+ @param aValue -+ An optional value (tristate/numerical/string) -+ -+ @param aCaption -+ A caption or title string (like button text etc.) -+*/ -+sal_Bool TDESalGraphics::drawNativeControlText( ControlType, ControlPart, -+ const Rectangle&, ControlState, -+ const ImplControlValue&, -+ const OUString& ) -+{ -+ return FALSE; -+} -+ -+/** Check if the bounding regions match. -+ -+ If the return value is TRUE, rNativeBoundingRegion -+ contains the true bounding region covered by the control -+ including any adornment, while rNativeContentRegion contains the area -+ within the control that can be safely drawn into without drawing over -+ the borders of the control. -+ -+ @param rControlRegion -+ The bounding region of the control in VCL frame coordinates. -+ -+ @param aValue -+ An optional value (tristate/numerical/string) -+ -+ @param aCaption -+ A caption or title string (like button text etc.) -+*/ -+sal_Bool TDESalGraphics::getNativeControlRegion( ControlType nType, ControlPart nPart, -+ const Rectangle& rControlRegion, ControlState nState, -+ const ImplControlValue&, -+ const OUString&, -+ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ) -+{ -+ sal_Bool bReturn = FALSE; -+ TQRect qBoundingRect = WidgetPainter::region2TQRect( rControlRegion ); -+ TQRect qRect; -+ -+ TQWidget *pWidget = NULL; -+ switch ( nType ) -+ { -+ // Metrics of the push button -+ case CTRL_PUSHBUTTON: -+ pWidget = pWidgetPainter->pushButton( rControlRegion, ( nState & CTRL_STATE_DEFAULT ) ); -+ -+ switch ( nPart ) -+ { -+ case PART_ENTIRE_CONTROL: -+ qRect = qBoundingRect; -+ -+ if ( nState & CTRL_STATE_DEFAULT ) -+ { -+ int nIndicatorSize = kapp->style().pixelMetric( -+ TQStyle::PM_ButtonDefaultIndicator, pWidget ); -+ qBoundingRect.addCoords( -nIndicatorSize, -nIndicatorSize, -+ nIndicatorSize, nIndicatorSize ); -+ bReturn = TRUE; -+ } -+ break; -+ } -+ break; -+ -+ // Metrics of the radio button -+ case CTRL_RADIOBUTTON: -+ pWidget = pWidgetPainter->radioButton( rControlRegion ); -+ -+ if ( nPart == PART_ENTIRE_CONTROL ) -+ { -+ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorWidth, pWidget ) ); -+ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorHeight, pWidget ) ); -+ -+ bReturn = TRUE; -+ } -+ break; -+ -+ // Metrics of the check box -+ case CTRL_CHECKBOX: -+ pWidget = pWidgetPainter->checkBox( rControlRegion ); -+ -+ if ( nPart == PART_ENTIRE_CONTROL ) -+ { -+ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_IndicatorWidth, pWidget ) ); -+ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_IndicatorHeight, pWidget ) ); -+ -+ bReturn = TRUE; -+ } -+ break; -+ -+ // Metrics of the combo box -+ case CTRL_COMBOBOX: -+ case CTRL_LISTBOX: -+ pWidget = pWidgetPainter->comboBox( rControlRegion, ( nType == CTRL_COMBOBOX ) ); -+ switch ( nPart ) -+ { -+ case PART_BUTTON_DOWN: -+ qRect = kapp->style().querySubControlMetrics( -+ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxArrow ); -+ qRect.setLeft( kapp->style().querySubControlMetrics( -+ TQStyle::CC_ComboBox, pWidget, -+ TQStyle::SC_ComboBoxEditField ).right() + 1 ); -+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -+ bReturn = TRUE; -+ break; -+ -+ case PART_SUB_EDIT: -+ qRect = kapp->style().querySubControlMetrics( -+ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxEditField ); -+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -+ bReturn = TRUE; -+ break; -+ } -+ break; -+ -+ // Metrics of the spin box -+ case CTRL_SPINBOX: -+ pWidget = pWidgetPainter->spinWidget( rControlRegion ); -+ switch ( nPart ) -+ { -+ case PART_BUTTON_UP: -+ qRect = kapp->style().querySubControlMetrics( -+ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetUp ); -+ bReturn = TRUE; -+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -+ break; -+ -+ case PART_BUTTON_DOWN: -+ qRect = kapp->style().querySubControlMetrics( -+ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetDown ); -+ bReturn = TRUE; -+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -+ break; -+ -+ case PART_SUB_EDIT: -+ qRect = kapp->style().querySubControlMetrics( -+ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetEditField ); -+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -+ bReturn = TRUE; -+ break; -+ } -+ break; -+ -+ // Metrics of the scroll bar -+ case CTRL_SCROLLBAR: -+ pWidget = pWidgetPainter->scrollBar( rControlRegion, -+ ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT ), -+ ImplControlValue() ); -+ switch ( nPart ) -+ { -+ case PART_BUTTON_LEFT: -+ case PART_BUTTON_UP: -+ qRect = kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarSubLine ); -+ -+ // Workaround for Platinum style scroll bars. It makes the -+ // left/up button invisible. -+ if ( nPart == PART_BUTTON_LEFT ) -+ { -+ if ( qRect.left() > kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pWidget, -+ TQStyle::SC_ScrollBarSubPage ).left() ) -+ { -+ qRect.setLeft( 0 ); -+ qRect.setRight( 0 ); -+ } -+ } -+ else -+ { -+ if ( qRect.top() > kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pWidget, -+ TQStyle::SC_ScrollBarSubPage ).top() ) -+ { -+ qRect.setTop( 0 ); -+ qRect.setBottom( 0 ); -+ } -+ } -+ -+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -+ -+ bReturn = TRUE; -+ break; -+ -+ case PART_BUTTON_RIGHT: -+ case PART_BUTTON_DOWN: -+ qRect = kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarAddLine ); -+ -+ // Workaround for Platinum and 3 button style scroll bars. -+ // It makes the right/down button bigger. -+ if ( nPart == PART_BUTTON_RIGHT ) -+ qRect.setLeft( kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pWidget, -+ TQStyle::SC_ScrollBarAddPage ).right() + 1 ); -+ else -+ qRect.setTop( kapp->style().querySubControlMetrics( -+ TQStyle::CC_ScrollBar, pWidget, -+ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 ); -+ -+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); -+ -+ bReturn = TRUE; -+ break; -+ } -+ break; -+ } -+ -+ // Fill rNativeBoundingRegion and rNativeContentRegion -+ if ( bReturn ) -+ { -+ // Bounding region -+ Point aBPoint( qBoundingRect.x(), qBoundingRect.y() ); -+ Size aBSize( qBoundingRect.width(), qBoundingRect.height() ); -+ rNativeBoundingRegion = Rectangle( aBPoint, aBSize ); -+ -+ // Region of the content -+ Point aPoint( qRect.x(), qRect.y() ); -+ Size aSize( qRect.width(), qRect.height() ); -+ rNativeContentRegion = Rectangle( aPoint, aSize ); -+ } -+ -+ return bReturn; -+} -+ -+// ----------------------------------------------------------------------- -+// TDESalFrame implementation -+// ----------------------------------------------------------------------- -+ -+TDESalFrame::TDESalFrame( SalFrame* pParent, sal_uLong nStyle ) : -+ X11SalFrame( pParent, nStyle ) -+{ -+} -+ -+void TDESalFrame::Show( sal_Bool bVisible, sal_Bool bNoActivate ) -+{ -+ if ( !GetParent() && ! (GetStyle() & SAL_FRAME_STYLE_INTRO) ) -+ { -+ TDEXLib* pXLib = static_cast(GetDisplay()->GetXLib()); -+ pXLib->doStartup(); -+ } -+ X11SalFrame::Show( bVisible, bNoActivate ); -+} -+ -+/** Helper function to convert colors. -+*/ -+static Color toColor( const TQColor &rColor ) -+{ -+ return Color( rColor.red(), rColor.green(), rColor.blue() ); -+} -+ -+/** Helper function to read untranslated text entry from KConfig configuration repository. -+*/ -+static OUString readEntryUntranslated( KConfig *pConfig, const char *pKey ) -+{ -+ return OUString::createFromAscii( pConfig->readEntryUntranslated( pKey ).ascii() ); -+} -+ -+/** Helper function to read color from KConfig configuration repository. -+*/ -+static Color readColor( KConfig *pConfig, const char *pKey ) -+{ -+ return toColor( pConfig->readColorEntry( pKey ) ); -+} -+ -+/** Helper function to add information to Font from TQFont. -+ -+ Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx). -+*/ -+static Font toFont( const TQFont &rTQFont, const ::com::sun::star::lang::Locale& rLocale ) -+{ -+ psp::FastPrintFontInfo aInfo; -+ TQFontInfo qFontInfo( rTQFont ); -+ -+ // set family name -+ aInfo.m_aFamilyName = String( rTQFont.family().utf8(), RTL_TEXTENCODING_UTF8 ); -+ -+ // set italic -+ aInfo.m_eItalic = ( qFontInfo.italic()? ITALIC_NORMAL: ITALIC_NONE ); -+ -+ // set weight -+ int nWeight = qFontInfo.weight(); -+ if ( nWeight <= TQFont::Light ) -+ aInfo.m_eWeight = WEIGHT_LIGHT; -+ else if ( nWeight <= TQFont::Normal ) -+ aInfo.m_eWeight = WEIGHT_NORMAL; -+ else if ( nWeight <= TQFont::DemiBold ) -+ aInfo.m_eWeight = WEIGHT_SEMIBOLD; -+ else if ( nWeight <= TQFont::Bold ) -+ aInfo.m_eWeight = WEIGHT_BOLD; -+ else -+ aInfo.m_eWeight = WEIGHT_ULTRABOLD; -+ -+ // set width -+ int nStretch = rTQFont.stretch(); -+ if ( nStretch <= TQFont::UltraCondensed ) -+ aInfo.m_eWidth = WIDTH_ULTRA_CONDENSED; -+ else if ( nStretch <= TQFont::ExtraCondensed ) -+ aInfo.m_eWidth = WIDTH_EXTRA_CONDENSED; -+ else if ( nStretch <= TQFont::Condensed ) -+ aInfo.m_eWidth = WIDTH_CONDENSED; -+ else if ( nStretch <= TQFont::SemiCondensed ) -+ aInfo.m_eWidth = WIDTH_SEMI_CONDENSED; -+ else if ( nStretch <= TQFont::Unstretched ) -+ aInfo.m_eWidth = WIDTH_NORMAL; -+ else if ( nStretch <= TQFont::SemiExpanded ) -+ aInfo.m_eWidth = WIDTH_SEMI_EXPANDED; -+ else if ( nStretch <= TQFont::Expanded ) -+ aInfo.m_eWidth = WIDTH_EXPANDED; -+ else if ( nStretch <= TQFont::ExtraExpanded ) -+ aInfo.m_eWidth = WIDTH_EXTRA_EXPANDED; -+ else -+ aInfo.m_eWidth = WIDTH_ULTRA_EXPANDED; -+ -+#if OSL_DEBUG_LEVEL > 1 -+ fprintf( stderr, "font name BEFORE system match: \"%s\"\n", OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() ); -+#endif -+ -+ // match font to e.g. resolve "Sans" -+ psp::PrintFontManager::get().matchFont( aInfo, rLocale ); -+ -+#if OSL_DEBUG_LEVEL > 1 -+ fprintf( stderr, "font match %s, name AFTER: \"%s\"\n", -+ aInfo.m_nID != 0 ? "succeeded" : "failed", -+ OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() ); -+#endif -+ -+ // font height -+ int nPointHeight = qFontInfo.pointSize(); -+ if ( nPointHeight <= 0 ) -+ nPointHeight = rTQFont.pointSize(); -+ -+ // Create the font -+ Font aFont( aInfo.m_aFamilyName, Size( 0, nPointHeight ) ); -+ if( aInfo.m_eWeight != WEIGHT_DONTKNOW ) -+ aFont.SetWeight( aInfo.m_eWeight ); -+ if( aInfo.m_eWidth != WIDTH_DONTKNOW ) -+ aFont.SetWidthType( aInfo.m_eWidth ); -+ if( aInfo.m_eItalic != ITALIC_DONTKNOW ) -+ aFont.SetItalic( aInfo.m_eItalic ); -+ if( aInfo.m_ePitch != PITCH_DONTKNOW ) -+ aFont.SetPitch( aInfo.m_ePitch ); -+ -+ return aFont; -+} -+ -+/** Implementation of TDE integration's main method. -+*/ -+void TDESalFrame::UpdateSettings( AllSettings& rSettings ) -+{ -+ StyleSettings aStyleSettings( rSettings.GetStyleSettings() ); -+ bool bSetTitleFont = false; -+ -+ aStyleSettings.SetToolbarIconSize( STYLE_TOOLBAR_ICONSIZE_LARGE ); -+ -+ // WM settings -+ KConfig *pConfig = KGlobal::config(); -+ if ( pConfig ) -+ { -+ pConfig->setGroup( "WM" ); -+ const char *pKey; -+ -+ pKey = "activeBackground"; -+ if ( pConfig->hasKey( pKey ) ) -+ aStyleSettings.SetActiveColor( readColor( pConfig, pKey ) ); -+ -+ pKey = "activeBlend"; -+ if ( pConfig->hasKey( pKey ) ) -+ aStyleSettings.SetActiveColor2( readColor( pConfig, pKey ) ); -+ -+ pKey = "inactiveBackground"; -+ if ( pConfig->hasKey( pKey ) ) -+ aStyleSettings.SetDeactiveColor( readColor( pConfig, pKey ) ); -+ -+ pKey = "inactiveBlend"; -+ if ( pConfig->hasKey( pKey ) ) -+ aStyleSettings.SetDeactiveColor2( readColor( pConfig, pKey ) ); -+ -+ pKey = "inactiveForeground"; -+ if ( pConfig->hasKey( pKey ) ) -+ aStyleSettings.SetDeactiveTextColor( readColor( pConfig, pKey ) ); -+ -+ pKey = "activeForeground"; -+ if ( pConfig->hasKey( pKey ) ) -+ aStyleSettings.SetActiveTextColor( readColor( pConfig, pKey ) ); -+ -+ pKey = "titleFont"; -+ if ( pConfig->hasKey( pKey ) ) -+ { -+ Font aFont = toFont( pConfig->readFontEntry( pKey ), rSettings.GetUILocale() ); -+ aStyleSettings.SetTitleFont( aFont ); -+ bSetTitleFont = true; -+ } -+ -+ pConfig->setGroup( "Icons" ); -+ -+ pKey = "Theme"; -+ if ( pConfig->hasKey( pKey ) ) -+ aStyleSettings.SetPreferredSymbolsStyleName( readEntryUntranslated( pConfig, pKey ) ); -+ } -+ -+ // General settings -+ TQColorGroup qColorGroup = kapp->palette().active(); -+ -+ Color aFore = toColor( qColorGroup.foreground() ); -+ Color aBack = toColor( qColorGroup.background() ); -+ Color aText = toColor( qColorGroup.text() ); -+ Color aBase = toColor( qColorGroup.base() ); -+ -+ // Foreground -+ aStyleSettings.SetRadioCheckTextColor( aFore ); -+ aStyleSettings.SetLabelTextColor( aFore ); -+ aStyleSettings.SetInfoTextColor( aFore ); -+ aStyleSettings.SetDialogTextColor( aFore ); -+ aStyleSettings.SetGroupTextColor( aFore ); -+ -+ // Text -+ aStyleSettings.SetFieldTextColor( aText ); -+ aStyleSettings.SetFieldRolloverTextColor( aText ); -+ aStyleSettings.SetWindowTextColor( aText ); -+ aStyleSettings.SetHelpTextColor( aText ); -+ -+ // Base -+ aStyleSettings.SetFieldColor( aBase ); -+ aStyleSettings.SetHelpColor( aBase ); -+ aStyleSettings.SetWindowColor( aBase ); -+ aStyleSettings.SetActiveTabColor( aBase ); -+ -+ // Buttons -+ aStyleSettings.SetButtonTextColor( toColor( qColorGroup.buttonText() ) ); -+ aStyleSettings.SetButtonRolloverTextColor( toColor( qColorGroup.buttonText() ) ); -+ -+ // Disable color -+ aStyleSettings.SetDisableColor( toColor( qColorGroup.mid() ) ); -+ -+ // Workspace -+ aStyleSettings.SetWorkspaceColor( toColor( qColorGroup.mid() ) ); -+ -+ // Background -+ aStyleSettings.Set3DColors( aBack ); -+ aStyleSettings.SetFaceColor( aBack ); -+ aStyleSettings.SetInactiveTabColor( aBack ); -+ aStyleSettings.SetDialogColor( aBack ); -+ if( aBack == COL_LIGHTGRAY ) -+ aStyleSettings.SetCheckedColor( Color( 0xCC, 0xCC, 0xCC ) ); -+ else -+ { -+ Color aColor2 = aStyleSettings.GetLightColor(); -+ aStyleSettings. -+ SetCheckedColor( Color( (BYTE)(((USHORT)aBack.GetRed()+(USHORT)aColor2.GetRed())/2), -+ (BYTE)(((USHORT)aBack.GetGreen()+(USHORT)aColor2.GetGreen())/2), -+ (BYTE)(((USHORT)aBack.GetBlue()+(USHORT)aColor2.GetBlue())/2) -+ ) ); -+ } -+ -+ // Selection -+ aStyleSettings.SetHighlightColor( toColor( qColorGroup.highlight() ) ); -+ aStyleSettings.SetHighlightTextColor( toColor( qColorGroup.highlightedText() ) ); -+ -+ // Font -+ Font aFont = toFont( kapp->font(), rSettings.GetUILocale() ); -+ -+ aStyleSettings.SetAppFont( aFont ); -+ aStyleSettings.SetHelpFont( aFont ); -+ aStyleSettings.SetMenuFont( aFont ); // will be changed according to pMenuBar -+ aStyleSettings.SetToolFont( aFont ); // will be changed according to pToolBar -+ aStyleSettings.SetLabelFont( aFont ); -+ aStyleSettings.SetInfoFont( aFont ); -+ aStyleSettings.SetRadioCheckFont( aFont ); -+ aStyleSettings.SetPushButtonFont( aFont ); -+ aStyleSettings.SetFieldFont( aFont ); -+ aStyleSettings.SetIconFont( aFont ); -+ aStyleSettings.SetGroupFont( aFont ); -+ -+ aFont.SetWeight( WEIGHT_BOLD ); -+ if( !bSetTitleFont ) -+ aStyleSettings.SetTitleFont( aFont ); -+ aStyleSettings.SetFloatTitleFont( aFont ); -+ -+ int flash_time = TQApplication::cursorFlashTime(); -+ aStyleSettings.SetCursorBlinkTime( flash_time != 0 ? flash_time/2 : STYLE_CURSOR_NOBLINKTIME ); -+ -+ KMainWindow qMainWindow; -+ qMainWindow.createGUI( "/dev/null" ); // hack -+ -+ // Menu -+ aStyleSettings.SetSkipDisabledInMenus( TRUE ); -+ KMenuBar *pMenuBar = qMainWindow.menuBar(); -+ if ( pMenuBar ) -+ { -+ // Color -+ TQColorGroup qMenuCG = pMenuBar->colorGroup(); -+ -+ // Menu text and background color, theme specific -+ Color aMenuFore = toColor( qMenuCG.foreground() ); -+ Color aMenuBack = toColor( qMenuCG.background() ); -+ if ( kapp->style().inherits( "LightStyleV2" ) || -+ kapp->style().inherits( "LightStyleV3" ) || -+ ( kapp->style().inherits( "QMotifStyle" ) && !kapp->style().inherits( "QSGIStyle" ) ) || -+ kapp->style().inherits( "QWindowsStyle" ) ) -+ { -+ aMenuFore = toColor( qMenuCG.buttonText() ); -+ aMenuBack = toColor( qMenuCG.button() ); -+ } -+ -+ aStyleSettings.SetMenuTextColor( aMenuFore ); -+ aStyleSettings.SetMenuBarTextColor( aMenuFore ); -+ aStyleSettings.SetMenuColor( aMenuBack ); -+ aStyleSettings.SetMenuBarColor( aMenuBack ); -+ -+ aStyleSettings.SetMenuHighlightColor( toColor ( qMenuCG.highlight() ) ); -+ -+ // Menu items higlight text color, theme specific -+ if ( kapp->style().inherits( "HighContrastStyle" ) || -+ kapp->style().inherits( "KeramikStyle" ) || -+ kapp->style().inherits( "QWindowsStyle" ) || -+ kapp->style().inherits( "ThinKeramikStyle" ) || -+ kapp->style().inherits( "PlastikStyle" ) ) -+ { -+ aStyleSettings.SetMenuHighlightTextColor( toColor ( qMenuCG.highlightedText() ) ); -+ } -+ else -+ aStyleSettings.SetMenuHighlightTextColor( aMenuFore ); -+ -+ // set special menubar higlight text color -+ if ( kapp->style().inherits( "HighContrastStyle" ) ) -+ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = toColor( qMenuCG.highlightedText() ); -+ else -+ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = aMenuFore; -+ -+ // Font -+ aFont = toFont( pMenuBar->font(), rSettings.GetUILocale() ); -+ aStyleSettings.SetMenuFont( aFont ); -+ } -+ -+ // Tool bar -+ KToolBar *pToolBar = qMainWindow.toolBar(); -+ if ( pToolBar ) -+ { -+ aFont = toFont( pToolBar->font(), rSettings.GetUILocale() ); -+ aStyleSettings.SetToolFont( aFont ); -+ } -+ -+ // Scroll bar size -+ aStyleSettings.SetScrollBarSize( kapp->style().pixelMetric( TQStyle::PM_ScrollBarExtent ) ); -+ -+ rSettings.SetStyleSettings( aStyleSettings ); -+} -+ -+SalGraphics* TDESalFrame::GetGraphics() -+{ -+ if( GetWindow() ) -+ { -+ for( int i = 0; i < nMaxGraphics; i++ ) -+ { -+ if( ! m_aGraphics[i].bInUse ) -+ { -+ m_aGraphics[i].bInUse = true; -+ if( ! m_aGraphics[i].pGraphics ) -+ { -+ m_aGraphics[i].pGraphics = new TDESalGraphics(); -+ m_aGraphics[i].pGraphics->Init( this, GetWindow(), GetScreenNumber() ); -+ } -+ return m_aGraphics[i].pGraphics; -+ } -+ } -+ } -+ -+ return NULL; -+} -+ -+void TDESalFrame::ReleaseGraphics( SalGraphics *pGraphics ) -+{ -+ for( int i = 0; i < nMaxGraphics; i++ ) -+ { -+ if( m_aGraphics[i].pGraphics == pGraphics ) -+ { -+ m_aGraphics[i].bInUse = false; -+ break; -+ } -+ } -+} -+ -+void TDESalFrame::updateGraphics( bool bClear ) -+{ -+ Drawable aDrawable = bClear ? None : GetWindow(); -+ for( int i = 0; i < nMaxGraphics; i++ ) -+ { -+ if( m_aGraphics[i].bInUse ) -+ m_aGraphics[i].pGraphics->SetDrawable( aDrawable, GetScreenNumber() ); -+ } -+} -+ -+TDESalFrame::~TDESalFrame() -+{ -+} -+ -+TDESalFrame::GraphicsHolder::~GraphicsHolder() -+{ -+ delete pGraphics; -+} -+ -+// ----------------------------------------------------------------------- -+// TDESalInstance implementation -+// ----------------------------------------------------------------------- -+ -+SalFrame * -+TDESalInstance::CreateFrame( SalFrame *pParent, sal_uLong nStyle ) -+{ -+ return new TDESalFrame( pParent, nStyle ); -+} -+ -+// ----------------------------------------------------------------------- -+// TDESalData pieces -+// ----------------------------------------------------------------------- -+ -+// Create the widget painter so we have some control over -+// the destruction sequence, so Qt doesn't die in action. -+ -+void TDEData::initNWF() -+{ -+ ImplSVData *pSVData = ImplGetSVData(); -+ // draw toolbars on separate lines -+ pSVData->maNWFData.mbDockingAreaSeparateTB = true; -+ -+ pWidgetPainter = new WidgetPainter(); -+} -+ -+void TDEData::deInitNWF() -+{ -+ delete pWidgetPainter; -+ pWidgetPainter = NULL; -+ -+ // We have to destroy the style early -+ kapp->setStyle( NULL ); -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/vcl/unx/tde/tdedata.cxx b/vcl/unx/tde/tdedata.cxx -new file mode 100644 -index 0000000..adeb628 ---- /dev/null -+++ b/vcl/unx/tde/tdedata.cxx -@@ -0,0 +1,267 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/************************************************************************* -+ * -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * Copyright 2000, 2010 Oracle and/or its affiliates. -+ * Copyright 2011 Timothy Pearson -+ * -+ * OpenOffice.org - a multi-platform office productivity suite -+ * -+ * This file is part of OpenOffice.org. -+ * -+ * OpenOffice.org is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Lesser General Public License version 3 -+ * only, as published by the Free Software Foundation. -+ * -+ * OpenOffice.org 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 Lesser General Public License version 3 for more details -+ * (a copy is included in the LICENSE file that accompanied this code). -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * version 3 along with OpenOffice.org. If not, see -+ * -+ * for a copy of the LGPLv3 License. -+ * -+ ************************************************************************/ -+ -+// MARKER(update_precomp.py): autogen include statement, do not remove -+#include "precompiled_vcl.hxx" -+ -+#define _SV_SALDATA_CXX -+#include -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#ifdef FREEBSD -+#include -+#include -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include "unx/tde/tdedata.hxx" -+#include "unx/i18n_im.hxx" -+#include "unx/i18n_xkb.hxx" -+ -+#include "vclpluginapi.h" -+ -+/* #i59042# override KApplications method for session management -+ * since it will interfere badly with our own. -+ */ -+class VCLTDEApplication : public KApplication -+{ -+ public: -+ VCLTDEApplication() : KApplication() {} -+ -+ virtual void commitData(QSessionManager &sm); -+}; -+ -+void VCLTDEApplication::commitData(QSessionManager&) -+{ -+} -+ -+/*************************************************************************** -+ * class SalTDEDisplay * -+ ***************************************************************************/ -+ -+SalTDEDisplay::SalTDEDisplay( Display* pDisp ) -+ : SalX11Display( pDisp ) -+{ -+} -+ -+SalTDEDisplay::~SalTDEDisplay() -+{ -+ // in case never a frame opened -+ static_cast(GetXLib())->doStartup(); -+ // clean up own members -+ doDestruct(); -+ // prevent SalDisplay from closing KApplication's display -+ pDisp_ = NULL; -+} -+ -+/*************************************************************************** -+ * class TDEXLib * -+ ***************************************************************************/ -+ -+TDEXLib::~TDEXLib() -+{ -+ // on 64 bit linux using libXRandr.so.2 will crash in -+ // XCloseDisplay when freeing extension data -+ // no known work around, therefor currently leak. Hopefully -+ // this does not make problems since we're shutting down anyway -+ // should we ever get a real tde plugin that uses the TDE event loop -+ // we should use tde's method to signal screen changes similar -+ // to the gtk plugin -+ #if ! defined USE_RANDR || ! (defined LINUX && defined X86_64) -+ // properly deinitialize KApplication -+ delete (VCLTDEApplication*)m_pApplication; -+ #endif -+ // free the faked cmdline arguments no longer needed by KApplication -+ for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) -+ free( m_pFreeCmdLineArgs[i] ); -+ delete [] m_pFreeCmdLineArgs; -+ delete [] m_pAppCmdLineArgs; -+} -+ -+void TDEXLib::Init() -+{ -+ SalI18N_InputMethod* pInputMethod = new SalI18N_InputMethod; -+ pInputMethod->SetLocale(); -+ XrmInitialize(); -+ -+ KAboutData *kAboutData = new KAboutData( "LibreOffice", -+ I18N_NOOP( "LibreOffice" ), -+ "1.1.0", -+ I18N_NOOP( "LibreOffice with TDE Native Widget Support." ), -+ KAboutData::License_LGPL, -+ "(c) 2003, 2004 Novell, Inc\n(c) 2010 Timothy Pearson", -+ I18N_NOOP( "LibreOffice is an office suite.\n" ), -+ "http://libreoffice.org", -+ "libreoffice@lists.freedesktop.org"); -+ kAboutData->addAuthor( "Jan Holesovsky", -+ I18N_NOOP( "Original author and maintainer of the TDE NWF." ), -+ "kendy@artax.karlin.mff.cuni.cz", -+ "http://artax.karlin.mff.cuni.cz/~kendy" ); -+ -+ m_nFakeCmdLineArgs = 1; -+ sal_uInt16 nIdx; -+ int nParams = osl_getCommandArgCount(); -+ rtl::OString aDisplay; -+ rtl::OUString aParam, aBin; -+ -+ for ( nIdx = 0; nIdx < nParams; ++nIdx ) -+ { -+ osl_getCommandArg( nIdx, &aParam.pData ); -+ if ( !m_pFreeCmdLineArgs && aParam.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-display" ) ) && nIdx + 1 < nParams ) -+ { -+ osl_getCommandArg( nIdx + 1, &aParam.pData ); -+ aDisplay = rtl::OUStringToOString( aParam, osl_getThreadTextEncoding() ); -+ -+ m_nFakeCmdLineArgs = 3; -+ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; -+ m_pFreeCmdLineArgs[ 1 ] = strdup( "-display" ); -+ m_pFreeCmdLineArgs[ 2 ] = strdup( aDisplay.getStr() ); -+ } -+ } -+ if ( !m_pFreeCmdLineArgs ) -+ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; -+ -+ osl_getExecutableFile( &aParam.pData ); -+ osl_getSystemPathFromFileURL( aParam.pData, &aBin.pData ); -+ rtl::OString aExec = rtl::OUStringToOString( aBin, osl_getThreadTextEncoding() ); -+ m_pFreeCmdLineArgs[0] = strdup( aExec.getStr() ); -+ -+ // make a copy of the string list for freeing it since -+ // KApplication manipulates the pointers inside the argument vector -+ // note: KApplication bad ! -+ m_pAppCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; -+ for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) -+ m_pAppCmdLineArgs[i] = m_pFreeCmdLineArgs[i]; -+ -+ KCmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData ); -+ -+ KApplication::disableAutoDcopRegistration(); -+ m_pApplication = new VCLTDEApplication(); -+ kapp->disableSessionManagement(); -+ -+ Display* pDisp = QPaintDevice::x11AppDisplay(); -+ -+ SalX11Display *pSalDisplay = new SalTDEDisplay( pDisp ); -+ -+ pInputMethod->CreateMethod( pDisp ); -+ pSalDisplay->SetupInput( pInputMethod ); -+} -+ -+void TDEXLib::doStartup() -+{ -+ if( ! m_bStartupDone ) -+ { -+ KStartupInfo::appStarted(); -+ m_bStartupDone = true; -+ #if OSL_DEBUG_LEVEL > 1 -+ fprintf( stderr, "called KStartupInfo::appStarted()\n" ); -+ #endif -+ } -+} -+ -+/********************************************************************** -+ * class TDEData * -+ **********************************************************************/ -+ -+TDEData::~TDEData() -+{ -+} -+ -+void TDEData::Init() -+{ -+ pXLib_ = new TDEXLib(); -+ pXLib_->Init(); -+} -+ -+/********************************************************************** -+ * plugin entry point * -+ **********************************************************************/ -+ -+extern "C" { -+ VCLPLUG_TDE_PUBLIC SalInstance* create_SalInstance( oslModule ) -+ { -+ /* #i92121# workaround deadlocks in the X11 implementation -+ */ -+ static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" ); -+ /* #i90094# -+ from now on we know that an X connection will be -+ established, so protect X against itself -+ */ -+ if( ! ( pNoXInitThreads && *pNoXInitThreads ) ) -+ XInitThreads(); -+ -+ rtl::OString aVersion( qVersion() ); -+#if OSL_DEBUG_LEVEL > 1 -+ fprintf( stderr, "qt version string is \"%s\"\n", aVersion.getStr() ); -+#endif -+ sal_Int32 nIndex = 0, nMajor = 0, nMinor = 0, nMicro = 0; -+ nMajor = aVersion.getToken( 0, '.', nIndex ).toInt32(); -+ if( nIndex > 0 ) -+ nMinor = aVersion.getToken( 0, '.', nIndex ).toInt32(); -+ if( nIndex > 0 ) -+ nMicro = aVersion.getToken( 0, '.', nIndex ).toInt32(); -+ if( nMajor != 3 || nMinor < 2 || (nMinor == 2 && nMicro < 2) ) -+ { -+#if OSL_DEBUG_LEVEL > 1 -+ fprintf( stderr, "unsuitable qt version %d.%d.%d\n", (int)nMajor, (int)nMinor, (int)nMicro ); -+#endif -+ return NULL; -+ } -+ -+ TDESalInstance* pInstance = new TDESalInstance( new SalYieldMutex() ); -+#if OSL_DEBUG_LEVEL > 1 -+ fprintf( stderr, "created TDESalInstance 0x%p\n", pInstance ); -+#endif -+ -+ // initialize SalData -+ TDEData *pSalData = new TDEData( pInstance ); -+ pSalData->Init(); -+ pInstance->SetLib( pSalData->GetLib() ); -+ pSalData->initNWF(); -+ -+ return pInstance; -+ } -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/scripts b/scripts new file mode 160000 index 000000000..b0a915240 --- /dev/null +++ b/scripts @@ -0,0 +1 @@ +Subproject commit b0a915240f92352cf9675146940d045f76ee7746 diff --git a/scripts/README b/scripts/README deleted file mode 100644 index 2f1f6175e..000000000 --- a/scripts/README +++ /dev/null @@ -1,2 +0,0 @@ -All useful GIT helper scripts should go here -This includes scripts useful to the TDE developers for pushing batch changes, etc. diff --git a/scripts/commit_all_submodules b/scripts/commit_all_submodules deleted file mode 100755 index c754640e7..000000000 --- a/scripts/commit_all_submodules +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -if [[ ! -e .git ]] || - [[ -z "`git rev-parse --git-dir 2>/dev/null`" ]]; then - echo "This script can only be run from a top level git directory. Exiting..." - exit 1 -fi - -branch=`git symbolic-ref -q HEAD | sed "s|^refs/heads/||"` -if [[ -z "$branch" ]] || - [[ -z "`git rev-parse --symbolic-full-name --remotes=\"*/$branch\"`" ]]; then - echo "There is not active upstream branch. Exiting..." - exit 1 -fi - -echo "Preparing $PWD for development use" -if [[ $1 == "" ]]; then - gituser=`sed -n "/^\[remote \"origin\"\]/,/url/s/\turl = http:\/\/\([^@]*\)@.*/\1/p" <\`git rev-parse --git-dir\`/config | grep -v "\(anonymous\|system\)"` -else - gituser=$1 -fi - -if [[ $gituser == "" ]]; then - read -p "Enter your TDE GIT username []: " -e gituser -fi - -if [[ $gituser == "" ]]; then - gituser="anonymous" -fi - -read -p "Enter your commit message []: " -e commitmessage - -git submodule foreach "git commit -a -m \"$commitmessage\" || true" -git submodule foreach "sed -i \"s/system@scm\.trinitydesktop\.org/$gituser@scm\.trinitydesktop\.org/g\" \`git rev-parse --git-dir\`/config" -git submodule foreach "git pull &&\ - [[ \"\`git rev-parse HEAD\`\" == \"\`git rev-parse origin/$branch\`\" ]] ||\ - git push origin HEAD" -RETCODE=$? -if [[ $RETCODE != 0 ]]; then - echo "Something went wrong" - exit 1 -fi - -git commit -a -m "$commitmessage" || true -sed -i "s/system@scm\.trinitydesktop\.org/$gituser@scm\.trinitydesktop\.org/g" `git rev-parse --git-dir`/config -git pull &&\ - [[ "`git rev-parse HEAD`" == "`git rev-parse origin/$branch`" ]] ||\ - git push origin HEAD || true diff --git a/scripts/switch_all_submodules_to_head_and_clean b/scripts/switch_all_submodules_to_head_and_clean deleted file mode 100755 index 631381272..000000000 --- a/scripts/switch_all_submodules_to_head_and_clean +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -if [[ ! -e .git ]] || - [[ -z "`git rev-parse --git-dir 2>/dev/null`" ]]; then - echo "This script can only be run from a top level git directory. Exiting..." - exit 1 -fi - -branch=`git symbolic-ref -q HEAD | sed "s|^refs/heads/||"` -if [[ -z "$branch" ]] || - [[ -z "`git rev-parse --symbolic-full-name --remotes=\"*/$branch\"`" ]]; then - echo "There is not active upstream branch. Exiting..." - exit 1 -fi - -echo "Preparing $PWD for development use" -if [[ $1 == "" ]]; then - gituser=`sed -n "/^\[remote \"origin\"\]/,/url/s/\turl = http:\/\/\([^@]*\)@.*/\1/p" <\`git rev-parse --git-dir\`/config | grep -v "\(anonymous\|system\)"` -else - gituser=$1 -fi - -if [[ $gituser == "" ]]; then - read -p "Enter your TDE GIT username []: " -e gituser -fi - -if [[ $gituser == "" ]]; then - gituser="anonymous" -fi - -THISSCRIPT=$(readlink -f $0) - -if [[ ! -e "$THISSCRIPT" ]]; then - echo "Unable to find myself! Exiting..." - exit 1 -fi - -if [[ ! -z "`git status --porcelain`" ]]; then - git reset --hard HEAD - git clean -dxff -fi -git pull -if [[ ! -z "`git status --porcelain`" ]]; then - git reset --hard HEAD - git clean -dxff -fi - -if [[ -e .gitmodules ]]; then - if [[ $gituser == "anonymous" ]]; then - sed -i 's/system@//g' .gitmodules - else - sed -i "s/system@/$gituser@/g" .gitmodules - fi - - git submodule init - git submodule update - git submodule foreach "git checkout $branch && $THISSCRIPT $gituser" - - git checkout -- .gitmodules -fi diff --git a/scripts/update_all_submodules b/scripts/update_all_submodules deleted file mode 100755 index 498dceff0..000000000 --- a/scripts/update_all_submodules +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -if [[ -e /var/lock/update-tde-git-submodules ]]; then - echo "TDE GIT submodules are currently being updated" - echo "If this is not the case, please remove the lockfile /var/lock/update-tde-git-submodules" - exit 0 -fi - -if [[ ! -e .git ]] || - [[ -z "`git rev-parse --git-dir 2>/dev/null`" ]]; then - echo "Current directory does not contain a .git folder. Exiting..." - exit 1 -fi - -branch=`git symbolic-ref -q HEAD | sed "s|^refs/heads/||"` -if [[ -z "$branch" ]] || - [[ -z "`git rev-parse --symbolic-full-name --remotes=\"*/$branch\"`" ]]; then - echo "There is not active upstream branch. Exiting..." - exit 1 -fi - -touch /var/lock/update-tde-git-submodules - -PARENTDIR=$PWD -echo "Working in $PARENTDIR" -git pull -if [[ ! -z "`git status --porcelain`" ]]; then - git reset --hard HEAD - git clean -dxff -fi - -exec 3< submodules -while read <&3 -do - cd $PARENTDIR - DIR2UPDATE=$REPLY - if [[ $DIR2UPDATE != "" ]]; then - echo "Attempting to reset submodule $DIR2UPDATE" - cd $PARENTDIR/$DIR2UPDATE/.. - cd `git rev-parse --show-toplevel` - if [[ -z "`grep \"^Updated: $PWD$\" /var/lock/update-tde-git-submodules`" ]]; then - echo "Updated: $PWD" >>/var/lock/update-tde-git-submodules - git submodule init - git submodule update - fi - cd $PARENTDIR/$DIR2UPDATE - if [[ ! -z "`git status --porcelain`" ]]; then - git reset --hard HEAD - git clean -dxff - fi - git checkout $branch - git pull - cd .. - cd `git rev-parse --show-toplevel` - echo "Committing changes to $PWD" - if [[ ! -z "`git status --porcelain $PARENTDIR/$DIR2UPDATE`" ]]; then - git add $PARENTDIR/$DIR2UPDATE - git commit $PARENTDIR/$DIR2UPDATE -m "Reset submodule $DIR2UPDATE to latest HEAD" - fi - if [[ "`git rev-parse HEAD`" != "`git rev-parse origin/$branch`" ]]; then - git push origin HEAD - fi - fi -done -exec 3>&- - -# Let the disk subsystem recover -sleep 60 - -rm /var/lock/update-tde-git-submodules diff --git a/submodules b/submodules index 69cb0cac3..1c6048775 100644 --- a/submodules +++ b/submodules @@ -1,3 +1,4 @@ +scripts main/common/admin main/common/cmake @@ -359,3 +360,4 @@ main/tdevelop/parts/appwizard/common/admin main/tdewebdev main/tdewebdev/admin main/tdewebdev/cmake +main/thirdparty