You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
15797 lines
652 KiB
15797 lines
652 KiB
diff -urN libreoffice-build/patches/dev300/apply libreoffice-build/patches/dev300/apply
|
|
--- libreoffice-build/patches/dev300/apply 2011-09-19 11:41:11.000000000 -0500
|
|
+++ libreoffice-build/patches/dev300/apply 2011-09-19 11:36:17.051219826 -0500
|
|
@@ -22,7 +22,7 @@
|
|
|
|
LinuxCommon : Common, Defaults, FontConfigTemporaryHacks, \
|
|
FedoraLinuxOnlyFixes, LinuxOnly, msaccess, OpenGLTransitions, \
|
|
- CliMonoCommon, Mono, MonoComp, AddressBooks, QuickStarter, KDE4, Netbook, \
|
|
+ CliMonoCommon, Mono, MonoComp, AddressBooks, QuickStarter, KDE4, TDE, Netbook, \
|
|
GlobalNSPluginSupport, Gcc46
|
|
MacOSXCommon : Common, Defaults
|
|
Win32Common : Common, Defaults, Win32Only, CliMonoCommon, CliComponent, NotDebian
|
|
@@ -184,8 +184,6 @@
|
|
# pass $ORIGIN correctly to RPATH
|
|
icu-4.2.1-rpath.diff. pmladek
|
|
|
|
-[ TemporaryHacks ]
|
|
-
|
|
# add idl target to toplevel makefile
|
|
makefile-idl-build.diff, noelpwer
|
|
|
|
@@ -1500,6 +1498,10 @@
|
|
# we need a good plan before, though ;-)
|
|
split-icons-search-usr-share.diff, n#296502, pmladek
|
|
|
|
+[ TDE ]
|
|
+# add trinity integration
|
|
+trinity-modules.diff
|
|
+
|
|
[ ArkOnly ]
|
|
SectionOwner => brosenk
|
|
|
|
diff -urN libreoffice-build/patches/dev300/trinity-modules.diff libreoffice-build/patches/dev300/trinity-modules.diff
|
|
--- libreoffice-build/patches/dev300/trinity-modules.diff 1969-12-31 18:00:00.000000000 -0600
|
|
+++ libreoffice-build/patches/dev300/trinity-modules.diff 2011-09-19 11:35:33.699926859 -0500
|
|
@@ -0,0 +1,15748 @@
|
|
+diff -urN configure.in configure.in
|
|
+--- configure.in 2011-03-08 12:51:39.000000000 -0600
|
|
++++ configure.in 2011-08-17 16:40:04.716144357 -0500
|
|
+@@ -233,6 +233,15 @@
|
|
+ [ --disable-kdeab Disable the KDE3 address book support
|
|
+ ],,if test "$enable_kde" = "yes"; then enable_kdeab=yes; fi)
|
|
+
|
|
++AC_ARG_ENABLE(tde,
|
|
++[ --enable-tde Determines whether to use TQt3/TDE vclplug on platforms
|
|
++ where TQt and TDE are available.
|
|
++],,)
|
|
++
|
|
++AC_ARG_ENABLE(tdeab,
|
|
++[ --disable-tdeab Disable the TDE address book support
|
|
++],,if test "$enable_tde" = "yes"; then enable_tdeab=yes; fi)
|
|
++
|
|
+ AC_ARG_ENABLE(kde4,
|
|
+ [ --enable-kde4 Determines whether to use Qt4/KDE4 vclplug on platforms
|
|
+ where Qt4 and KDE4 are available. May be used with --enable-kde
|
|
+@@ -1350,6 +1359,7 @@
|
|
+ test_cairo=yes
|
|
+ build_gstreamer=yes
|
|
+ test_kde=yes
|
|
++ test_tde=yes
|
|
+ test_cups=yes
|
|
+ test_randr=yes
|
|
+ test_freetype=yes
|
|
+@@ -1385,6 +1395,7 @@
|
|
+ build_gstreamer=yes
|
|
+ test_kde=yes
|
|
+ test_kde4=yes
|
|
++ test_tde=yes
|
|
+ test_cups=yes
|
|
+ test_randr=yes
|
|
+ test_freetype=yes
|
|
+@@ -1428,6 +1439,7 @@
|
|
+ build_gstreamer=yes
|
|
+ test_kde=yes
|
|
+ test_kde4=yes
|
|
++ test_tde=yes
|
|
+ test_cups=yes
|
|
+ test_randr=yes
|
|
+ test_freetype=yes
|
|
+@@ -1463,6 +1475,7 @@
|
|
+ build_gstreamer=yes
|
|
+ test_kde=yes
|
|
+ test_kde4=yes
|
|
++ test_tde=yes
|
|
+ test_cups=yes
|
|
+ test_randr=yes
|
|
+ test_freetype=yes
|
|
+@@ -1482,6 +1495,7 @@
|
|
+ test_gtk=yes
|
|
+ build_cairo=yes
|
|
+ test_kde=yes
|
|
++ test_tde=yes
|
|
+ test_cups=yes
|
|
+ test_freetype=yes
|
|
+ test_randr=yes
|
|
+@@ -6141,6 +6155,13 @@
|
|
+ fi
|
|
+ AC_SUBST(ENABLE_KDE4)
|
|
+
|
|
++ENABLE_TDE=""
|
|
++if test "x$enable_tde" = "xyes"; then
|
|
++ ENABLE_TDE="TRUE"
|
|
++ R="$R tde"
|
|
++fi
|
|
++AC_SUBST(ENABLE_TDE)
|
|
++
|
|
+ if test -z "$R"; then
|
|
+ AC_MSG_RESULT([none])
|
|
+ else
|
|
+@@ -7044,6 +7065,129 @@
|
|
+ AC_SUBST(KDE_HAVE_GLIB)
|
|
+
|
|
+ dnl ===================================================================
|
|
++dnl Check whether the Qt3 and TDE libraries are available.
|
|
++dnl ===================================================================
|
|
++
|
|
++TDE_CFLAGS=""
|
|
++TDE_LIBS=""
|
|
++if test "$_os" != "OpenBSD"; then
|
|
++ MOC="moc"
|
|
++fi
|
|
++if test "$test_tde" = "yes" -a "$ENABLE_TDE" = "TRUE" ; then
|
|
++ dnl Search paths for Qt3 and TDE
|
|
++ if test "$build_cpu" != "x86_64" ; then
|
|
++ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib/qt3/include /usr/lib/qt/include /usr/share/qt3/include /usr/local/include/X11/qt3 $x_includes"
|
|
++ qt_libdirs="$QTLIB /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries"
|
|
++ else
|
|
++ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib64/qt3/include /usr/lib64/qt/include /usr/share/qt3/include /usr/lib/qt3/include /usr/lib/qt/include /usr/local/include/X11/qt3 $x_includes"
|
|
++ qt_libdirs="$QTLIB /usr/local/qt/lib64 /usr/lib64/qt /usr/lib64 /usr/X11R6/lib64/X11/qt /usr/X11R6/lib64/qt /usr/lib64/qt3/lib64 /usr/lib64/qt/lib64 /usr/share/qt3/lib64 /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries"
|
|
++ fi
|
|
++ if test -n "$QTDIR" ; then
|
|
++ qt_incdirs="$QTDIR/include $qt_incdirs"
|
|
++ if test "$build_cpu" != "x86_64" ; then
|
|
++ qt_libdirs="$QTDIR/lib $qt_libdirs"
|
|
++ else
|
|
++ qt_libdirs="$QTDIR/lib64 $QTDIR/lib $qt_libdirs"
|
|
++ fi
|
|
++ fi
|
|
++ if test "$build_cpu" != "x86_64" ; then
|
|
++ tde_incdirs="/opt/trinity/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes"
|
|
++ tde_libdirs="/opt/trinity/lib /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib/kde4/lib /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries"
|
|
++ else
|
|
++ tde_incdirs="/opt/trinity/include /usr/lib64/kde/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes"
|
|
++ tde_libdirs="/opt/trinity/lib /usr/lib64/kde/lib64 /usr/local/kde/lib64 /usr/kde/lib64 /usr/lib64/kde /usr/lib64/kde3 /usr/lib64 /usr/X11R6/lib64 /usr/local/lib64 /opt/trinity/lib64 /opt/kde/lib64 /usr/X11R6/kde/lib64 /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries"
|
|
++ fi
|
|
++ if test -n "$TDEDIR" ; then
|
|
++ tde_incdirs="$TDEDIR/include $tde_incdirs"
|
|
++ if test "$build_cpu" != "x86_64" ; then
|
|
++ tde_libdirs="$TDEDIR/lib $tde_libdirs"
|
|
++ else
|
|
++ tde_libdirs="$TDEDIR/lib64 $TDEDIR/lib $tde_libdirs"
|
|
++ fi
|
|
++ fi
|
|
++
|
|
++ dnl What to test
|
|
++ qt_test_include="qstyle.h"
|
|
++ qt_test_library="libqt-mt.so*"
|
|
++ tde_test_include="kapp.h"
|
|
++ tde_test_library="libDCOP.so*"
|
|
++
|
|
++ dnl Check for Qt3 headers
|
|
++ AC_MSG_CHECKING([for Qt3 headers])
|
|
++ qt_incdir="no"
|
|
++ for tde_check in $qt_incdirs ; do
|
|
++ if test -r "$tde_check/$qt_test_include" ; then
|
|
++ qt_incdir="$tde_check"
|
|
++ break
|
|
++ fi
|
|
++ done
|
|
++ AC_MSG_RESULT([$qt_incdir])
|
|
++ if test "x$qt_incdir" = "xno" ; then
|
|
++ AC_MSG_ERROR([Qt3 headers not found. Please specify the root of
|
|
++your Qt3 installation by exporting QTDIR before running "configure".])
|
|
++ fi
|
|
++
|
|
++ dnl Check for Qt3 libraries
|
|
++ AC_MSG_CHECKING([for Qt3 libraries])
|
|
++ qt_libdir="no"
|
|
++ for qt_check in $qt_libdirs ; do
|
|
++ if test -r "`ls $qt_check/$qt_test_library 2>/dev/null | head -1`" ; then
|
|
++ qt_libdir="$qt_check"
|
|
++ break
|
|
++ fi
|
|
++ done
|
|
++ AC_MSG_RESULT([$qt_libdir])
|
|
++ if test "x$qt_libdir" = "xno" ; then
|
|
++ AC_MSG_ERROR([Qt3 libraries not found. Please specify the root of
|
|
++your Qt3 installation by exporting QTDIR before running "configure".])
|
|
++ fi
|
|
++
|
|
++ dnl Check for Meta Object Compiler
|
|
++ AC_PATH_PROG( MOC, moc, no, [`dirname $qt_libdir`/bin:$QTDIR/bin:$PATH] )
|
|
++ if test "$MOC" = "no" ; then
|
|
++ AC_MSG_ERROR([Qt3 Meta Object Compiler not found. Please specify
|
|
++the root of your Qt3 installation by exporting QTDIR before running "configure".])
|
|
++ fi
|
|
++
|
|
++ dnl Check for TDE headers
|
|
++ AC_MSG_CHECKING([for TDE headers])
|
|
++ tde_incdir="no"
|
|
++ for tde_check in $tde_incdirs ; do
|
|
++ if test -r "$tde_check/$tde_test_include" ; then
|
|
++ tde_incdir="$tde_check"
|
|
++ break
|
|
++ fi
|
|
++ done
|
|
++ AC_MSG_RESULT([$tde_incdir])
|
|
++ if test "x$tde_incdir" = "xno" ; then
|
|
++ AC_MSG_ERROR([TDE headers not found. Please specify the root of
|
|
++your TDE installation by exporting TDEDIR before running "configure".])
|
|
++ fi
|
|
++
|
|
++ dnl Check for TDE libraries
|
|
++ AC_MSG_CHECKING([for TDE libraries])
|
|
++ tde_libdir="no"
|
|
++ for tde_check in $tde_libdirs ; do
|
|
++ if test -r "`ls $tde_check/$tde_test_library 2>/dev/null | head -1`" ; then
|
|
++ tde_libdir="$tde_check"
|
|
++ break
|
|
++ fi
|
|
++ done
|
|
++ AC_MSG_RESULT([$tde_libdir])
|
|
++ if test "x$tde_libdir" = "xno" ; then
|
|
++ AC_MSG_ERROR([TDE libraries not found. Please specify the root of
|
|
++your TDE installation by exporting TDEDIR before running "configure".])
|
|
++ fi
|
|
++
|
|
++ dnl Set the variables
|
|
++ TDE_CFLAGS="-I$qt_incdir -I$tde_incdir -I/usr/include/tqt -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT"
|
|
++ TDE_LIBS="-L$tde_libdir -L$qt_libdir -lkdeui -lkdecore -ltqt -lqt-mt"
|
|
++fi
|
|
++AC_SUBST(TDE_CFLAGS)
|
|
++AC_SUBST(TDE_LIBS)
|
|
++AC_SUBST(MOC)
|
|
++
|
|
++dnl ===================================================================
|
|
+ dnl Test for the enabling the lockdown pieces
|
|
+ dnl ===================================================================
|
|
+ AC_MSG_CHECKING([whether to enable the lockdown pieces])
|
|
+@@ -7100,6 +7244,33 @@
|
|
+ AC_SUBST(ENABLE_KAB)
|
|
+
|
|
+ dnl ===================================================================
|
|
++dnl Test whether to include TDE AB support
|
|
++dnl ===================================================================
|
|
++AC_MSG_CHECKING([whether to enable TDE address book support])
|
|
++if test "$enable_tdeab" = "yes" && test "$enable_tde" = "yes"; then
|
|
++ AC_MSG_RESULT([yes])
|
|
++ AC_LANG_PUSH([C++])
|
|
++ save_CXXFLAGS=$CXXFLAGS
|
|
++ CXXFLAGS="$CXXFLAGS $TDE_CFLAGS"
|
|
++ AC_MSG_CHECKING([whether TDE is between 3.2 and 3.6])
|
|
++ AC_TRY_RUN([
|
|
++#include <tdeversion.h>
|
|
++
|
|
++int main(int argc, char **argv) {
|
|
++ if (TDE_VERSION_MAJOR == 3 && 2 <= TDE_VERSION_MINOR && TDE_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 ::TDEABC::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 ::TDEABC::Addressee &aAddressee) const
|
|
++{
|
|
++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
++
|
|
++ return aQtName.isNull();
|
|
++// TDE address book currently does not use NULL values.
|
|
++// But it might do it someday
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabConditionNotNull::KabConditionNotNull(const ::rtl::OUString &sColumnName) throw(SQLException)
|
|
++ : KabConditionColumn(sColumnName)
|
|
++{
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++sal_Bool KabConditionNotNull::eval(const ::TDEABC::Addressee &aAddressee) const
|
|
++{
|
|
++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
++
|
|
++ return !aQtName.isNull();
|
|
++// TDE address book currently does not use NULL values.
|
|
++// But it might do it someday
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabConditionCompare::KabConditionCompare(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException)
|
|
++ : KabConditionColumn(sColumnName),
|
|
++ m_sMatchString(sMatchString)
|
|
++{
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabConditionEqual::KabConditionEqual(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException)
|
|
++ : KabConditionCompare(sColumnName, sMatchString)
|
|
++{
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++sal_Bool KabConditionEqual::eval(const ::TDEABC::Addressee &aAddressee) const
|
|
++{
|
|
++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
++// Timestamps should not be compared according to their string value
|
|
++// The syntax for such queries should be like
|
|
++// {ts '2004-03-29 12:55:00.000000'}
|
|
++// They should also support operators like '<' or '>='
|
|
++
|
|
++ if (aQtName.isNull()) return sal_False;
|
|
++
|
|
++ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2());
|
|
++ return sValue == m_sMatchString;
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabConditionDifferent::KabConditionDifferent(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException)
|
|
++ : KabConditionCompare(sColumnName, sMatchString)
|
|
++{
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++sal_Bool KabConditionDifferent::eval(const ::TDEABC::Addressee &aAddressee) const
|
|
++{
|
|
++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
++
|
|
++ if (aQtName.isNull()) return sal_False;
|
|
++
|
|
++ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2());
|
|
++ return sValue != m_sMatchString;
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabConditionSimilar::KabConditionSimilar(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException)
|
|
++ : KabConditionCompare(sColumnName, sMatchString)
|
|
++{
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++sal_Bool KabConditionSimilar::eval(const ::TDEABC::Addressee &aAddressee) const
|
|
++{
|
|
++ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
++
|
|
++ if (aQtName.isNull()) return sal_False;
|
|
++
|
|
++ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2());
|
|
++ return match(m_sMatchString, sValue, '\0');
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabConditionBoolean::KabConditionBoolean(KabCondition *pLeft, KabCondition *pRight)
|
|
++ : KabCondition(),
|
|
++ m_pLeft(pLeft),
|
|
++ m_pRight(pRight)
|
|
++{
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabConditionBoolean::~KabConditionBoolean()
|
|
++{
|
|
++ delete m_pLeft;
|
|
++ delete m_pRight;
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabConditionOr::KabConditionOr(KabCondition *pLeft, KabCondition *pRight)
|
|
++ : KabConditionBoolean(pLeft, pRight)
|
|
++{
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++sal_Bool KabConditionOr::isAlwaysTrue() const
|
|
++{
|
|
++ return m_pLeft->isAlwaysTrue() || m_pRight->isAlwaysTrue();
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++sal_Bool KabConditionOr::isAlwaysFalse() const
|
|
++{
|
|
++ return m_pLeft->isAlwaysFalse() && m_pRight->isAlwaysFalse();
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++sal_Bool KabConditionOr::eval(const ::TDEABC::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 ::TDEABC::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 ::TDEABC::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 ::TDEABC::Addressee &aAddressee) const;
|
|
++};
|
|
++// -----------------------------------------------------------------------------
|
|
++class KabConditionColumn : public KabCondition
|
|
++{
|
|
++ protected:
|
|
++ sal_Int32 m_nFieldNumber;
|
|
++
|
|
++ TQString value(const ::TDEABC::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 ::TDEABC::Addressee &aAddressee) const;
|
|
++};
|
|
++// -----------------------------------------------------------------------------
|
|
++class KabConditionNotNull : public KabConditionColumn
|
|
++{
|
|
++ public:
|
|
++ KabConditionNotNull(
|
|
++ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException);
|
|
++ virtual sal_Bool eval(const ::TDEABC::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 ::TDEABC::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 ::TDEABC::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 ::TDEABC::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 ::TDEABC::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 ::TDEABC::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 = TDEABC::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;
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++::TDEABC::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 TDEABC
|
|
++{
|
|
++ 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
|
|
++
|
|
++ ::TDEABC::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;}
|
|
++ ::TDEABC::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;
|
|
++ TQString aQtName;
|
|
++ ::rtl::OUString sName;
|
|
++
|
|
++ aQtName = ::TDEABC::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);
|
|
++ }
|
|
++
|
|
++ ::TDEABC::Field::List aFields = ::TDEABC::Field::allFields();
|
|
++ ::TDEABC::Field::List::iterator aField;
|
|
++
|
|
++ for ( aField = aFields.begin();
|
|
++ aField != aFields.end();
|
|
++ ++aField, ++nPosition)
|
|
++ {
|
|
++ aQtName = (*aField)->label();
|
|
++ sName = (const sal_Unicode *) aQtName.ucs2();
|
|
++ if (match(columnNamePattern, sName, '\0'))
|
|
++ {
|
|
++ aRow[4] = new ORowSetValueDecorator(sName);
|
|
++ aRow[5] = new ORowSetValueDecorator(DataType::CHAR);
|
|
++ aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("CHAR"));
|
|
++ aRow[7] = new ORowSetValueDecorator((sal_Int32) 256);
|
|
++// Might be VARCHAR and not CHAR[256]...
|
|
++ aRow[17] = new ORowSetValueDecorator(nPosition);
|
|
++ aRows.push_back(aRow);
|
|
++ }
|
|
++ }
|
|
++ }
|
|
++ pResult->setRows(aRows);
|
|
++ return xRef;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTables(
|
|
++ const Any&,
|
|
++ const ::rtl::OUString&,
|
|
++ const ::rtl::OUString&,
|
|
++ const Sequence< ::rtl::OUString >& types) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTables);
|
|
++ Reference< XResultSet > xRef = pResult;
|
|
++
|
|
++ // check whether we have tables in the requested types
|
|
++ // for the moment, we answer only the "TABLE" table type
|
|
++ // when no types are given at all, we return all the tables
|
|
++ static const ::rtl::OUString aTable(::rtl::OUString::createFromAscii("TABLE"));
|
|
++ sal_Bool bTableFound = sal_False;
|
|
++ const ::rtl::OUString* p = types.getConstArray(),
|
|
++ * pEnd = p + types.getLength();
|
|
++
|
|
++ if (p == pEnd)
|
|
++ {
|
|
++ bTableFound = sal_True;
|
|
++ }
|
|
++ else while (p < pEnd)
|
|
++ {
|
|
++ if (match(*p, aTable, '\0'))
|
|
++ {
|
|
++ bTableFound = sal_True;
|
|
++ break;
|
|
++ }
|
|
++ p++;
|
|
++ }
|
|
++ if (!bTableFound)
|
|
++ return xRef;
|
|
++
|
|
++ static ODatabaseMetaDataResultSet::ORows aRows;
|
|
++
|
|
++ if (aRows.empty())
|
|
++ {
|
|
++ ODatabaseMetaDataResultSet::ORow aRow(6);
|
|
++
|
|
++ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
++ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
++ aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
++ aRow[3] = new ORowSetValueDecorator(getAddressBookTableName());
|
|
++ aRow[4] = new ORowSetValueDecorator(aTable);
|
|
++ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
++ aRows.push_back(aRow);
|
|
++ }
|
|
++ pResult->setRows(aRows);
|
|
++ return xRef;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedureColumns(
|
|
++ const Any&, const ::rtl::OUString&,
|
|
++ const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedureColumns );
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedures(
|
|
++ const Any&, const ::rtl::OUString&,
|
|
++ const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedures );
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getVersionColumns(
|
|
++ const Any&, const ::rtl::OUString&, const ::rtl::OUString& table ) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eVersionColumns);
|
|
++
|
|
++ Reference< XResultSet > xRef = pResult;
|
|
++
|
|
++ ODatabaseMetaDataResultSet::ORows aRows;
|
|
++
|
|
++ if (table == getAddressBookTableName())
|
|
++ {
|
|
++ ODatabaseMetaDataResultSet::ORow aRow( 9 );
|
|
++ TQString aQtName = ::TDEABC::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, "initTDEApplication", m_pApplicationInitFunc );
|
|
++ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "shutdownTDEApplication", 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
|
|
++TQString valueOfKabField(const ::TDEABC::Addressee &aAddressee, sal_Int32 nFieldNumber)
|
|
++{
|
|
++ switch (nFieldNumber)
|
|
++ {
|
|
++ case KAB_FIELD_REVISION:
|
|
++ return aAddressee.revision().toString("yyyy-MM-dd hh:mm:ss");
|
|
++ default:
|
|
++ ::TDEABC::Field::List aFields = ::TDEABC::Field::allFields();
|
|
++ return aFields[nFieldNumber - KAB_DATA_FIELDS]->value(aAddressee);
|
|
++ }
|
|
++}
|
|
++// ------------------------------------------------------------------------------
|
|
++// search the TDE address book field number of a given column name
|
|
++sal_uInt32 findKabField(const ::rtl::OUString& columnName) throw(SQLException)
|
|
++{
|
|
++ TQString aQtName;
|
|
++ ::rtl::OUString aName;
|
|
++
|
|
++ aQtName = TDEABC::Addressee::revisionLabel();
|
|
++ aName = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2());
|
|
++ if (columnName == aName)
|
|
++ return KAB_FIELD_REVISION;
|
|
++
|
|
++ ::TDEABC::Field::List aFields = ::TDEABC::Field::allFields();
|
|
++ ::TDEABC::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
|
|
++ {
|
|
++ TQString valueOfKabField(const ::TDEABC::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 ::TDEABC::Addressee &aAddressee1, const ::TDEABC::Addressee &aAddressee2) const
|
|
++{
|
|
++ sal_Int32 result;
|
|
++
|
|
++ result = TQString::compare(
|
|
++ valueOfKabField(aAddressee1, m_nFieldNumber),
|
|
++ valueOfKabField(aAddressee2, m_nFieldNumber));
|
|
++// Timestamps should be compared differently than with their string value
|
|
++
|
|
++ if (!m_bAscending) result = -result;
|
|
++
|
|
++ return result;
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabComplexOrder::KabComplexOrder()
|
|
++ : KabOrder(),
|
|
++ m_aOrders()
|
|
++{
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++KabComplexOrder::~KabComplexOrder()
|
|
++{
|
|
++ for (sal_uInt32 i = 0; i < m_aOrders.size(); i++)
|
|
++ delete m_aOrders[i];
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++void KabComplexOrder::addOrder(KabOrder *pOrder)
|
|
++{
|
|
++ m_aOrders.push_back(pOrder);
|
|
++}
|
|
++// -----------------------------------------------------------------------------
|
|
++sal_Int32 KabComplexOrder::compare(const ::TDEABC::Addressee &aAddressee1, const ::TDEABC::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 ::TDEABC::Addressee &aAddressee1, const ::TDEABC::Addressee &aAddressee2) const = 0;
|
|
++ };
|
|
++
|
|
++ class KabSimpleOrder : public KabOrder
|
|
++ {
|
|
++ sal_Int32 m_nFieldNumber;
|
|
++ sal_Bool m_bAscending;
|
|
++
|
|
++ TQString value(const ::TDEABC::Addressee &aAddressee) const;
|
|
++ public:
|
|
++ KabSimpleOrder(::rtl::OUString &sColumnName, sal_Bool bAscending);
|
|
++
|
|
++ virtual sal_Int32 compare(const ::TDEABC::Addressee &aAddressee1, const ::TDEABC::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 ::TDEABC::Addressee &aAddressee1, const ::TDEABC::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());
|
|
++ TDEABC::AddressBook* pAddressBook = pConnection->getAddressBook();
|
|
++
|
|
++ m_aKabAddressees = pAddressBook->allAddressees();
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void KabResultSet::someKabAddressees(const KabCondition *pCondition)
|
|
++{
|
|
++ KabConnection* pConnection = static_cast< KabConnection *>(m_xStatement->getConnection().get());
|
|
++ TDEABC::AddressBook* pAddressBook = pConnection->getAddressBook();
|
|
++
|
|
++ TDEABC::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.
|
|
++
|
|
++ TDEABC::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();
|
|
++ ::TDEABC::Field::List aFields = ::TDEABC::Field::allFields();
|
|
++
|
|
++ if (m_nRowPos != -1 && m_nRowPos != nAddressees && m_xMetaData.is())
|
|
++ {
|
|
++ sal_Int32 nFieldNumber = m_xMetaData->fieldAtColumn(columnIndex);
|
|
++ TQString aQtName;
|
|
++
|
|
++ switch (nFieldNumber)
|
|
++ {
|
|
++ case KAB_FIELD_REVISION:
|
|
++// trigger an exception here
|
|
++m_bWasNull = true;
|
|
++return aRet;
|
|
++ default:
|
|
++ aQtName = aFields[nFieldNumber - KAB_DATA_FIELDS]->value(m_aKabAddressees[m_nRowPos]);
|
|
++ }
|
|
++// TDE address book currently does not use NULL values.
|
|
++// But it might do it someday
|
|
++ if (!aQtName.isNull())
|
|
++ {
|
|
++ m_bWasNull = false;
|
|
++ aRet = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2());
|
|
++ return aRet;
|
|
++ }
|
|
++ }
|
|
++// Trigger an exception ?
|
|
++ m_bWasNull = true;
|
|
++ return aRet;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::getBoolean(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getBoolean", NULL);
|
|
++
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Int8 SAL_CALL KabResultSet::getByte(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getByte", NULL);
|
|
++
|
|
++ sal_Int8 nRet = 0;
|
|
++ return nRet;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Int16 SAL_CALL KabResultSet::getShort(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getShort", NULL);
|
|
++
|
|
++ sal_Int16 nRet = 0;
|
|
++ return nRet;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Int32 SAL_CALL KabResultSet::getInt(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getInt", NULL);
|
|
++
|
|
++ sal_Int32 nRet = 0;
|
|
++ return nRet;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Int64 SAL_CALL KabResultSet::getLong(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getLong", NULL);
|
|
++
|
|
++ return sal_Int64();
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++float SAL_CALL KabResultSet::getFloat(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getFloat", NULL);
|
|
++
|
|
++ float nVal(0);
|
|
++ return nVal;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++double SAL_CALL KabResultSet::getDouble(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getDouble", NULL);
|
|
++
|
|
++ double nRet = 0;
|
|
++ return nRet;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Sequence< sal_Int8 > SAL_CALL KabResultSet::getBytes(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("", NULL);
|
|
++
|
|
++ return Sequence< sal_Int8 >();
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Date SAL_CALL KabResultSet::getDate(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getDate", NULL);
|
|
++
|
|
++ Date aRet;
|
|
++ return aRet;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Time SAL_CALL KabResultSet::getTime(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getTime", NULL);
|
|
++
|
|
++ Time nRet;
|
|
++ return nRet;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++DateTime SAL_CALL KabResultSet::getTimestamp(sal_Int32 columnIndex) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ DateTime nRet;
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++
|
|
++ if (m_nRowPos != -1 && m_nRowPos != nAddressees && m_xMetaData.is())
|
|
++ {
|
|
++ KabResultSetMetaData *pMeta = static_cast<KabResultSetMetaData *>(m_xMetaData.get());
|
|
++ sal_Int32 nFieldNumber = pMeta->fieldAtColumn(columnIndex);
|
|
++
|
|
++ if (nFieldNumber == KAB_FIELD_REVISION)
|
|
++ {
|
|
++ TQDateTime nRevision(m_aKabAddressees[m_nRowPos].revision());
|
|
++
|
|
++ if (!nRevision.isNull())
|
|
++ {
|
|
++ m_bWasNull = false;
|
|
++ nRet.Year = nRevision.date().year();
|
|
++ nRet.Month = nRevision.date().month();
|
|
++ nRet.Day = nRevision.date().day();
|
|
++ nRet.Hours = nRevision.time().hour();
|
|
++ nRet.Minutes = nRevision.time().minute();
|
|
++ nRet.Seconds = nRevision.time().second();
|
|
++ nRet.HundredthSeconds = nRevision.time().msec() / 10;
|
|
++ return nRet;
|
|
++ }
|
|
++ }
|
|
++ else {
|
|
++ ;
|
|
++ }
|
|
++// trigger an exception here
|
|
++ }
|
|
++// Trigger an exception ?
|
|
++ m_bWasNull = true;
|
|
++ return nRet;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XInputStream > SAL_CALL KabResultSet::getBinaryStream(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getBinaryStream", NULL);
|
|
++
|
|
++ return NULL;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XInputStream > SAL_CALL KabResultSet::getCharacterStream(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getCharacterStream", NULL);
|
|
++
|
|
++ return NULL;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Any SAL_CALL KabResultSet::getObject(sal_Int32, const Reference< ::com::sun::star::container::XNameAccess >&) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getObject", NULL);
|
|
++
|
|
++ return Any();
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XRef > SAL_CALL KabResultSet::getRef(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getRef", NULL);
|
|
++
|
|
++ return NULL;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XBlob > SAL_CALL KabResultSet::getBlob(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getBlob", NULL);
|
|
++
|
|
++ return NULL;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XClob > SAL_CALL KabResultSet::getClob(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getClob", NULL);
|
|
++
|
|
++ return NULL;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XArray > SAL_CALL KabResultSet::getArray(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++::dbtools::throwFunctionNotSupportedException("getArray", NULL);
|
|
++
|
|
++ return NULL;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XResultSetMetaData > SAL_CALL KabResultSet::getMetaData() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ if (!m_xMetaData.is())
|
|
++ m_xMetaData = new KabResultSetMetaData(m_xStatement->getOwnConnection());
|
|
++
|
|
++ Reference< XResultSetMetaData > xMetaData = m_xMetaData.get();
|
|
++ return xMetaData;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::isBeforeFirst() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ if (m_nRowPos == -1)
|
|
++ return sal_True;
|
|
++
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::isAfterLast() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++ if (m_nRowPos == nAddressees)
|
|
++ return sal_True;
|
|
++
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::isFirst() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ if (m_nRowPos == 0)
|
|
++ return sal_True;
|
|
++
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::isLast() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++ if (m_nRowPos == nAddressees - 1)
|
|
++ return sal_True;
|
|
++
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::beforeFirst() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ // move before the first row
|
|
++ m_nRowPos = -1;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::afterLast() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ // move after the last row
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++ m_nRowPos = nAddressees;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::close() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ {
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++ }
|
|
++ dispose();
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::first() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++ if (nAddressees == 0)
|
|
++ return sal_False;
|
|
++
|
|
++ m_nRowPos = 0;
|
|
++ return sal_True;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::last() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++ if (nAddressees == 0)
|
|
++ return sal_False;
|
|
++
|
|
++ m_nRowPos = nAddressees - 1;
|
|
++ return sal_True;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Int32 SAL_CALL KabResultSet::getRow() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ return m_nRowPos;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::absolute(sal_Int32 row) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++ if (row <= -1 ||
|
|
++ row >= nAddressees)
|
|
++ return sal_False;
|
|
++
|
|
++ m_nRowPos = row;
|
|
++ return sal_True;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::relative(sal_Int32 row) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ return absolute(m_nRowPos + row);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::next() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ return absolute(m_nRowPos + 1);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::previous() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ return absolute(m_nRowPos - 1);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Reference< XInterface > SAL_CALL KabResultSet::getStatement() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ Reference< XStatement > xStatement = m_xStatement.get();
|
|
++ return xStatement;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::rowDeleted() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::rowInserted() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::rowUpdated() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::wasNull() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ return m_bWasNull;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::cancel() throw(RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::clearWarnings() throw(SQLException, RuntimeException)
|
|
++{
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++Any SAL_CALL KabResultSet::getWarnings() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ return Any();
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::insertRow() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ // you only have to implement this if you want to insert new rows
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateRow() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ // only when you allow updates
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::deleteRow() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::cancelRowUpdates() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::moveToInsertRow() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ // only when you allow inserts
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::moveToCurrentRow() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateNull(sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateBoolean(sal_Int32, sal_Bool) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateByte(sal_Int32, sal_Int8) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateShort(sal_Int32, sal_Int16) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateInt(sal_Int32, sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateLong(sal_Int32, sal_Int64) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -----------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateFloat(sal_Int32, float) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateDouble(sal_Int32, double) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateString(sal_Int32, const ::rtl::OUString&) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateBytes(sal_Int32, const Sequence< sal_Int8 >&) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateDate(sal_Int32, const Date&) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateTime(sal_Int32, const Time&) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateTimestamp(sal_Int32, const DateTime&) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateBinaryStream(sal_Int32, const Reference< XInputStream >&, sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateCharacterStream(sal_Int32, const Reference< XInputStream >&, sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::refreshRow() throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateObject(sal_Int32, const Any&) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++void SAL_CALL KabResultSet::updateNumericObject(sal_Int32, const Any&, sal_Int32) throw(SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++// XRowLocate
|
|
++Any SAL_CALL KabResultSet::getBookmark() throw( SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++
|
|
++ if (m_nRowPos != -1 && m_nRowPos != nAddressees)
|
|
++ {
|
|
++ TQString aQtName = m_aKabAddressees[m_nRowPos].uid();
|
|
++ ::rtl::OUString sUniqueIdentifier = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2());
|
|
++ return makeAny(sUniqueIdentifier);
|
|
++ }
|
|
++ return Any();
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::moveToBookmark(const Any& bookmark) throw( SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ ::rtl::OUString sBookmark = comphelper::getString(bookmark);
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++
|
|
++ for (sal_Int32 nRow = 0; nRow < nAddressees; nRow++)
|
|
++ {
|
|
++ TQString aQtName = m_aKabAddressees[nRow].uid();
|
|
++ ::rtl::OUString sUniqueIdentifier = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2());
|
|
++
|
|
++ if (sUniqueIdentifier == sBookmark)
|
|
++ {
|
|
++ m_nRowPos = nRow;
|
|
++ return sal_True;
|
|
++ }
|
|
++ }
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::moveRelativeToBookmark(const Any& bookmark, sal_Int32 rows) throw( SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ sal_Int32 nRowSave = m_nRowPos;
|
|
++
|
|
++ if (moveToBookmark(bookmark))
|
|
++ {
|
|
++ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
++
|
|
++ m_nRowPos += rows;
|
|
++
|
|
++ if (-1 < m_nRowPos && m_nRowPos < nAddressees)
|
|
++ return sal_True;
|
|
++ }
|
|
++
|
|
++ m_nRowPos = nRowSave;
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Int32 SAL_CALL KabResultSet::compareBookmarks(const Any& firstItem, const Any& secondItem) throw( SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ ::rtl::OUString sFirst = comphelper::getString(firstItem);
|
|
++ ::rtl::OUString sSecond = comphelper::getString(secondItem);
|
|
++
|
|
++ if (sFirst < sSecond)
|
|
++ return CompareBookmark::LESS;
|
|
++ if (sFirst > sSecond)
|
|
++ return CompareBookmark::GREATER;
|
|
++ return CompareBookmark::EQUAL;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Bool SAL_CALL KabResultSet::hasOrderedBookmarks() throw( SQLException, RuntimeException)
|
|
++{
|
|
++ return sal_False;
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++sal_Int32 SAL_CALL KabResultSet::hashBookmark(const Any& bookmark) throw( SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ ::rtl::OUString sBookmark = comphelper::getString(bookmark);
|
|
++
|
|
++ return sBookmark.hashCode();
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++// XDeleteRows
|
|
++Sequence< sal_Int32 > SAL_CALL KabResultSet::deleteRows(const Sequence< Any >&) throw( SQLException, RuntimeException)
|
|
++{
|
|
++ ::osl::MutexGuard aGuard( m_aMutex );
|
|
++ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
++
|
|
++ return Sequence< sal_Int32 >();
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++IPropertyArrayHelper* KabResultSet::createArrayHelper() const
|
|
++{
|
|
++ Sequence< Property > aProps(6);
|
|
++ Property* pProperties = aProps.getArray();
|
|
++ sal_Int32 nPos = 0;
|
|
++ DECL_PROP1IMPL(CURSORNAME, ::rtl::OUString) PropertyAttribute::READONLY);
|
|
++ DECL_PROP0(FETCHDIRECTION, sal_Int32);
|
|
++ DECL_PROP0(FETCHSIZE, sal_Int32);
|
|
++ DECL_BOOL_PROP1IMPL(ISBOOKMARKABLE) PropertyAttribute::READONLY);
|
|
++ DECL_PROP1IMPL(RESULTSETCONCURRENCY,sal_Int32) PropertyAttribute::READONLY);
|
|
++ DECL_PROP1IMPL(RESULTSETTYPE, sal_Int32) PropertyAttribute::READONLY);
|
|
++
|
|
++ return new OPropertyArrayHelper(aProps);
|
|
++}
|
|
++// -------------------------------------------------------------------------
|
|
++IPropertyArrayHelper & KabResultSet::getInfoHelper()
|
|
++{
|
|
++ return *static_cast<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
|
|
++ ::TDEABC::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];
|
|
++ ::TDEABC::Field::List aFields = ::TDEABC::Field::allFields();
|
|
++ TQString aQtName;
|
|
++
|
|
++ switch (nFieldNumber)
|
|
++ {
|
|
++ case KAB_FIELD_REVISION:
|
|
++ aQtName = TDEABC::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) -ltdeabc
|
|
++
|
|
++# --- 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;
|
|
++ initTDEApplication;
|
|
++ shutdownTDEApplication;
|
|
++ 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 TDEApplication* s_pTDEApplication;
|
|
++ static bool s_bDidInsertCatalogue;
|
|
++
|
|
++ public:
|
|
++ static void Init();
|
|
++ static void Shutdown();
|
|
++ };
|
|
++
|
|
++ // ---------------------------------------------------------------
|
|
++ TDEApplication* TDEInit::s_pTDEApplication = 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 (TDEApplication::kApplication() == NULL)
|
|
++ {
|
|
++ OSL_ENSURE(s_pTDEApplication == NULL, "TDEInit::Init: inconsistency in the application pointers!");
|
|
++
|
|
++ char *kabargs[1] = {(char*)"libkab1"};
|
|
++ TDECmdLineArgs::init(1, kabargs, "KAddressBook", *kabargs, "Address Book driver", KAB_DRIVER_VERSION);
|
|
++
|
|
++ s_pTDEApplication = new TDEApplication(false, false);
|
|
++ }
|
|
++
|
|
++ // set language
|
|
++ rtl_Locale *pProcessLocale;
|
|
++ osl_getProcessLocale(&pProcessLocale);
|
|
++ // sal_Unicode and TQChar are (currently) both 16 bits characters
|
|
++ TQString aLanguage(
|
|
++ (const TQChar *) pProcessLocale->Language->buffer,
|
|
++ (int) pProcessLocale->Language->length);
|
|
++ TDEGlobal::locale()->setLanguage(aLanguage);
|
|
++
|
|
++ // load TDE address book's localized messages
|
|
++ TDEGlobal::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
|
|
++ TDEGlobal::locale()->removeCatalogue("kaddressbook");
|
|
++
|
|
++ if ( s_pTDEApplication != NULL )
|
|
++ {
|
|
++ delete s_pTDEApplication;
|
|
++ s_pTDEApplication = NULL;
|
|
++ }
|
|
++ }
|
|
++ }
|
|
++}
|
|
++
|
|
++// =======================================================================
|
|
++namespace
|
|
++{
|
|
++ double normalizeVersion( unsigned int major, unsigned int minor )
|
|
++ {
|
|
++ return major + 1.0 * minor / 1000;
|
|
++ }
|
|
++}
|
|
++
|
|
++// -----------------------------------------------------------------------
|
|
++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL initTDEApplication()
|
|
++{
|
|
++ ::connectivity::kab::TDEInit::Init();
|
|
++}
|
|
++
|
|
++// -----------------------------------------------------------------------
|
|
++extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL shutdownTDEApplication()
|
|
++{
|
|
++ ::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 initTDEApplication()
|
|
++
|
|
++ 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) -ltdeio -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 <tdeapplication.h>
|
|
++
|
|
++#include <iostream>
|
|
++
|
|
++//////////////////////////////////////////////////////////////////////////
|
|
++// CommandEvent
|
|
++//////////////////////////////////////////////////////////////////////////
|
|
++
|
|
++TDECommandEvent::TDECommandEvent( const TQString &qCommand, TQStringList *pStringList )
|
|
++ : TQCustomEvent( TypeId, pStringList ),
|
|
++ m_eCommand( Unknown )
|
|
++{
|
|
++ struct {
|
|
++ const char *pName;
|
|
++ CommandEventType eType;
|
|
++ } *pIdx, pMapping[] =
|
|
++ {
|
|
++ { "appendControl", AppendControl },
|
|
++ { "enableControl", EnableControl },
|
|
++ { "getValue", GetValue },
|
|
++ { "setValue", SetValue },
|
|
++ { "appendFilter", AppendFilter },
|
|
++ { "appendFilterGroup", AppendFilterGroup },
|
|
++ { "getCurrentFilter", GetCurrentFilter },
|
|
++ { "setCurrentFilter", SetCurrentFilter },
|
|
++ { "getDirectory", GetDirectory },
|
|
++ { "setDirectory", SetDirectory },
|
|
++ { "getFiles", GetFiles },
|
|
++ { "setTitle", SetTitle },
|
|
++ { "setType", SetType },
|
|
++ { "setDefaultName", SetDefaultName },
|
|
++ { "setMultiSelection", SetMultiSelection },
|
|
++ { "exec", Exec },
|
|
++ { 0, Unknown }
|
|
++ };
|
|
++
|
|
++ for ( pIdx = pMapping; pIdx->pName && qCommand != pIdx->pName; ++pIdx )
|
|
++ ;
|
|
++
|
|
++ m_eCommand = pIdx->eType;
|
|
++}
|
|
++
|
|
++//////////////////////////////////////////////////////////////////////////
|
|
++// CommandThread
|
|
++//////////////////////////////////////////////////////////////////////////
|
|
++
|
|
++TDECommandThread::TDECommandThread( TQWidget *pObject )
|
|
++ : m_pObject( pObject )
|
|
++{
|
|
++}
|
|
++
|
|
++TDECommandThread::~TDECommandThread()
|
|
++{
|
|
++}
|
|
++
|
|
++void TDECommandThread::run()
|
|
++{
|
|
++ TQTextIStream qStream( stdin );
|
|
++ qStream.setEncoding( TQTextStream::UnicodeUTF8 );
|
|
++
|
|
++ TQString qLine;
|
|
++ bool bQuit = false;
|
|
++ while ( !bQuit && !qStream.atEnd() )
|
|
++ {
|
|
++ qLine = qStream.readLine();
|
|
++ handleCommand( qLine, bQuit );
|
|
++ }
|
|
++}
|
|
++
|
|
++void TDECommandThread::handleCommand( const TQString &rString, bool &bQuit )
|
|
++{
|
|
++ TQMutexLocker qMutexLocker( &m_aMutex );
|
|
++
|
|
++#if OSL_DEBUG_LEVEL > 0
|
|
++ ::std::cerr << "tdefilepicker received: " << rString.latin1() << ::std::endl;
|
|
++#endif
|
|
++
|
|
++ bQuit = false;
|
|
++ TQStringList *pTokens = tokenize( rString );
|
|
++
|
|
++ if ( !pTokens )
|
|
++ return;
|
|
++ if ( pTokens->empty() )
|
|
++ {
|
|
++ delete pTokens, pTokens = NULL;
|
|
++ return;
|
|
++ }
|
|
++
|
|
++ TQString qCommand = pTokens->front();
|
|
++ pTokens->pop_front();
|
|
++
|
|
++ if ( qCommand == "exit" )
|
|
++ {
|
|
++ bQuit = true;
|
|
++ kapp->exit();
|
|
++ kapp->wakeUpGuiThread();
|
|
++ }
|
|
++ else
|
|
++ kapp->postEvent( m_pObject, new TDECommandEvent( qCommand, pTokens ) );
|
|
++}
|
|
++
|
|
++TQStringList* TDECommandThread::tokenize( const TQString &rString )
|
|
++{
|
|
++ // Commands look like:
|
|
++ // command arg1 arg2 arg3 ...
|
|
++ // Args may be enclosed in '"', if they contain spaces.
|
|
++
|
|
++ TQStringList *pList = new TQStringList();
|
|
++
|
|
++ TQString qBuffer;
|
|
++ qBuffer.reserve( 1024 );
|
|
++
|
|
++ const TQChar *pUnicode = rString.unicode();
|
|
++ const TQChar *pEnd = pUnicode + rString.length();
|
|
++ bool bQuoted = false;
|
|
++
|
|
++ for ( ; pUnicode != pEnd; ++pUnicode )
|
|
++ {
|
|
++ if ( *pUnicode == '\\' )
|
|
++ {
|
|
++ ++pUnicode;
|
|
++ if ( pUnicode != pEnd )
|
|
++ {
|
|
++ if ( *pUnicode == 'n' )
|
|
++ qBuffer.append( '\n' );
|
|
++ else
|
|
++ qBuffer.append( *pUnicode );
|
|
++ }
|
|
++ }
|
|
++ else if ( *pUnicode == '"' )
|
|
++ bQuoted = !bQuoted;
|
|
++ else if ( *pUnicode == ' ' && !bQuoted )
|
|
++ {
|
|
++ pList->push_back( qBuffer );
|
|
++ qBuffer.setLength( 0 );
|
|
++ }
|
|
++ else
|
|
++ qBuffer.append( *pUnicode );
|
|
++ }
|
|
++ pList->push_back( qBuffer );
|
|
++
|
|
++ return pList;
|
|
++}
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN fpicker/source/unx/tde/tdecommandthread.hxx fpicker/source/unx/tde/tdecommandthread.hxx
|
|
+--- fpicker/source/unx/tde/tdecommandthread.hxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ fpicker/source/unx/tde/tdecommandthread.hxx 2011-08-17 14:04:34.560780976 -0500
|
|
+@@ -0,0 +1,98 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++ *
|
|
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++ *
|
|
++ * Copyright 2010 Novell, Inc.
|
|
++ * Copyright 2011 Timothy Pearson
|
|
++ *
|
|
++ * OpenOffice.org - a multi-platform office productivity suite
|
|
++ *
|
|
++ * This file is part of OpenOffice.org.
|
|
++ *
|
|
++ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++ * it under the terms of the GNU Lesser General Public License version 3
|
|
++ * only, as published by the Free Software Foundation.
|
|
++ *
|
|
++ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++ * GNU Lesser General Public License version 3 for more details
|
|
++ * (a copy is included in the LICENSE file that accompanied this code).
|
|
++ *
|
|
++ * You should have received a copy of the GNU Lesser General Public License
|
|
++ * version 3 along with OpenOffice.org. If not, see
|
|
++ * <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 TQCustomEvent
|
|
++{
|
|
++public:
|
|
++ enum CommandEventType {
|
|
++ Unknown = 0,
|
|
++
|
|
++ AppendControl,
|
|
++ EnableControl,
|
|
++ GetValue,
|
|
++ SetValue,
|
|
++
|
|
++ AppendFilter,
|
|
++ AppendFilterGroup,
|
|
++ UpdateFilters,
|
|
++ GetCurrentFilter,
|
|
++ SetCurrentFilter,
|
|
++
|
|
++ GetDirectory,
|
|
++ SetDirectory,
|
|
++
|
|
++ GetFiles,
|
|
++
|
|
++ SetTitle,
|
|
++ SetType,
|
|
++ SetDefaultName,
|
|
++ SetMultiSelection,
|
|
++
|
|
++ Exec
|
|
++ };
|
|
++ static const TQEvent::Type TypeId = (TQEvent::Type) ( (int) TQEvent::User + 42 /*random magic value*/ );
|
|
++
|
|
++protected:
|
|
++ CommandEventType m_eCommand;
|
|
++
|
|
++public:
|
|
++ TDECommandEvent( const TQString &qCommand, TQStringList *pStringList );
|
|
++
|
|
++ CommandEventType command() const { return m_eCommand; }
|
|
++ TQStringList* stringList() { return static_cast< TQStringList* >( data() ); }
|
|
++};
|
|
++
|
|
++class TDECommandThread : public TQThread
|
|
++{
|
|
++protected:
|
|
++ TQObject *m_pObject;
|
|
++
|
|
++ TQMutex m_aMutex;
|
|
++
|
|
++public:
|
|
++ TDECommandThread( TQWidget *pObject );
|
|
++ virtual ~TDECommandThread();
|
|
++
|
|
++ virtual void run();
|
|
++
|
|
++protected:
|
|
++ void handleCommand( const TQString &rString, bool &bQuit );
|
|
++ TQStringList* tokenize( const TQString &rString );
|
|
++};
|
|
++
|
|
++#endif // _TDECOMMANDTHREAD_HXX_
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN fpicker/source/unx/tde/tdefilepicker.cxx fpicker/source/unx/tde/tdefilepicker.cxx
|
|
+--- fpicker/source/unx/tde/tdefilepicker.cxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ fpicker/source/unx/tde/tdefilepicker.cxx 2011-08-17 14:05:04.073041030 -0500
|
|
+@@ -0,0 +1,733 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++ *
|
|
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++ *
|
|
++ * Copyright 2010 Novell, Inc.
|
|
++ * Copyright 2011 Timothy Pearson
|
|
++ *
|
|
++ * OpenOffice.org - a multi-platform office productivity suite
|
|
++ *
|
|
++ * This file is part of OpenOffice.org.
|
|
++ *
|
|
++ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++ * it under the terms of the GNU Lesser General Public License version 3
|
|
++ * only, as published by the Free Software Foundation.
|
|
++ *
|
|
++ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++ * GNU Lesser General Public License version 3 for more details
|
|
++ * (a copy is included in the LICENSE file that accompanied this code).
|
|
++ *
|
|
++ * You should have received a copy of the GNU Lesser General Public License
|
|
++ * version 3 along with OpenOffice.org. If not, see
|
|
++ * <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 <layout.h>
|
|
++#include <tqobjectlist.h>
|
|
++#include <tqpushbutton.h>
|
|
++#include <tqregexp.h>
|
|
++#include <tqvbox.h>
|
|
++
|
|
++#ifdef TQT_NO_EMIT
|
|
++#define emit
|
|
++#endif
|
|
++
|
|
++#include <tdeversion.h>
|
|
++#include <tdediroperator.h>
|
|
++#include <tdefiledialog.h>
|
|
++#include <tdefilefiltercombo.h>
|
|
++#include <tdeio/netaccess.h>
|
|
++#include <tdelocale.h>
|
|
++#include <tdemessagebox.h>
|
|
++#include <tdetempfile.h>
|
|
++
|
|
++#include <algorithm>
|
|
++#include <iostream>
|
|
++
|
|
++//////////////////////////////////////////////////////////////////////////
|
|
++// TDEFileDialog
|
|
++//////////////////////////////////////////////////////////////////////////
|
|
++
|
|
++TDEFileDialog::TDEFileDialog( const TQString &startDir, const TQString &filter,
|
|
++ TQWidget *parent, const char *name )
|
|
++ : KFileDialog( startDir, filter, parent, name, true, m_pCustomWidget = new TQVBox() ),
|
|
++ m_pCombosAndButtons( new TQHBox( m_pCustomWidget ) ),
|
|
++ m_pLabels( new TQVBox( m_pCombosAndButtons ) ),
|
|
++ m_pComboBoxes( new TQVBox( m_pCombosAndButtons ) ),
|
|
++ m_pPushButtons( new TQVBox( m_pCombosAndButtons ) ),
|
|
++ m_pCheckBoxes( new TQGrid( 2, m_pCustomWidget ) ),
|
|
++ m_bIsSave( false ),
|
|
++ m_bIsExecuting( false ),
|
|
++ m_bCanNotifySelection( true )
|
|
++{
|
|
++ connect( this, SIGNAL( fileHighlighted( const TQString & ) ),
|
|
++ this, SLOT( fileHighlightedCommand( const TQString & ) ) );
|
|
++
|
|
++ connect( this, SIGNAL( selectionChanged() ),
|
|
++ this, SLOT( selectionChangedCommand() ) );
|
|
++
|
|
++ m_pCustomWidget->setSpacing( KDialog::spacingHint() );
|
|
++ m_pCombosAndButtons->setSpacing( KDialog::spacingHint() );
|
|
++
|
|
++ updateCustomWidgetLayout();
|
|
++}
|
|
++
|
|
++TDEFileDialog::~TDEFileDialog()
|
|
++{
|
|
++}
|
|
++
|
|
++void TDEFileDialog::resizeEvent( TQResizeEvent *pEvent )
|
|
++{
|
|
++ KFileDialog::resizeEvent( pEvent );
|
|
++
|
|
++ updateCustomWidgetLayout();
|
|
++}
|
|
++
|
|
++void TDEFileDialog::showEvent( TQShowEvent *pEvent )
|
|
++{
|
|
++ KFileDialog::showEvent( pEvent );
|
|
++
|
|
++ updateCustomWidgetLayout();
|
|
++}
|
|
++
|
|
++void TDEFileDialog::updateCustomWidgetLayout()
|
|
++{
|
|
++ TQPoint qReferencePoint = filterWidget->mapTo( this, TQPoint( 0, 0 ) );
|
|
++ TQPoint qCustomPoint = m_pCustomWidget->mapTo( this, TQPoint( 0, 0 ) );
|
|
++
|
|
++ int nLeft = qReferencePoint.x() - qCustomPoint.x();
|
|
++ int nRight = m_pCustomWidget->width() - filterWidget->width() - nLeft;
|
|
++
|
|
++ nLeft -= KDialog::spacingHint();
|
|
++ nRight -= KDialog::spacingHint();
|
|
++ m_pLabels->setFixedWidth( ( nLeft > 0 )? nLeft: 80 );
|
|
++ // FIXME The following call sets the width of m_pPushButtons all right,
|
|
++ // but it also increases the width of m_pComboBoxes rapidly. Can we do
|
|
++ // anything about it?
|
|
++ m_pPushButtons->setFixedWidth( ( nRight > 0 )? nRight: 100 );
|
|
++}
|
|
++
|
|
++void TDEFileDialog::customEvent( TQCustomEvent *pEvent )
|
|
++{
|
|
++ if ( pEvent && pEvent->type() == TDECommandEvent::TypeId )
|
|
++ {
|
|
++ TDECommandEvent *pCommandEvent = static_cast< TDECommandEvent* >( pEvent );
|
|
++ TQStringList *pStringList = pCommandEvent->stringList();
|
|
++
|
|
++ int nListSize = -1;
|
|
++ if ( pStringList )
|
|
++ nListSize = pStringList->size();
|
|
++
|
|
++ switch ( pCommandEvent->command() )
|
|
++ {
|
|
++ case TDECommandEvent::AppendControl:
|
|
++ if ( nListSize >= 3 )
|
|
++ {
|
|
++ appendControl( (*pStringList)[0], (*pStringList)[1], (*pStringList)[2] );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::EnableControl:
|
|
++ if ( nListSize >= 2 )
|
|
++ {
|
|
++ enableControl( (*pStringList)[0], (*pStringList)[1] );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::GetValue:
|
|
++ if ( nListSize >= 2 )
|
|
++ {
|
|
++ getValue( (*pStringList)[0], (*pStringList)[1] );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::SetValue:
|
|
++ if ( nListSize >= 2 )
|
|
++ {
|
|
++ TQStringList qStringList = (*pStringList);
|
|
++ qStringList.pop_front();
|
|
++ qStringList.pop_front();
|
|
++
|
|
++ setValue( (*pStringList)[0], (*pStringList)[1], qStringList );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::AppendFilter:
|
|
++ if ( nListSize >= 2 )
|
|
++ {
|
|
++ appendFilter( (*pStringList)[0], (*pStringList)[1] );
|
|
++
|
|
++ // update the filters widget
|
|
++ setFilter( filters() );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::AppendFilterGroup:
|
|
++ if ( nListSize >= 1 )
|
|
++ {
|
|
++ TQStringList::const_iterator it = pStringList->begin();
|
|
++ ++it; // We ignore the filter group name
|
|
++
|
|
++ while ( it != pStringList->end() )
|
|
++ {
|
|
++ TQString qTitle = *it;
|
|
++ ++it;
|
|
++ if ( it != pStringList->end() )
|
|
++ {
|
|
++ appendFilter( qTitle, (*it) );
|
|
++ ++it;
|
|
++ }
|
|
++ }
|
|
++
|
|
++ // update the filters widget
|
|
++ setFilter( filters() );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::GetCurrentFilter:
|
|
++ {
|
|
++ TQString qCurrentFilter = filterWidget->currentText();
|
|
++ sendCommand( "currentFilter " + escapeString( qCurrentFilter ) );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::SetCurrentFilter:
|
|
++ if ( nListSize >= 1 )
|
|
++ {
|
|
++ static_cast< TDEFileFilterComboHack* >( filterWidget )->setCurrentFilter( pStringList->front() );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::GetDirectory:
|
|
++ {
|
|
++ TQString qDirectory = baseURL().url();
|
|
++ if ( qDirectory.startsWith( "file:/" ) && qDirectory.mid( 6, 1 ) != "/" )
|
|
++ qDirectory.replace( "file:/", "file:///" );
|
|
++ sendCommand( "currentDirectory " + escapeString( qDirectory ) );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::SetDirectory:
|
|
++ if ( nListSize >= 1 )
|
|
++ {
|
|
++ setURL( pStringList->front() );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::GetFiles:
|
|
++ {
|
|
++ TQString qString;
|
|
++ qString.reserve( 1024 );
|
|
++
|
|
++ qString.append( "files" );
|
|
++
|
|
++ if ( result() == TQDialog::Accepted )
|
|
++ {
|
|
++ KURL::List qList( selectedURLs() );
|
|
++ for ( KURL::List::const_iterator it = qList.begin(); it != qList.end(); ++it )
|
|
++ appendURL( qString, (*it) );
|
|
++ }
|
|
++ else
|
|
++ {
|
|
++ // we have to return the selected files anyway
|
|
++ const KFileItemList *pItems = ops->selectedItems();
|
|
++ for ( KFileItemListIterator it( *pItems ); it.current(); ++it )
|
|
++ appendURL( qString, (*it)->url() );
|
|
++ }
|
|
++
|
|
++ sendCommand( qString );
|
|
++ setCanNotifySelection( true );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::SetTitle:
|
|
++ if ( nListSize >= 1 )
|
|
++ {
|
|
++ setCaption( pStringList->front() );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::SetType:
|
|
++ if ( nListSize >= 1 )
|
|
++ {
|
|
++ TQString qType( pStringList->front() );
|
|
++ if ( qType == "open" )
|
|
++ {
|
|
++ setIsSave( false );
|
|
++ setCaption( i18n( "Open" ) );
|
|
++ }
|
|
++ else if ( qType == "save" )
|
|
++ {
|
|
++ setIsSave( true );
|
|
++ setCaption( i18n( "Save As" ) );
|
|
++ }
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::SetDefaultName:
|
|
++ if ( nListSize >= 1 )
|
|
++ {
|
|
++ setKeepLocation( true );
|
|
++ setSelection( pStringList->front() );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::SetMultiSelection:
|
|
++ if ( nListSize >= 1 )
|
|
++ {
|
|
++ if ( pStringList->front() == "true" )
|
|
++ setMode( KFile::Files );
|
|
++ else
|
|
++ setMode( KFile::File );
|
|
++ }
|
|
++ break;
|
|
++ case TDECommandEvent::Exec:
|
|
++ {
|
|
++ filterWidget->setEditable( false );
|
|
++ setIsExecuting( true );
|
|
++ bool bCanExit = false;
|
|
++ do {
|
|
++ setCanNotifySelection( true );
|
|
++ exec();
|
|
++
|
|
++ KURL qLocalSelectedURL = mostLocalURL( selectedURL() );
|
|
++ TQString qProtocol( qLocalSelectedURL.protocol() );
|
|
++
|
|
++ if ( isSave() && result() == TQDialog::Accepted )
|
|
++ {
|
|
++ if ( qProtocol == "file" )
|
|
++ {
|
|
++ TQString qFileName( addExtension( qLocalSelectedURL.path() ) );
|
|
++ bCanExit =
|
|
++ !QFile::exists( qFileName ) ||
|
|
++ ( KMessageBox::warningYesNo( 0,
|
|
++ i18n( "A file named \"%1\" already exists. "
|
|
++ "Are you sure you want to overwrite it?" ).arg( qFileName ),
|
|
++ i18n( "Overwrite File?" ),
|
|
++ i18n( "Overwrite" ), KStdGuiItem::cancel() ) == KMessageBox::Yes );
|
|
++ }
|
|
++ else if ( !isSupportedProtocol( qProtocol ) )
|
|
++ {
|
|
++ KMessageBox::sorry( 0,
|
|
++ i18n( "Saving using protocol \"%1\" is not supported." ).arg( qProtocol ) );
|
|
++ bCanExit = false;
|
|
++ }
|
|
++ else
|
|
++ bCanExit = true;
|
|
++ }
|
|
++ else if ( !isSave() && result() == TQDialog::Accepted && !isSupportedProtocol( qProtocol ) )
|
|
++ {
|
|
++ KMessageBox::information( 0,
|
|
++ i18n( "Protocol \"%1\" is supported only partially. "
|
|
++ "Local copy of the file will be created." ).arg( qProtocol ) );
|
|
++ bCanExit = true;
|
|
++ }
|
|
++ else
|
|
++ bCanExit = true;
|
|
++ } while ( !bCanExit );
|
|
++ setIsExecuting( false );
|
|
++
|
|
++ if ( result() == TQDialog::Accepted )
|
|
++ sendCommand( "accept" );
|
|
++ else
|
|
++ sendCommand( "reject" );
|
|
++ }
|
|
++ break;
|
|
++ default:
|
|
++ break;
|
|
++ }
|
|
++
|
|
++ // FIXME Some cleanup of pEvent? delete something, etc.?
|
|
++ }
|
|
++}
|
|
++
|
|
++void TDEFileDialog::appendControl( const TQString &rId, const TQString &rType, const TQString &rTitle )
|
|
++{
|
|
++ TQString qLabel( rTitle );
|
|
++ qLabel.replace( '~', '&' );
|
|
++
|
|
++ if ( rType == "checkbox" )
|
|
++ {
|
|
++ TQCheckBox *pCheckBox = new TQCheckBox( qLabel, m_pCheckBoxes, rId.utf8() );
|
|
++
|
|
++ pCheckBox->setEnabled( true );
|
|
++ pCheckBox->setChecked( false );
|
|
++ }
|
|
++ else if ( rType == "listbox" )
|
|
++ {
|
|
++ TQLabel *pComboLabel = new TQLabel( qLabel, m_pLabels );
|
|
++ TQComboBox *pComboBox = new TQComboBox( m_pComboBoxes, rId.utf8() );
|
|
++
|
|
++ pComboLabel->setBuddy( pComboBox );
|
|
++ pComboBox->setEnabled( true );
|
|
++ }
|
|
++ else if ( rType == "pushbutton" )
|
|
++ {
|
|
++ TQPushButton *pPushButton = new TQPushButton( qLabel, m_pPushButtons, rId.utf8() );
|
|
++ pPushButton->setEnabled( true );
|
|
++ }
|
|
++}
|
|
++
|
|
++TQWidget* TDEFileDialog::findControl( const TQString &rId ) const
|
|
++{
|
|
++ TQObjectList *pList = m_pCustomWidget->queryList();
|
|
++ TQCString qName( rId.utf8() );
|
|
++ TQObjectList::const_iterator it = pList->begin();
|
|
++
|
|
++ for ( ; it != pList->end() && qName != (*it)->name(); ++it )
|
|
++ ;
|
|
++
|
|
++ TQWidget *pWidget = NULL;
|
|
++ if ( it != pList->end() )
|
|
++ pWidget = static_cast< TQWidget* >( *it );
|
|
++
|
|
++ delete pList;
|
|
++
|
|
++ return pWidget;
|
|
++}
|
|
++
|
|
++void TDEFileDialog::enableControl( const TQString &rId, const TQString &rValue )
|
|
++{
|
|
++ TQWidget *pWidget = findControl( rId );
|
|
++
|
|
++ if ( pWidget )
|
|
++ pWidget->setEnabled( rValue.lower() == "true" );
|
|
++}
|
|
++
|
|
++void TDEFileDialog::getValue( const TQString &rId, const TQString &rAction )
|
|
++{
|
|
++ TQWidget *pWidget = findControl( rId );
|
|
++ TQString qString;
|
|
++ qString.reserve( 1024 );
|
|
++ qString.append( "value" );
|
|
++
|
|
++ if ( pWidget )
|
|
++ {
|
|
++ TQCString qClassName = pWidget->className();
|
|
++ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING )
|
|
++ {
|
|
++ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget );
|
|
++
|
|
++ if ( pCheckBox->isChecked() )
|
|
++ qString.append( " bool true" );
|
|
++ else
|
|
++ qString.append( " bool false" );
|
|
++ }
|
|
++ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING )
|
|
++ {
|
|
++ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget );
|
|
++ if ( rAction == "getItems" )
|
|
++ {
|
|
++ qString.append( " stringList" );
|
|
++ for ( int nIdx = 0; nIdx < pComboBox->count(); ++nIdx )
|
|
++ {
|
|
++ qString.append( ' ' );
|
|
++ appendEscaped( qString, pComboBox->text( nIdx ) );
|
|
++ }
|
|
++ }
|
|
++ else if ( rAction == "getSelectedItem" )
|
|
++ {
|
|
++ qString.append( " string " );
|
|
++ appendEscaped( qString, pComboBox->currentText() );
|
|
++ }
|
|
++ else if ( rAction == "getSelectedItemIndex" )
|
|
++ {
|
|
++ qString.append( " int " );
|
|
++ qString.append( TQString().setNum( pComboBox->currentItem() ) );
|
|
++ }
|
|
++ // TODO getHelpURL
|
|
++ }
|
|
++ // TODO push button
|
|
++ }
|
|
++
|
|
++ sendCommand( qString );
|
|
++}
|
|
++
|
|
++void TDEFileDialog::setValue( const TQString &rId, const TQString &rAction, const TQStringList &rValue )
|
|
++{
|
|
++ TQWidget *pWidget = findControl( rId );
|
|
++
|
|
++ if ( pWidget )
|
|
++ {
|
|
++ TQCString qClassName = pWidget->className();
|
|
++ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING )
|
|
++ {
|
|
++ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget );
|
|
++
|
|
++ bool bValue = ( !rValue.isEmpty() ) && ( rValue.front().lower() == "true" );
|
|
++ pCheckBox->setChecked( bValue );
|
|
++ }
|
|
++ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING )
|
|
++ {
|
|
++ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget );
|
|
++ if ( rAction == "addItem" )
|
|
++ {
|
|
++ if ( !rValue.isEmpty() )
|
|
++ pComboBox->insertItem( rValue.front() );
|
|
++ }
|
|
++ else if ( rAction == "addItems" )
|
|
++ {
|
|
++ pComboBox->insertStringList( rValue );
|
|
++ }
|
|
++ else if ( rAction == "deleteItem" )
|
|
++ {
|
|
++ if ( !rValue.isEmpty() )
|
|
++ pComboBox->removeItem( rValue.front().toInt() );
|
|
++ }
|
|
++ else if ( rAction == "deleteItems" )
|
|
++ {
|
|
++ pComboBox->clear();
|
|
++ }
|
|
++ else if ( rAction == "setSelectedItem" )
|
|
++ {
|
|
++ if ( !rValue.isEmpty() )
|
|
++ pComboBox->setCurrentItem( rValue.front().toInt() );
|
|
++ }
|
|
++ // FIXME setHelpURL is ignored
|
|
++ }
|
|
++ // TODO push button
|
|
++ }
|
|
++}
|
|
++
|
|
++void TDEFileDialog::appendFilter( const TQString &rTitle, const TQString &rFilter )
|
|
++{
|
|
++ // Filters are separated by ';'
|
|
++ TQString qFilter( rFilter );
|
|
++ qFilter.replace( TQChar( ';' ), TQChar( ' ' ) ).replace( "*.*", "*" );
|
|
++
|
|
++ // Workaround for too wide <All formats> (*.bmp;...) entry
|
|
++ TQString qTitle( rTitle );
|
|
++ qTitle.replace( TQRegExp( "^<([^>]*)> \\(.*" ), "<\\1>" );
|
|
++
|
|
++ m_aFilters.push_back( qMakePair( qTitle, qFilter ) );
|
|
++}
|
|
++
|
|
++TQString TDEFileDialog::filters() const
|
|
++{
|
|
++ TQString qString, qTmp;
|
|
++ bool bFirstFilter = true;
|
|
++
|
|
++ for ( FilterList::const_iterator it = m_aFilters.begin(); it != m_aFilters.end(); ++it )
|
|
++ {
|
|
++ if ( bFirstFilter )
|
|
++ bFirstFilter = false;
|
|
++ else
|
|
++ qString.append( '\n' );
|
|
++
|
|
++ qString.append( (*it).second );
|
|
++ qString.append( '|' );
|
|
++
|
|
++ qTmp = (*it).first;
|
|
++ qString.append( qTmp.replace( '/', "\\/" ) );
|
|
++ }
|
|
++
|
|
++ return qString;
|
|
++}
|
|
++
|
|
++TQString TDEFileDialog::addExtension( const TQString &rFileName ) const
|
|
++{
|
|
++ if ( !isSave() )
|
|
++ return rFileName;
|
|
++
|
|
++ TQString qExtension;
|
|
++
|
|
++ TQWidget *pExtensionWidget = findControl( "100" ); // CHECKBOX_AUTOEXTENSION
|
|
++ TQCheckBox *pExtensionCB = pExtensionWidget? static_cast< TQCheckBox* >( pExtensionWidget->qt_cast( TQCHECKBOX_OBJECT_NAME_STRING ) ): NULL;
|
|
++ if ( pExtensionCB && pExtensionCB->isChecked() )
|
|
++ {
|
|
++ // FIXME: qFilter can be a MIME; we ignore it now...
|
|
++ TQStringList qFilterList = TQStringList::split( " ", currentFilter() );
|
|
++ for ( TQStringList::const_iterator it = qFilterList.begin();
|
|
++ qExtension.isEmpty() && it != qFilterList.end();
|
|
++ ++it )
|
|
++ {
|
|
++ int nUnwanted = (*it).findRev( '*' );
|
|
++ if ( nUnwanted < 0 )
|
|
++ nUnwanted = (*it).findRev( '?' );
|
|
++ else
|
|
++ nUnwanted = ::std::max( nUnwanted, (*it).find( '?', nUnwanted ) );
|
|
++
|
|
++ int nIdx = (*it).find( '.', ::std::max( nUnwanted, 0 ) );
|
|
++ if ( nIdx >= 0 )
|
|
++ qExtension = (*it).mid( nIdx ).lower();
|
|
++ }
|
|
++ }
|
|
++
|
|
++ if ( qExtension.isEmpty() || qExtension == "." || rFileName.endsWith( qExtension ) )
|
|
++ return rFileName;
|
|
++ else
|
|
++ return rFileName + qExtension;
|
|
++}
|
|
++
|
|
++bool TDEFileDialog::isSupportedProtocol( const TQString &rProtocol ) const
|
|
++{
|
|
++ // TODO Get this information directly from OOo
|
|
++ const char * pOOoProtocols[] = { "", "smb", "ftp", "http", "file", "mailto",
|
|
++ "vnd.sun.star.webdav", "news", "private", "vnd.sun.star.help",
|
|
++ "https", "slot", "macro", "javascript", "imap", "pop3", "data",
|
|
++ "cid", "out", "vnd.sun.star.wfs", "vnd.sun.star.hier", "vim",
|
|
++ ".uno", ".component", "vnd.sun.star.pkg", "ldap", "db",
|
|
++ "vnd.sun.star.cmd", "vnd.sun.star.script", "vnd.sun.star.odma",
|
|
++ "telnet",
|
|
++ NULL };
|
|
++
|
|
++ for ( const char **pIndex = pOOoProtocols; *pIndex != NULL; ++pIndex )
|
|
++ {
|
|
++ if ( rProtocol == *pIndex )
|
|
++ return true;
|
|
++ }
|
|
++
|
|
++ // TODO gnome-vfs bits here
|
|
++
|
|
++ return false;
|
|
++}
|
|
++
|
|
++KURL TDEFileDialog::mostLocalURL( const KURL &rURL ) const
|
|
++{
|
|
++#if KDE_IS_VERSION(3,5,0)
|
|
++ KURL qMostLocalURL( TDEIO::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( TDEIO::NetAccess::mostLocalURL( qMostLocalURL, const_cast<TDEFileDialog*>( this ) ) );
|
|
++ if ( qMostLocalPath.isLocalFile() )
|
|
++ {
|
|
++ qMostLocalPath.addPath( rURL.fileName() );
|
|
++ return qMostLocalPath;
|
|
++ }
|
|
++ }
|
|
++#endif
|
|
++
|
|
++ return rURL;
|
|
++}
|
|
++
|
|
++TQString TDEFileDialog::localCopy( const TQString &rFileName ) const
|
|
++{
|
|
++ // 106 == MIB enum for UTF-8
|
|
++ KURL qLocalURL = mostLocalURL( KURL( rFileName, 106 ) );
|
|
++ if ( qLocalURL.isLocalFile() )
|
|
++ return qLocalURL.url();
|
|
++
|
|
++ int nExtensionPos = rFileName.findRev( '/' );
|
|
++ if ( nExtensionPos >= 0 )
|
|
++ nExtensionPos = rFileName.find( '.', nExtensionPos );
|
|
++ else
|
|
++ nExtensionPos = rFileName.find( '.' );
|
|
++
|
|
++ KTempFile qTempFile( TQString::null, ( nExtensionPos < 0 )? TQString(): rFileName.mid( nExtensionPos ) );
|
|
++ KURL qDestURL;
|
|
++ qDestURL.setPath( qTempFile.name() );
|
|
++
|
|
++ if ( !TDEIO::NetAccess::file_copy( rFileName, qDestURL, 0600, true, false, NULL ) )
|
|
++ {
|
|
++ KMessageBox::error( 0, TDEIO::NetAccess::lastErrorString() );
|
|
++ return TQString::null;
|
|
++ }
|
|
++
|
|
++ return qDestURL.url();
|
|
++}
|
|
++
|
|
++void TDEFileDialog::fileHighlightedCommand( const TQString & )
|
|
++{
|
|
++ if ( canNotifySelection() )
|
|
++ {
|
|
++ sendCommand( "fileSelectionChanged" );
|
|
++ setCanNotifySelection( false );
|
|
++ }
|
|
++}
|
|
++
|
|
++void TDEFileDialog::selectionChangedCommand()
|
|
++{
|
|
++ if ( canNotifySelection() )
|
|
++ {
|
|
++ sendCommand( "fileSelectionChanged" );
|
|
++ setCanNotifySelection( false );
|
|
++ }
|
|
++}
|
|
++
|
|
++void TDEFileDialog::sendCommand( const TQString &rCommand )
|
|
++{
|
|
++#if OSL_DEBUG_LEVEL > 0
|
|
++ ::std::cerr << "tdefilepicker sent: " << rCommand.latin1() << ::std::endl;
|
|
++#endif
|
|
++
|
|
++ //m_aOutputStream << rCommand << endl;
|
|
++ ::std::cout << rCommand.utf8() << ::std::endl;
|
|
++}
|
|
++
|
|
++void TDEFileDialog::appendURL( TQString &rBuffer, const KURL &rURL )
|
|
++{
|
|
++ // From Martin Kretzschmar:
|
|
++ // file:///path/to/test%E0.odt is not a valid URL from OOo's point of
|
|
++ // view. (?Most modern parts of?) OOo assume(s) that the URL contains only
|
|
++ // ASCII characters (which test%E0.odt does) and is UTF-8 after unescaping
|
|
++ // (which file:///path/test%E0.odt is not).
|
|
++ // Cf. the comment in sal/inc/osl/file.h.
|
|
++ // 106 == MIB enum for UTF-8
|
|
++ TQString qUrlStr = addExtension( rURL.url( 0, 106 ) );
|
|
++
|
|
++ if ( !isExecuting() && !isSupportedProtocol( rURL.protocol() ) )
|
|
++ qUrlStr = localCopy( qUrlStr );
|
|
++
|
|
++ if ( qUrlStr.startsWith( "file:/" ) && qUrlStr.mid( 6, 1 ) != "/" )
|
|
++ qUrlStr.replace( "file:/", "file:///" );
|
|
++
|
|
++ rBuffer.append( " " );
|
|
++ if ( !qUrlStr.isEmpty() )
|
|
++ appendEscaped( rBuffer, qUrlStr );
|
|
++}
|
|
++
|
|
++void TDEFileDialog::appendEscaped( TQString &rBuffer, const TQString &rString )
|
|
++{
|
|
++ const TQChar *pUnicode = rString.unicode();
|
|
++ const TQChar *pEnd = pUnicode + rString.length();
|
|
++
|
|
++ rBuffer.append( '"' );
|
|
++ for ( ; pUnicode != pEnd; ++pUnicode )
|
|
++ {
|
|
++ if ( *pUnicode == '\\' )
|
|
++ rBuffer.append( "\\\\" );
|
|
++ else if ( *pUnicode == '"' )
|
|
++ rBuffer.append( "\\\"" );
|
|
++ else if ( *pUnicode == '\n' )
|
|
++ rBuffer.append( "\\\n" );
|
|
++ else
|
|
++ rBuffer.append( *pUnicode );
|
|
++ }
|
|
++ rBuffer.append( '"' );
|
|
++}
|
|
++
|
|
++TQString TDEFileDialog::escapeString( const TQString &rString )
|
|
++{
|
|
++ TQString qString;
|
|
++ qString.reserve( 2*rString.length() + 2 ); // every char escaped + quotes
|
|
++
|
|
++ appendEscaped( qString, rString );
|
|
++
|
|
++ return qString;
|
|
++}
|
|
++
|
|
++
|
|
++void TDEFileFilterComboHack::setCurrentFilter( const TQString& filter )
|
|
++{
|
|
++ setCurrentText( filter );
|
|
++ filterChanged();
|
|
++
|
|
++ // Workaround for 'Filter name (*.blah)' vs. 'Filter name'
|
|
++ if ( currentText() != text( currentItem() ) )
|
|
++ {
|
|
++ int nItem = 0;
|
|
++ for ( ; nItem < count() && !text( nItem ).startsWith( filter ); ++nItem );
|
|
++
|
|
++ if ( nItem < count() )
|
|
++ setCurrentItem( nItem );
|
|
++ else
|
|
++ setCurrentItem( 0 );
|
|
++
|
|
++ filterChanged();
|
|
++ }
|
|
++}
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN fpicker/source/unx/tde/tdefilepicker.hxx fpicker/source/unx/tde/tdefilepicker.hxx
|
|
+--- fpicker/source/unx/tde/tdefilepicker.hxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ fpicker/source/unx/tde/tdefilepicker.hxx 2011-08-17 14:05:02.262902414 -0500
|
|
+@@ -0,0 +1,126 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++ *
|
|
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++ *
|
|
++ * Copyright 2010 Novell, Inc.
|
|
++ * Copyright 2011 Timothy Pearson
|
|
++ *
|
|
++ * OpenOffice.org - a multi-platform office productivity suite
|
|
++ *
|
|
++ * This file is part of OpenOffice.org.
|
|
++ *
|
|
++ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++ * it under the terms of the GNU Lesser General Public License version 3
|
|
++ * only, as published by the Free Software Foundation.
|
|
++ *
|
|
++ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++ * GNU Lesser General Public License version 3 for more details
|
|
++ * (a copy is included in the LICENSE file that accompanied this code).
|
|
++ *
|
|
++ * You should have received a copy of the GNU Lesser General Public License
|
|
++ * version 3 along with OpenOffice.org. If not, see
|
|
++ * <http://www.openoffice.org/license.html>
|
|
++ * for a copy of the LGPLv3 License.
|
|
++ *
|
|
++ ************************************************************************/
|
|
++
|
|
++#ifndef _TDEFILEPICKER_HXX_
|
|
++#define _TDEFILEPICKER_HXX_
|
|
++
|
|
++#include <tdefiledialog.h>
|
|
++#include <tdefilefiltercombo.h>
|
|
++
|
|
++class TQGrid;
|
|
++class TQHBox;
|
|
++class TQVBox;
|
|
++
|
|
++class TDEFileDialog : public KFileDialog
|
|
++{
|
|
++ Q_OBJECT
|
|
++
|
|
++protected:
|
|
++ typedef TQPair< TQString, TQString > FilterEntry;
|
|
++ typedef TQValueList< FilterEntry > FilterList;
|
|
++
|
|
++ TQVBox *m_pCustomWidget;
|
|
++ TQHBox *m_pCombosAndButtons;
|
|
++
|
|
++ TQVBox *m_pLabels;
|
|
++ TQVBox *m_pComboBoxes;
|
|
++ TQVBox *m_pPushButtons;
|
|
++
|
|
++ TQGrid *m_pCheckBoxes;
|
|
++
|
|
++ FilterList m_aFilters;
|
|
++
|
|
++ /** Are we a "Save As" dialog?
|
|
++ *
|
|
++ * We cannot use KFileDialog::setOperationMode() here, because then
|
|
++ * it automatically adds an "Automatically select filename extension"
|
|
++ * check box, and completely destroys the dialog's layout
|
|
++ * (custom list boxes are under this check box, which looks ugly).
|
|
++ */
|
|
++ bool m_bIsSave;
|
|
++ bool m_bIsExecuting;
|
|
++
|
|
++ bool m_bCanNotifySelection;
|
|
++
|
|
++public:
|
|
++ TDEFileDialog( const TQString &startDir, const TQString &filter,
|
|
++ TQWidget *parent, const char *name );
|
|
++ virtual ~TDEFileDialog();
|
|
++
|
|
++protected:
|
|
++ virtual void resizeEvent( TQResizeEvent *pEvent );
|
|
++ virtual void showEvent( TQShowEvent *pEvent );
|
|
++ void updateCustomWidgetLayout();
|
|
++
|
|
++ virtual void customEvent( TQCustomEvent *pEvent );
|
|
++
|
|
++protected:
|
|
++ void appendControl( const TQString &rId, const TQString &rType, const TQString &rTitle );
|
|
++ TQWidget* findControl( const TQString &rId ) const;
|
|
++ void enableControl( const TQString &rId, const TQString &rValue );
|
|
++ void getValue( const TQString &rId, const TQString &rAction );
|
|
++ void setValue( const TQString &rId, const TQString &rAction, const TQStringList &rValue );
|
|
++
|
|
++ void appendFilter( const TQString &rTitle, const TQString &rFilter );
|
|
++ TQString filters() const;
|
|
++ TQString addExtension( const TQString &rFileName ) const;
|
|
++
|
|
++ void setIsSave( bool bIsSave ) { m_bIsSave = bIsSave; }
|
|
++ bool isSave( void ) const { return m_bIsSave; }
|
|
++
|
|
++ void setIsExecuting( bool bIsExecuting ) { m_bIsExecuting = bIsExecuting; }
|
|
++ bool isExecuting( void ) const { return m_bIsExecuting; }
|
|
++
|
|
++ bool isSupportedProtocol( const TQString &rProtocol ) const;
|
|
++ KURL mostLocalURL( const KURL &rURL ) const;
|
|
++ TQString localCopy( const TQString &rFileName ) const;
|
|
++
|
|
++ void setCanNotifySelection( bool bCanNotifySelection ) { m_bCanNotifySelection = bCanNotifySelection; }
|
|
++ bool canNotifySelection( void ) const { return m_bCanNotifySelection; }
|
|
++
|
|
++protected slots:
|
|
++ void fileHighlightedCommand( const TQString & );
|
|
++ void selectionChangedCommand();
|
|
++
|
|
++protected:
|
|
++ void sendCommand( const TQString &rCommand );
|
|
++ void appendURL( TQString &rBuffer, const KURL &rURL );
|
|
++ void appendEscaped( TQString &rBuffer, const TQString &rString );
|
|
++ TQString escapeString( const TQString &rString );
|
|
++};
|
|
++
|
|
++class TDEFileFilterComboHack : public KFileFilterCombo
|
|
++{
|
|
++public:
|
|
++ void setCurrentFilter( const TQString& filter );
|
|
++};
|
|
++
|
|
++#endif // _TDEFILEPICKER_HXX_
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN fpicker/source/unx/tde/tdefpmain.cxx fpicker/source/unx/tde/tdefpmain.cxx
|
|
+--- fpicker/source/unx/tde/tdefpmain.cxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ fpicker/source/unx/tde/tdefpmain.cxx 2011-08-17 14:04:58.622623640 -0500
|
|
+@@ -0,0 +1,93 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++ *
|
|
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++ *
|
|
++ * Copyright 2010 Novell, Inc.
|
|
++ * Copyright 2011 Timothy Pearson
|
|
++ *
|
|
++ * OpenOffice.org - a multi-platform office productivity suite
|
|
++ *
|
|
++ * This file is part of OpenOffice.org.
|
|
++ *
|
|
++ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++ * it under the terms of the GNU Lesser General Public License version 3
|
|
++ * only, as published by the Free Software Foundation.
|
|
++ *
|
|
++ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++ * GNU Lesser General Public License version 3 for more details
|
|
++ * (a copy is included in the LICENSE file that accompanied this code).
|
|
++ *
|
|
++ * You should have received a copy of the GNU Lesser General Public License
|
|
++ * version 3 along with OpenOffice.org. If not, see
|
|
++ * <http://www.openoffice.org/license.html>
|
|
++ * for a copy of the LGPLv3 License.
|
|
++ *
|
|
++ ************************************************************************/
|
|
++
|
|
++#include <tdemodalityfilter.hxx>
|
|
++#include <tdefilepicker.hxx>
|
|
++#include <tdecommandthread.hxx>
|
|
++
|
|
++#include <tdeaboutdata.h>
|
|
++#include <tdeapplication.h>
|
|
++#include <tdecmdlineargs.h>
|
|
++
|
|
++#include <iostream>
|
|
++#include <stdlib.h>
|
|
++
|
|
++//////////////////////////////////////////////////////////////////////////
|
|
++// Main
|
|
++//////////////////////////////////////////////////////////////////////////
|
|
++
|
|
++static TDECmdLineOptions sOptions[] =
|
|
++{
|
|
++ { "winid <argument>", I18N_NOOP("Window ID to which is the fpicker modal"), "0" },
|
|
++ TDECmdLineLastOption
|
|
++};
|
|
++
|
|
++int main( int argc, char* argv[] )
|
|
++{
|
|
++ // we fake the name of the application to have "OpenOffice.org" in the
|
|
++ // title
|
|
++ TDEAboutData qAboutData( "tdefilepicker", I18N_NOOP( "OpenOffice.org" ),
|
|
++ "0.1", I18N_NOOP( "tdefilepicker is an implementation of the TDE file dialog for OpenOffice.org." ),
|
|
++ TDEAboutData::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;
|
|
++
|
|
++ TDECmdLineArgs::addCmdLineOptions( sOptions );
|
|
++ TDECmdLineArgs::init( argc, argv, &qAboutData );
|
|
++
|
|
++ TDELocale::setMainCatalogue( "kdialog" );
|
|
++
|
|
++ TDEApplication kApplication;
|
|
++
|
|
++ // Setup the modality
|
|
++ TDECmdLineArgs *pArgs = TDECmdLineArgs::parsedArgs();
|
|
++ long nWinId = atol( pArgs->getOption( "winid" ) );
|
|
++ pArgs->clear();
|
|
++
|
|
++ TDEModalityFilter qModalityFilter( nWinId );
|
|
++
|
|
++ TDEFileDialog aFileDialog( NULL, TQString(), NULL, "tdefiledialog" );
|
|
++
|
|
++ TDECommandThread qCommandThread( &aFileDialog );
|
|
++ qCommandThread.start();
|
|
++
|
|
++ kApplication.exec();
|
|
++
|
|
++ qCommandThread.wait();
|
|
++
|
|
++ ::std::cout << "exited" << ::std::endl;
|
|
++
|
|
++ return 0;
|
|
++}
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN fpicker/source/unx/tde/tdemodalityfilter.cxx fpicker/source/unx/tde/tdemodalityfilter.cxx
|
|
+--- fpicker/source/unx/tde/tdemodalityfilter.cxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ fpicker/source/unx/tde/tdemodalityfilter.cxx 2011-08-17 14:04:44.121513143 -0500
|
|
+@@ -0,0 +1,68 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++ *
|
|
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++ *
|
|
++ * Copyright 2010 Novell, Inc.
|
|
++ * Copyright 2011 Timothy Pearson
|
|
++ *
|
|
++ * OpenOffice.org - a multi-platform office productivity suite
|
|
++ *
|
|
++ * This file is part of OpenOffice.org.
|
|
++ *
|
|
++ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++ * it under the terms of the GNU Lesser General Public License version 3
|
|
++ * only, as published by the Free Software Foundation.
|
|
++ *
|
|
++ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++ * GNU Lesser General Public License version 3 for more details
|
|
++ * (a copy is included in the LICENSE file that accompanied this code).
|
|
++ *
|
|
++ * You should have received a copy of the GNU Lesser General Public License
|
|
++ * version 3 along with OpenOffice.org. If not, see
|
|
++ * <http://www.openoffice.org/license.html>
|
|
++ * for a copy of the LGPLv3 License.
|
|
++ *
|
|
++ ************************************************************************/
|
|
++
|
|
++#include <tdemodalityfilter.hxx>
|
|
++
|
|
++#include <tdeapplication.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( TQObject *pObject, TQEvent *pEvent )
|
|
++{
|
|
++ if ( pObject->isWidgetType() && pEvent->type() == TQEvent::Show )
|
|
++ {
|
|
++ KDialogBase* pDlg = ::qt_cast< KDialogBase* >( pObject );
|
|
++ if ( pDlg != NULL && m_nWinId != 0 )
|
|
++ {
|
|
++ XSetTransientForHint( qt_xdisplay(), pDlg->winId(), m_nWinId );
|
|
++ m_nWinId = 0;
|
|
++ }
|
|
++ }
|
|
++ return false;
|
|
++}
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN fpicker/source/unx/tde/tdemodalityfilter.hxx fpicker/source/unx/tde/tdemodalityfilter.hxx
|
|
+--- fpicker/source/unx/tde/tdemodalityfilter.hxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ fpicker/source/unx/tde/tdemodalityfilter.hxx 2011-08-17 14:04:27.940273979 -0500
|
|
+@@ -0,0 +1,49 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++ *
|
|
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++ *
|
|
++ * Copyright 2010 Novell, Inc.
|
|
++ * Copyright 2011 Timothy Pearson
|
|
++ *
|
|
++ * OpenOffice.org - a multi-platform office productivity suite
|
|
++ *
|
|
++ * This file is part of OpenOffice.org.
|
|
++ *
|
|
++ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++ * it under the terms of the GNU Lesser General Public License version 3
|
|
++ * only, as published by the Free Software Foundation.
|
|
++ *
|
|
++ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++ * GNU Lesser General Public License version 3 for more details
|
|
++ * (a copy is included in the LICENSE file that accompanied this code).
|
|
++ *
|
|
++ * You should have received a copy of the GNU Lesser General Public License
|
|
++ * version 3 along with OpenOffice.org. If not, see
|
|
++ * <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 TQObject
|
|
++{
|
|
++private:
|
|
++ WId m_nWinId;
|
|
++
|
|
++public:
|
|
++ TDEModalityFilter( WId nWinId );
|
|
++ virtual ~TDEModalityFilter();
|
|
++
|
|
++ virtual bool eventFilter( TQObject *pObject, TQEvent *pEvent );
|
|
++};
|
|
++
|
|
++#endif // _TDEMODALITYFILTER_HXX_
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN fpicker/source/unx/tde_unx/FPServiceInfo.hxx fpicker/source/unx/tde_unx/FPServiceInfo.hxx
|
|
+--- fpicker/source/unx/tde_unx/FPServiceInfo.hxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ fpicker/source/unx/tde_unx/FPServiceInfo.hxx 2011-08-17 14:07:24.203772856 -0500
|
|
+@@ -0,0 +1,48 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++ *
|
|
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++ *
|
|
++ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
++ * Copyright 2010 Novell, Inc.
|
|
++ * Copyright 2011 Timothy Pearson
|
|
++ *
|
|
++ * OpenOffice.org - a multi-platform office productivity suite
|
|
++ *
|
|
++ * This file is part of OpenOffice.org.
|
|
++ *
|
|
++ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++ * it under the terms of the GNU Lesser General Public License version 3
|
|
++ * only, as published by the Free Software Foundation.
|
|
++ *
|
|
++ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++ * GNU Lesser General Public License version 3 for more details
|
|
++ * (a copy is included in the LICENSE file that accompanied this code).
|
|
++ *
|
|
++ * You should have received a copy of the GNU Lesser General Public License
|
|
++ * version 3 along with OpenOffice.org. If not, see
|
|
++ * <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
|
|
++ char pFname[1024]; snprintf(pFname, sizeof pFname, "%s/%s", getenv("OLDPWD"), "tdefilepicker");
|
|
++
|
|
++ // ID of the main window
|
|
++ const int nIdLen = 20;
|
|
++ char pWinId[nIdLen] = "0";
|
|
++
|
|
++ // TODO pass here the real parent (not possible for system dialogs
|
|
++ // yet), and default to GetDefDialogParent() only when the real parent
|
|
++ // is NULL
|
|
++ Window *pParentWin = Application::GetDefDialogParent();
|
|
++ if ( pParentWin )
|
|
++ {
|
|
++ const SystemEnvData* pSysData = ((SystemWindow *)pParentWin)->GetSystemData();
|
|
++ if ( pSysData )
|
|
++ {
|
|
++ snprintf( pWinId, nIdLen, "%ld", pSysData->aWindow ); // unx only
|
|
++ pWinId[nIdLen-1] = 0;
|
|
++ }
|
|
++ }
|
|
++
|
|
++ // Execute the fpicker implementation
|
|
++ execlp( pFname, pFname, "--winid", pWinId, NULL );
|
|
++
|
|
++ // Error, finish the child
|
|
++ exit( -1 );
|
|
++ }
|
|
++
|
|
++ // Parent continues
|
|
++ close( aFiledesStdin[0] );
|
|
++ m_nFilePickerWrite = aFiledesStdin[1];
|
|
++
|
|
++ close( aFiledesStdout[1] );
|
|
++ m_nFilePickerRead = aFiledesStdout[0];
|
|
++
|
|
++ // Create the notify thread
|
|
++ if ( !m_pNotifyThread )
|
|
++ m_pNotifyThread = new UnxFilePickerNotifyThread( this );
|
|
++
|
|
++ // Create the command thread
|
|
++ if ( !m_pCommandThread )
|
|
++ m_pCommandThread = new UnxFilePickerCommandThread( m_pNotifyThread, m_nFilePickerRead );
|
|
++
|
|
++ // Start the threads
|
|
++ m_pNotifyThread->create();
|
|
++ m_pCommandThread->create();
|
|
++
|
|
++ return;
|
|
++}
|
|
++
|
|
++void UnxFilePicker::checkFilePicker() throw( ::com::sun::star::uno::RuntimeException )
|
|
++{
|
|
++ if ( m_nFilePickerPid > 0 )
|
|
++ {
|
|
++ // TODO check if external file picker is runnning
|
|
++ }
|
|
++ else
|
|
++ {
|
|
++ throw uno::RuntimeException(
|
|
++ ::rtl::OUString::createFromAscii( "the external file picker does not run" ),
|
|
++ *this );
|
|
++ }
|
|
++}
|
|
++
|
|
++void UnxFilePicker::sendCommand( const ::rtl::OUString &rCommand )
|
|
++{
|
|
++ if ( m_nFilePickerWrite < 0 )
|
|
++ return;
|
|
++
|
|
++ ::rtl::OString aUtfString = OUStringToOString( rCommand + ::rtl::OUString::createFromAscii( "\n" ), RTL_TEXTENCODING_UTF8 );
|
|
++
|
|
++#if OSL_DEBUG_LEVEL > 0
|
|
++ ::std::cerr << "UnxFilePicker sent: \"" << aUtfString.getStr() << "\"" << ::std::endl;
|
|
++#endif
|
|
++
|
|
++ write( m_nFilePickerWrite, aUtfString.getStr(), aUtfString.getLength() );
|
|
++}
|
|
++
|
|
++void UnxFilePicker::sendCommand( const ::rtl::OUString &rCommand, ::osl::Condition &rCondition )
|
|
++{
|
|
++ rCondition.reset();
|
|
++
|
|
++ sendCommand( rCommand );
|
|
++
|
|
++ rCondition.wait();
|
|
++}
|
|
++
|
|
++void UnxFilePicker::appendEscaped( ::rtl::OUStringBuffer &rBuffer, const ::rtl::OUString &rString )
|
|
++{
|
|
++ const sal_Unicode *pUnicode = rString.getStr();
|
|
++ const sal_Unicode *pEnd = pUnicode + rString.getLength();
|
|
++
|
|
++ rBuffer.appendAscii( "\"" , 1 );
|
|
++
|
|
++ for ( ; pUnicode != pEnd; ++pUnicode )
|
|
++ {
|
|
++ if ( *pUnicode == '\\' )
|
|
++ rBuffer.appendAscii( "\\\\", 2 );
|
|
++ else if ( *pUnicode == '"' )
|
|
++ rBuffer.appendAscii( "\\\"", 2 );
|
|
++ else if ( *pUnicode == '\n' )
|
|
++ rBuffer.appendAscii( "\\n", 2 );
|
|
++ else
|
|
++ rBuffer.append( *pUnicode );
|
|
++ }
|
|
++
|
|
++ rBuffer.appendAscii( "\"", 1 );
|
|
++}
|
|
++
|
|
++sal_Bool UnxFilePicker::controlIdInfo( sal_Int16 nControlId, ::rtl::OUString &rType, sal_Int32 &rTitleId )
|
|
++{
|
|
++ typedef struct {
|
|
++ sal_Int16 nId;
|
|
++ const ::rtl::OUString *pType;
|
|
++ sal_Int32 nTitle;
|
|
++ } ElementToName;
|
|
++
|
|
++ const ::rtl::OUString aCheckBox( RTL_CONSTASCII_USTRINGPARAM( "checkbox" ) );
|
|
++ const ::rtl::OUString aControl( RTL_CONSTASCII_USTRINGPARAM( "control" ) );
|
|
++ const ::rtl::OUString aEdit( RTL_CONSTASCII_USTRINGPARAM( "edit" ) );
|
|
++ const ::rtl::OUString aLabel( RTL_CONSTASCII_USTRINGPARAM( "label" ) );
|
|
++ const ::rtl::OUString aListBox( RTL_CONSTASCII_USTRINGPARAM( "listbox" ) );
|
|
++ const ::rtl::OUString aPushButton( RTL_CONSTASCII_USTRINGPARAM( "pushbutton" ) );
|
|
++
|
|
++ const ElementToName *pPtr;
|
|
++ const ElementToName pArray[] =
|
|
++ {
|
|
++ { CommonFilePickerElementIds::PUSHBUTTON_OK, &aPushButton, 0/*FIXME?*/ },
|
|
++ { CommonFilePickerElementIds::PUSHBUTTON_CANCEL, &aPushButton, 0/*FIXME?*/ },
|
|
++ { CommonFilePickerElementIds::LISTBOX_FILTER, &aListBox, 0/*FIXME?*/ },
|
|
++ { CommonFilePickerElementIds::CONTROL_FILEVIEW, &aControl, 0/*FIXME?*/ },
|
|
++ { CommonFilePickerElementIds::EDIT_FILEURL, &aEdit, 0/*FIXME?*/ },
|
|
++ { CommonFilePickerElementIds::LISTBOX_FILTER_LABEL, &aLabel, 0/*FIXME?*/ },
|
|
++ { CommonFilePickerElementIds::EDIT_FILEURL_LABEL, &aLabel, 0/*FIXME?*/ },
|
|
++
|
|
++ { ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, &aCheckBox, STR_SVT_FILEPICKER_AUTO_EXTENSION },
|
|
++ { ExtendedFilePickerElementIds::CHECKBOX_PASSWORD, &aCheckBox, STR_SVT_FILEPICKER_PASSWORD },
|
|
++ { ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS, &aCheckBox, STR_SVT_FILEPICKER_FILTER_OPTIONS },
|
|
++ { ExtendedFilePickerElementIds::CHECKBOX_READONLY, &aCheckBox, STR_SVT_FILEPICKER_READONLY },
|
|
++ { ExtendedFilePickerElementIds::CHECKBOX_LINK, &aCheckBox, STR_SVT_FILEPICKER_INSERT_AS_LINK },
|
|
++ { ExtendedFilePickerElementIds::CHECKBOX_PREVIEW, &aCheckBox, STR_SVT_FILEPICKER_SHOW_PREVIEW },
|
|
++ { ExtendedFilePickerElementIds::PUSHBUTTON_PLAY, &aPushButton, STR_SVT_FILEPICKER_PLAY },
|
|
++ { ExtendedFilePickerElementIds::LISTBOX_VERSION, &aListBox, STR_SVT_FILEPICKER_VERSION },
|
|
++ { ExtendedFilePickerElementIds::LISTBOX_TEMPLATE, &aListBox, STR_SVT_FILEPICKER_TEMPLATES },
|
|
++ { ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE, &aListBox, STR_SVT_FILEPICKER_IMAGE_TEMPLATE },
|
|
++ { ExtendedFilePickerElementIds::CHECKBOX_SELECTION, &aCheckBox, STR_SVT_FILEPICKER_SELECTION },
|
|
++ { 0, 0, 0 }
|
|
++ };
|
|
++
|
|
++ for ( pPtr = pArray; pPtr->nId && ( pPtr->nId != nControlId ); ++pPtr )
|
|
++ ;
|
|
++
|
|
++ if ( pPtr->nId == nControlId )
|
|
++ {
|
|
++ rType = *(pPtr->pType);
|
|
++ rTitleId = pPtr->nTitle;
|
|
++
|
|
++ return sal_True;
|
|
++ }
|
|
++
|
|
++ return sal_False;
|
|
++}
|
|
++
|
|
++sal_Bool UnxFilePicker::controlActionInfo( sal_Int16 nControlAction, ::rtl::OUString &rType )
|
|
++{
|
|
++ typedef struct {
|
|
++ sal_Int16 nId;
|
|
++ const ::rtl::OUString pType;
|
|
++ } ElementToName;
|
|
++
|
|
++ const ElementToName *pPtr;
|
|
++ const ElementToName pArray[] =
|
|
++ {
|
|
++ { ControlActions::ADD_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "addItem" ) ) },
|
|
++ { ControlActions::ADD_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "addItems" ) ) },
|
|
++ { ControlActions::DELETE_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "deleteItem" ) ) },
|
|
++ { ControlActions::DELETE_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "deleteItems" ) ) },
|
|
++ { ControlActions::SET_SELECT_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setSelectedItem" ) ) },
|
|
++ { ControlActions::GET_ITEMS, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getItems" ) ) },
|
|
++ { ControlActions::GET_SELECTED_ITEM, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getSelectedItem" ) ) },
|
|
++ { ControlActions::GET_SELECTED_ITEM_INDEX, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getSelectedItemIndex" ) ) },
|
|
++ { ControlActions::SET_HELP_URL, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "setHelpURL" ) ) },
|
|
++ { ControlActions::GET_HELP_URL, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "getHelpURL" ) ) },
|
|
++ { 0, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "noAction" ) ) }
|
|
++ };
|
|
++
|
|
++ for ( pPtr = pArray; pPtr->nId && ( pPtr->nId != nControlAction ); ++pPtr )
|
|
++ ;
|
|
++
|
|
++ rType = pPtr->pType;
|
|
++
|
|
++ return sal_True;
|
|
++}
|
|
++
|
|
++void UnxFilePicker::sendAppendControlCommand( sal_Int16 nControlId )
|
|
++{
|
|
++ ::rtl::OUString aType;
|
|
++ sal_Int32 nTitleId;
|
|
++
|
|
++ if ( controlIdInfo( nControlId, aType, nTitleId ) )
|
|
++ {
|
|
++ ::rtl::OUStringBuffer aBuffer( 1024 );
|
|
++
|
|
++ aBuffer.appendAscii( "appendControl " );
|
|
++ aBuffer.append( static_cast< sal_Int32 >( nControlId ) );
|
|
++ aBuffer.appendAscii( " ", 1 );
|
|
++ appendEscaped( aBuffer, aType );
|
|
++ aBuffer.appendAscii( " ", 1 );
|
|
++ appendEscaped( aBuffer, m_pResMgr? String( ResId( nTitleId, *m_pResMgr ) ): String() );
|
|
++
|
|
++ sendCommand( aBuffer.makeStringAndClear() );
|
|
++ }
|
|
++}
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN fpicker/source/unx/tde_unx/UnxFilePicker.hxx fpicker/source/unx/tde_unx/UnxFilePicker.hxx
|
|
+--- fpicker/source/unx/tde_unx/UnxFilePicker.hxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ fpicker/source/unx/tde_unx/UnxFilePicker.hxx 2011-08-17 14:07:41.705113628 -0500
|
|
+@@ -0,0 +1,178 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++ *
|
|
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++ *
|
|
++ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
++ * Copyright 2010 Novell, Inc.
|
|
++ * Copyright 2011 Timothy Pearson
|
|
++ *
|
|
++ * OpenOffice.org - a multi-platform office productivity suite
|
|
++ *
|
|
++ * This file is part of OpenOffice.org.
|
|
++ *
|
|
++ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++ * it under the terms of the GNU Lesser General Public License version 3
|
|
++ * only, as published by the Free Software Foundation.
|
|
++ *
|
|
++ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++ * GNU Lesser General Public License version 3 for more details
|
|
++ * (a copy is included in the LICENSE file that accompanied this code).
|
|
++ *
|
|
++ * You should have received a copy of the GNU Lesser General Public License
|
|
++ * version 3 along with OpenOffice.org. If not, see
|
|
++ * <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) -ltdeio
|
|
++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;
|
|
++ TQString aClientProgram;
|
|
++ ::rtl::OUString sClientProgram;
|
|
++
|
|
++ aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram );
|
|
++ if ( aClientProgram.isEmpty() )
|
|
++ aClientProgram = "kmail";
|
|
++ else
|
|
++ aClientProgram = aClientProgram.section(SPACE, 0, 0);
|
|
++ sClientProgram = (const sal_Unicode *) aClientProgram.ucs2();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( sClientProgram ) );
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")))
|
|
++ {
|
|
++ TQFont aFixedFont;
|
|
++ short nFontHeight;
|
|
++
|
|
++ aFixedFont = TDEGlobalSettings::fixedFont();
|
|
++ nFontHeight = aFixedFont.pointSize();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( nFontHeight ) );
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")))
|
|
++ {
|
|
++ TQFont aFixedFont;
|
|
++ TQString aFontName;
|
|
++ :: rtl::OUString sFontName;
|
|
++
|
|
++ aFixedFont = TDEGlobalSettings::fixedFont();
|
|
++ aFontName = aFixedFont.family();
|
|
++ sFontName = (const sal_Unicode *) aFontName.ucs2();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( sFontName ) );
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")))
|
|
++ {
|
|
++ /* does not make much sense without an accessibility bridge */
|
|
++ sal_Bool ATToolSupport = sal_False;
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( rtl::OUString::valueOf( ATToolSupport ) ) );
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")))
|
|
++ {
|
|
++ TQString aDocumentsDir( TDEGlobalSettings::documentPath() );
|
|
++ rtl::OUString sDocumentsDir;
|
|
++ rtl::OUString sDocumentsURL;
|
|
++ if ( aDocumentsDir.endsWith(TQChar('/')) )
|
|
++ aDocumentsDir.truncate ( aDocumentsDir.length() - 1 );
|
|
++ sDocumentsDir = (const sal_Unicode *) aDocumentsDir.ucs2();
|
|
++ osl_getFileURLFromSystemPath( sDocumentsDir.pData, &sDocumentsURL.pData );
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( sDocumentsURL ) );
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")))
|
|
++ {
|
|
++ TQString aFTPProxy;
|
|
++ switch ( KProtocolManager::proxyType() )
|
|
++ {
|
|
++ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
++ aFTPProxy = KProtocolManager::proxyFor( "FTP" );
|
|
++ break;
|
|
++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
++// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
++// The best we can do here is to ask the current value for a given address.
|
|
++ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" );
|
|
++ break;
|
|
++ default: // No proxy is used
|
|
++ break;
|
|
++ }
|
|
++ if ( !aFTPProxy.isEmpty() )
|
|
++ {
|
|
++ KURL aProxy(aFTPProxy);
|
|
++ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( sProxy ) );
|
|
++ }
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")))
|
|
++ {
|
|
++ TQString aFTPProxy;
|
|
++ switch ( KProtocolManager::proxyType() )
|
|
++ {
|
|
++ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
++ aFTPProxy = KProtocolManager::proxyFor( "FTP" );
|
|
++ break;
|
|
++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
++// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
++// The best we can do here is to ask the current value for a given address.
|
|
++ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" );
|
|
++ break;
|
|
++ default: // No proxy is used
|
|
++ break;
|
|
++ }
|
|
++ if ( !aFTPProxy.isEmpty() )
|
|
++ {
|
|
++ KURL aProxy(aFTPProxy);
|
|
++ sal_Int32 nPort = aProxy.port();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( nPort ) );
|
|
++ }
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")))
|
|
++ {
|
|
++ TQString aHTTPProxy;
|
|
++ switch ( KProtocolManager::proxyType() )
|
|
++ {
|
|
++ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
++ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
|
|
++ break;
|
|
++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
++// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
++// The best we can do here is to ask the current value for a given address.
|
|
++ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" );
|
|
++ break;
|
|
++ default: // No proxy is used
|
|
++ break;
|
|
++ }
|
|
++ if ( !aHTTPProxy.isEmpty() )
|
|
++ {
|
|
++ KURL aProxy(aHTTPProxy);
|
|
++ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( sProxy ) );
|
|
++ }
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")))
|
|
++ {
|
|
++ TQString aHTTPProxy;
|
|
++ switch ( KProtocolManager::proxyType() )
|
|
++ {
|
|
++ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
++ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
|
|
++ break;
|
|
++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
++// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
++// The best we can do here is to ask the current value for a given address.
|
|
++ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" );
|
|
++ break;
|
|
++ default: // No proxy is used
|
|
++ break;
|
|
++ }
|
|
++ if ( !aHTTPProxy.isEmpty() )
|
|
++ {
|
|
++ KURL aProxy(aHTTPProxy);
|
|
++ sal_Int32 nPort = aProxy.port();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( nPort ) );
|
|
++ }
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")))
|
|
++ {
|
|
++ TQString aHTTPSProxy;
|
|
++ switch ( KProtocolManager::proxyType() )
|
|
++ {
|
|
++ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
++ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" );
|
|
++ break;
|
|
++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
++// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
++// The best we can do here is to ask the current value for a given address.
|
|
++ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" );
|
|
++ break;
|
|
++ default: // No proxy is used
|
|
++ break;
|
|
++ }
|
|
++ if ( !aHTTPSProxy.isEmpty() )
|
|
++ {
|
|
++ KURL aProxy(aHTTPSProxy);
|
|
++ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( sProxy ) );
|
|
++ }
|
|
++ } else if (id.equalsAsciiL(
|
|
++ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")))
|
|
++ {
|
|
++ TQString aHTTPSProxy;
|
|
++ switch ( KProtocolManager::proxyType() )
|
|
++ {
|
|
++ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
++ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" );
|
|
++ break;
|
|
++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
++// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
++// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
++// The best we can do here is to ask the current value for a given address.
|
|
++ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" );
|
|
++ break;
|
|
++ default: // No proxy is used
|
|
++ break;
|
|
++ }
|
|
++ if ( !aHTTPSProxy.isEmpty() )
|
|
++ {
|
|
++ KURL aProxy(aHTTPSProxy);
|
|
++ sal_Int32 nPort = aProxy.port();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( nPort ) );
|
|
++ }
|
|
++ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy"))) {
|
|
++ TQString aNoProxyFor;
|
|
++ switch ( KProtocolManager::proxyType() )
|
|
++ {
|
|
++ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
++ aNoProxyFor = KProtocolManager::noProxyFor();
|
|
++ break;
|
|
++ default: // No proxy is used
|
|
++ break;
|
|
++ }
|
|
++ if ( !aNoProxyFor.isEmpty() )
|
|
++ {
|
|
++ ::rtl::OUString sNoProxyFor;
|
|
++
|
|
++ aNoProxyFor = aNoProxyFor.replace( COMMA, SEMI_COLON );
|
|
++ sNoProxyFor = (const sal_Unicode *) aNoProxyFor.ucs2();
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( sNoProxyFor ) );
|
|
++ }
|
|
++ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) {
|
|
++ int nProxyType;
|
|
++ switch ( KProtocolManager::proxyType() )
|
|
++ {
|
|
++ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
++ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
++ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
++ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
++ nProxyType = 1;
|
|
++ break;
|
|
++ default: // No proxy is used
|
|
++ nProxyType = 0;
|
|
++ }
|
|
++ return css::beans::Optional< css::uno::Any >(
|
|
++ true, uno::makeAny( (sal_Int32) nProxyType ) );
|
|
++ } else {
|
|
++ OSL_ASSERT(false); // this cannot happen
|
|
++ }
|
|
++ return css::beans::Optional< css::uno::Any >();
|
|
++}
|
|
++
|
|
++}
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN shell/source/backends/tdebe/tdeaccess.hxx shell/source/backends/tdebe/tdeaccess.hxx
|
|
+--- shell/source/backends/tdebe/tdeaccess.hxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ shell/source/backends/tdebe/tdeaccess.hxx 2011-08-17 14:16:31.565704001 -0500
|
|
+@@ -0,0 +1,51 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++*
|
|
++* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++*
|
|
++* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
++* Copyright 2011 Timothy Pearson
|
|
++*
|
|
++* OpenOffice.org - a multi-platform office productivity suite
|
|
++*
|
|
++* This file is part of OpenOffice.org.
|
|
++*
|
|
++* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++* it under the terms of the GNU Lesser General Public License version 3
|
|
++* only, as published by the Free Software Foundation.
|
|
++*
|
|
++* OpenOffice.org is distributed in the hope that it will be useful,
|
|
++* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++* GNU Lesser General Public License version 3 for more details
|
|
++* (a copy is included in the LICENSE file that accompanied this code).
|
|
++*
|
|
++* You should have received a copy of the GNU Lesser General Public License
|
|
++* version 3 along with OpenOffice.org. If not, see
|
|
++* <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")) &&
|
|
++ TDEApplication::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
|
|
++
|
|
++
|
|
++/* ********* TQt 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 <tdeaboutdata.h>
|
|
++#include <tdeapplication.h>
|
|
++#include <tdecmdlineargs.h>
|
|
++#include <tdeconfig.h>
|
|
++#include <tdeversion.h>
|
|
++#include <tdeemailsettings.h>
|
|
++#include <tdeglobal.h>
|
|
++#include <tdeglobalsettings.h>
|
|
++#include <tdelocale.h>
|
|
++#include <tdemainwindow.h>
|
|
++#include <tdemenubar.h>
|
|
++#include <tdeprotocolmanager.h>
|
|
++#include <tdestartupinfo.h>
|
|
++#include <tdestyle.h>
|
|
++
|
|
++
|
|
++/* ********* TDE address book connectivity headers */
|
|
++#include <tdeabc/addressbook.h>
|
|
++#include <tdeabc/addressee.h>
|
|
++#include <tdeabc/field.h>
|
|
++#include <tdeabc/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
|
|
++ tdemailservice "$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 TQStyle::drawControl(). The buttons are created
|
|
++ on demand and they are still hidden (no TQWidget::show() is called).
|
|
++ */
|
|
++ TQPushButton *m_pPushButton;
|
|
++
|
|
++ /** Cached radio button.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQRadioButton *m_pRadioButton;
|
|
++
|
|
++ /** Cached check box.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQCheckBox *m_pCheckBox;
|
|
++
|
|
++ /** Cached combo box.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQComboBox *m_pComboBox;
|
|
++
|
|
++ /** Cached editable combo box.
|
|
++
|
|
++ Needed, because some styles do not like dynamic changes
|
|
++ (TQComboBox::setEditable()).
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQComboBox *m_pEditableComboBox;
|
|
++
|
|
++ /** Cached line edit box.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQLineEdit *m_pLineEdit;
|
|
++
|
|
++ /** Cached spin box.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQSpinWidget *m_pSpinWidget;
|
|
++
|
|
++ /** Cached spin box'es line edit.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQLineEdit *m_pSpinEdit;
|
|
++
|
|
++ /** Cached tab.
|
|
++
|
|
++ Left, middle, right tab and a tab which is alone.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQTab *m_pTabLeft, *m_pTabMiddle, *m_pTabRight, *m_pTabAlone;
|
|
++
|
|
++ /** Cached tab bar's parent widget.
|
|
++
|
|
++ Needed, because the Qt windows style checks for the availability
|
|
++ of tab bar's parent. We cannot use m_pTabWidget, because
|
|
++ TabWidget::setTabBar() and TabWidget::tabBar() methods are
|
|
++ protected.
|
|
++
|
|
++ @see m_pPushButton, m_pTabWidget
|
|
++ */
|
|
++ TQWidget *m_pTabBarParent;
|
|
++
|
|
++ /** Cached tab bar widget.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQTabBar *m_pTabBar;
|
|
++
|
|
++ /** Cached tab widget.
|
|
++
|
|
++ We need it to draw the tab page. It cannot be used to draw the
|
|
++ tabs themselves, because the drawing has to be tweaked a little
|
|
++ due to not enough information from VCL.
|
|
++
|
|
++ @see m_pPushButton, m_pTabBarParent
|
|
++ */
|
|
++ TQTabWidget *m_pTabWidget;
|
|
++
|
|
++ /** Cached list view.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQListView *m_pListView;
|
|
++
|
|
++ /** Cached scroll bar.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQScrollBar *m_pScrollBar;
|
|
++
|
|
++ /** Cached dock area. Needed for proper functionality of tool bars.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQMainWindow *m_pMainWindow;
|
|
++
|
|
++ /** Cached tool bar.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQToolBar *m_pToolBarHoriz, *m_pToolBarVert;
|
|
++
|
|
++ /** Cached tool button.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQToolButton *m_pToolButton;
|
|
++
|
|
++ /** Cached menu bar.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQMenuBar *m_pMenuBar;
|
|
++
|
|
++ /** Identifiers of menu bar items.
|
|
++ */
|
|
++ int m_nMenuBarEnabledItem, m_nMenuBarDisabledItem;
|
|
++
|
|
++ /** Cached popup menu.
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ TQPopupMenu *m_pPopupMenu;
|
|
++
|
|
++ /** Identifiers of popup menu items.
|
|
++ */
|
|
++ int m_nPopupMenuEnabledItem, m_nPopupMenuDisabledItem;
|
|
++
|
|
++ /** cached progress bar
|
|
++ */
|
|
++ TQProgressBar *m_pProgressBar;
|
|
++
|
|
++ // TODO other widgets
|
|
++
|
|
++ public:
|
|
++ /** Implicit constructor.
|
|
++
|
|
++ It creates an empty WidgetPainter with all the cached widgets initialized
|
|
++ to NULL. The widgets are created on demand and they are still hidden
|
|
++ (no TQWidget::show()), because they are needed just as a parameter for
|
|
++ TQStyle::drawControl().
|
|
++
|
|
++ @see m_pPushButton
|
|
++ */
|
|
++ WidgetPainter( void );
|
|
++
|
|
++ /** Destructor.
|
|
++
|
|
++ Destruct all the cached widgets.
|
|
++ */
|
|
++ virtual ~WidgetPainter( void );
|
|
++
|
|
++ /** Paints the specified widget to the X window.
|
|
++
|
|
++ Use X calls to bitblt (bit block transfer) the widget qWidget to
|
|
++ the window specified by drawable with the style defined by nStyle.
|
|
++
|
|
++ @param qWidget
|
|
++ A pointer to the cached widget.
|
|
++
|
|
++ @param nState
|
|
++ The state of the control (focused, on/off, ...)
|
|
++
|
|
++ @param aValue
|
|
++ The value (true/false, ...)
|
|
++
|
|
++ @param dpy
|
|
++ The display to be used by the X calls.
|
|
++
|
|
++ @param drawable
|
|
++ The destination X window.
|
|
++
|
|
++ @param gc
|
|
++ The graphics context.
|
|
++ */
|
|
++ BOOL drawStyledWidget( TQWidget *pWidget,
|
|
++ ControlState nState, const ImplControlValue& aValue,
|
|
++ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc,
|
|
++ ControlPart nPart = PART_ENTIRE_CONTROL );
|
|
++
|
|
++ /** 'Get' method for push button.
|
|
++
|
|
++ The method returns the cached push button. It is constructed if it
|
|
++ does not exist. It has NULL as a parent and it stays hidden, but it
|
|
++ is necessary for the drawStyledWidget() method.
|
|
++
|
|
++ @return valid push button.
|
|
++ */
|
|
++ TQPushButton *pushButton( const Rectangle& rControlRegion, BOOL bDefault );
|
|
++
|
|
++ /** 'Get' method for radio button.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQRadioButton *radioButton( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for check box.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQCheckBox *checkBox( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for combo box.
|
|
++
|
|
++ It returns m_pComboBox or m_pEditableComboBox according to
|
|
++ bEditable.
|
|
++
|
|
++ @see pushButton(), m_pEditableComboBox
|
|
++ */
|
|
++ TQComboBox *comboBox( const Rectangle& rControlRegion, BOOL bEditable );
|
|
++
|
|
++ /** 'Get' method for line edit box.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQLineEdit *lineEdit( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for spin box.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQSpinWidget *spinWidget( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for tab bar.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQTabBar *tabBar( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for tab widget.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQTabWidget *tabWidget( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for list view.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQListView *listView( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for scroll bar.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQScrollBar *scrollBar( const Rectangle& rControlRegion,
|
|
++ BOOL bHorizontal, const ImplControlValue& aValue );
|
|
++
|
|
++ /** 'Get' method for tool bar.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQToolBar *toolBar( const Rectangle& rControlRegion, BOOL bHorizontal );
|
|
++
|
|
++ /** 'Get' method for tool button.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQToolButton *toolButton( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for menu bar.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQMenuBar *menuBar( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for popup menu.
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQPopupMenu *popupMenu( const Rectangle& rControlRegion );
|
|
++
|
|
++ /** 'Get' method for progress bar
|
|
++
|
|
++ @see pushButton()
|
|
++ */
|
|
++ TQProgressBar *progressBar( const Rectangle& rControlRegion );
|
|
++
|
|
++ // TODO other widgets
|
|
++
|
|
++ protected:
|
|
++ /** Style conversion function.
|
|
++
|
|
++ Conversion function between VCL ControlState together with
|
|
++ ImplControlValue and Qt state flags.
|
|
++
|
|
++ @param nState
|
|
++ State of the widget (default, focused, ...) as defined in Native
|
|
++ Widget Framework.
|
|
++
|
|
++ @param aValue
|
|
++ Value held by the widget (on, off, ...)
|
|
++ */
|
|
++ TQStyle::SFlags vclStateValue2SFlags( ControlState nState, const ImplControlValue& aValue );
|
|
++
|
|
++ public:
|
|
++ /** Convert VCL Rectangle to TQRect.
|
|
++
|
|
++ @param rControlRegion
|
|
++ The region to convert.
|
|
++
|
|
++ @return
|
|
++ The bounding box of the region.
|
|
++ */
|
|
++ static TQRect region2TQRect( const Rectangle& rControlRegion );
|
|
++};
|
|
++
|
|
++WidgetPainter::WidgetPainter( void )
|
|
++ : m_pPushButton( NULL ),
|
|
++ m_pRadioButton( NULL ),
|
|
++ m_pCheckBox( NULL ),
|
|
++ m_pComboBox( NULL ),
|
|
++ m_pEditableComboBox( NULL ),
|
|
++ m_pLineEdit( NULL ),
|
|
++ m_pSpinWidget( NULL ),
|
|
++ m_pSpinEdit( NULL ),
|
|
++ m_pTabLeft( NULL ),
|
|
++ m_pTabMiddle( NULL ),
|
|
++ m_pTabRight( NULL ),
|
|
++ m_pTabAlone( NULL ),
|
|
++ m_pTabBarParent( NULL ),
|
|
++ m_pTabBar( NULL ),
|
|
++ m_pTabWidget( NULL ),
|
|
++ m_pListView( NULL ),
|
|
++ m_pScrollBar( NULL ),
|
|
++ m_pMainWindow( NULL ),
|
|
++ m_pToolBarHoriz( NULL ),
|
|
++ m_pToolBarVert( NULL ),
|
|
++ m_pToolButton( NULL ),
|
|
++ m_pMenuBar( NULL ),
|
|
++ m_pPopupMenu( NULL ),
|
|
++ m_pProgressBar( NULL )
|
|
++{
|
|
++}
|
|
++
|
|
++WidgetPainter::~WidgetPainter( void )
|
|
++{
|
|
++ delete m_pPushButton, m_pPushButton = NULL;
|
|
++ delete m_pRadioButton, m_pRadioButton = NULL;
|
|
++ delete m_pCheckBox, m_pCheckBox = NULL;
|
|
++ delete m_pComboBox, m_pComboBox = NULL;
|
|
++ delete m_pEditableComboBox, m_pEditableComboBox = NULL;
|
|
++ delete m_pLineEdit, m_pLineEdit = NULL;
|
|
++ delete m_pSpinWidget, m_pSpinWidget = NULL;
|
|
++ m_pSpinEdit = NULL; // Deleted in m_pSpinWidget's destructor
|
|
++ delete m_pTabAlone, m_pTabAlone = NULL;
|
|
++ delete m_pTabBarParent, m_pTabBarParent = NULL;
|
|
++ m_pTabBar = NULL; // Deleted in m_pTabBarParent's destructor
|
|
++ m_pTabLeft = NULL;
|
|
++ m_pTabMiddle = NULL;
|
|
++ m_pTabRight = NULL;
|
|
++ delete m_pTabWidget, m_pTabWidget = NULL;
|
|
++ delete m_pListView, m_pListView = NULL;
|
|
++ delete m_pScrollBar, m_pScrollBar = NULL;
|
|
++ delete m_pToolBarHoriz, m_pToolBarHoriz = NULL;
|
|
++ delete m_pToolBarVert, m_pToolBarVert = NULL;
|
|
++ delete m_pMainWindow, m_pMainWindow = NULL;
|
|
++ delete m_pToolButton, m_pToolButton = NULL;
|
|
++ delete m_pMenuBar, m_pMenuBar = NULL;
|
|
++ delete m_pPopupMenu, m_pPopupMenu = NULL;
|
|
++ delete m_pProgressBar, m_pProgressBar = NULL;
|
|
++}
|
|
++
|
|
++BOOL WidgetPainter::drawStyledWidget( TQWidget *pWidget,
|
|
++ ControlState nState, const ImplControlValue& aValue,
|
|
++ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc,
|
|
++ ControlPart nPart )
|
|
++{
|
|
++ if ( !pWidget )
|
|
++ return FALSE;
|
|
++
|
|
++ // Normalize the widget
|
|
++ TQPoint qWidgetPos( pWidget->pos() );
|
|
++ pWidget->move( 0, 0 );
|
|
++
|
|
++ // Enable/disable the widget
|
|
++ pWidget->setEnabled( nState & CTRL_STATE_ENABLED );
|
|
++
|
|
++ // Create pixmap to paint to
|
|
++ TQPixmap qPixmap( pWidget->width(), pWidget->height() );
|
|
++ TQPainter qPainter( &qPixmap );
|
|
++ TQRect qRect( 0, 0, pWidget->width(), pWidget->height() );
|
|
++
|
|
++ // Use the background of the widget
|
|
++ qPixmap.fill( pWidget, TQPoint(0, 0) );
|
|
++
|
|
++ // Convert the flags
|
|
++ TQStyle::SFlags nStyle = vclStateValue2SFlags( nState, aValue );
|
|
++
|
|
++ // Store the widget class
|
|
++ const char *pClassName = pWidget->className();
|
|
++
|
|
++ // Draw the widget to the pixmap
|
|
++ if ( strcmp( TQPUSHBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ // Workaround for the Platinum style.
|
|
++ // Platinum takes the state directly from the widget, not from SFlags.
|
|
++ TQPushButton *pPushButton = static_cast<TQPushButton *>( pWidget->qt_cast( TQPUSHBUTTON_OBJECT_NAME_STRING ) );
|
|
++ if ( pPushButton )
|
|
++ {
|
|
++ pPushButton->setDown ( nStyle & TQStyle::Style_Down );
|
|
++ pPushButton->setOn ( nStyle & TQStyle::Style_On );
|
|
++ pPushButton->setEnabled( nStyle & TQStyle::Style_Enabled );
|
|
++ }
|
|
++
|
|
++ kapp->style().drawControl( TQStyle::CE_PushButton,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++ }
|
|
++ else if ( strcmp( TQRADIOBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ // Bitblt from the screen, because the radio buttons are usually not
|
|
++ // rectangular, and there could be a bitmap under them
|
|
++ GC aTmpGC = XCreateGC( dpy, qPixmap.handle(), 0, NULL );
|
|
++ X11SalGraphics::CopyScreenArea( dpy,
|
|
++ drawable, nScreen, nDepth,
|
|
++ qPixmap.handle(), qPixmap.x11Screen(), qPixmap.x11Depth(),
|
|
++ aTmpGC,
|
|
++ qWidgetPos.x(), qWidgetPos.y(), qRect.width(), qRect.height(),
|
|
++ 0, 0 );
|
|
++ XFreeGC( dpy, aTmpGC );
|
|
++
|
|
++ kapp->style().drawControl( TQStyle::CE_RadioButton,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++ }
|
|
++ else if ( strcmp( TQCHECKBOX_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ kapp->style().drawControl( TQStyle::CE_CheckBox,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++ }
|
|
++ else if ( strcmp( TQCOMBOBOX_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ kapp->style().drawComplexControl( TQStyle::CC_ComboBox,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++
|
|
++ // Editable combo box uses the background of the associated edit box
|
|
++ TQComboBox *pComboBox = static_cast<TQComboBox *>( pWidget->qt_cast( TQCOMBOBOX_OBJECT_NAME_STRING ) );
|
|
++ if ( pComboBox && pComboBox->editable() && pComboBox->lineEdit() )
|
|
++ {
|
|
++ TQColorGroup::ColorRole eColorRole = ( pComboBox->isEnabled() )?
|
|
++ TQColorGroup::Base: TQColorGroup::Background;
|
|
++ qPainter.fillRect(
|
|
++ kapp->style().querySubControlMetrics( TQStyle::CC_ComboBox,
|
|
++ pComboBox, TQStyle::SC_ComboBoxEditField ),
|
|
++ pComboBox->lineEdit()->colorGroup().brush( eColorRole ) );
|
|
++ }
|
|
++ }
|
|
++ else if ( strcmp( TQLINEEDIT_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ kapp->style().drawPrimitive( TQStyle::PE_PanelLineEdit,
|
|
++ &qPainter, qRect,
|
|
++ pWidget->colorGroup(), nStyle | TQStyle::Style_Sunken );
|
|
++ }
|
|
++ else if ( strcmp( TQSPINWIDGET_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ const SpinbuttonValue *pValue = static_cast<const SpinbuttonValue *> ( &aValue );
|
|
++
|
|
++ // Is any of the buttons pressed?
|
|
++ TQStyle::SCFlags eActive = TQStyle::SC_None;
|
|
++ if ( pValue )
|
|
++ {
|
|
++ if ( pValue->mnUpperState & CTRL_STATE_PRESSED )
|
|
++ eActive = TQStyle::SC_SpinWidgetUp;
|
|
++ else if ( pValue->mnLowerState & CTRL_STATE_PRESSED )
|
|
++ eActive = TQStyle::SC_SpinWidgetDown;
|
|
++
|
|
++ // Update the enable/disable state of the widget
|
|
++ if ( ( nState & CTRL_STATE_ENABLED ) ||
|
|
++ ( pValue->mnUpperState & CTRL_STATE_ENABLED ) ||
|
|
++ ( pValue->mnLowerState & CTRL_STATE_ENABLED ) )
|
|
++ {
|
|
++ pWidget->setEnabled( true );
|
|
++ nStyle |= TQStyle::Style_Enabled;
|
|
++ }
|
|
++ else
|
|
++ pWidget->setEnabled( false );
|
|
++
|
|
++ // Mouse-over effect
|
|
++ if ( (pValue->mnUpperState & CTRL_STATE_ROLLOVER) ||
|
|
++ (pValue->mnLowerState & CTRL_STATE_ROLLOVER) )
|
|
++ nStyle |= TQStyle::Style_MouseOver;
|
|
++ }
|
|
++
|
|
++ // Spin widget uses the background of the associated edit box
|
|
++ TQSpinWidget *pSpinWidget = static_cast<TQSpinWidget *>( pWidget->qt_cast( TQSPINWIDGET_OBJECT_NAME_STRING ) );
|
|
++ if ( pSpinWidget && pSpinWidget->editWidget() )
|
|
++ {
|
|
++ TQColorGroup::ColorRole eColorRole = ( pSpinWidget->isEnabled() )?
|
|
++ TQColorGroup::Base: TQColorGroup::Background;
|
|
++ qPainter.fillRect(
|
|
++ kapp->style().querySubControlMetrics( TQStyle::CC_SpinWidget,
|
|
++ pSpinWidget, TQStyle::SC_SpinWidgetEditField ),
|
|
++ pSpinWidget->editWidget()->colorGroup().brush( eColorRole ) );
|
|
++ }
|
|
++
|
|
++ // Adjust the frame (needed for Motif Plus style)
|
|
++ TQRect qFrameRect = kapp->style().querySubControlMetrics( TQStyle::CC_SpinWidget,
|
|
++ pWidget, TQStyle::SC_SpinWidgetFrame );
|
|
++
|
|
++ kapp->style().drawComplexControl( TQStyle::CC_SpinWidget,
|
|
++ &qPainter, pWidget, qFrameRect,
|
|
++ pWidget->colorGroup(), nStyle,
|
|
++ TQStyle::SC_All, eActive );
|
|
++ }
|
|
++ else if ( strcmp( TQTABBAR_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ const TabitemValue *pValue = static_cast<const TabitemValue *> ( &aValue );
|
|
++
|
|
++ TQTab *pTab = NULL;
|
|
++ if ( pValue )
|
|
++ {
|
|
++ if ( ( pValue->isFirst() || pValue->isLeftAligned() ) && ( pValue->isLast() || pValue->isRightAligned() ) )
|
|
++ pTab = m_pTabAlone;
|
|
++ else if ( pValue->isFirst() || pValue->isLeftAligned() )
|
|
++ pTab = m_pTabLeft;
|
|
++ else if ( pValue->isLast() || pValue->isRightAligned() )
|
|
++ pTab = m_pTabRight;
|
|
++ else
|
|
++ pTab = m_pTabMiddle;
|
|
++ }
|
|
++ if ( !pTab )
|
|
++ return FALSE;
|
|
++
|
|
++ pTab->setRect( qRect );
|
|
++
|
|
++ kapp->style().drawControl( TQStyle::CE_TabBarTab,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle,
|
|
++ TQStyleOption( pTab ) );
|
|
++ }
|
|
++ else if ( strcmp( TQTABWIDGET_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ kapp->style().drawPrimitive( TQStyle::PE_PanelTabWidget,
|
|
++ &qPainter, qRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++ }
|
|
++ else if ( strcmp( TQLISTVIEW_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ kapp->style().drawPrimitive( TQStyle::PE_Panel,
|
|
++ &qPainter, qRect,
|
|
++ pWidget->colorGroup(), nStyle | TQStyle::Style_Sunken );
|
|
++ }
|
|
++ else if ( strcmp( TQSCROLLBAR_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ const ScrollbarValue *pValue = static_cast<const ScrollbarValue *> ( &aValue );
|
|
++
|
|
++ TQStyle::SCFlags eActive = TQStyle::SC_None;
|
|
++ if ( pValue )
|
|
++ {
|
|
++ // Workaround for Style_MouseOver-aware themes.
|
|
++ // Quite ugly, but I do not know about a better solution.
|
|
++ const char *pStyleName = kapp->style().className();
|
|
++ if ( strcmp( "QMotifPlusStyle", pStyleName ) == 0 )
|
|
++ {
|
|
++ nStyle |= TQStyle::Style_MouseOver;
|
|
++ if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER )
|
|
++ eActive = TQStyle::SC_ScrollBarSlider;
|
|
++ }
|
|
++ else if ( strcmp( "QSGIStyle", pStyleName ) == 0 )
|
|
++ {
|
|
++ nStyle |= TQStyle::Style_MouseOver;
|
|
++ if ( pValue->mnButton1State & CTRL_STATE_ROLLOVER )
|
|
++ eActive = TQStyle::SC_ScrollBarSubLine;
|
|
++ else if ( pValue->mnButton2State & CTRL_STATE_ROLLOVER )
|
|
++ eActive = TQStyle::SC_ScrollBarAddLine;
|
|
++ else if ( pValue->mnThumbState & CTRL_STATE_ROLLOVER )
|
|
++ eActive = TQStyle::SC_ScrollBarSlider;
|
|
++ }
|
|
++
|
|
++ if ( pValue->mnButton1State & CTRL_STATE_PRESSED )
|
|
++ eActive = TQStyle::SC_ScrollBarSubLine;
|
|
++ else if ( pValue->mnButton2State & CTRL_STATE_PRESSED )
|
|
++ eActive = TQStyle::SC_ScrollBarAddLine;
|
|
++ else if ( pValue->mnThumbState & CTRL_STATE_PRESSED )
|
|
++ eActive = TQStyle::SC_ScrollBarSlider;
|
|
++ else if ( pValue->mnPage1State & CTRL_STATE_PRESSED )
|
|
++ eActive = TQStyle::SC_ScrollBarSubPage;
|
|
++ else if ( pValue->mnPage2State & CTRL_STATE_PRESSED )
|
|
++ eActive = TQStyle::SC_ScrollBarAddPage;
|
|
++
|
|
++ // Update the enable/disable state of the widget
|
|
++ if ( ( nState & CTRL_STATE_ENABLED ) ||
|
|
++ ( pValue->mnButton1State & CTRL_STATE_ENABLED ) ||
|
|
++ ( pValue->mnButton2State & CTRL_STATE_ENABLED ) ||
|
|
++ ( pValue->mnThumbState & CTRL_STATE_ENABLED ) ||
|
|
++ ( pValue->mnPage1State & CTRL_STATE_ENABLED ) ||
|
|
++ ( pValue->mnPage2State & CTRL_STATE_ENABLED ) )
|
|
++ {
|
|
++ pWidget->setEnabled( true );
|
|
++ nStyle |= TQStyle::Style_Enabled;
|
|
++ }
|
|
++ else
|
|
++ pWidget->setEnabled( false );
|
|
++ }
|
|
++
|
|
++ // Is it a horizontal scroll bar?
|
|
++ TQScrollBar *pScrollBar = static_cast<TQScrollBar *> ( pWidget->qt_cast( TQSCROLLBAR_OBJECT_NAME_STRING ) );
|
|
++ TQStyle::StyleFlags eHoriz = TQStyle::Style_Default;
|
|
++ if ( pScrollBar && pScrollBar->orientation() == Qt::Horizontal )
|
|
++ eHoriz = TQStyle::Style_Horizontal;
|
|
++
|
|
++ kapp->style().drawComplexControl( TQStyle::CC_ScrollBar,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle | eHoriz,
|
|
++ TQStyle::SC_All, eActive );
|
|
++ }
|
|
++ else if ( strcmp( TQTOOLBAR_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ TQToolBar *pToolBar = static_cast< TQToolBar * >( pWidget->qt_cast( TQTOOLBAR_OBJECT_NAME_STRING ) );
|
|
++ bool bIsHorizontal = false;
|
|
++ if ( pToolBar && pToolBar->orientation() == Qt::Horizontal )
|
|
++ {
|
|
++ nStyle |= TQStyle::Style_Horizontal;
|
|
++ bIsHorizontal = true;
|
|
++ }
|
|
++
|
|
++ kapp->style().drawControl( TQStyle::CE_DockWindowEmptyArea,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++
|
|
++ kapp->style().drawPrimitive( TQStyle::PE_PanelDockWindow,
|
|
++ &qPainter, qRect, pWidget->colorGroup(), nStyle );
|
|
++
|
|
++ if ( nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT )
|
|
++ {
|
|
++ const ToolbarValue *pValue = static_cast< const ToolbarValue * >( &aValue );
|
|
++
|
|
++ TQRect qThumbRect = region2TQRect( pValue->maGripRect );
|
|
++ qThumbRect.moveBy( -qWidgetPos.x(), -qWidgetPos.y() );
|
|
++ if ( bIsHorizontal )
|
|
++ qThumbRect.addCoords( 0, 2, 0, -3 ); // make the thumb a bit nicer
|
|
++ else
|
|
++ qThumbRect.addCoords( 2, 0, -3, 0 ); // make the thumb a bit nicer
|
|
++
|
|
++ if ( kapp->style().inherits( "HighColorStyle" ) ||
|
|
++ kapp->style().inherits( "HighContrastStyle" ) ||
|
|
++ kapp->style().inherits( "KeramikStyle" ) ||
|
|
++ kapp->style().inherits( "KThemeStyle" ) ||
|
|
++ kapp->style().inherits( "ThinKeramikStyle" ) )
|
|
++ {
|
|
++ // Workaround for the workaround in TDEStyle::drawPrimitive()
|
|
++ TDEStyle *pStyle = static_cast< TDEStyle * >( &kapp->style() );
|
|
++ pStyle->drawTDEStylePrimitive( TDEStyle::KPE_ToolBarHandle,
|
|
++ &qPainter, pToolBar, qThumbRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++ }
|
|
++ else
|
|
++ kapp->style().drawPrimitive( TQStyle::PE_DockWindowHandle,
|
|
++ &qPainter, qThumbRect, pWidget->colorGroup(), nStyle );
|
|
++ }
|
|
++ }
|
|
++ else if ( strcmp( TQTOOLBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ if( (nStyle & TQStyle::Style_MouseOver) )
|
|
++ nStyle &= ~TQStyle::Style_Off;
|
|
++ kapp->style().drawComplexControl( TQStyle::CC_ToolButton,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle,
|
|
++ TQStyle::SC_ToolButton );
|
|
++ }
|
|
++ else if ( strcmp( TQMENUBAR_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ if ( nPart == PART_ENTIRE_CONTROL )
|
|
++ {
|
|
++ kapp->style().drawControl( TQStyle::CE_MenuBarEmptyArea,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++ }
|
|
++ else if ( nPart == PART_MENU_ITEM )
|
|
++ {
|
|
++ int nMenuItem = ( nStyle & TQStyle::Style_Enabled )? m_nMenuBarEnabledItem: m_nMenuBarDisabledItem;
|
|
++ TQMenuItem *pMenuItem = static_cast<TQMenuBar*>( pWidget )->findItem( nMenuItem );
|
|
++
|
|
++ if ( nStyle & TQStyle::Style_Selected )
|
|
++ nStyle |= TQStyle::Style_Active | TQStyle::Style_Down | TQStyle::Style_HasFocus;
|
|
++
|
|
++ kapp->style().drawControl( TQStyle::CE_MenuBarItem,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle,
|
|
++ TQStyleOption( pMenuItem ) );
|
|
++ }
|
|
++ }
|
|
++ else if ( strcmp( TQPOPUPMENU_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ int nMenuItem = ( nStyle & TQStyle::Style_Enabled )? m_nPopupMenuEnabledItem: m_nPopupMenuDisabledItem;
|
|
++ TQMenuItem *pMenuItem = static_cast<TQPopupMenu*>( pWidget )->findItem( nMenuItem );
|
|
++
|
|
++ if ( nStyle & TQStyle::Style_Selected )
|
|
++ nStyle |= TQStyle::Style_Active;
|
|
++
|
|
++ kapp->style().drawControl( TQStyle::CE_PopupMenuItem,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle,
|
|
++ TQStyleOption( pMenuItem, 0, 0 ) );
|
|
++ }
|
|
++ else if ( strcmp( TQPROGRESSBAR_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
++ {
|
|
++ long nProgressWidth = aValue.getNumericVal();
|
|
++ TQProgressBar* pProgress = static_cast<TQProgressBar*>(pWidget);
|
|
++ pProgress->setProgress( nProgressWidth, qRect.width() );
|
|
++
|
|
++ kapp->style().drawControl( TQStyle::CE_ProgressBarGroove,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++ kapp->style().drawControl( TQStyle::CE_ProgressBarContents,
|
|
++ &qPainter, pWidget, qRect,
|
|
++ pWidget->colorGroup(), nStyle );
|
|
++ }
|
|
++ else
|
|
++ return FALSE;
|
|
++
|
|
++ // Bitblt it to the screen
|
|
++ X11SalGraphics::CopyScreenArea( dpy,
|
|
++ qPixmap.handle(), qPixmap.x11Screen(), qPixmap.x11Depth(),
|
|
++ drawable, nScreen, nDepth,
|
|
++ gc,
|
|
++ 0, 0, qRect.width(), qRect.height(),
|
|
++ qWidgetPos.x(), qWidgetPos.y() );
|
|
++
|
|
++ // Restore widget's position
|
|
++ pWidget->move( qWidgetPos );
|
|
++
|
|
++ return TRUE;
|
|
++}
|
|
++
|
|
++TQPushButton *WidgetPainter::pushButton( const Rectangle& rControlRegion,
|
|
++ BOOL bDefault )
|
|
++{
|
|
++ if ( !m_pPushButton )
|
|
++ m_pPushButton = new TQPushButton( NULL, "push_button" );
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ // Workaround for broken styles which do not add
|
|
++ // TQStyle::PM_ButtonDefaultIndicator to the size of the default button
|
|
++ // (for example Keramik)
|
|
++ // FIXME Fix Keramik style to be consistant with Qt built-in styles. Aargh!
|
|
++ if ( bDefault )
|
|
++ {
|
|
++ TQSize qContentsSize( 50, 50 );
|
|
++ m_pPushButton->setDefault( false );
|
|
++ TQSize qNormalSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton,
|
|
++ m_pPushButton, qContentsSize );
|
|
++ m_pPushButton->setDefault( true );
|
|
++ TQSize qDefSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton,
|
|
++ m_pPushButton, qContentsSize );
|
|
++
|
|
++ int nIndicatorSize = kapp->style().pixelMetric(
|
|
++ TQStyle::PM_ButtonDefaultIndicator, m_pPushButton );
|
|
++ if ( qNormalSize.width() == qDefSize.width() )
|
|
++ qRect.addCoords( nIndicatorSize, 0, -nIndicatorSize, 0 );
|
|
++ if ( qNormalSize.height() == qDefSize.height() )
|
|
++ qRect.addCoords( 0, nIndicatorSize, 0, -nIndicatorSize );
|
|
++ }
|
|
++
|
|
++ m_pPushButton->move( qRect.topLeft() );
|
|
++ m_pPushButton->resize( qRect.size() );
|
|
++ m_pPushButton->setDefault( bDefault );
|
|
++
|
|
++ return m_pPushButton;
|
|
++}
|
|
++
|
|
++TQRadioButton *WidgetPainter::radioButton( const Rectangle& rControlRegion )
|
|
++{
|
|
++ if ( !m_pRadioButton )
|
|
++ m_pRadioButton = new TQRadioButton( NULL, "radio_button" );
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ // Workaround for broken themes which do not honor the given size.
|
|
++ // Quite ugly, but I do not know about a better solution.
|
|
++ const char *pStyleName = kapp->style().className();
|
|
++ if ( strcmp( "KThemeStyle", pStyleName ) == 0 )
|
|
++ {
|
|
++ TQRect qOldRect( qRect );
|
|
++
|
|
++ qRect.setWidth( kapp->style().pixelMetric(
|
|
++ TQStyle::PM_ExclusiveIndicatorWidth, m_pRadioButton ) );
|
|
++ qRect.setHeight( kapp->style().pixelMetric(
|
|
++ TQStyle::PM_ExclusiveIndicatorHeight, m_pRadioButton ) );
|
|
++
|
|
++ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2,
|
|
++ ( qOldRect.height() - qRect.height() ) / 2 );
|
|
++ }
|
|
++
|
|
++ m_pRadioButton->move( qRect.topLeft() );
|
|
++ m_pRadioButton->resize( qRect.size() );
|
|
++
|
|
++ return m_pRadioButton;
|
|
++}
|
|
++
|
|
++TQCheckBox *WidgetPainter::checkBox( const Rectangle& rControlRegion )
|
|
++{
|
|
++ if ( !m_pCheckBox )
|
|
++ m_pCheckBox = new TQCheckBox( NULL, "check_box" );
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ // Workaround for broken themes which do not honor the given size.
|
|
++ // Quite ugly, but I do not know about a better solution.
|
|
++ const char *pStyleName = kapp->style().className();
|
|
++ if ( strcmp( "KThemeStyle", pStyleName ) == 0 )
|
|
++ {
|
|
++ TQRect qOldRect( qRect );
|
|
++
|
|
++ qRect.setWidth( kapp->style().pixelMetric(
|
|
++ TQStyle::PM_IndicatorWidth, m_pCheckBox ) );
|
|
++ qRect.setHeight( kapp->style().pixelMetric(
|
|
++ TQStyle::PM_IndicatorHeight, m_pCheckBox ) );
|
|
++
|
|
++ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2,
|
|
++ ( qOldRect.height() - qRect.height() ) / 2 );
|
|
++ }
|
|
++
|
|
++ m_pCheckBox->move( qRect.topLeft() );
|
|
++ m_pCheckBox->resize( qRect.size() );
|
|
++
|
|
++ return m_pCheckBox;
|
|
++}
|
|
++
|
|
++TQComboBox *WidgetPainter::comboBox( const Rectangle& rControlRegion,
|
|
++ BOOL bEditable )
|
|
++{
|
|
++ TQComboBox *pComboBox = NULL;
|
|
++ if ( bEditable )
|
|
++ {
|
|
++ if ( !m_pEditableComboBox )
|
|
++ m_pEditableComboBox = new TQComboBox( true, NULL, "combo_box_edit" );
|
|
++ pComboBox = m_pEditableComboBox;
|
|
++ }
|
|
++ else
|
|
++ {
|
|
++ if ( !m_pComboBox )
|
|
++ m_pComboBox = new TQComboBox( false, NULL, "combo_box" );
|
|
++ pComboBox = m_pComboBox;
|
|
++ }
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ pComboBox->move( qRect.topLeft() );
|
|
++ pComboBox->resize( qRect.size() );
|
|
++
|
|
++ return pComboBox;
|
|
++}
|
|
++
|
|
++TQLineEdit *WidgetPainter::lineEdit( const Rectangle& rControlRegion )
|
|
++{
|
|
++ if ( !m_pLineEdit )
|
|
++ m_pLineEdit = new TQLineEdit( NULL, "line_edit" );
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ m_pLineEdit->move( qRect.topLeft() );
|
|
++ m_pLineEdit->resize( qRect.size() );
|
|
++
|
|
++ return m_pLineEdit;
|
|
++}
|
|
++
|
|
++TQSpinWidget *WidgetPainter::spinWidget( const Rectangle& rControlRegion )
|
|
++{
|
|
++ if ( !m_pSpinWidget )
|
|
++ {
|
|
++ m_pSpinWidget = new TQSpinWidget( NULL, "spin_widget" );
|
|
++
|
|
++ m_pSpinEdit = new TQLineEdit( NULL, "line_edit_spin" );
|
|
++ m_pSpinWidget->setEditWidget( m_pSpinEdit );
|
|
++ }
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ m_pSpinWidget->move( qRect.topLeft() );
|
|
++ m_pSpinWidget->resize( qRect.size() );
|
|
++ m_pSpinWidget->arrange();
|
|
++
|
|
++ return m_pSpinWidget;
|
|
++}
|
|
++
|
|
++TQTabBar *WidgetPainter::tabBar( const Rectangle& rControlRegion )
|
|
++{
|
|
++ if ( !m_pTabBar )
|
|
++ {
|
|
++ if ( !m_pTabBarParent )
|
|
++ m_pTabBarParent = new TQWidget( NULL, "tab_bar_parent" );
|
|
++
|
|
++ m_pTabBar = new TQTabBar( m_pTabBarParent, "tab_bar" );
|
|
++
|
|
++ m_pTabLeft = new TQTab();
|
|
++ m_pTabMiddle = new TQTab();
|
|
++ m_pTabRight = new TQTab();
|
|
++ m_pTabAlone = new TQTab();
|
|
++
|
|
++ m_pTabBar->addTab( m_pTabLeft );
|
|
++ m_pTabBar->addTab( m_pTabMiddle );
|
|
++ m_pTabBar->addTab( m_pTabRight );
|
|
++ }
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ m_pTabBar->move( qRect.topLeft() );
|
|
++ m_pTabBar->resize( qRect.size() );
|
|
++
|
|
++ m_pTabBar->setShape( TQTabBar::RoundedAbove );
|
|
++
|
|
++ return m_pTabBar;
|
|
++}
|
|
++
|
|
++TQTabWidget *WidgetPainter::tabWidget( const Rectangle& rControlRegion )
|
|
++{
|
|
++ if ( !m_pTabWidget )
|
|
++ m_pTabWidget = new TQTabWidget( NULL, "tab_widget" );
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++ --qRect.rTop();
|
|
++
|
|
++ m_pTabWidget->move( qRect.topLeft() );
|
|
++ m_pTabWidget->resize( qRect.size() );
|
|
++
|
|
++ return m_pTabWidget;
|
|
++}
|
|
++
|
|
++TQListView *WidgetPainter::listView( const Rectangle& rControlRegion )
|
|
++{
|
|
++ if ( !m_pListView )
|
|
++ m_pListView = new TQListView( NULL, "list_view" );
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ m_pListView->move( qRect.topLeft() );
|
|
++ m_pListView->resize( qRect.size() );
|
|
++
|
|
++ return m_pListView;
|
|
++}
|
|
++
|
|
++TQScrollBar *WidgetPainter::scrollBar( const Rectangle& rControlRegion,
|
|
++ BOOL bHorizontal, const ImplControlValue& aValue )
|
|
++{
|
|
++ if ( !m_pScrollBar )
|
|
++ {
|
|
++ m_pScrollBar = new TQScrollBar( NULL, "scroll_bar" );
|
|
++ m_pScrollBar->setTracking( false );
|
|
++ m_pScrollBar->setLineStep( 1 );
|
|
++ }
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ m_pScrollBar->move( qRect.topLeft() );
|
|
++ m_pScrollBar->resize( qRect.size() );
|
|
++ m_pScrollBar->setOrientation( bHorizontal? Qt::Horizontal: Qt::Vertical );
|
|
++
|
|
++ const ScrollbarValue *pValue = static_cast<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;
|
|
++}
|
|
++
|
|
++TQToolBar *WidgetPainter::toolBar( const Rectangle& rControlRegion, BOOL bHorizontal )
|
|
++{
|
|
++ if ( !m_pMainWindow )
|
|
++ m_pMainWindow = new TQMainWindow( NULL, "main_window" );
|
|
++
|
|
++ TQToolBar *pToolBar;
|
|
++ if ( bHorizontal )
|
|
++ {
|
|
++ if ( !m_pToolBarHoriz )
|
|
++ {
|
|
++ m_pToolBarHoriz = new TQToolBar( m_pMainWindow, "tool_bar_horiz" );
|
|
++ m_pMainWindow->moveDockWindow( m_pToolBarHoriz, Qt::DockTop );
|
|
++ }
|
|
++ pToolBar = m_pToolBarHoriz;
|
|
++ }
|
|
++ else
|
|
++ {
|
|
++ if ( !m_pToolBarVert )
|
|
++ {
|
|
++ m_pToolBarVert = new TQToolBar( m_pMainWindow, "tool_bar_horiz" );
|
|
++ m_pMainWindow->moveDockWindow( m_pToolBarVert, Qt::DockLeft );
|
|
++ }
|
|
++ pToolBar = m_pToolBarVert;
|
|
++ }
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ pToolBar->move( qRect.topLeft() );
|
|
++ pToolBar->resize( qRect.size() );
|
|
++
|
|
++ return pToolBar;
|
|
++}
|
|
++
|
|
++TQToolButton *WidgetPainter::toolButton( const Rectangle& rControlRegion)
|
|
++{
|
|
++ if ( !m_pToolButton )
|
|
++ m_pToolButton = new TQToolButton( NULL, "tool_button" );
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ m_pToolButton->move( qRect.topLeft() );
|
|
++ m_pToolButton->resize( qRect.size() );
|
|
++
|
|
++ return m_pToolButton;
|
|
++}
|
|
++
|
|
++TQMenuBar *WidgetPainter::menuBar( const Rectangle& rControlRegion)
|
|
++{
|
|
++ if ( !m_pMenuBar )
|
|
++ {
|
|
++ m_pMenuBar = new TQMenuBar( NULL, "menu_bar" );
|
|
++
|
|
++ m_nMenuBarEnabledItem = m_pMenuBar->insertItem( "" );
|
|
++ m_nMenuBarDisabledItem = m_pMenuBar->insertItem( "" );
|
|
++
|
|
++ m_pMenuBar->setItemEnabled( m_nMenuBarEnabledItem, true );
|
|
++ m_pMenuBar->setItemEnabled( m_nMenuBarDisabledItem, false );
|
|
++ }
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ m_pMenuBar->move( qRect.topLeft() );
|
|
++ m_pMenuBar->resize( qRect.size() );
|
|
++
|
|
++ return m_pMenuBar;
|
|
++}
|
|
++
|
|
++TQPopupMenu *WidgetPainter::popupMenu( const Rectangle& rControlRegion)
|
|
++{
|
|
++ if ( !m_pPopupMenu )
|
|
++ {
|
|
++ m_pPopupMenu = new TQPopupMenu( NULL, "popup_menu" );
|
|
++
|
|
++ m_nPopupMenuEnabledItem = m_pPopupMenu->insertItem( "" );
|
|
++ m_nPopupMenuDisabledItem = m_pPopupMenu->insertItem( "" );
|
|
++
|
|
++ m_pPopupMenu->setItemEnabled( m_nPopupMenuEnabledItem, true );
|
|
++ m_pPopupMenu->setItemEnabled( m_nPopupMenuDisabledItem, false );
|
|
++ }
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ m_pPopupMenu->move( qRect.topLeft() );
|
|
++ m_pPopupMenu->resize( qRect.size() );
|
|
++
|
|
++ return m_pPopupMenu;
|
|
++}
|
|
++
|
|
++TQProgressBar *WidgetPainter::progressBar( const Rectangle& rControlRegion )
|
|
++{
|
|
++ if ( !m_pProgressBar )
|
|
++ m_pProgressBar = new TQProgressBar( NULL, "progress_bar" );
|
|
++
|
|
++ TQRect qRect = region2TQRect( rControlRegion );
|
|
++
|
|
++ m_pProgressBar->move( qRect.topLeft() );
|
|
++ m_pProgressBar->resize( qRect.size() );
|
|
++
|
|
++ return m_pProgressBar;
|
|
++}
|
|
++
|
|
++TQStyle::SFlags WidgetPainter::vclStateValue2SFlags( ControlState nState,
|
|
++ const ImplControlValue& aValue )
|
|
++{
|
|
++ TQStyle::SFlags nStyle =
|
|
++ ( (nState & CTRL_STATE_DEFAULT)? TQStyle::Style_ButtonDefault: TQStyle::Style_Default ) |
|
|
++ ( (nState & CTRL_STATE_ENABLED)? TQStyle::Style_Enabled: TQStyle::Style_Default ) |
|
|
++ ( (nState & CTRL_STATE_FOCUSED)? TQStyle::Style_HasFocus: TQStyle::Style_Default ) |
|
|
++ ( (nState & CTRL_STATE_PRESSED)? TQStyle::Style_Down: TQStyle::Style_Raised ) |
|
|
++ ( (nState & CTRL_STATE_SELECTED)? TQStyle::Style_Selected : TQStyle::Style_Default ) |
|
|
++ ( (nState & CTRL_STATE_ROLLOVER)? TQStyle::Style_MouseOver: TQStyle::Style_Default );
|
|
++ //TODO ( (nState & CTRL_STATE_HIDDEN)? TQStyle::Style_: TQStyle::Style_Default ) |
|
|
++
|
|
++ switch ( aValue.getTristateVal() )
|
|
++ {
|
|
++ case BUTTONVALUE_ON: nStyle |= TQStyle::Style_On; break;
|
|
++ case BUTTONVALUE_OFF: nStyle |= TQStyle::Style_Off; break;
|
|
++ case BUTTONVALUE_MIXED: nStyle |= TQStyle::Style_NoChange; break;
|
|
++ default: break;
|
|
++ }
|
|
++
|
|
++ return nStyle;
|
|
++}
|
|
++
|
|
++TQRect WidgetPainter::region2TQRect( const Rectangle& rControlRegion )
|
|
++{
|
|
++ return TQRect( TQPoint( rControlRegion.Left(), rControlRegion.Top() ),
|
|
++ TQPoint( rControlRegion.Right(), rControlRegion.Bottom() ) );
|
|
++}
|
|
++
|
|
++/** Instance of WidgetPainter.
|
|
++
|
|
++ It is used to paint the widgets requested by NWF.
|
|
++*/
|
|
++static WidgetPainter *pWidgetPainter;
|
|
++
|
|
++class TDESalGraphics : public X11SalGraphics
|
|
++{
|
|
++ public:
|
|
++ TDESalGraphics() {}
|
|
++ virtual ~TDESalGraphics() {}
|
|
++ virtual BOOL IsNativeControlSupported( ControlType nType, ControlPart nPart );
|
|
++ virtual BOOL hitTestNativeControl( ControlType nType, ControlPart nPart,
|
|
++ const Rectangle& rControlRegion, const Point& aPos,
|
|
++ BOOL& rIsInside );
|
|
++ virtual BOOL drawNativeControl( ControlType nType, ControlPart nPart,
|
|
++ const Rectangle& rControlRegion, ControlState nState,
|
|
++ const ImplControlValue& aValue,
|
|
++ const OUString& aCaption );
|
|
++ virtual BOOL drawNativeControlText( ControlType nType, ControlPart nPart,
|
|
++ const Rectangle& rControlRegion, ControlState nState,
|
|
++ const ImplControlValue& aValue,
|
|
++ const OUString& aCaption );
|
|
++ virtual BOOL getNativeControlRegion( ControlType nType, ControlPart nPart,
|
|
++ const Rectangle& rControlRegion, ControlState nState,
|
|
++ const ImplControlValue& aValue,
|
|
++ const OUString& aCaption,
|
|
++ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion );
|
|
++};
|
|
++
|
|
++/** What widgets can be drawn the native way.
|
|
++
|
|
++ @param nType
|
|
++ Type of the widget.
|
|
++
|
|
++ @param nPart
|
|
++ Specification of the widget's part if it consists of more than one.
|
|
++
|
|
++ @return TRUE if the platform supports native drawing of the widget nType
|
|
++ defined by nPart.
|
|
++*/
|
|
++BOOL TDESalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nPart )
|
|
++{
|
|
++ return
|
|
++ ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
++ ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
++ ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
++ ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) ||
|
|
++ ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) ||
|
|
++ ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_WINDOW || nPart == HAS_BACKGROUND_TEXTURE ) ) ||
|
|
++ ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) ||
|
|
++ // no CTRL_SPINBUTTONS for TDE
|
|
++ ( (nType == CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
++ ( (nType == CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
++ // no CTRL_TAB_BODY for TDE
|
|
++ ( (nType == CTRL_SCROLLBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) ) ||
|
|
++ ( (nType == CTRL_SCROLLBAR) && (nPart == HAS_THREE_BUTTONS) ) || // TODO small optimization is possible here: return this only if the style really has 3 buttons
|
|
++ // CTRL_GROUPBOX not supported
|
|
++ // CTRL_FIXEDLINE not supported
|
|
++ // CTRL_FIXEDBORDER not supported
|
|
++ ( (nType == CTRL_TOOLBAR) && (nPart == PART_ENTIRE_CONTROL ||
|
|
++ nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT ||
|
|
++ nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT ||
|
|
++ nPart == PART_BUTTON) ) ||
|
|
++ ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) ||
|
|
++ ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) ||
|
|
++ ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ ;
|
|
++}
|
|
++
|
|
++
|
|
++/** Test whether the position is in the native widget.
|
|
++
|
|
++ If the return value is TRUE, bIsInside contains information whether
|
|
++ aPos was or was not inside the native widget specified by the
|
|
++ nType/nPart combination.
|
|
++*/
|
|
++BOOL TDESalGraphics::hitTestNativeControl( ControlType nType, ControlPart nPart,
|
|
++ const Rectangle& rControlRegion, const Point& rPos,
|
|
++ BOOL& rIsInside )
|
|
++{
|
|
++ if ( nType == CTRL_SCROLLBAR )
|
|
++ {
|
|
++ // make position relative to rControlRegion
|
|
++ Point aPos = rPos - rControlRegion.TopLeft();
|
|
++ rIsInside = FALSE;
|
|
++
|
|
++ BOOL bHorizontal = ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT );
|
|
++
|
|
++ TQScrollBar *pScrollBar = pWidgetPainter->scrollBar( rControlRegion,
|
|
++ bHorizontal, ImplControlValue() );
|
|
++ TQRect qRectSubLine = kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubLine );
|
|
++ TQRect qRectAddLine = kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarAddLine );
|
|
++
|
|
++ // There are 2 buttons on the right/bottom side of the scrollbar
|
|
++ BOOL bTwoSubButtons = FALSE;
|
|
++
|
|
++ // It is a Platinum style scroll bar
|
|
++ BOOL bPlatinumStyle = FALSE;
|
|
++
|
|
++ // Workaround for Platinum and 3 button style scroll bars.
|
|
++ // It makes the right/down button bigger.
|
|
++ if ( bHorizontal )
|
|
++ {
|
|
++ qRectAddLine.setLeft( kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pScrollBar,
|
|
++ TQStyle::SC_ScrollBarAddPage ).right() + 1 );
|
|
++ if ( qRectAddLine.width() > qRectSubLine.width() )
|
|
++ bTwoSubButtons = TRUE;
|
|
++ if ( qRectSubLine.left() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).left() )
|
|
++ bPlatinumStyle = TRUE;
|
|
++ }
|
|
++ else
|
|
++ {
|
|
++ qRectAddLine.setTop( kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pScrollBar,
|
|
++ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 );
|
|
++ if ( qRectAddLine.height() > qRectSubLine.height() )
|
|
++ bTwoSubButtons = TRUE;
|
|
++ if ( qRectSubLine.top() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).top() )
|
|
++ bPlatinumStyle = TRUE;
|
|
++ }
|
|
++
|
|
++ switch ( nPart )
|
|
++ {
|
|
++ case PART_BUTTON_LEFT:
|
|
++ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) )
|
|
++ rIsInside = TRUE;
|
|
++ else if ( bTwoSubButtons )
|
|
++ {
|
|
++ qRectAddLine.setWidth( qRectAddLine.width() / 2 );
|
|
++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() );
|
|
++ }
|
|
++ break;
|
|
++
|
|
++ case PART_BUTTON_UP:
|
|
++ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) )
|
|
++ rIsInside = TRUE;
|
|
++ else if ( bTwoSubButtons )
|
|
++ {
|
|
++ qRectAddLine.setHeight( qRectAddLine.height() / 2 );
|
|
++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() );
|
|
++ }
|
|
++ break;
|
|
++
|
|
++ case PART_BUTTON_RIGHT:
|
|
++ if ( bTwoSubButtons )
|
|
++ qRectAddLine.setLeft( qRectAddLine.left() + qRectAddLine.width() / 2 );
|
|
++
|
|
++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() );
|
|
++ break;
|
|
++
|
|
++ case PART_BUTTON_DOWN:
|
|
++ if ( bTwoSubButtons )
|
|
++ qRectAddLine.setTop( qRectAddLine.top() + qRectAddLine.height() / 2 );
|
|
++
|
|
++ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() );
|
|
++ break;
|
|
++
|
|
++ // cases PART_TRACK_HORZ_AREA and PART_TRACK_VERT_AREA
|
|
++ default:
|
|
++ return FALSE;
|
|
++ }
|
|
++
|
|
++ return TRUE;
|
|
++ }
|
|
++
|
|
++ return FALSE;
|
|
++}
|
|
++
|
|
++
|
|
++/** Draw the requested control described by nPart/nState.
|
|
++
|
|
++ @param rControlRegion
|
|
++ The bounding region of the complete control in VCL frame coordinates.
|
|
++
|
|
++ @param aValue
|
|
++ An optional value (tristate/numerical/string).
|
|
++
|
|
++ @param aCaption
|
|
++ A caption or title string (like button text etc.)
|
|
++*/
|
|
++BOOL TDESalGraphics::drawNativeControl( ControlType nType, ControlPart nPart,
|
|
++ const Rectangle& rControlRegion, ControlState nState,
|
|
++ const ImplControlValue& aValue,
|
|
++ const OUString& )
|
|
++{
|
|
++ BOOL bReturn = FALSE;
|
|
++
|
|
++ Display *dpy = GetXDisplay();
|
|
++ XLIB_Window drawable = GetDrawable();
|
|
++ GC gc = SelectPen(); //SelectFont(); // GC with current clipping region set
|
|
++
|
|
++ if ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->pushButton( rControlRegion, (nState & CTRL_STATE_DEFAULT) ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->radioButton( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->checkBox( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->comboBox( rControlRegion, TRUE ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->lineEdit( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->comboBox( rControlRegion, FALSE ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_WINDOW) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->listView( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->spinWidget( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType==CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->tabBar( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType==CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->tabWidget( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_SCROLLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->scrollBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ, aValue ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT || nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->toolBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_THUMB_VERT ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart );
|
|
++ }
|
|
++ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_BUTTON) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->toolButton( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart );
|
|
++ }
|
|
++ else if ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->menuBar( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart );
|
|
++ }
|
|
++ else if ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->popupMenu( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++ else if ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) )
|
|
++ {
|
|
++ bReturn = pWidgetPainter->drawStyledWidget(
|
|
++ pWidgetPainter->progressBar( rControlRegion ),
|
|
++ nState, aValue,
|
|
++ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
++ }
|
|
++
|
|
++ return bReturn;
|
|
++}
|
|
++
|
|
++
|
|
++/** Draw text on the widget.
|
|
++
|
|
++ OPTIONAL. Draws the requested text for the control described by nPart/nState.
|
|
++ Used if text is not drawn by DrawNativeControl().
|
|
++
|
|
++ @param rControlRegion
|
|
++ The bounding region of the complete control in VCL frame coordinates.
|
|
++
|
|
++ @param aValue
|
|
++ An optional value (tristate/numerical/string)
|
|
++
|
|
++ @param aCaption
|
|
++ A caption or title string (like button text etc.)
|
|
++*/
|
|
++BOOL TDESalGraphics::drawNativeControlText( ControlType, ControlPart,
|
|
++ const Rectangle&, ControlState,
|
|
++ const ImplControlValue&,
|
|
++ const OUString& )
|
|
++{
|
|
++ return FALSE;
|
|
++}
|
|
++
|
|
++/** Check if the bounding regions match.
|
|
++
|
|
++ If the return value is TRUE, rNativeBoundingRegion
|
|
++ contains the true bounding region covered by the control
|
|
++ including any adornment, while rNativeContentRegion contains the area
|
|
++ within the control that can be safely drawn into without drawing over
|
|
++ the borders of the control.
|
|
++
|
|
++ @param rControlRegion
|
|
++ The bounding region of the control in VCL frame coordinates.
|
|
++
|
|
++ @param aValue
|
|
++ An optional value (tristate/numerical/string)
|
|
++
|
|
++ @param aCaption
|
|
++ A caption or title string (like button text etc.)
|
|
++*/
|
|
++BOOL TDESalGraphics::getNativeControlRegion( ControlType nType, ControlPart nPart,
|
|
++ const Rectangle& rControlRegion, ControlState nState,
|
|
++ const ImplControlValue&,
|
|
++ const OUString&,
|
|
++ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion )
|
|
++{
|
|
++ BOOL bReturn = FALSE;
|
|
++ TQRect qBoundingRect = WidgetPainter::region2TQRect( rControlRegion );
|
|
++ TQRect qRect;
|
|
++
|
|
++ TQWidget *pWidget = NULL;
|
|
++ switch ( nType )
|
|
++ {
|
|
++ // Metrics of the push button
|
|
++ case CTRL_PUSHBUTTON:
|
|
++ pWidget = pWidgetPainter->pushButton( rControlRegion, ( nState & CTRL_STATE_DEFAULT ) );
|
|
++
|
|
++ switch ( nPart )
|
|
++ {
|
|
++ case PART_ENTIRE_CONTROL:
|
|
++ qRect = qBoundingRect;
|
|
++
|
|
++ if ( nState & CTRL_STATE_DEFAULT )
|
|
++ {
|
|
++ int nIndicatorSize = kapp->style().pixelMetric(
|
|
++ TQStyle::PM_ButtonDefaultIndicator, pWidget );
|
|
++ qBoundingRect.addCoords( -nIndicatorSize, -nIndicatorSize,
|
|
++ nIndicatorSize, nIndicatorSize );
|
|
++ bReturn = TRUE;
|
|
++ }
|
|
++ break;
|
|
++ }
|
|
++ break;
|
|
++
|
|
++ // Metrics of the radio button
|
|
++ case CTRL_RADIOBUTTON:
|
|
++ pWidget = pWidgetPainter->radioButton( rControlRegion );
|
|
++
|
|
++ if ( nPart == PART_ENTIRE_CONTROL )
|
|
++ {
|
|
++ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorWidth, pWidget ) );
|
|
++ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorHeight, pWidget ) );
|
|
++
|
|
++ bReturn = TRUE;
|
|
++ }
|
|
++ break;
|
|
++
|
|
++ // Metrics of the check box
|
|
++ case CTRL_CHECKBOX:
|
|
++ pWidget = pWidgetPainter->checkBox( rControlRegion );
|
|
++
|
|
++ if ( nPart == PART_ENTIRE_CONTROL )
|
|
++ {
|
|
++ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_IndicatorWidth, pWidget ) );
|
|
++ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_IndicatorHeight, pWidget ) );
|
|
++
|
|
++ bReturn = TRUE;
|
|
++ }
|
|
++ break;
|
|
++
|
|
++ // Metrics of the combo box
|
|
++ case CTRL_COMBOBOX:
|
|
++ case CTRL_LISTBOX:
|
|
++ pWidget = pWidgetPainter->comboBox( rControlRegion, ( nType == CTRL_COMBOBOX ) );
|
|
++ switch ( nPart )
|
|
++ {
|
|
++ case PART_BUTTON_DOWN:
|
|
++ qRect = kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxArrow );
|
|
++ qRect.setLeft( kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ComboBox, pWidget,
|
|
++ TQStyle::SC_ComboBoxEditField ).right() + 1 );
|
|
++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
++ bReturn = TRUE;
|
|
++ break;
|
|
++
|
|
++ case PART_SUB_EDIT:
|
|
++ qRect = kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxEditField );
|
|
++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
++ bReturn = TRUE;
|
|
++ break;
|
|
++ }
|
|
++ break;
|
|
++
|
|
++ // Metrics of the spin box
|
|
++ case CTRL_SPINBOX:
|
|
++ pWidget = pWidgetPainter->spinWidget( rControlRegion );
|
|
++ switch ( nPart )
|
|
++ {
|
|
++ case PART_BUTTON_UP:
|
|
++ qRect = kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetUp );
|
|
++ bReturn = TRUE;
|
|
++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
++ break;
|
|
++
|
|
++ case PART_BUTTON_DOWN:
|
|
++ qRect = kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetDown );
|
|
++ bReturn = TRUE;
|
|
++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
++ break;
|
|
++
|
|
++ case PART_SUB_EDIT:
|
|
++ qRect = kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetEditField );
|
|
++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
++ bReturn = TRUE;
|
|
++ break;
|
|
++ }
|
|
++ break;
|
|
++
|
|
++ // Metrics of the scroll bar
|
|
++ case CTRL_SCROLLBAR:
|
|
++ pWidget = pWidgetPainter->scrollBar( rControlRegion,
|
|
++ ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT ),
|
|
++ ImplControlValue() );
|
|
++ switch ( nPart )
|
|
++ {
|
|
++ case PART_BUTTON_LEFT:
|
|
++ case PART_BUTTON_UP:
|
|
++ qRect = kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarSubLine );
|
|
++
|
|
++ // Workaround for Platinum style scroll bars. It makes the
|
|
++ // left/up button invisible.
|
|
++ if ( nPart == PART_BUTTON_LEFT )
|
|
++ {
|
|
++ if ( qRect.left() > kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pWidget,
|
|
++ TQStyle::SC_ScrollBarSubPage ).left() )
|
|
++ {
|
|
++ qRect.setLeft( 0 );
|
|
++ qRect.setRight( 0 );
|
|
++ }
|
|
++ }
|
|
++ else
|
|
++ {
|
|
++ if ( qRect.top() > kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pWidget,
|
|
++ TQStyle::SC_ScrollBarSubPage ).top() )
|
|
++ {
|
|
++ qRect.setTop( 0 );
|
|
++ qRect.setBottom( 0 );
|
|
++ }
|
|
++ }
|
|
++
|
|
++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
++
|
|
++ bReturn = TRUE;
|
|
++ break;
|
|
++
|
|
++ case PART_BUTTON_RIGHT:
|
|
++ case PART_BUTTON_DOWN:
|
|
++ qRect = kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarAddLine );
|
|
++
|
|
++ // Workaround for Platinum and 3 button style scroll bars.
|
|
++ // It makes the right/down button bigger.
|
|
++ if ( nPart == PART_BUTTON_RIGHT )
|
|
++ qRect.setLeft( kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pWidget,
|
|
++ TQStyle::SC_ScrollBarAddPage ).right() + 1 );
|
|
++ else
|
|
++ qRect.setTop( kapp->style().querySubControlMetrics(
|
|
++ TQStyle::CC_ScrollBar, pWidget,
|
|
++ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 );
|
|
++
|
|
++ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
++
|
|
++ bReturn = TRUE;
|
|
++ break;
|
|
++ }
|
|
++ break;
|
|
++ }
|
|
++
|
|
++ // Fill rNativeBoundingRegion and rNativeContentRegion
|
|
++ if ( bReturn )
|
|
++ {
|
|
++ // Bounding region
|
|
++ Point aBPoint( qBoundingRect.x(), qBoundingRect.y() );
|
|
++ Size aBSize( qBoundingRect.width(), qBoundingRect.height() );
|
|
++ rNativeBoundingRegion = Rectangle( aBPoint, aBSize );
|
|
++
|
|
++ // Region of the content
|
|
++ Point aPoint( qRect.x(), qRect.y() );
|
|
++ Size aSize( qRect.width(), qRect.height() );
|
|
++ rNativeContentRegion = Rectangle( aPoint, aSize );
|
|
++ }
|
|
++
|
|
++ return bReturn;
|
|
++}
|
|
++
|
|
++// -----------------------------------------------------------------------
|
|
++// TDESalFrame implementation
|
|
++// -----------------------------------------------------------------------
|
|
++
|
|
++TDESalFrame::TDESalFrame( SalFrame* pParent, ULONG nStyle ) :
|
|
++ X11SalFrame( pParent, nStyle )
|
|
++{
|
|
++}
|
|
++
|
|
++void TDESalFrame::Show( BOOL bVisible, BOOL bNoActivate )
|
|
++{
|
|
++ if ( !GetParent() && ! (GetStyle() & SAL_FRAME_STYLE_INTRO) )
|
|
++ {
|
|
++ TDEXLib* pXLib = static_cast<TDEXLib*>(GetDisplay()->GetXLib());
|
|
++ pXLib->doStartup();
|
|
++ }
|
|
++ X11SalFrame::Show( bVisible, bNoActivate );
|
|
++}
|
|
++
|
|
++/** Helper function to convert colors.
|
|
++*/
|
|
++static Color toColor( const TQColor &rColor )
|
|
++{
|
|
++ return Color( rColor.red(), rColor.green(), rColor.blue() );
|
|
++}
|
|
++
|
|
++/** Helper function to read untranslated text entry from TDEConfig configuration repository.
|
|
++*/
|
|
++static OUString readEntryUntranslated( TDEConfig *pConfig, const char *pKey )
|
|
++{
|
|
++ return OUString::createFromAscii( pConfig->readEntryUntranslated( pKey ).ascii() );
|
|
++}
|
|
++
|
|
++/** Helper function to read color from TDEConfig configuration repository.
|
|
++*/
|
|
++static Color readColor( TDEConfig *pConfig, const char *pKey )
|
|
++{
|
|
++ return toColor( pConfig->readColorEntry( pKey ) );
|
|
++}
|
|
++
|
|
++/** Helper function to add information to Font from TQFont.
|
|
++
|
|
++ Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx).
|
|
++*/
|
|
++static Font toFont( const TQFont &rTQFont, const ::com::sun::star::lang::Locale& rLocale )
|
|
++{
|
|
++ psp::FastPrintFontInfo aInfo;
|
|
++ TQFontInfo qFontInfo( rTQFont );
|
|
++
|
|
++ // set family name
|
|
++ aInfo.m_aFamilyName = String( rTQFont.family().utf8(), RTL_TEXTENCODING_UTF8 );
|
|
++
|
|
++ // set italic
|
|
++ aInfo.m_eItalic = ( qFontInfo.italic()? psp::italic::Italic: psp::italic::Upright );
|
|
++
|
|
++ // set weight
|
|
++ int nWeight = qFontInfo.weight();
|
|
++ if ( nWeight <= TQFont::Light )
|
|
++ aInfo.m_eWeight = psp::weight::Light;
|
|
++ else if ( nWeight <= TQFont::Normal )
|
|
++ aInfo.m_eWeight = psp::weight::Normal;
|
|
++ else if ( nWeight <= TQFont::DemiBold )
|
|
++ aInfo.m_eWeight = psp::weight::SemiBold;
|
|
++ else if ( nWeight <= TQFont::Bold )
|
|
++ aInfo.m_eWeight = psp::weight::Bold;
|
|
++ else
|
|
++ aInfo.m_eWeight = psp::weight::UltraBold;
|
|
++
|
|
++ // set width
|
|
++ int nStretch = rTQFont.stretch();
|
|
++ if ( nStretch <= TQFont::UltraCondensed )
|
|
++ aInfo.m_eWidth = psp::width::UltraCondensed;
|
|
++ else if ( nStretch <= TQFont::ExtraCondensed )
|
|
++ aInfo.m_eWidth = psp::width::ExtraCondensed;
|
|
++ else if ( nStretch <= TQFont::Condensed )
|
|
++ aInfo.m_eWidth = psp::width::Condensed;
|
|
++ else if ( nStretch <= TQFont::SemiCondensed )
|
|
++ aInfo.m_eWidth = psp::width::SemiCondensed;
|
|
++ else if ( nStretch <= TQFont::Unstretched )
|
|
++ aInfo.m_eWidth = psp::width::Normal;
|
|
++ else if ( nStretch <= TQFont::SemiExpanded )
|
|
++ aInfo.m_eWidth = psp::width::SemiExpanded;
|
|
++ else if ( nStretch <= TQFont::Expanded )
|
|
++ aInfo.m_eWidth = psp::width::Expanded;
|
|
++ else if ( nStretch <= TQFont::ExtraExpanded )
|
|
++ aInfo.m_eWidth = psp::width::ExtraExpanded;
|
|
++ else
|
|
++ aInfo.m_eWidth = psp::width::UltraExpanded;
|
|
++
|
|
++#if OSL_DEBUG_LEVEL > 1
|
|
++ fprintf( stderr, "font name BEFORE system match: \"%s\"\n", OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
|
|
++#endif
|
|
++
|
|
++ // match font to e.g. resolve "Sans"
|
|
++ psp::PrintFontManager::get().matchFont( aInfo, rLocale );
|
|
++
|
|
++#if OSL_DEBUG_LEVEL > 1
|
|
++ fprintf( stderr, "font match %s, name AFTER: \"%s\"\n",
|
|
++ aInfo.m_nID != 0 ? "succeeded" : "failed",
|
|
++ OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
|
|
++#endif
|
|
++
|
|
++ // font height
|
|
++ int nPointHeight = qFontInfo.pointSize();
|
|
++ if ( nPointHeight <= 0 )
|
|
++ nPointHeight = rTQFont.pointSize();
|
|
++
|
|
++ // Create the font
|
|
++ Font aFont( aInfo.m_aFamilyName, Size( 0, nPointHeight ) );
|
|
++ if( aInfo.m_eWeight != psp::weight::Unknown )
|
|
++ aFont.SetWeight( PspGraphics::ToFontWeight( aInfo.m_eWeight ) );
|
|
++ if( aInfo.m_eWidth != psp::width::Unknown )
|
|
++ aFont.SetWidthType( PspGraphics::ToFontWidth( aInfo.m_eWidth ) );
|
|
++ if( aInfo.m_eItalic != psp::italic::Unknown )
|
|
++ aFont.SetItalic( PspGraphics::ToFontItalic( aInfo.m_eItalic ) );
|
|
++ if( aInfo.m_ePitch != psp::pitch::Unknown )
|
|
++ aFont.SetPitch( PspGraphics::ToFontPitch( aInfo.m_ePitch ) );
|
|
++
|
|
++ return aFont;
|
|
++}
|
|
++
|
|
++/** Implementation of TDE integration's main method.
|
|
++*/
|
|
++void TDESalFrame::UpdateSettings( AllSettings& rSettings )
|
|
++{
|
|
++ StyleSettings aStyleSettings( rSettings.GetStyleSettings() );
|
|
++ bool bSetTitleFont = false;
|
|
++
|
|
++ aStyleSettings.SetToolbarIconSize( STYLE_TOOLBAR_ICONSIZE_LARGE );
|
|
++
|
|
++ // WM settings
|
|
++ TDEConfig *pConfig = TDEGlobal::config();
|
|
++ if ( pConfig )
|
|
++ {
|
|
++ pConfig->setGroup( "WM" );
|
|
++ const char *pKey;
|
|
++
|
|
++ pKey = "activeBackground";
|
|
++ if ( pConfig->hasKey( pKey ) )
|
|
++ aStyleSettings.SetActiveColor( readColor( pConfig, pKey ) );
|
|
++
|
|
++ pKey = "activeBlend";
|
|
++ if ( pConfig->hasKey( pKey ) )
|
|
++ aStyleSettings.SetActiveColor2( readColor( pConfig, pKey ) );
|
|
++
|
|
++ pKey = "inactiveBackground";
|
|
++ if ( pConfig->hasKey( pKey ) )
|
|
++ aStyleSettings.SetDeactiveColor( readColor( pConfig, pKey ) );
|
|
++
|
|
++ pKey = "inactiveBlend";
|
|
++ if ( pConfig->hasKey( pKey ) )
|
|
++ aStyleSettings.SetDeactiveColor2( readColor( pConfig, pKey ) );
|
|
++
|
|
++ pKey = "inactiveForeground";
|
|
++ if ( pConfig->hasKey( pKey ) )
|
|
++ aStyleSettings.SetDeactiveTextColor( readColor( pConfig, pKey ) );
|
|
++
|
|
++ pKey = "activeForeground";
|
|
++ if ( pConfig->hasKey( pKey ) )
|
|
++ aStyleSettings.SetActiveTextColor( readColor( pConfig, pKey ) );
|
|
++
|
|
++ pKey = "titleFont";
|
|
++ if ( pConfig->hasKey( pKey ) )
|
|
++ {
|
|
++ Font aFont = toFont( pConfig->readFontEntry( pKey ), rSettings.GetUILocale() );
|
|
++ aStyleSettings.SetTitleFont( aFont );
|
|
++ bSetTitleFont = true;
|
|
++ }
|
|
++
|
|
++ pConfig->setGroup( "Icons" );
|
|
++
|
|
++ pKey = "Theme";
|
|
++ if ( pConfig->hasKey( pKey ) )
|
|
++ aStyleSettings.SetPreferredSymbolsStyleName( readEntryUntranslated( pConfig, pKey ) );
|
|
++ }
|
|
++
|
|
++ // General settings
|
|
++ TQColorGroup qColorGroup = kapp->palette().active();
|
|
++
|
|
++ Color aFore = toColor( qColorGroup.foreground() );
|
|
++ Color aBack = toColor( qColorGroup.background() );
|
|
++ Color aText = toColor( qColorGroup.text() );
|
|
++ Color aBase = toColor( qColorGroup.base() );
|
|
++
|
|
++ // Foreground
|
|
++ aStyleSettings.SetRadioCheckTextColor( aFore );
|
|
++ aStyleSettings.SetLabelTextColor( aFore );
|
|
++ aStyleSettings.SetInfoTextColor( aFore );
|
|
++ aStyleSettings.SetDialogTextColor( aFore );
|
|
++ aStyleSettings.SetGroupTextColor( aFore );
|
|
++
|
|
++ // Text
|
|
++ aStyleSettings.SetFieldTextColor( aText );
|
|
++ aStyleSettings.SetFieldRolloverTextColor( aText );
|
|
++ aStyleSettings.SetWindowTextColor( aText );
|
|
++ aStyleSettings.SetHelpTextColor( aText );
|
|
++
|
|
++ // Base
|
|
++ aStyleSettings.SetFieldColor( aBase );
|
|
++ aStyleSettings.SetHelpColor( aBase );
|
|
++ aStyleSettings.SetWindowColor( aBase );
|
|
++ aStyleSettings.SetActiveTabColor( aBase );
|
|
++
|
|
++ // Buttons
|
|
++ aStyleSettings.SetButtonTextColor( toColor( qColorGroup.buttonText() ) );
|
|
++ aStyleSettings.SetButtonRolloverTextColor( toColor( qColorGroup.buttonText() ) );
|
|
++
|
|
++ // Disable color
|
|
++ aStyleSettings.SetDisableColor( toColor( qColorGroup.mid() ) );
|
|
++
|
|
++ // Workspace
|
|
++ aStyleSettings.SetWorkspaceColor( toColor( qColorGroup.mid() ) );
|
|
++
|
|
++ // Background
|
|
++ aStyleSettings.Set3DColors( aBack );
|
|
++ aStyleSettings.SetFaceColor( aBack );
|
|
++ aStyleSettings.SetInactiveTabColor( aBack );
|
|
++ aStyleSettings.SetDialogColor( aBack );
|
|
++ if( aBack == COL_LIGHTGRAY )
|
|
++ aStyleSettings.SetCheckedColor( Color( 0xCC, 0xCC, 0xCC ) );
|
|
++ else
|
|
++ {
|
|
++ Color aColor2 = aStyleSettings.GetLightColor();
|
|
++ aStyleSettings.
|
|
++ SetCheckedColor( Color( (BYTE)(((USHORT)aBack.GetRed()+(USHORT)aColor2.GetRed())/2),
|
|
++ (BYTE)(((USHORT)aBack.GetGreen()+(USHORT)aColor2.GetGreen())/2),
|
|
++ (BYTE)(((USHORT)aBack.GetBlue()+(USHORT)aColor2.GetBlue())/2)
|
|
++ ) );
|
|
++ }
|
|
++
|
|
++ // Selection
|
|
++ aStyleSettings.SetHighlightColor( toColor( qColorGroup.highlight() ) );
|
|
++ aStyleSettings.SetHighlightTextColor( toColor( qColorGroup.highlightedText() ) );
|
|
++
|
|
++ // Font
|
|
++ Font aFont = toFont( kapp->font(), rSettings.GetUILocale() );
|
|
++
|
|
++ aStyleSettings.SetAppFont( aFont );
|
|
++ aStyleSettings.SetHelpFont( aFont );
|
|
++ aStyleSettings.SetMenuFont( aFont ); // will be changed according to pMenuBar
|
|
++ aStyleSettings.SetToolFont( aFont ); // will be changed according to pToolBar
|
|
++ aStyleSettings.SetLabelFont( aFont );
|
|
++ aStyleSettings.SetInfoFont( aFont );
|
|
++ aStyleSettings.SetRadioCheckFont( aFont );
|
|
++ aStyleSettings.SetPushButtonFont( aFont );
|
|
++ aStyleSettings.SetFieldFont( aFont );
|
|
++ aStyleSettings.SetIconFont( aFont );
|
|
++ aStyleSettings.SetGroupFont( aFont );
|
|
++
|
|
++ aFont.SetWeight( WEIGHT_BOLD );
|
|
++ if( !bSetTitleFont )
|
|
++ aStyleSettings.SetTitleFont( aFont );
|
|
++ aStyleSettings.SetFloatTitleFont( aFont );
|
|
++
|
|
++ int flash_time = TQApplication::cursorFlashTime();
|
|
++ aStyleSettings.SetCursorBlinkTime( flash_time != 0 ? flash_time/2 : STYLE_CURSOR_NOBLINKTIME );
|
|
++
|
|
++ TDEMainWindow qMainWindow;
|
|
++ qMainWindow.createGUI( "/dev/null" ); // hack
|
|
++
|
|
++ // Menu
|
|
++ aStyleSettings.SetSkipDisabledInMenus( TRUE );
|
|
++ KMenuBar *pMenuBar = qMainWindow.menuBar();
|
|
++ if ( pMenuBar )
|
|
++ {
|
|
++ // Color
|
|
++ TQColorGroup qMenuCG = pMenuBar->colorGroup();
|
|
++
|
|
++ // Menu text and background color, theme specific
|
|
++ Color aMenuFore = toColor( qMenuCG.foreground() );
|
|
++ Color aMenuBack = toColor( qMenuCG.background() );
|
|
++ if ( kapp->style().inherits( "LightStyleV2" ) ||
|
|
++ kapp->style().inherits( "LightStyleV3" ) ||
|
|
++ ( kapp->style().inherits( "QMotifStyle" ) && !kapp->style().inherits( "QSGIStyle" ) ) ||
|
|
++ kapp->style().inherits( "QWindowsStyle" ) )
|
|
++ {
|
|
++ aMenuFore = toColor( qMenuCG.buttonText() );
|
|
++ aMenuBack = toColor( qMenuCG.button() );
|
|
++ }
|
|
++
|
|
++ aStyleSettings.SetMenuTextColor( aMenuFore );
|
|
++ aStyleSettings.SetMenuBarTextColor( aMenuFore );
|
|
++ aStyleSettings.SetMenuColor( aMenuBack );
|
|
++ aStyleSettings.SetMenuBarColor( aMenuBack );
|
|
++
|
|
++ aStyleSettings.SetMenuHighlightColor( toColor ( qMenuCG.highlight() ) );
|
|
++
|
|
++ // Menu items higlight text color, theme specific
|
|
++ if ( kapp->style().inherits( "HighContrastStyle" ) ||
|
|
++ kapp->style().inherits( "KeramikStyle" ) ||
|
|
++ kapp->style().inherits( "QWindowsStyle" ) ||
|
|
++ kapp->style().inherits( "ThinKeramikStyle" ) ||
|
|
++ kapp->style().inherits( "PlastikStyle" ) )
|
|
++ {
|
|
++ aStyleSettings.SetMenuHighlightTextColor( toColor ( qMenuCG.highlightedText() ) );
|
|
++ }
|
|
++ else
|
|
++ aStyleSettings.SetMenuHighlightTextColor( aMenuFore );
|
|
++
|
|
++ // set special menubar higlight text color
|
|
++ if ( kapp->style().inherits( "HighContrastStyle" ) )
|
|
++ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = toColor( qMenuCG.highlightedText() );
|
|
++ else
|
|
++ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = aMenuFore;
|
|
++
|
|
++ // Font
|
|
++ aFont = toFont( pMenuBar->font(), rSettings.GetUILocale() );
|
|
++ aStyleSettings.SetMenuFont( aFont );
|
|
++ }
|
|
++
|
|
++ // Tool bar
|
|
++ TDEToolBar *pToolBar = qMainWindow.toolBar();
|
|
++ if ( pToolBar )
|
|
++ {
|
|
++ aFont = toFont( pToolBar->font(), rSettings.GetUILocale() );
|
|
++ aStyleSettings.SetToolFont( aFont );
|
|
++ }
|
|
++
|
|
++ // Scroll bar size
|
|
++ aStyleSettings.SetScrollBarSize( kapp->style().pixelMetric( TQStyle::PM_ScrollBarExtent ) );
|
|
++
|
|
++ rSettings.SetStyleSettings( aStyleSettings );
|
|
++}
|
|
++
|
|
++SalGraphics* TDESalFrame::GetGraphics()
|
|
++{
|
|
++ if( GetWindow() )
|
|
++ {
|
|
++ for( int i = 0; i < nMaxGraphics; i++ )
|
|
++ {
|
|
++ if( ! m_aGraphics[i].bInUse )
|
|
++ {
|
|
++ m_aGraphics[i].bInUse = true;
|
|
++ if( ! m_aGraphics[i].pGraphics )
|
|
++ {
|
|
++ m_aGraphics[i].pGraphics = new TDESalGraphics();
|
|
++ m_aGraphics[i].pGraphics->Init( this, GetWindow(), GetScreenNumber() );
|
|
++ }
|
|
++ return m_aGraphics[i].pGraphics;
|
|
++ }
|
|
++ }
|
|
++ }
|
|
++
|
|
++ return NULL;
|
|
++}
|
|
++
|
|
++void TDESalFrame::ReleaseGraphics( SalGraphics *pGraphics )
|
|
++{
|
|
++ for( int i = 0; i < nMaxGraphics; i++ )
|
|
++ {
|
|
++ if( m_aGraphics[i].pGraphics == pGraphics )
|
|
++ {
|
|
++ m_aGraphics[i].bInUse = false;
|
|
++ break;
|
|
++ }
|
|
++ }
|
|
++}
|
|
++
|
|
++void TDESalFrame::updateGraphics( bool bClear )
|
|
++{
|
|
++ Drawable aDrawable = bClear ? None : GetWindow();
|
|
++ for( int i = 0; i < nMaxGraphics; i++ )
|
|
++ {
|
|
++ if( m_aGraphics[i].bInUse )
|
|
++ m_aGraphics[i].pGraphics->SetDrawable( aDrawable, GetScreenNumber() );
|
|
++ }
|
|
++}
|
|
++
|
|
++TDESalFrame::~TDESalFrame()
|
|
++{
|
|
++}
|
|
++
|
|
++TDESalFrame::GraphicsHolder::~GraphicsHolder()
|
|
++{
|
|
++ delete pGraphics;
|
|
++}
|
|
++
|
|
++// -----------------------------------------------------------------------
|
|
++// TDESalInstance implementation
|
|
++// -----------------------------------------------------------------------
|
|
++
|
|
++SalFrame *
|
|
++TDESalInstance::CreateFrame( SalFrame *pParent, ULONG nStyle )
|
|
++{
|
|
++ return new TDESalFrame( pParent, nStyle );
|
|
++}
|
|
++
|
|
++// -----------------------------------------------------------------------
|
|
++// TDESalData pieces
|
|
++// -----------------------------------------------------------------------
|
|
++
|
|
++// Create the widget painter so we have some control over
|
|
++// the destruction sequence, so Qt doesn't die in action.
|
|
++
|
|
++void TDEData::initNWF()
|
|
++{
|
|
++ ImplSVData *pSVData = ImplGetSVData();
|
|
++ // draw toolbars on separate lines
|
|
++ pSVData->maNWFData.mbDockingAreaSeparateTB = true;
|
|
++
|
|
++ pWidgetPainter = new WidgetPainter();
|
|
++}
|
|
++
|
|
++void TDEData::deInitNWF()
|
|
++{
|
|
++ delete pWidgetPainter;
|
|
++ pWidgetPainter = NULL;
|
|
++
|
|
++ // We have to destroy the style early
|
|
++ kapp->setStyle( NULL );
|
|
++}
|
|
++
|
|
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
+diff -urN vcl/unx/tde/tdedata.cxx vcl/unx/tde/tdedata.cxx
|
|
+--- vcl/unx/tde/tdedata.cxx 1969-12-31 18:00:00.000000000 -0600
|
|
++++ vcl/unx/tde/tdedata.cxx 2011-08-18 20:14:26.186519004 -0500
|
|
+@@ -0,0 +1,274 @@
|
|
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
++/*************************************************************************
|
|
++ *
|
|
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
++ *
|
|
++ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
++ * Copyright 2011 Timothy Pearson
|
|
++ *
|
|
++ * OpenOffice.org - a multi-platform office productivity suite
|
|
++ *
|
|
++ * This file is part of OpenOffice.org.
|
|
++ *
|
|
++ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
++ * it under the terms of the GNU Lesser General Public License version 3
|
|
++ * only, as published by the Free Software Foundation.
|
|
++ *
|
|
++ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
++ * GNU Lesser General Public License version 3 for more details
|
|
++ * (a copy is included in the LICENSE file that accompanied this code).
|
|
++ *
|
|
++ * You should have received a copy of the GNU Lesser General Public License
|
|
++ * version 3 along with OpenOffice.org. If not, see
|
|
++ * <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 TDEApplications method for session management
|
|
++ * since it will interfere badly with our own.
|
|
++ */
|
|
++class VCLTDEApplication : public TDEApplication
|
|
++{
|
|
++ public:
|
|
++ VCLTDEApplication() : TDEApplication() {}
|
|
++
|
|
++ 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 TDEApplication'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 TDEApplication
|
|
++ delete (VCLTDEApplication*)m_pApplication;
|
|
++ #endif
|
|
++ // free the faked cmdline arguments no longer needed by TDEApplication
|
|
++ 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();
|
|
++
|
|
++ TDEAboutData *kAboutData = new TDEAboutData( "LibreOffice",
|
|
++ I18N_NOOP( "LibreOffice" ),
|
|
++ "1.1.0",
|
|
++ I18N_NOOP( "LibreOffice with TDE Native Widget Support." ),
|
|
++ TDEAboutData::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
|
|
++ // TDEApplication manipulates the pointers inside the argument vector
|
|
++ // note: TDEApplication bad !
|
|
++ m_pAppCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
|
|
++ for( int i = 0; i < m_nFakeCmdLineArgs; i++ )
|
|
++ m_pAppCmdLineArgs[i] = m_pFreeCmdLineArgs[i];
|
|
++
|
|
++ TDECmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData );
|
|
++
|
|
++ TDEApplication::disableAutoDcopRegistration();
|
|
++ m_pApplication = new VCLTDEApplication();
|
|
++ kapp->disableSessionManagement();
|
|
++
|
|
++ Display* pDisp = TQPaintDevice::x11AppDisplay();
|
|
++
|
|
++ SalDisplay *pSalDisplay = new SalTDEDisplay( pDisp );
|
|
++
|
|
++ pInputMethod->CreateMethod( pDisp );
|
|
++ pInputMethod->AddConnectionWatch( pDisp, (void*)this );
|
|
++ pSalDisplay->SetInputMethod( pInputMethod );
|
|
++
|
|
++ PushXErrorLevel( true );
|
|
++ SalI18N_KeyboardExtension *pKbdExtension = new SalI18N_KeyboardExtension( pDisp );
|
|
++ XSync( pDisp, False );
|
|
++
|
|
++ pKbdExtension->UseExtension( ! HasXErrorOccured() );
|
|
++ PopXErrorLevel();
|
|
++
|
|
++ pSalDisplay->SetKbdExtension( pKbdExtension );
|
|
++}
|
|
++
|
|
++void TDEXLib::doStartup()
|
|
++{
|
|
++ if( ! m_bStartupDone )
|
|
++ {
|
|
++ TDEStartupInfo::appStarted();
|
|
++ m_bStartupDone = true;
|
|
++ #if OSL_DEBUG_LEVEL > 1
|
|
++ fprintf( stderr, "called TDEStartupInfo::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( tqVersion() );
|
|
++#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-09-19 11:35:33.731926351 -0500
|
|
@@ -10,7 +10,7 @@
|
|
+++ vcl/prj/build.lst
|
|
@@ -47,4 +47,3 @@ vc vcl\mac\source\window nmake - m vc__winm vc_inc NULL
|
|
vc vcl\mac\source\src nmake - m vc__srcm vc_inc NULL
|
|
- vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL
|
|
+ vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__tde.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL
|
|
vc vcl\util\linksvp nmake - u vc_lsvp vc_util NULL
|
|
-vc vcl\workben nmake - all vc_wrkb vc_util vc_salmain NULL
|
|
diff --git vcl/prj/tests.lst vcl/prj/tests.lst
|