diff options
Diffstat (limited to 'main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity.diff')
-rw-r--r-- | main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity.diff | 15829 |
1 files changed, 15829 insertions, 0 deletions
diff --git a/main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity.diff b/main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity.diff new file mode 100644 index 000000000..7431c4c29 --- /dev/null +++ b/main/thirdparty/libreoffice/3.3.2/patches/libreoffice-trinity.diff @@ -0,0 +1,15829 @@ +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-17 15:49:14.302963959 -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 -urN libreoffice-build/patches/dev300/apply libreoffice-build/patches/dev300/apply +--- libreoffice-build/patches/dev300/apply 2011-08-19 15:12:59.000000000 -0500 ++++ libreoffice-build/patches/dev300/apply 2011-08-18 22:23:26.037967292 -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-19 21:12:01.176913404 -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 <kdeversion.h> +++ +++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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++{ +++ QString 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 +++{ +++ QString 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 +++{ +++ QString 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 +++{ +++ QString 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 +++{ +++ QString 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_CONDITION_HXX_ +++#define _CONNECTIVITY_KAB_CONDITION_HXX_ +++ +++#include <comphelper/types.hxx> +++#include <shell/tde_headers.h> +++#include <connectivity/dbexception.hxx> +++ +++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; +++ +++ QString 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <com/sun/star/sdbc/ColumnValue.hpp> +++#include <com/sun/star/sdbc/TransactionIsolation.hpp> +++#include <shell/tde_headers.h> +++ +++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<KabConnection, KabConnection_BASE>((::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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_CONNECTION_HXX_ +++#define _CONNECTIVITY_KAB_CONNECTION_HXX_ +++ +++#include <map> +++#include "OSubComponent.hxx" +++#include "connectivity/CommonTools.hxx" +++#include <com/sun/star/lang/XServiceInfo.hpp> +++#include <com/sun/star/sdbc/SQLWarning.hpp> +++#include <com/sun/star/sdbc/XWarningsSupplier.hpp> +++#include <com/sun/star/sdbc/XConnection.hpp> +++#include <com/sun/star/sdbcx/XTablesSupplier.hpp> +++#include <comphelper/broadcasthelper.hxx> +++#include <cppuhelper/compbase3.hxx> +++ +++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<KabConnection, KabConnection_BASE> +++ { +++ friend class OSubComponent<KabConnection, KabConnection_BASE>; +++ +++ 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <shell/tde_headers.h> +++#include "FDatabaseMetaDataResultSet.hxx" +++#include "OTypeInfo.hxx" +++#include <com/sun/star/sdbc/ColumnValue.hpp> +++#include <com/sun/star/sdbc/ResultSetType.hpp> +++#include <com/sun/star/sdbc/TransactionIsolation.hpp> +++ +++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; +++ QString 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 ); +++ QString 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ +++#define _CONNECTIVITY_KAB_DATABASEMETADATA_HXX_ +++ +++#include "KConnection.hxx" +++#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +++#include <cppuhelper/implbase1.hxx> +++ +++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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <com/sun/star/sdb/SQLContext.hpp> +++#include <com/sun/star/lang/NullPointerException.hpp> +++#include <com/sun/star/frame/XDesktop.hpp> +++/** === end UNO includes === **/ +++#include <rtl/ustrbuf.hxx> +++#include <tools/diagnose_ex.h> +++#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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_DRIVER_HXX_ +++#define _CONNECTIVITY_KAB_DRIVER_HXX_ +++ +++/** === begin UNO includes === **/ +++#include <com/sun/star/sdbc/XDriver.hpp> +++#include <com/sun/star/lang/XServiceInfo.hpp> +++#include <com/sun/star/frame/XTerminateListener.hpp> +++/** === end UNO includes === **/ +++#include <cppuhelper/compbase3.hxx> +++#include <osl/module.h> +++ +++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 +++ <member>init</member> 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 <TRUE/> 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 <NULL/> +++ @precond m_hConnectorModule is not <NULL/> +++ */ +++ 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++QString 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) +++{ +++ QString 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_FIELDS_HXX_ +++#define _CONNECTIVITY_KAB_FIELDS_HXX_ +++ +++#include <shell/tde_headers.h> +++#include <connectivity/dbexception.hxx> +++#include <rtl/ustring.hxx> +++ +++#define KAB_FIELD_REVISION 0 +++#define KAB_DATA_FIELDS 1 +++ +++namespace connectivity +++{ +++ namespace kab +++ { +++ QString 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 = QString::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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_ORDER_HXX_ +++#define _CONNECTIVITY_KAB_ORDER_HXX_ +++ +++#include "rtl/ustring.hxx" +++#include <shell/tde_headers.h> +++ +++#include <vector> +++ +++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; +++ +++ QString 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<KabOrder *> 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <connectivity/dbexception.hxx> +++#include <connectivity/dbtools.hxx> +++#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<connectivity::OSQLColumns> 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ +++#define _CONNECTIVITY_KAB_PREPAREDSTATEMENT_HXX_ +++ +++#include "KStatement.hxx" +++#include "KResultSetMetaData.hxx" +++#include <connectivity/FValue.hxx> +++#include <com/sun/star/sdbc/XParameters.hpp> +++#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> +++#include <cppuhelper/implbase4.hxx> +++ +++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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <com/sun/star/beans/PropertyAttribute.hpp> +++#include <com/sun/star/sdbcx/CompareBookmark.hpp> +++#include "TConnection.hxx" +++#include <connectivity/dbexception.hxx> +++#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); +++ QString 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<KabResultSetMetaData *>(m_xMetaData.get()); +++ sal_Int32 nFieldNumber = pMeta->fieldAtColumn(columnIndex); +++ +++ if (nFieldNumber == KAB_FIELD_REVISION) +++ { +++ QDateTime 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) +++ { +++ QString 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++) +++ { +++ QString 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<KabResultSet*>(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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_RESULTSET_HXX_ +++#define _CONNECTIVITY_KAB_RESULTSET_HXX_ +++ +++#include "KStatement.hxx" +++#include "KResultSetMetaData.hxx" +++#include <shell/tde_headers.h> +++#include <com/sun/star/sdbc/XRow.hpp> +++#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> +++#include <com/sun/star/sdbc/XColumnLocate.hpp> +++#include <com/sun/star/sdbc/XResultSetUpdate.hpp> +++#include <com/sun/star/sdbc/XRowUpdate.hpp> +++#include <com/sun/star/sdbcx/XRowLocate.hpp> +++#include <com/sun/star/sdbcx/XDeleteRows.hpp> +++#include <cppuhelper/compbase12.hxx> +++ +++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<KabResultSet> +++ { +++ 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <com/sun/star/sdbc/DataType.hpp> +++ +++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<connectivity::OSQLColumns> &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(); +++ QString 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ +++#define _CONNECTIVITY_KAB_RESULTSETMETADATA_HXX_ +++ +++#include "KConnection.hxx" +++#include <connectivity/CommonTools.hxx> +++#include <com/sun/star/sdbc/XResultSetMetaData.hpp> +++#include <cppuhelper/implbase1.hxx> +++#include <rtl/ref.hxx> +++ +++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<sal_Int32> 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<connectivity::OSQLColumns> &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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <cppuhelper/factory.hxx> +++#include <osl/diagnose.h> +++ +++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; i<Services.getLength(); ++i) +++ xNewKey->createKey(Services[i]); +++} +++ +++ +++//--------------------------------------------------------------------------------------- +++struct ProviderRequest +++{ +++ Reference< XSingleServiceFactory > xRet; +++ Reference< XMultiServiceFactory > const xServiceManager; +++ OUString const sImplementationName; +++ +++ ProviderRequest( +++ void* pServiceManager, +++ sal_Char const* pImplementationName +++ ) +++ : xServiceManager(reinterpret_cast<XMultiServiceFactory*>(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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <connectivity/dbexception.hxx> +++#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<connectivity::OSQLColumns> 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<KabResultSetMetaData *>(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<KabCommonStatement*>(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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_STATEMENT_HXX_ +++#define _CONNECTIVITY_KAB_STATEMENT_HXX_ +++ +++#include "KConnection.hxx" +++#include <list> +++#include "connectivity/sqliterator.hxx" +++#include "connectivity/sqlparse.hxx" +++#include <com/sun/star/sdbc/XStatement.hpp> +++#include <com/sun/star/util/XCancellable.hpp> +++#include <cppuhelper/compbase4.hxx> +++#include <cppuhelper/implbase1.hxx> +++#include <comphelper/proparrhlp.hxx> +++ +++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<KabCommonStatement> +++ +++ { +++ ::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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <comphelper/types.hxx> +++ +++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<KabCatalog&>(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<KabCatalog&>(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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CONNECTIVITY_KAB_TABLES_HXX_ +++#define _CONNECTIVITY_KAB_TABLES_HXX_ +++ +++#include "connectivity/sdbcx/VCollection.hxx" +++#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +++ +++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 +++# <http://www.openoffice.org/license.html> +++# 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 @@ +++<?xml version="1.0" encoding="UTF-8"?> +++<!--*********************************************************************** +++ * +++ * 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************ --> +++<oor:component-data oor:name="Drivers" oor:package="org.openoffice.Office.DataAccess" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema"> +++ <node oor:name="Installed"> +++ <node oor:name="sdbc:address:kab" oor:op="replace"> +++ <prop oor:name="Driver"> +++ <value>com.sun.star.comp.sdbc.kab.Driver</value> +++ </prop> +++ <prop oor:name="DriverTypeDisplayName" oor:type="xs:string"> +++ <value xml:lang="en-US">TDE Address Book</value> +++ </prop> +++ <node oor:name="Features"> +++ <node oor:name="EscapeDateTime" oor:op="replace"> +++ <prop oor:name="Value" oor:type="xs:boolean"> +++ <value>true</value> +++ </prop> +++ </node> +++ </node> +++ </node> +++ </node> +++</oor:component-data> ++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 @@ +++<?xml version='1.0' encoding="UTF-8"?> +++<!DOCTYPE COMPONENTDESCRIPTION PUBLIC "-//W3C//DTD HTML 3.2//EN" "module-description.dtd"> +++<module-description xmlns:xlink="http://www.w3.org/1999/xlink"> +++ <module-name> kab1 </module-name> +++ <component-description> +++ <Author>Eric Bischoff</Author> +++ <Name>com.sun.star.comp.sdbc.kab.Driver</Name> +++ <description>This library implements the database driver for TDE address book formats.</description> +++ <loader-name>com.sun.star.loader.SharedLibrary</loader-name> +++ <language>c++</language> +++ <status value="final"/> +++ <supported-service>com.sun.star.sdbc.Driver</supported-service> +++ <service-dependency> ... </service-dependency> +++ </component-description> +++ <project-build-dependency> cppuhelper </project-build-dependency> +++ <project-build-dependency> cppu </project-build-dependency> +++ <project-build-dependency> sal </project-build-dependency> +++ +++ <runtime-module-dependency> cppuhelper </runtime-module-dependency> +++ <runtime-module-dependency> cppu1 </runtime-module-dependency> +++ <runtime-module-dependency> sal1 </runtime-module-dependency> +++ +++ <type> com.sun.star.registry.XRegistryKey </type> +++ <type> com.sun.star.util.XCancellable </type> +++ <type> com.sun.star.util.XNumberFormatter </type> +++ <type> com.sun.star.uno.TypeClass </type> +++ <type> com.sun.star.uno.XWeak </type> +++ <type> com.sun.star.uno.XAggregation </type> +++ <type> com.sun.star.uno.XComponentContext </type> +++ <type> com.sun.star.beans.PropertyAttribute </type> +++ <type> com.sun.star.beans.XPropertyState </type> +++ <type> com.sun.star.beans.XPropertySet </type> +++ <type> com.sun.star.beans.PropertyValue </type> +++ <type> com.sun.star.beans.XMultiPropertySet </type> +++ <type> com.sun.star.beans.XFastPropertySet </type> +++ <type> com.sun.star.lang.XSingleServiceFactory </type> +++ <type> com.sun.star.lang.XTypeProvider </type> +++ <type> com.sun.star.lang.XSingleComponentFactory </type> +++ <type> com.sun.star.lang.EventObject </type> +++ <type> com.sun.star.lang.XComponent </type> +++ <type> com.sun.star.lang.IllegalArgumentException </type> +++ <type> com.sun.star.lang.DisposedException </type> +++ <type> com.sun.star.lang.XMultiServiceFactory </type> +++ <type> com.sun.star.lang.XServiceInfo </type> +++ <type> com.sun.star.lang.XUnoTunnel </type> +++ <type> com.sun.star.java.XJavaThreadRegister_11 </type> +++ <type> com.sun.star.java.XJavaVM </type> +++ <type> com.sun.star.sdbc.FetchDirection </type> +++ <type> com.sun.star.sdbc.XConnection </type> +++ <type> com.sun.star.sdbc.XStatement </type> +++ <type> com.sun.star.sdbc.XResultSet </type> +++ <type> com.sun.star.sdbc.XResultSetMetaDataSupplier</type> +++ <type> com.sun.star.sdbc.XColumnLocate </type> +++ <type> com.sun.star.sdbc.XResultSetUpdate </type> +++ <type> com.sun.star.sdbc.XWarningsSupplier </type> +++ <type> com.sun.star.sdbc.XRowUpdate </type> +++ <type> com.sun.star.sdbc.XMultipleResults </type> +++ <type> com.sun.star.sdbc.XBatchExecution </type> +++ <type> com.sun.star.sdbc.XPreparedBatchExecution </type> +++ <type> com.sun.star.sdbc.XParameters </type> +++ <type> com.sun.star.sdbc.XOutParameters </type> +++ <type> com.sun.star.sdbc.DriverPropertyInfo </type> +++ <type> com.sun.star.sdbc.SQLWarning </type> +++ <type> com.sun.star.sdbc.XRow </type> +++ <type> com.sun.star.sdbc.ColumnSearch </type> +++ <type> com.sun.star.sdbc.ColumnValue </type> +++ <type> com.sun.star.sdbc.DataType </type> +++ <type> com.sun.star.sdbc.XDriver </type> +++ <type> com.sun.star.sdbc.TransactionIsolation </type> +++ <type> com.sun.star.sdbc.ResultSetType </type> +++ <type> com.sun.star.sdbc.ResultSetConcurrency </type> +++ <type> com.sun.star.sdbcx.XRowLocate </type> +++ <type> com.sun.star.sdbcx.XDeleteRows </type> +++ <type> com.sun.star.sdbcx.CompareBookmark </type> +++ <type> com.sun.star.sdb.XColumnUpdate </type> +++ <type> com.sun.star.sdb.XColumn </type> +++</module-description> ++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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <osl/diagnose.h> +++#include <osl/process.h> +++#include <shell/tde_headers.h> +++ +++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 QChar are (currently) both 16 bits characters +++ QString aLanguage( +++ (const QChar *) 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 <code>0</code>, then no other code from this library +++ has to be called, else the results are unpredictable. +++ +++ @return +++ <ul><li><code>0</code> if the TDE version is supportednon</li> +++ <li>a negative value if the version is too old</li> +++ <li>a positive value if the version is too new to know whether it works with this driver</li> +++ </ul> +++ +++ #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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++# <http://www.openoffice.org/license.html> +++# 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include <tdecommandthread.hxx> +++ +++#include <tqstringlist.h> +++ +++#include <kapplication.h> +++ +++#include <iostream> +++ +++////////////////////////////////////////////////////////////////////////// +++// CommandEvent +++////////////////////////////////////////////////////////////////////////// +++ +++TDECommandEvent::TDECommandEvent( const QString &qCommand, QStringList *pStringList ) +++ : QCustomEvent( 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( QWidget *pObject ) +++ : m_pObject( pObject ) +++{ +++} +++ +++TDECommandThread::~TDECommandThread() +++{ +++} +++ +++void TDECommandThread::run() +++{ +++ QTextIStream qStream( stdin ); +++ qStream.setEncoding( QTextStream::UnicodeUTF8 ); +++ +++ QString qLine; +++ bool bQuit = false; +++ while ( !bQuit && !qStream.atEnd() ) +++ { +++ qLine = qStream.readLine(); +++ handleCommand( qLine, bQuit ); +++ } +++} +++ +++void TDECommandThread::handleCommand( const QString &rString, bool &bQuit ) +++{ +++ QMutexLocker qMutexLocker( &m_aMutex ); +++ +++#if OSL_DEBUG_LEVEL > 0 +++ ::std::cerr << "tdefilepicker received: " << rString.latin1() << ::std::endl; +++#endif +++ +++ bQuit = false; +++ QStringList *pTokens = tokenize( rString ); +++ +++ if ( !pTokens ) +++ return; +++ if ( pTokens->empty() ) +++ { +++ delete pTokens, pTokens = NULL; +++ return; +++ } +++ +++ QString qCommand = pTokens->front(); +++ pTokens->pop_front(); +++ +++ if ( qCommand == "exit" ) +++ { +++ bQuit = true; +++ kapp->exit(); +++ kapp->wakeUpGuiThread(); +++ } +++ else +++ kapp->postEvent( m_pObject, new TDECommandEvent( qCommand, pTokens ) ); +++} +++ +++QStringList* TDECommandThread::tokenize( const QString &rString ) +++{ +++ // Commands look like: +++ // command arg1 arg2 arg3 ... +++ // Args may be enclosed in '"', if they contain spaces. +++ +++ QStringList *pList = new QStringList(); +++ +++ QString qBuffer; +++ qBuffer.reserve( 1024 ); +++ +++ const QChar *pUnicode = rString.unicode(); +++ const QChar *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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _TDECOMMANDTHREAD_HXX_ +++#define _TDECOMMANDTHREAD_HXX_ +++ +++#include <tqevent.h> +++#include <tqmutex.h> +++#include <tqthread.h> +++ +++class TDECommandEvent : public QCustomEvent +++{ +++public: +++ enum CommandEventType { +++ Unknown = 0, +++ +++ AppendControl, +++ EnableControl, +++ GetValue, +++ SetValue, +++ +++ AppendFilter, +++ AppendFilterGroup, +++ UpdateFilters, +++ GetCurrentFilter, +++ SetCurrentFilter, +++ +++ GetDirectory, +++ SetDirectory, +++ +++ GetFiles, +++ +++ SetTitle, +++ SetType, +++ SetDefaultName, +++ SetMultiSelection, +++ +++ Exec +++ }; +++ static const QEvent::Type TypeId = (QEvent::Type) ( (int) QEvent::User + 42 /*random magic value*/ ); +++ +++protected: +++ CommandEventType m_eCommand; +++ +++public: +++ TDECommandEvent( const QString &qCommand, QStringList *pStringList ); +++ +++ CommandEventType command() const { return m_eCommand; } +++ QStringList* stringList() { return static_cast< QStringList* >( data() ); } +++}; +++ +++class TDECommandThread : public QThread +++{ +++protected: +++ QObject *m_pObject; +++ +++ QMutex m_aMutex; +++ +++public: +++ TDECommandThread( QWidget *pObject ); +++ virtual ~TDECommandThread(); +++ +++ virtual void run(); +++ +++protected: +++ void handleCommand( const QString &rString, bool &bQuit ); +++ QStringList* tokenize( const QString &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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include <tdecommandthread.hxx> +++#include <tdefilepicker.hxx> +++ +++#include <tqcheckbox.h> +++#include <tqcombobox.h> +++#include <tqgrid.h> +++#include <tqhbox.h> +++#include <tqlabel.h> +++#include <tqlayout.h> +++#include <tqobjectlist.h> +++#include <tqpushbutton.h> +++#include <tqregexp.h> +++#include <tqvbox.h> +++ +++#ifdef QT_NO_EMIT +++#define emit +++#endif +++ +++#include <kdeversion.h> +++#include <kdiroperator.h> +++#include <kfiledialog.h> +++#include <kfilefiltercombo.h> +++#include <kio/netaccess.h> +++#include <klocale.h> +++#include <kmessagebox.h> +++#include <ktempfile.h> +++ +++#include <algorithm> +++#include <iostream> +++ +++////////////////////////////////////////////////////////////////////////// +++// TDEFileDialog +++////////////////////////////////////////////////////////////////////////// +++ +++TDEFileDialog::TDEFileDialog( const QString &startDir, const QString &filter, +++ QWidget *parent, const char *name ) +++ : KFileDialog( startDir, filter, parent, name, true, m_pCustomWidget = new QVBox() ), +++ m_pCombosAndButtons( new QHBox( m_pCustomWidget ) ), +++ m_pLabels( new QVBox( m_pCombosAndButtons ) ), +++ m_pComboBoxes( new QVBox( m_pCombosAndButtons ) ), +++ m_pPushButtons( new QVBox( m_pCombosAndButtons ) ), +++ m_pCheckBoxes( new QGrid( 2, m_pCustomWidget ) ), +++ m_bIsSave( false ), +++ m_bIsExecuting( false ), +++ m_bCanNotifySelection( true ) +++{ +++ connect( this, SIGNAL( fileHighlighted( const QString & ) ), +++ this, SLOT( fileHighlightedCommand( const QString & ) ) ); +++ +++ connect( this, SIGNAL( selectionChanged() ), +++ this, SLOT( selectionChangedCommand() ) ); +++ +++ m_pCustomWidget->setSpacing( KDialog::spacingHint() ); +++ m_pCombosAndButtons->setSpacing( KDialog::spacingHint() ); +++ +++ updateCustomWidgetLayout(); +++} +++ +++TDEFileDialog::~TDEFileDialog() +++{ +++} +++ +++void TDEFileDialog::resizeEvent( QResizeEvent *pEvent ) +++{ +++ KFileDialog::resizeEvent( pEvent ); +++ +++ updateCustomWidgetLayout(); +++} +++ +++void TDEFileDialog::showEvent( QShowEvent *pEvent ) +++{ +++ KFileDialog::showEvent( pEvent ); +++ +++ updateCustomWidgetLayout(); +++} +++ +++void TDEFileDialog::updateCustomWidgetLayout() +++{ +++ QPoint qReferencePoint = filterWidget->mapTo( this, QPoint( 0, 0 ) ); +++ QPoint qCustomPoint = m_pCustomWidget->mapTo( this, QPoint( 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( QCustomEvent *pEvent ) +++{ +++ if ( pEvent && pEvent->type() == TDECommandEvent::TypeId ) +++ { +++ TDECommandEvent *pCommandEvent = static_cast< TDECommandEvent* >( pEvent ); +++ QStringList *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 ) +++ { +++ QStringList 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 ) +++ { +++ QStringList::const_iterator it = pStringList->begin(); +++ ++it; // We ignore the filter group name +++ +++ while ( it != pStringList->end() ) +++ { +++ QString qTitle = *it; +++ ++it; +++ if ( it != pStringList->end() ) +++ { +++ appendFilter( qTitle, (*it) ); +++ ++it; +++ } +++ } +++ +++ // update the filters widget +++ setFilter( filters() ); +++ } +++ break; +++ case TDECommandEvent::GetCurrentFilter: +++ { +++ QString 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: +++ { +++ QString 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: +++ { +++ QString qString; +++ qString.reserve( 1024 ); +++ +++ qString.append( "files" ); +++ +++ if ( result() == QDialog::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 ) +++ { +++ QString 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() ); +++ QString qProtocol( qLocalSelectedURL.protocol() ); +++ +++ if ( isSave() && result() == QDialog::Accepted ) +++ { +++ if ( qProtocol == "file" ) +++ { +++ QString 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() == QDialog::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() == QDialog::Accepted ) +++ sendCommand( "accept" ); +++ else +++ sendCommand( "reject" ); +++ } +++ break; +++ default: +++ break; +++ } +++ +++ // FIXME Some cleanup of pEvent? delete something, etc.? +++ } +++} +++ +++void TDEFileDialog::appendControl( const QString &rId, const QString &rType, const QString &rTitle ) +++{ +++ QString qLabel( rTitle ); +++ qLabel.replace( '~', '&' ); +++ +++ if ( rType == "checkbox" ) +++ { +++ QCheckBox *pCheckBox = new QCheckBox( qLabel, m_pCheckBoxes, rId.utf8() ); +++ +++ pCheckBox->setEnabled( true ); +++ pCheckBox->setChecked( false ); +++ } +++ else if ( rType == "listbox" ) +++ { +++ QLabel *pComboLabel = new QLabel( qLabel, m_pLabels ); +++ QComboBox *pComboBox = new QComboBox( m_pComboBoxes, rId.utf8() ); +++ +++ pComboLabel->setBuddy( pComboBox ); +++ pComboBox->setEnabled( true ); +++ } +++ else if ( rType == "pushbutton" ) +++ { +++ QPushButton *pPushButton = new QPushButton( qLabel, m_pPushButtons, rId.utf8() ); +++ pPushButton->setEnabled( true ); +++ } +++} +++ +++QWidget* TDEFileDialog::findControl( const QString &rId ) const +++{ +++ QObjectList *pList = m_pCustomWidget->queryList(); +++ QCString qName( rId.utf8() ); +++ QObjectList::const_iterator it = pList->begin(); +++ +++ for ( ; it != pList->end() && qName != (*it)->name(); ++it ) +++ ; +++ +++ QWidget *pWidget = NULL; +++ if ( it != pList->end() ) +++ pWidget = static_cast< QWidget* >( *it ); +++ +++ delete pList; +++ +++ return pWidget; +++} +++ +++void TDEFileDialog::enableControl( const QString &rId, const QString &rValue ) +++{ +++ QWidget *pWidget = findControl( rId ); +++ +++ if ( pWidget ) +++ pWidget->setEnabled( rValue.lower() == "true" ); +++} +++ +++void TDEFileDialog::getValue( const QString &rId, const QString &rAction ) +++{ +++ QWidget *pWidget = findControl( rId ); +++ QString qString; +++ qString.reserve( 1024 ); +++ qString.append( "value" ); +++ +++ if ( pWidget ) +++ { +++ QCString qClassName = pWidget->className(); +++ if ( qClassName == "QCheckBox" ) +++ { +++ QCheckBox *pCheckBox = static_cast< QCheckBox* >( pWidget ); +++ +++ if ( pCheckBox->isChecked() ) +++ qString.append( " bool true" ); +++ else +++ qString.append( " bool false" ); +++ } +++ else if ( qClassName == "QComboBox" ) +++ { +++ QComboBox *pComboBox = static_cast< QComboBox* >( 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( QString().setNum( pComboBox->currentItem() ) ); +++ } +++ // TODO getHelpURL +++ } +++ // TODO push button +++ } +++ +++ sendCommand( qString ); +++} +++ +++void TDEFileDialog::setValue( const QString &rId, const QString &rAction, const QStringList &rValue ) +++{ +++ QWidget *pWidget = findControl( rId ); +++ +++ if ( pWidget ) +++ { +++ QCString qClassName = pWidget->className(); +++ if ( qClassName == "QCheckBox" ) +++ { +++ QCheckBox *pCheckBox = static_cast< QCheckBox* >( pWidget ); +++ +++ bool bValue = ( !rValue.isEmpty() ) && ( rValue.front().lower() == "true" ); +++ pCheckBox->setChecked( bValue ); +++ } +++ else if ( qClassName == "QComboBox" ) +++ { +++ QComboBox *pComboBox = static_cast< QComboBox* >( 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 QString &rTitle, const QString &rFilter ) +++{ +++ // Filters are separated by ';' +++ QString qFilter( rFilter ); +++ qFilter.replace( QChar( ';' ), QChar( ' ' ) ).replace( "*.*", "*" ); +++ +++ // Workaround for too wide <All formats> (*.bmp;...) entry +++ QString qTitle( rTitle ); +++ qTitle.replace( QRegExp( "^<([^>]*)> \\(.*" ), "<\\1>" ); +++ +++ m_aFilters.push_back( qMakePair( qTitle, qFilter ) ); +++} +++ +++QString TDEFileDialog::filters() const +++{ +++ QString 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; +++} +++ +++QString TDEFileDialog::addExtension( const QString &rFileName ) const +++{ +++ if ( !isSave() ) +++ return rFileName; +++ +++ QString qExtension; +++ +++ QWidget *pExtensionWidget = findControl( "100" ); // CHECKBOX_AUTOEXTENSION +++ QCheckBox *pExtensionCB = pExtensionWidget? static_cast< QCheckBox* >( pExtensionWidget->qt_cast( "QCheckBox" ) ): NULL; +++ if ( pExtensionCB && pExtensionCB->isChecked() ) +++ { +++ // FIXME: qFilter can be a MIME; we ignore it now... +++ QStringList qFilterList = QStringList::split( " ", currentFilter() ); +++ for ( QStringList::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 QString &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<TDEFileDialog*>( 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<TDEFileDialog*>( this ) ) ); +++ if ( qMostLocalPath.isLocalFile() ) +++ { +++ qMostLocalPath.addPath( rURL.fileName() ); +++ return qMostLocalPath; +++ } +++ } +++#endif +++ +++ return rURL; +++} +++ +++QString TDEFileDialog::localCopy( const QString &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( QString::null, ( nExtensionPos < 0 )? QString(): 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 QString::null; +++ } +++ +++ return qDestURL.url(); +++} +++ +++void TDEFileDialog::fileHighlightedCommand( const QString & ) +++{ +++ if ( canNotifySelection() ) +++ { +++ sendCommand( "fileSelectionChanged" ); +++ setCanNotifySelection( false ); +++ } +++} +++ +++void TDEFileDialog::selectionChangedCommand() +++{ +++ if ( canNotifySelection() ) +++ { +++ sendCommand( "fileSelectionChanged" ); +++ setCanNotifySelection( false ); +++ } +++} +++ +++void TDEFileDialog::sendCommand( const QString &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( QString &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 +++ QString 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( QString &rBuffer, const QString &rString ) +++{ +++ const QChar *pUnicode = rString.unicode(); +++ const QChar *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( '"' ); +++} +++ +++QString TDEFileDialog::escapeString( const QString &rString ) +++{ +++ QString qString; +++ qString.reserve( 2*rString.length() + 2 ); // every char escaped + quotes +++ +++ appendEscaped( qString, rString ); +++ +++ return qString; +++} +++ +++ +++void TDEFileFilterComboHack::setCurrentFilter( const QString& 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _TDEFILEPICKER_HXX_ +++#define _TDEFILEPICKER_HXX_ +++ +++#include <kfiledialog.h> +++#include <kfilefiltercombo.h> +++ +++class QGrid; +++class QHBox; +++class QVBox; +++ +++class TDEFileDialog : public KFileDialog +++{ +++ Q_OBJECT +++ +++protected: +++ typedef QPair< QString, QString > FilterEntry; +++ typedef QValueList< FilterEntry > FilterList; +++ +++ QVBox *m_pCustomWidget; +++ QHBox *m_pCombosAndButtons; +++ +++ QVBox *m_pLabels; +++ QVBox *m_pComboBoxes; +++ QVBox *m_pPushButtons; +++ +++ QGrid *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 QString &startDir, const QString &filter, +++ QWidget *parent, const char *name ); +++ virtual ~TDEFileDialog(); +++ +++protected: +++ virtual void resizeEvent( QResizeEvent *pEvent ); +++ virtual void showEvent( QShowEvent *pEvent ); +++ void updateCustomWidgetLayout(); +++ +++ virtual void customEvent( QCustomEvent *pEvent ); +++ +++protected: +++ void appendControl( const QString &rId, const QString &rType, const QString &rTitle ); +++ QWidget* findControl( const QString &rId ) const; +++ void enableControl( const QString &rId, const QString &rValue ); +++ void getValue( const QString &rId, const QString &rAction ); +++ void setValue( const QString &rId, const QString &rAction, const QStringList &rValue ); +++ +++ void appendFilter( const QString &rTitle, const QString &rFilter ); +++ QString filters() const; +++ QString addExtension( const QString &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 QString &rProtocol ) const; +++ KURL mostLocalURL( const KURL &rURL ) const; +++ QString localCopy( const QString &rFileName ) const; +++ +++ void setCanNotifySelection( bool bCanNotifySelection ) { m_bCanNotifySelection = bCanNotifySelection; } +++ bool canNotifySelection( void ) const { return m_bCanNotifySelection; } +++ +++protected slots: +++ void fileHighlightedCommand( const QString & ); +++ void selectionChangedCommand(); +++ +++protected: +++ void sendCommand( const QString &rCommand ); +++ void appendURL( QString &rBuffer, const KURL &rURL ); +++ void appendEscaped( QString &rBuffer, const QString &rString ); +++ QString escapeString( const QString &rString ); +++}; +++ +++class TDEFileFilterComboHack : public KFileFilterCombo +++{ +++public: +++ void setCurrentFilter( const QString& 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include <tdemodalityfilter.hxx> +++#include <tdefilepicker.hxx> +++#include <tdecommandthread.hxx> +++ +++#include <kaboutdata.h> +++#include <kapplication.h> +++#include <kcmdlineargs.h> +++ +++#include <iostream> +++#include <stdlib.h> +++ +++////////////////////////////////////////////////////////////////////////// +++// Main +++////////////////////////////////////////////////////////////////////////// +++ +++static KCmdLineOptions sOptions[] = +++{ +++ { "winid <argument>", 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, QString(), 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include <tdemodalityfilter.hxx> +++ +++#include <kapplication.h> +++#include <kdialogbase.h> +++ +++#include <netwm.h> +++#include <X11/Xlib.h> +++#include <X11/Xutil.h> +++ +++////////////////////////////////////////////////////////////////////////// +++// Modality filter +++////////////////////////////////////////////////////////////////////////// +++ +++TDEModalityFilter::TDEModalityFilter( WId nWinId ) +++ : m_nWinId( nWinId ) +++{ +++ kapp->installEventFilter( this ); +++} +++ +++TDEModalityFilter::~TDEModalityFilter() +++{ +++ kapp->removeEventFilter( this ); +++} +++ +++bool TDEModalityFilter::eventFilter( QObject *pObject, QEvent *pEvent ) +++{ +++ if ( pObject->isWidgetType() && pEvent->type() == QEvent::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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _TDEMODALITYFILTER_HXX_ +++#define _TDEMODALITYFILTER_HXX_ +++ +++#include <tqobject.h> +++ +++class TDEModalityFilter : public QObject +++{ +++private: +++ WId m_nWinId; +++ +++public: +++ TDEModalityFilter( WId nWinId ); +++ virtual ~TDEModalityFilter(); +++ +++ virtual bool eventFilter( QObject *pObject, QEvent *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 +++ * <http://www.openoffice.org/license.html> +++ * 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" +++// <Implementation-Name></UNO/SERVICES/><Service-Name> +++#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 @@ +++<?xml version="1.0" encoding="UTF-8"?> +++<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd"> +++<module-description xmlns:xlink="http://www.w3.org/1999/xlink"> +++ <module-name>fps_tde</module-name> +++ <component-description> +++ <author> Jan Holesovsky </author> +++ <name> com.sun.star.comp.ui.dialogs.FilePicker </name> +++ <description> +++ The TDE implementation of the FilePicker service. +++ </description> +++ <loader-name>com.sun.star.loader.SharedLibrary</loader-name> +++ <language> c++ </language> +++ <status value="beta"/> +++ <supported-service> com.sun.star.ui.dialogs.FilePicker </supported-service> +++ <service-dependency>...</service-dependency> +++ <type> com.sun.star.ui.dialogs.XExecutableDialog </type> +++ <type> com.sun.star.ui.dialogs.XFilePicker </type> +++ <type> com.sun.star.ui.dialogs.XFilterManager </type> +++ <type> com.sun.star.ui.dialogs.XFilterGroupManager </type> +++ <type> com.sun.star.ui.dialogs.XFilePickerListener </type> +++ <type> com.sun.star.ui.dialogs.ExecutableDialogException </type> +++ <type> com.sun.star.ui.dialogs.XFilePickerNotifier </type> +++ <type> com.sun.star.ui.dialogs.XFilePickerControlAccess </type> +++ <type> com.sun.star.ui.dialogs.XFilePreview </type> +++ <type> com.sun.star.ui.dialogs.ExtendedFilePickerElementIds </type> +++ <type> com.sun.star.ui.dialogs.ExecutableDialogResults </type> +++ <type> com.sun.star.ui.dialogs.FilePickerEvent </type> +++ <type> com.sun.star.ui.dialogs.CommonFilePickerElementIds </type> +++ <type> com.sun.star.ui.dialogs.ListboxControlActions </type> +++ <type> com.sun.star.ui.dialogs.TemplateDescription </type> +++ <type> com.sun.star.ui.dialogs.FilePreviewImageFormats </type> +++ <type> com.sun.star.util.XCancellable </type> +++ <type> com.sun.star.lang.XComponent </type> +++ <type> com.sun.star.lang.XMultiServiceFactory </type> +++ <type> com.sun.star.lang.XSingleServiceFactory </type> +++ <type> com.sun.star.lang.XServiceInfo </type> +++ <type> com.sun.star.lang.XTypeProvider </type> +++ <type> com.sun.star.lang.IllegalArgumentException </type> +++ <type> com.sun.star.uno.TypeClass </type> +++ <type> com.sun.star.uno.XWeak </type> +++ <type> com.sun.star.uno.XAggregation </type> +++ <type> com.sun.star.registry.XRegistryKey </type> +++ <type> com.sun.star.container.XSet </type> +++ </component-description> +++ <project-build-dependency> cppuhelper </project-build-dependency> +++ <project-build-dependency> cppu </project-build-dependency> +++ <project-build-dependency> sal </project-build-dependency> +++ <runtime-module-dependency> cppuhelper </runtime-module-dependency> +++ <runtime-module-dependency> cppu2 </runtime-module-dependency> +++ <runtime-module-dependency> sal2 </runtime-module-dependency> +++</module-description> ++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 +++# <http://www.openoffice.org/license.html> +++# 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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include <UnxCommandThread.hxx> +++#include <UnxNotifyThread.hxx> +++ +++#include <rtl/ustring.hxx> +++#include <rtl/ustrbuf.hxx> +++ +++#include <unistd.h> +++#include <string.h> +++#include <iostream> +++ +++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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _UNXCOMMANDTHREAD_HXX_ +++#define _UNXCOMMANDTHREAD_HXX_ +++ +++#include <com/sun/star/uno/Any.hxx> +++#include <com/sun/star/uno/Sequence.hxx> +++ +++#include <osl/conditn.hxx> +++#include <osl/mutex.hxx> +++#include <osl/thread.hxx> +++#include <rtl/ustring.hxx> +++ +++#include <vcl/svapp.hxx> +++ +++#include <list> +++ +++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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include <com/sun/star/lang/DisposedException.hpp> +++#include <com/sun/star/lang/XMultiServiceFactory.hpp> +++#include <com/sun/star/ui/dialogs/TemplateDescription.hpp> +++#include <com/sun/star/ui/dialogs/CommonFilePickerElementIds.hpp> +++#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp> +++#include <com/sun/star/ui/dialogs/ControlActions.hpp> +++ +++#include <FPServiceInfo.hxx> +++ +++#include <cppuhelper/interfacecontainer.h> +++#include <osl/diagnose.h> +++#include <rtl/ustring.hxx> +++#include <rtl/ustrbuf.hxx> +++#include <tools/resmgr.hxx> +++ +++#include <svtools/svtools.hrc> +++#include <UnxFilePicker.hxx> +++#include <UnxCommandThread.hxx> +++#include <UnxNotifyThread.hxx> +++ +++#include <vcl/svapp.hxx> +++#include <vcl/sysdata.hxx> +++#include <vcl/syswin.hxx> +++#include <vcl/window.hxx> +++ +++#include <sys/wait.h> +++#include <unistd.h> +++#include <fcntl.h> +++#include <stdio.h> +++ +++#include <iostream> +++ +++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<rtl::OUString> SAL_CALL FilePicker_getSupportedServiceNames() +++ { +++ uno::Sequence<rtl::OUString> 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<lang::XMultiServiceFactory>& 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<XFilePickerListener>& 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<XFilePickerListener>& 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<beans::StringPair> &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_Int16> 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<uno::Any> &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> 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 +++ const char *pFname = "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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _UNXFILEPICKER_HXX_ +++#define _UNXFILEPICKER_HXX_ +++ +++#include <cppuhelper/compbase8.hxx> +++#include <osl/conditn.hxx> +++#include <osl/mutex.hxx> +++#include <rtl/ustrbuf.hxx> +++ +++#include <com/sun/star/lang/XInitialization.hpp> +++#include <com/sun/star/lang/XServiceInfo.hpp> +++#include <com/sun/star/ui/dialogs/XFilePickerNotifier.hpp> +++#include <com/sun/star/ui/dialogs/XFilterManager.hpp> +++#include <com/sun/star/ui/dialogs/XFilterGroupManager.hpp> +++#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> +++#include <com/sun/star/ui/dialogs/XFilePreview.hpp> +++#include <com/sun/star/util/XCancellable.hpp> +++ +++#include <list> +++ +++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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include <com/sun/star/container/XSet.hpp> +++ +++#include <cppuhelper/factory.hxx> +++#include <osl/diagnose.h> +++ +++#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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include <UnxNotifyThread.hxx> +++#include <UnxFilePicker.hxx> +++ +++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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _UNXNOTIFYTHREAD_HXX_ +++#define _UNXNOTIFYTHREAD_HXX_ +++ +++#include <com/sun/star/ui/dialogs/XFilePickerListener.hpp> +++#include <com/sun/star/uno/Reference.hxx> +++ +++#include <osl/conditn.hxx> +++#include <osl/mutex.hxx> +++#include <osl/thread.hxx> +++ +++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 +++# <http://www.openoffice.org/license.html> +++# 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 +++* <http://www.openoffice.org/license.html> +++* 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; +++ QString 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"))) +++ { +++ QFont 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"))) +++ { +++ QFont aFixedFont; +++ QString 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"))) +++ { +++ QString aDocumentsDir( KGlobalSettings::documentPath() ); +++ rtl::OUString sDocumentsDir; +++ rtl::OUString sDocumentsURL; +++ if ( aDocumentsDir.endsWith(QChar('/')) ) +++ 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"))) +++ { +++ QString 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"))) +++ { +++ QString 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"))) +++ { +++ QString 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"))) +++ { +++ QString 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"))) +++ { +++ QString 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"))) +++ { +++ QString 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"))) { +++ QString 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 +++* <http://www.openoffice.org/license.html> +++* 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 +++* <http://www.openoffice.org/license.html> +++* 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++ +++ +++/* ********* Qt headers */ +++#include <tqaccessible.h> +++#include <tqcheckbox.h> +++#include <tqcombobox.h> +++#include <tqfont.h> +++#include <tqframe.h> +++#include <tqlineedit.h> +++#include <tqlistview.h> +++#include <tqmainwindow.h> +++#include <tqmenudata.h> +++#include <tqpaintdevice.h> +++#include <tqpainter.h> +++#include <tqpushbutton.h> +++#include <tqradiobutton.h> +++#include <tqrangecontrol.h> +++#include <tqstring.h> +++#include <tqtabbar.h> +++#include <tqtabwidget.h> +++#include <tqtoolbar.h> +++#include <tqtoolbutton.h> +++#include <tqwidget.h> +++#include <tqprogressbar.h> +++ +++/* ********* See hack on top of this file */ +++#undef Region +++ +++ +++/* ********* TDE base headers */ +++#include <kaboutdata.h> +++#include <kapplication.h> +++#include <kcmdlineargs.h> +++#include <kconfig.h> +++#include <kdeversion.h> +++#include <kemailsettings.h> +++#include <kglobal.h> +++#include <kglobalsettings.h> +++#include <klocale.h> +++#include <kmainwindow.h> +++#include <kmenubar.h> +++#include <kprotocolmanager.h> +++#include <kstartupinfo.h> +++#include <kstyle.h> +++ +++ +++/* ********* TDE address book connectivity headers */ +++#include <kabc/addressbook.h> +++#include <kabc/addressee.h> +++#include <kabc/field.h> +++#include <kabc/stdaddressbook.h> +++ +++ +++#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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++# <http://www.openoffice.org/license.html> +++# 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 +++# <http://www.openoffice.org/license.html> +++# 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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <shell/tde_headers.h> +++ +++#include <salunx.h> +++#include <saldata.hxx> +++#include <saldisp.hxx> +++ +++#include <salgdi.h> +++ +++#include <salframe.h> +++#include <vcl/settings.hxx> +++#include <rtl/ustrbuf.hxx> +++#include <plugins/tde/tdedata.hxx> +++#include <iostream> +++ +++#include <pspgraphics.h> +++ +++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 QStyle::drawControl(). The buttons are created +++ on demand and they are still hidden (no QWidget::show() is called). +++ */ +++ QPushButton *m_pPushButton; +++ +++ /** Cached radio button. +++ +++ @see m_pPushButton +++ */ +++ QRadioButton *m_pRadioButton; +++ +++ /** Cached check box. +++ +++ @see m_pPushButton +++ */ +++ QCheckBox *m_pCheckBox; +++ +++ /** Cached combo box. +++ +++ @see m_pPushButton +++ */ +++ QComboBox *m_pComboBox; +++ +++ /** Cached editable combo box. +++ +++ Needed, because some styles do not like dynamic changes +++ (QComboBox::setEditable()). +++ +++ @see m_pPushButton +++ */ +++ QComboBox *m_pEditableComboBox; +++ +++ /** Cached line edit box. +++ +++ @see m_pPushButton +++ */ +++ QLineEdit *m_pLineEdit; +++ +++ /** Cached spin box. +++ +++ @see m_pPushButton +++ */ +++ QSpinWidget *m_pSpinWidget; +++ +++ /** Cached spin box'es line edit. +++ +++ @see m_pPushButton +++ */ +++ QLineEdit *m_pSpinEdit; +++ +++ /** Cached tab. +++ +++ Left, middle, right tab and a tab which is alone. +++ +++ @see m_pPushButton +++ */ +++ QTab *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 +++ */ +++ QWidget *m_pTabBarParent; +++ +++ /** Cached tab bar widget. +++ +++ @see m_pPushButton +++ */ +++ QTabBar *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 +++ */ +++ QTabWidget *m_pTabWidget; +++ +++ /** Cached list view. +++ +++ @see m_pPushButton +++ */ +++ QListView *m_pListView; +++ +++ /** Cached scroll bar. +++ +++ @see m_pPushButton +++ */ +++ QScrollBar *m_pScrollBar; +++ +++ /** Cached dock area. Needed for proper functionality of tool bars. +++ +++ @see m_pPushButton +++ */ +++ QMainWindow *m_pMainWindow; +++ +++ /** Cached tool bar. +++ +++ @see m_pPushButton +++ */ +++ QToolBar *m_pToolBarHoriz, *m_pToolBarVert; +++ +++ /** Cached tool button. +++ +++ @see m_pPushButton +++ */ +++ QToolButton *m_pToolButton; +++ +++ /** Cached menu bar. +++ +++ @see m_pPushButton +++ */ +++ QMenuBar *m_pMenuBar; +++ +++ /** Identifiers of menu bar items. +++ */ +++ int m_nMenuBarEnabledItem, m_nMenuBarDisabledItem; +++ +++ /** Cached popup menu. +++ +++ @see m_pPushButton +++ */ +++ QPopupMenu *m_pPopupMenu; +++ +++ /** Identifiers of popup menu items. +++ */ +++ int m_nPopupMenuEnabledItem, m_nPopupMenuDisabledItem; +++ +++ /** cached progress bar +++ */ +++ QProgressBar *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 QWidget::show()), because they are needed just as a parameter for +++ QStyle::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( QWidget *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. +++ */ +++ QPushButton *pushButton( const Rectangle& rControlRegion, BOOL bDefault ); +++ +++ /** 'Get' method for radio button. +++ +++ @see pushButton() +++ */ +++ QRadioButton *radioButton( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for check box. +++ +++ @see pushButton() +++ */ +++ QCheckBox *checkBox( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for combo box. +++ +++ It returns m_pComboBox or m_pEditableComboBox according to +++ bEditable. +++ +++ @see pushButton(), m_pEditableComboBox +++ */ +++ QComboBox *comboBox( const Rectangle& rControlRegion, BOOL bEditable ); +++ +++ /** 'Get' method for line edit box. +++ +++ @see pushButton() +++ */ +++ QLineEdit *lineEdit( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for spin box. +++ +++ @see pushButton() +++ */ +++ QSpinWidget *spinWidget( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for tab bar. +++ +++ @see pushButton() +++ */ +++ QTabBar *tabBar( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for tab widget. +++ +++ @see pushButton() +++ */ +++ QTabWidget *tabWidget( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for list view. +++ +++ @see pushButton() +++ */ +++ QListView *listView( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for scroll bar. +++ +++ @see pushButton() +++ */ +++ QScrollBar *scrollBar( const Rectangle& rControlRegion, +++ BOOL bHorizontal, const ImplControlValue& aValue ); +++ +++ /** 'Get' method for tool bar. +++ +++ @see pushButton() +++ */ +++ QToolBar *toolBar( const Rectangle& rControlRegion, BOOL bHorizontal ); +++ +++ /** 'Get' method for tool button. +++ +++ @see pushButton() +++ */ +++ QToolButton *toolButton( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for menu bar. +++ +++ @see pushButton() +++ */ +++ QMenuBar *menuBar( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for popup menu. +++ +++ @see pushButton() +++ */ +++ QPopupMenu *popupMenu( const Rectangle& rControlRegion ); +++ +++ /** 'Get' method for progress bar +++ +++ @see pushButton() +++ */ +++ QProgressBar *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, ...) +++ */ +++ QStyle::SFlags vclStateValue2SFlags( ControlState nState, const ImplControlValue& aValue ); +++ +++ public: +++ /** Convert VCL Rectangle to QRect. +++ +++ @param rControlRegion +++ The region to convert. +++ +++ @return +++ The bounding box of the region. +++ */ +++ static QRect region2QRect( 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( QWidget *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 +++ QPoint qWidgetPos( pWidget->pos() ); +++ pWidget->move( 0, 0 ); +++ +++ // Enable/disable the widget +++ pWidget->setEnabled( nState & CTRL_STATE_ENABLED ); +++ +++ // Create pixmap to paint to +++ QPixmap qPixmap( pWidget->width(), pWidget->height() ); +++ QPainter qPainter( &qPixmap ); +++ QRect qRect( 0, 0, pWidget->width(), pWidget->height() ); +++ +++ // Use the background of the widget +++ qPixmap.fill( pWidget, QPoint(0, 0) ); +++ +++ // Convert the flags +++ QStyle::SFlags nStyle = vclStateValue2SFlags( nState, aValue ); +++ +++ // Store the widget class +++ const char *pClassName = pWidget->className(); +++ +++ // Draw the widget to the pixmap +++ if ( strcmp( "QPushButton", pClassName ) == 0 ) +++ { +++ // Workaround for the Platinum style. +++ // Platinum takes the state directly from the widget, not from SFlags. +++ QPushButton *pPushButton = static_cast<QPushButton *>( pWidget->qt_cast( "QPushButton" ) ); +++ if ( pPushButton ) +++ { +++ pPushButton->setDown ( nStyle & QStyle::Style_Down ); +++ pPushButton->setOn ( nStyle & QStyle::Style_On ); +++ pPushButton->setEnabled( nStyle & QStyle::Style_Enabled ); +++ } +++ +++ kapp->style().drawControl( QStyle::CE_PushButton, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle ); +++ } +++ else if ( strcmp( "QRadioButton", 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( QStyle::CE_RadioButton, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle ); +++ } +++ else if ( strcmp( "QCheckBox", pClassName ) == 0 ) +++ { +++ kapp->style().drawControl( QStyle::CE_CheckBox, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle ); +++ } +++ else if ( strcmp( "QComboBox", pClassName ) == 0 ) +++ { +++ kapp->style().drawComplexControl( QStyle::CC_ComboBox, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle ); +++ +++ // Editable combo box uses the background of the associated edit box +++ QComboBox *pComboBox = static_cast<QComboBox *>( pWidget->qt_cast( "QComboBox" ) ); +++ if ( pComboBox && pComboBox->editable() && pComboBox->lineEdit() ) +++ { +++ QColorGroup::ColorRole eColorRole = ( pComboBox->isEnabled() )? +++ QColorGroup::Base: QColorGroup::Background; +++ qPainter.fillRect( +++ kapp->style().querySubControlMetrics( QStyle::CC_ComboBox, +++ pComboBox, QStyle::SC_ComboBoxEditField ), +++ pComboBox->lineEdit()->colorGroup().brush( eColorRole ) ); +++ } +++ } +++ else if ( strcmp( "QLineEdit", pClassName ) == 0 ) +++ { +++ kapp->style().drawPrimitive( QStyle::PE_PanelLineEdit, +++ &qPainter, qRect, +++ pWidget->colorGroup(), nStyle | QStyle::Style_Sunken ); +++ } +++ else if ( strcmp( "QSpinWidget", pClassName ) == 0 ) +++ { +++ const SpinbuttonValue *pValue = static_cast<const SpinbuttonValue *> ( &aValue ); +++ +++ // Is any of the buttons pressed? +++ QStyle::SCFlags eActive = QStyle::SC_None; +++ if ( pValue ) +++ { +++ if ( pValue->mnUpperState & CTRL_STATE_PRESSED ) +++ eActive = QStyle::SC_SpinWidgetUp; +++ else if ( pValue->mnLowerState & CTRL_STATE_PRESSED ) +++ eActive = QStyle::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 |= QStyle::Style_Enabled; +++ } +++ else +++ pWidget->setEnabled( false ); +++ +++ // Mouse-over effect +++ if ( (pValue->mnUpperState & CTRL_STATE_ROLLOVER) || +++ (pValue->mnLowerState & CTRL_STATE_ROLLOVER) ) +++ nStyle |= QStyle::Style_MouseOver; +++ } +++ +++ // Spin widget uses the background of the associated edit box +++ QSpinWidget *pSpinWidget = static_cast<QSpinWidget *>( pWidget->qt_cast( "QSpinWidget" ) ); +++ if ( pSpinWidget && pSpinWidget->editWidget() ) +++ { +++ QColorGroup::ColorRole eColorRole = ( pSpinWidget->isEnabled() )? +++ QColorGroup::Base: QColorGroup::Background; +++ qPainter.fillRect( +++ kapp->style().querySubControlMetrics( QStyle::CC_SpinWidget, +++ pSpinWidget, QStyle::SC_SpinWidgetEditField ), +++ pSpinWidget->editWidget()->colorGroup().brush( eColorRole ) ); +++ } +++ +++ // Adjust the frame (needed for Motif Plus style) +++ QRect qFrameRect = kapp->style().querySubControlMetrics( QStyle::CC_SpinWidget, +++ pWidget, QStyle::SC_SpinWidgetFrame ); +++ +++ kapp->style().drawComplexControl( QStyle::CC_SpinWidget, +++ &qPainter, pWidget, qFrameRect, +++ pWidget->colorGroup(), nStyle, +++ QStyle::SC_All, eActive ); +++ } +++ else if ( strcmp( "QTabBar", pClassName ) == 0 ) +++ { +++ const TabitemValue *pValue = static_cast<const TabitemValue *> ( &aValue ); +++ +++ QTab *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( QStyle::CE_TabBarTab, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle, +++ QStyleOption( pTab ) ); +++ } +++ else if ( strcmp( "QTabWidget", pClassName ) == 0 ) +++ { +++ kapp->style().drawPrimitive( QStyle::PE_PanelTabWidget, +++ &qPainter, qRect, +++ pWidget->colorGroup(), nStyle ); +++ } +++ else if ( strcmp( "QListView", pClassName ) == 0 ) +++ { +++ kapp->style().drawPrimitive( QStyle::PE_Panel, +++ &qPainter, qRect, +++ pWidget->colorGroup(), nStyle | QStyle::Style_Sunken ); +++ } +++ else if ( strcmp( "QScrollBar", pClassName ) == 0 ) +++ { +++ const ScrollbarValue *pValue = static_cast<const ScrollbarValue *> ( &aValue ); +++ +++ QStyle::SCFlags eActive = QStyle::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 |= QStyle::Style_MouseOver; +++ if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER ) +++ eActive = QStyle::SC_ScrollBarSlider; +++ } +++ else if ( strcmp( "QSGIStyle", pStyleName ) == 0 ) +++ { +++ nStyle |= QStyle::Style_MouseOver; +++ if ( pValue->mnButton1State & CTRL_STATE_ROLLOVER ) +++ eActive = QStyle::SC_ScrollBarSubLine; +++ else if ( pValue->mnButton2State & CTRL_STATE_ROLLOVER ) +++ eActive = QStyle::SC_ScrollBarAddLine; +++ else if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER ) +++ eActive = QStyle::SC_ScrollBarSlider; +++ } +++ +++ if ( pValue->mnButton1State & CTRL_STATE_PRESSED ) +++ eActive = QStyle::SC_ScrollBarSubLine; +++ else if ( pValue->mnButton2State & CTRL_STATE_PRESSED ) +++ eActive = QStyle::SC_ScrollBarAddLine; +++ else if ( pValue->mnThumbState & CTRL_STATE_PRESSED ) +++ eActive = QStyle::SC_ScrollBarSlider; +++ else if ( pValue->mnPage1State & CTRL_STATE_PRESSED ) +++ eActive = QStyle::SC_ScrollBarSubPage; +++ else if ( pValue->mnPage2State & CTRL_STATE_PRESSED ) +++ eActive = QStyle::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 |= QStyle::Style_Enabled; +++ } +++ else +++ pWidget->setEnabled( false ); +++ } +++ +++ // Is it a horizontal scroll bar? +++ QScrollBar *pScrollBar = static_cast<QScrollBar *> ( pWidget->qt_cast( "QScrollBar" ) ); +++ QStyle::StyleFlags eHoriz = QStyle::Style_Default; +++ if ( pScrollBar && pScrollBar->orientation() == Qt::Horizontal ) +++ eHoriz = QStyle::Style_Horizontal; +++ +++ kapp->style().drawComplexControl( QStyle::CC_ScrollBar, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle | eHoriz, +++ QStyle::SC_All, eActive ); +++ } +++ else if ( strcmp( "QToolBar", pClassName ) == 0 ) +++ { +++ QToolBar *pToolBar = static_cast< QToolBar * >( pWidget->qt_cast( "QToolBar" ) ); +++ bool bIsHorizontal = false; +++ if ( pToolBar && pToolBar->orientation() == Qt::Horizontal ) +++ { +++ nStyle |= QStyle::Style_Horizontal; +++ bIsHorizontal = true; +++ } +++ +++ kapp->style().drawControl( QStyle::CE_DockWindowEmptyArea, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle ); +++ +++ kapp->style().drawPrimitive( QStyle::PE_PanelDockWindow, +++ &qPainter, qRect, pWidget->colorGroup(), nStyle ); +++ +++ if ( nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT ) +++ { +++ const ToolbarValue *pValue = static_cast< const ToolbarValue * >( &aValue ); +++ +++ QRect qThumbRect = region2QRect( 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( QStyle::PE_DockWindowHandle, +++ &qPainter, qThumbRect, pWidget->colorGroup(), nStyle ); +++ } +++ } +++ else if ( strcmp( "QToolButton", pClassName ) == 0 ) +++ { +++ if( (nStyle & QStyle::Style_MouseOver) ) +++ nStyle &= ~QStyle::Style_Off; +++ kapp->style().drawComplexControl( QStyle::CC_ToolButton, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle, +++ QStyle::SC_ToolButton ); +++ } +++ else if ( strcmp( "QMenuBar", pClassName ) == 0 ) +++ { +++ if ( nPart == PART_ENTIRE_CONTROL ) +++ { +++ kapp->style().drawControl( QStyle::CE_MenuBarEmptyArea, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle ); +++ } +++ else if ( nPart == PART_MENU_ITEM ) +++ { +++ int nMenuItem = ( nStyle & QStyle::Style_Enabled )? m_nMenuBarEnabledItem: m_nMenuBarDisabledItem; +++ QMenuItem *pMenuItem = static_cast<QMenuBar*>( pWidget )->findItem( nMenuItem ); +++ +++ if ( nStyle & QStyle::Style_Selected ) +++ nStyle |= QStyle::Style_Active | QStyle::Style_Down | QStyle::Style_HasFocus; +++ +++ kapp->style().drawControl( QStyle::CE_MenuBarItem, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle, +++ QStyleOption( pMenuItem ) ); +++ } +++ } +++ else if ( strcmp( "QPopupMenu", pClassName ) == 0 ) +++ { +++ int nMenuItem = ( nStyle & QStyle::Style_Enabled )? m_nPopupMenuEnabledItem: m_nPopupMenuDisabledItem; +++ QMenuItem *pMenuItem = static_cast<QPopupMenu*>( pWidget )->findItem( nMenuItem ); +++ +++ if ( nStyle & QStyle::Style_Selected ) +++ nStyle |= QStyle::Style_Active; +++ +++ kapp->style().drawControl( QStyle::CE_PopupMenuItem, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle, +++ QStyleOption( pMenuItem, 0, 0 ) ); +++ } +++ else if ( strcmp( "QProgressBar", pClassName ) == 0 ) +++ { +++ long nProgressWidth = aValue.getNumericVal(); +++ QProgressBar* pProgress = static_cast<QProgressBar*>(pWidget); +++ pProgress->setProgress( nProgressWidth, qRect.width() ); +++ +++ kapp->style().drawControl( QStyle::CE_ProgressBarGroove, +++ &qPainter, pWidget, qRect, +++ pWidget->colorGroup(), nStyle ); +++ kapp->style().drawControl( QStyle::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; +++} +++ +++QPushButton *WidgetPainter::pushButton( const Rectangle& rControlRegion, +++ BOOL bDefault ) +++{ +++ if ( !m_pPushButton ) +++ m_pPushButton = new QPushButton( NULL, "push_button" ); +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ // Workaround for broken styles which do not add +++ // QStyle::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 ) +++ { +++ QSize qContentsSize( 50, 50 ); +++ m_pPushButton->setDefault( false ); +++ QSize qNormalSize = kapp->style().sizeFromContents( QStyle::CT_PushButton, +++ m_pPushButton, qContentsSize ); +++ m_pPushButton->setDefault( true ); +++ QSize qDefSize = kapp->style().sizeFromContents( QStyle::CT_PushButton, +++ m_pPushButton, qContentsSize ); +++ +++ int nIndicatorSize = kapp->style().pixelMetric( +++ QStyle::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; +++} +++ +++QRadioButton *WidgetPainter::radioButton( const Rectangle& rControlRegion ) +++{ +++ if ( !m_pRadioButton ) +++ m_pRadioButton = new QRadioButton( NULL, "radio_button" ); +++ +++ QRect qRect = region2QRect( 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 ) +++ { +++ QRect qOldRect( qRect ); +++ +++ qRect.setWidth( kapp->style().pixelMetric( +++ QStyle::PM_ExclusiveIndicatorWidth, m_pRadioButton ) ); +++ qRect.setHeight( kapp->style().pixelMetric( +++ QStyle::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; +++} +++ +++QCheckBox *WidgetPainter::checkBox( const Rectangle& rControlRegion ) +++{ +++ if ( !m_pCheckBox ) +++ m_pCheckBox = new QCheckBox( NULL, "check_box" ); +++ +++ QRect qRect = region2QRect( 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 ) +++ { +++ QRect qOldRect( qRect ); +++ +++ qRect.setWidth( kapp->style().pixelMetric( +++ QStyle::PM_IndicatorWidth, m_pCheckBox ) ); +++ qRect.setHeight( kapp->style().pixelMetric( +++ QStyle::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; +++} +++ +++QComboBox *WidgetPainter::comboBox( const Rectangle& rControlRegion, +++ BOOL bEditable ) +++{ +++ QComboBox *pComboBox = NULL; +++ if ( bEditable ) +++ { +++ if ( !m_pEditableComboBox ) +++ m_pEditableComboBox = new QComboBox( true, NULL, "combo_box_edit" ); +++ pComboBox = m_pEditableComboBox; +++ } +++ else +++ { +++ if ( !m_pComboBox ) +++ m_pComboBox = new QComboBox( false, NULL, "combo_box" ); +++ pComboBox = m_pComboBox; +++ } +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ pComboBox->move( qRect.topLeft() ); +++ pComboBox->resize( qRect.size() ); +++ +++ return pComboBox; +++} +++ +++QLineEdit *WidgetPainter::lineEdit( const Rectangle& rControlRegion ) +++{ +++ if ( !m_pLineEdit ) +++ m_pLineEdit = new QLineEdit( NULL, "line_edit" ); +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ m_pLineEdit->move( qRect.topLeft() ); +++ m_pLineEdit->resize( qRect.size() ); +++ +++ return m_pLineEdit; +++} +++ +++QSpinWidget *WidgetPainter::spinWidget( const Rectangle& rControlRegion ) +++{ +++ if ( !m_pSpinWidget ) +++ { +++ m_pSpinWidget = new QSpinWidget( NULL, "spin_widget" ); +++ +++ m_pSpinEdit = new QLineEdit( NULL, "line_edit_spin" ); +++ m_pSpinWidget->setEditWidget( m_pSpinEdit ); +++ } +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ m_pSpinWidget->move( qRect.topLeft() ); +++ m_pSpinWidget->resize( qRect.size() ); +++ m_pSpinWidget->arrange(); +++ +++ return m_pSpinWidget; +++} +++ +++QTabBar *WidgetPainter::tabBar( const Rectangle& rControlRegion ) +++{ +++ if ( !m_pTabBar ) +++ { +++ if ( !m_pTabBarParent ) +++ m_pTabBarParent = new QWidget( NULL, "tab_bar_parent" ); +++ +++ m_pTabBar = new QTabBar( m_pTabBarParent, "tab_bar" ); +++ +++ m_pTabLeft = new QTab(); +++ m_pTabMiddle = new QTab(); +++ m_pTabRight = new QTab(); +++ m_pTabAlone = new QTab(); +++ +++ m_pTabBar->addTab( m_pTabLeft ); +++ m_pTabBar->addTab( m_pTabMiddle ); +++ m_pTabBar->addTab( m_pTabRight ); +++ } +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ m_pTabBar->move( qRect.topLeft() ); +++ m_pTabBar->resize( qRect.size() ); +++ +++ m_pTabBar->setShape( QTabBar::RoundedAbove ); +++ +++ return m_pTabBar; +++} +++ +++QTabWidget *WidgetPainter::tabWidget( const Rectangle& rControlRegion ) +++{ +++ if ( !m_pTabWidget ) +++ m_pTabWidget = new QTabWidget( NULL, "tab_widget" ); +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ --qRect.rTop(); +++ +++ m_pTabWidget->move( qRect.topLeft() ); +++ m_pTabWidget->resize( qRect.size() ); +++ +++ return m_pTabWidget; +++} +++ +++QListView *WidgetPainter::listView( const Rectangle& rControlRegion ) +++{ +++ if ( !m_pListView ) +++ m_pListView = new QListView( NULL, "list_view" ); +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ m_pListView->move( qRect.topLeft() ); +++ m_pListView->resize( qRect.size() ); +++ +++ return m_pListView; +++} +++ +++QScrollBar *WidgetPainter::scrollBar( const Rectangle& rControlRegion, +++ BOOL bHorizontal, const ImplControlValue& aValue ) +++{ +++ if ( !m_pScrollBar ) +++ { +++ m_pScrollBar = new QScrollBar( NULL, "scroll_bar" ); +++ m_pScrollBar->setTracking( false ); +++ m_pScrollBar->setLineStep( 1 ); +++ } +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ m_pScrollBar->move( qRect.topLeft() ); +++ m_pScrollBar->resize( qRect.size() ); +++ m_pScrollBar->setOrientation( bHorizontal? Qt::Horizontal: Qt::Vertical ); +++ +++ const ScrollbarValue *pValue = static_cast<const ScrollbarValue *> ( &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; +++} +++ +++QToolBar *WidgetPainter::toolBar( const Rectangle& rControlRegion, BOOL bHorizontal ) +++{ +++ if ( !m_pMainWindow ) +++ m_pMainWindow = new QMainWindow( NULL, "main_window" ); +++ +++ QToolBar *pToolBar; +++ if ( bHorizontal ) +++ { +++ if ( !m_pToolBarHoriz ) +++ { +++ m_pToolBarHoriz = new QToolBar( m_pMainWindow, "tool_bar_horiz" ); +++ m_pMainWindow->moveDockWindow( m_pToolBarHoriz, Qt::DockTop ); +++ } +++ pToolBar = m_pToolBarHoriz; +++ } +++ else +++ { +++ if ( !m_pToolBarVert ) +++ { +++ m_pToolBarVert = new QToolBar( m_pMainWindow, "tool_bar_horiz" ); +++ m_pMainWindow->moveDockWindow( m_pToolBarVert, Qt::DockLeft ); +++ } +++ pToolBar = m_pToolBarVert; +++ } +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ pToolBar->move( qRect.topLeft() ); +++ pToolBar->resize( qRect.size() ); +++ +++ return pToolBar; +++} +++ +++QToolButton *WidgetPainter::toolButton( const Rectangle& rControlRegion) +++{ +++ if ( !m_pToolButton ) +++ m_pToolButton = new QToolButton( NULL, "tool_button" ); +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ m_pToolButton->move( qRect.topLeft() ); +++ m_pToolButton->resize( qRect.size() ); +++ +++ return m_pToolButton; +++} +++ +++QMenuBar *WidgetPainter::menuBar( const Rectangle& rControlRegion) +++{ +++ if ( !m_pMenuBar ) +++ { +++ m_pMenuBar = new QMenuBar( 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 ); +++ } +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ m_pMenuBar->move( qRect.topLeft() ); +++ m_pMenuBar->resize( qRect.size() ); +++ +++ return m_pMenuBar; +++} +++ +++QPopupMenu *WidgetPainter::popupMenu( const Rectangle& rControlRegion) +++{ +++ if ( !m_pPopupMenu ) +++ { +++ m_pPopupMenu = new QPopupMenu( 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 ); +++ } +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ m_pPopupMenu->move( qRect.topLeft() ); +++ m_pPopupMenu->resize( qRect.size() ); +++ +++ return m_pPopupMenu; +++} +++ +++QProgressBar *WidgetPainter::progressBar( const Rectangle& rControlRegion ) +++{ +++ if ( !m_pProgressBar ) +++ m_pProgressBar = new QProgressBar( NULL, "progress_bar" ); +++ +++ QRect qRect = region2QRect( rControlRegion ); +++ +++ m_pProgressBar->move( qRect.topLeft() ); +++ m_pProgressBar->resize( qRect.size() ); +++ +++ return m_pProgressBar; +++} +++ +++QStyle::SFlags WidgetPainter::vclStateValue2SFlags( ControlState nState, +++ const ImplControlValue& aValue ) +++{ +++ QStyle::SFlags nStyle = +++ ( (nState & CTRL_STATE_DEFAULT)? QStyle::Style_ButtonDefault: QStyle::Style_Default ) | +++ ( (nState & CTRL_STATE_ENABLED)? QStyle::Style_Enabled: QStyle::Style_Default ) | +++ ( (nState & CTRL_STATE_FOCUSED)? QStyle::Style_HasFocus: QStyle::Style_Default ) | +++ ( (nState & CTRL_STATE_PRESSED)? QStyle::Style_Down: QStyle::Style_Raised ) | +++ ( (nState & CTRL_STATE_SELECTED)? QStyle::Style_Selected : QStyle::Style_Default ) | +++ ( (nState & CTRL_STATE_ROLLOVER)? QStyle::Style_MouseOver: QStyle::Style_Default ); +++ //TODO ( (nState & CTRL_STATE_HIDDEN)? QStyle::Style_: QStyle::Style_Default ) | +++ +++ switch ( aValue.getTristateVal() ) +++ { +++ case BUTTONVALUE_ON: nStyle |= QStyle::Style_On; break; +++ case BUTTONVALUE_OFF: nStyle |= QStyle::Style_Off; break; +++ case BUTTONVALUE_MIXED: nStyle |= QStyle::Style_NoChange; break; +++ default: break; +++ } +++ +++ return nStyle; +++} +++ +++QRect WidgetPainter::region2QRect( const Rectangle& rControlRegion ) +++{ +++ return QRect( QPoint( rControlRegion.Left(), rControlRegion.Top() ), +++ QPoint( 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 ); +++ +++ QScrollBar *pScrollBar = pWidgetPainter->scrollBar( rControlRegion, +++ bHorizontal, ImplControlValue() ); +++ QRect qRectSubLine = kapp->style().querySubControlMetrics( +++ QStyle::CC_ScrollBar, pScrollBar, QStyle::SC_ScrollBarSubLine ); +++ QRect qRectAddLine = kapp->style().querySubControlMetrics( +++ QStyle::CC_ScrollBar, pScrollBar, QStyle::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( +++ QStyle::CC_ScrollBar, pScrollBar, +++ QStyle::SC_ScrollBarAddPage ).right() + 1 ); +++ if ( qRectAddLine.width() > qRectSubLine.width() ) +++ bTwoSubButtons = TRUE; +++ if ( qRectSubLine.left() > kapp->style().querySubControlMetrics( QStyle::CC_ScrollBar, pScrollBar, QStyle::SC_ScrollBarSubPage ).left() ) +++ bPlatinumStyle = TRUE; +++ } +++ else +++ { +++ qRectAddLine.setTop( kapp->style().querySubControlMetrics( +++ QStyle::CC_ScrollBar, pScrollBar, +++ QStyle::SC_ScrollBarAddPage ).bottom() + 1 ); +++ if ( qRectAddLine.height() > qRectSubLine.height() ) +++ bTwoSubButtons = TRUE; +++ if ( qRectSubLine.top() > kapp->style().querySubControlMetrics( QStyle::CC_ScrollBar, pScrollBar, QStyle::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; +++ QRect qBoundingRect = WidgetPainter::region2QRect( rControlRegion ); +++ QRect qRect; +++ +++ QWidget *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( +++ QStyle::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( QStyle::PM_ExclusiveIndicatorWidth, pWidget ) ); +++ qRect.setHeight( kapp->style().pixelMetric( QStyle::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( QStyle::PM_IndicatorWidth, pWidget ) ); +++ qRect.setHeight( kapp->style().pixelMetric( QStyle::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( +++ QStyle::CC_ComboBox, pWidget, QStyle::SC_ComboBoxArrow ); +++ qRect.setLeft( kapp->style().querySubControlMetrics( +++ QStyle::CC_ComboBox, pWidget, +++ QStyle::SC_ComboBoxEditField ).right() + 1 ); +++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); +++ bReturn = TRUE; +++ break; +++ +++ case PART_SUB_EDIT: +++ qRect = kapp->style().querySubControlMetrics( +++ QStyle::CC_ComboBox, pWidget, QStyle::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( +++ QStyle::CC_SpinWidget, pWidget, QStyle::SC_SpinWidgetUp ); +++ bReturn = TRUE; +++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); +++ break; +++ +++ case PART_BUTTON_DOWN: +++ qRect = kapp->style().querySubControlMetrics( +++ QStyle::CC_SpinWidget, pWidget, QStyle::SC_SpinWidgetDown ); +++ bReturn = TRUE; +++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() ); +++ break; +++ +++ case PART_SUB_EDIT: +++ qRect = kapp->style().querySubControlMetrics( +++ QStyle::CC_SpinWidget, pWidget, QStyle::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( +++ QStyle::CC_ScrollBar, pWidget, QStyle::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( +++ QStyle::CC_ScrollBar, pWidget, +++ QStyle::SC_ScrollBarSubPage ).left() ) +++ { +++ qRect.setLeft( 0 ); +++ qRect.setRight( 0 ); +++ } +++ } +++ else +++ { +++ if ( qRect.top() > kapp->style().querySubControlMetrics( +++ QStyle::CC_ScrollBar, pWidget, +++ QStyle::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( +++ QStyle::CC_ScrollBar, pWidget, QStyle::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( +++ QStyle::CC_ScrollBar, pWidget, +++ QStyle::SC_ScrollBarAddPage ).right() + 1 ); +++ else +++ qRect.setTop( kapp->style().querySubControlMetrics( +++ QStyle::CC_ScrollBar, pWidget, +++ QStyle::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<TDEXLib*>(GetDisplay()->GetXLib()); +++ pXLib->doStartup(); +++ } +++ X11SalFrame::Show( bVisible, bNoActivate ); +++} +++ +++/** Helper function to convert colors. +++*/ +++static Color toColor( const QColor &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 QFont. +++ +++ Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx). +++*/ +++static Font toFont( const QFont &rQFont, const ::com::sun::star::lang::Locale& rLocale ) +++{ +++ psp::FastPrintFontInfo aInfo; +++ QFontInfo qFontInfo( rQFont ); +++ +++ // set family name +++ aInfo.m_aFamilyName = String( rQFont.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 <= QFont::Light ) +++ aInfo.m_eWeight = psp::weight::Light; +++ else if ( nWeight <= QFont::Normal ) +++ aInfo.m_eWeight = psp::weight::Normal; +++ else if ( nWeight <= QFont::DemiBold ) +++ aInfo.m_eWeight = psp::weight::SemiBold; +++ else if ( nWeight <= QFont::Bold ) +++ aInfo.m_eWeight = psp::weight::Bold; +++ else +++ aInfo.m_eWeight = psp::weight::UltraBold; +++ +++ // set width +++ int nStretch = rQFont.stretch(); +++ if ( nStretch <= QFont::UltraCondensed ) +++ aInfo.m_eWidth = psp::width::UltraCondensed; +++ else if ( nStretch <= QFont::ExtraCondensed ) +++ aInfo.m_eWidth = psp::width::ExtraCondensed; +++ else if ( nStretch <= QFont::Condensed ) +++ aInfo.m_eWidth = psp::width::Condensed; +++ else if ( nStretch <= QFont::SemiCondensed ) +++ aInfo.m_eWidth = psp::width::SemiCondensed; +++ else if ( nStretch <= QFont::Unstretched ) +++ aInfo.m_eWidth = psp::width::Normal; +++ else if ( nStretch <= QFont::SemiExpanded ) +++ aInfo.m_eWidth = psp::width::SemiExpanded; +++ else if ( nStretch <= QFont::Expanded ) +++ aInfo.m_eWidth = psp::width::Expanded; +++ else if ( nStretch <= QFont::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 = rQFont.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 +++ QColorGroup 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 = QApplication::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 +++ QColorGroup 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( QStyle::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 +++ * <http://www.openoffice.org/license.html> +++ * 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 <shell/tde_headers.h> +++ +++#include <unistd.h> +++#include <fcntl.h> +++ +++#include <stdio.h> +++#include <string.h> +++#include <stdlib.h> +++#include <limits.h> +++#include <errno.h> +++#include <poll.h> +++#ifdef FREEBSD +++#include <sys/types.h> +++#include <sys/time.h> +++#include <unistd.h> +++#endif +++#include <plugins/tde/tdedata.hxx> +++#include <osl/thread.h> +++#include <osl/process.h> +++#include <osl/module.h> +++#include <osl/mutex.hxx> +++ +++#include <tools/debug.hxx> +++#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<TDEXLib*>(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 = QPaintDevice::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 +++ * <http://www.openoffice.org/license.html> +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _VCL_TDEDATA_HXX +++#define _VCL_TDEDATA_HXX +++ +++#include <saldisp.hxx> +++#include <saldata.hxx> +++#include <salframe.h> +++ +++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-18 22:40:48.267879029 -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 +Binary files new.ORIGINAL.FROMARCHIVE.UNTOUCHABLE/libreoffice_3.3.2-1ubuntu4.debian.tar.gz and new.trinity.latest/libreoffice_3.3.2-1ubuntu4.debian.tar.gz differ |