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.
16172 lines
637 KiB
16172 lines
637 KiB
diff --git a/Repository.mk b/Repository.mk
|
|
index 5fab1b5..f123f3b 100644
|
|
--- a/Repository.mk
|
|
+++ b/Repository.mk
|
|
@@ -229,6 +229,7 @@ $(eval $(call gb_Helper_register_libraries,OOOLIBS, \
|
|
vclplug_gtk \
|
|
vclplug_gtk3 \
|
|
vclplug_kde \
|
|
+ vclplug_tde \
|
|
vclplug_kde4 \
|
|
vclplug_svp \
|
|
visioimport \
|
|
diff --git a/bin/distro-install-file-lists b/bin/distro-install-file-lists
|
|
index b233030..23f2504 100755
|
|
--- a/bin/distro-install-file-lists
|
|
+++ b/bin/distro-install-file-lists
|
|
@@ -211,6 +211,13 @@ if test "z$OOO_VENDOR" != "zDebian" ; then
|
|
mv_file_between_flists kde_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/libkabdrv1.so
|
|
add_used_directories kde_list.txt common_list.txt
|
|
|
|
+ # tde subpackage
|
|
+ test -f $DESTDIR/gid_Module_Optional_Tde && cp $DESTDIR/gid_Module_Optional_Tde tde_list.txt || :
|
|
+ mv_file_between_flists tde_list.txt common_list.txt $INSTALLDIR/program/tdefilepicker
|
|
+ mv_file_between_flists tde_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/fps_tde.uno.so
|
|
+ mv_file_between_flists tde_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/libvclplug_tdel..so
|
|
+ mv_file_between_flists tde_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/libtdeabdrv1.so
|
|
+
|
|
# create kde4 subpackage
|
|
mv_file_between_flists kde4_list.txt kde_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/kde4be1.uno.so
|
|
mv_file_between_flists kde4_list.txt common_list.txt $INSTALLDIR/basis$PRODUCTVERSION/program/libvclplug_kde4l..so
|
|
@@ -416,6 +423,7 @@ else
|
|
create_package_directory gid_Module_Optional_Pyuno pkg/python-uno
|
|
create_package_directory gid_Module_Optional_Gnome pkg/libreoffice-gnome
|
|
create_package_directory gid_Module_Optional_Kde pkg/libreoffice-kde
|
|
+ create_package_directory gid_Module_Optional_Tde pkg/libreoffice-tde
|
|
|
|
create_package_directory gid_Module_Root_Files_2 pkg/libreoffice-common
|
|
create_package_directory gid_Module_Root_Files_3 pkg/libreoffice-common
|
|
@@ -494,7 +502,7 @@ else
|
|
fi &&
|
|
( cd pkg/libreoffice-common/$d
|
|
find -maxdepth 1 \
|
|
- -regex '\./\(.*\.so.*\|.*\.bin\|pagein\|nsplugin\|kdefilepicker\|msfontextract\|.*\.rdb\|javaldx\|uri-encode\)' \
|
|
+ -regex '\./\(.*\.so.*\|.*\.bin\|pagein\|nsplugin\|kdefilepicker\|tdefilepicker\|msfontextract\|.*\.rdb\|javaldx\|uri-encode\)' \
|
|
-exec mv {} $DESTDIR/pkg/libreoffice-core/$d \;
|
|
); \
|
|
done
|
|
diff --git a/configure.in b/configure.in
|
|
index 3b48331..2888cbb 100644
|
|
--- a/configure.in
|
|
+++ b/configure.in
|
|
@@ -381,6 +381,15 @@ AC_ARG_ENABLE(kdeab,
|
|
fi
|
|
)
|
|
|
|
+AC_ARG_ENABLE(tde,
|
|
+[ --enable-tde Determines whether to use TQt3/TDE vclplug on platforms
|
|
+ where TQt and TDE are available.
|
|
+],,)
|
|
+
|
|
+AC_ARG_ENABLE(tdeab,
|
|
+[ --disable-tdeab Disable the TDE address book support
|
|
+],,if test "$enable_tde" = "yes"; then enable_tdeab=yes; fi)
|
|
+
|
|
AC_ARG_ENABLE(kde4,
|
|
AS_HELP_STRING([--enable-kde4],
|
|
[Determines whether to use Qt4/KDE4 vclplug on platforms where Qt4 and
|
|
@@ -1554,6 +1563,7 @@ solaris*)
|
|
test_gtk=yes
|
|
build_gstreamer=yes
|
|
test_kde=yes
|
|
+ test_tde=yes
|
|
test_freetype=yes
|
|
test_gstreamer=yes
|
|
_os=SunOS
|
|
@@ -1587,6 +1597,7 @@ linux-gnu*|k*bsd*-gnu*)
|
|
test_gtk=yes
|
|
build_gstreamer=yes
|
|
test_kde=yes
|
|
+ test_tde=yes
|
|
test_kde4=yes
|
|
test_freetype=yes
|
|
test_unix_quickstarter=yes
|
|
@@ -1659,6 +1670,7 @@ freebsd*)
|
|
test_gtk=yes
|
|
build_gstreamer=yes
|
|
test_kde=yes
|
|
+ test_tde=yes
|
|
test_kde4=yes
|
|
test_freetype=yes
|
|
AC_MSG_CHECKING([the FreeBSD operating system release])
|
|
@@ -1703,6 +1715,7 @@ aix*)
|
|
openbsd*)
|
|
test_gtk=yes
|
|
test_kde=yes
|
|
+ test_tde=yes
|
|
test_freetype=yes
|
|
PTHREAD_CFLAGS="-D_THREAD_SAFE"
|
|
PTHREAD_LIBS="-pthread"
|
|
@@ -1713,6 +1726,7 @@ dragonfly*)
|
|
test_gtk=yes
|
|
build_gstreamer=yes
|
|
test_kde=yes
|
|
+ test_tde=yes
|
|
test_kde4=yes
|
|
test_freetype=yes
|
|
PTHREAD_LIBS="-pthread"
|
|
@@ -6941,6 +6955,13 @@ if test "x$enable_kde4" = "xyes"; then
|
|
fi
|
|
AC_SUBST(ENABLE_KDE4)
|
|
|
|
+ENABLE_TDE=""
|
|
+if test "x$enable_tde" = "xyes"; then
|
|
+ ENABLE_TDE="TRUE"
|
|
+ R="$R tde"
|
|
+fi
|
|
+AC_SUBST(ENABLE_TDE)
|
|
+
|
|
if test -z "$R"; then
|
|
AC_MSG_RESULT([none])
|
|
else
|
|
@@ -7852,6 +7873,129 @@ AC_SUBST(KDE_GLIB_LIBS)
|
|
AC_SUBST(KDE_HAVE_GLIB)
|
|
|
|
dnl ===================================================================
|
|
+dnl Check whether the Qt3 and TDE libraries are available.
|
|
+dnl ===================================================================
|
|
+
|
|
+TDE_CFLAGS=""
|
|
+TDE_LIBS=""
|
|
+if test "$_os" != "OpenBSD"; then
|
|
+ MOC="tmoc"
|
|
+fi
|
|
+if test "$test_tde" = "yes" -a "$ENABLE_TDE" = "TRUE" ; then
|
|
+ dnl Search paths for Qt3 and TDE
|
|
+ if test "$build_cpu" != "x86_64" ; then
|
|
+ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib/qt3/include /usr/lib/qt/include /usr/share/qt3/include /usr/local/include/X11/qt3 $x_includes"
|
|
+ qt_libdirs="$QTLIB /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries"
|
|
+ else
|
|
+ qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib64/qt3/include /usr/lib64/qt/include /usr/share/qt3/include /usr/lib/qt3/include /usr/lib/qt/include /usr/local/include/X11/qt3 $x_includes"
|
|
+ qt_libdirs="$QTLIB /usr/local/qt/lib64 /usr/lib64/qt /usr/lib64 /usr/X11R6/lib64/X11/qt /usr/X11R6/lib64/qt /usr/lib64/qt3/lib64 /usr/lib64/qt/lib64 /usr/share/qt3/lib64 /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib /usr/local/lib/qt3 $x_libraries"
|
|
+ fi
|
|
+ if test -n "$QTDIR" ; then
|
|
+ qt_incdirs="$QTDIR/include $qt_incdirs"
|
|
+ if test "$build_cpu" != "x86_64" ; then
|
|
+ qt_libdirs="$QTDIR/lib $qt_libdirs"
|
|
+ else
|
|
+ qt_libdirs="$QTDIR/lib64 $QTDIR/lib $qt_libdirs"
|
|
+ fi
|
|
+ fi
|
|
+ if test "$build_cpu" != "x86_64" ; then
|
|
+ tde_incdirs="/opt/trinity/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes"
|
|
+ tde_libdirs="/opt/trinity/lib /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib/kde4/lib /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries"
|
|
+ else
|
|
+ tde_incdirs="/opt/trinity/include /usr/lib64/kde/include /usr/lib/kde/include /usr/lib/kde4/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde4/include /opt/kde/include $x_includes"
|
|
+ tde_libdirs="/opt/trinity/lib /usr/lib64/kde/lib64 /usr/local/kde/lib64 /usr/kde/lib64 /usr/lib64/kde /usr/lib64/kde3 /usr/lib64 /usr/X11R6/lib64 /usr/local/lib64 /opt/trinity/lib64 /opt/kde/lib64 /usr/X11R6/kde/lib64 /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde4 /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde4/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries"
|
|
+ fi
|
|
+ if test -n "$TDEDIR" ; then
|
|
+ tde_incdirs="$TDEDIR/include $tde_incdirs"
|
|
+ if test "$build_cpu" != "x86_64" ; then
|
|
+ tde_libdirs="$TDEDIR/lib $tde_libdirs"
|
|
+ else
|
|
+ tde_libdirs="$TDEDIR/lib64 $TDEDIR/lib $tde_libdirs"
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ dnl What to test
|
|
+ qt_test_include="qstyle.h"
|
|
+ qt_test_library="libqt-mt.so*"
|
|
+ tde_test_include="kapp.h"
|
|
+ tde_test_library="libDCOP.so*"
|
|
+
|
|
+ dnl Check for Qt3 headers
|
|
+ AC_MSG_CHECKING([for Qt3 headers])
|
|
+ qt_incdir="no"
|
|
+ for tde_check in $qt_incdirs ; do
|
|
+ if test -r "$tde_check/$qt_test_include" ; then
|
|
+ qt_incdir="$tde_check"
|
|
+ break
|
|
+ fi
|
|
+ done
|
|
+ AC_MSG_RESULT([$qt_incdir])
|
|
+ if test "x$qt_incdir" = "xno" ; then
|
|
+ AC_MSG_ERROR([Qt3 headers not found. Please specify the root of
|
|
+your Qt3 installation by exporting QTDIR before running "configure".])
|
|
+ fi
|
|
+
|
|
+ dnl Check for Qt3 libraries
|
|
+ AC_MSG_CHECKING([for Qt3 libraries])
|
|
+ qt_libdir="no"
|
|
+ for qt_check in $qt_libdirs ; do
|
|
+ if test -r "`ls $qt_check/$qt_test_library 2>/dev/null | head -1`" ; then
|
|
+ qt_libdir="$qt_check"
|
|
+ break
|
|
+ fi
|
|
+ done
|
|
+ AC_MSG_RESULT([$qt_libdir])
|
|
+ if test "x$qt_libdir" = "xno" ; then
|
|
+ AC_MSG_ERROR([Qt3 libraries not found. Please specify the root of
|
|
+your Qt3 installation by exporting QTDIR before running "configure".])
|
|
+ fi
|
|
+
|
|
+ dnl Check for Meta Object Compiler
|
|
+ AC_PATH_PROG( MOC, tmoc, no, [`dirname $qt_libdir`/bin:$QTDIR/bin:$PATH] )
|
|
+ if test "$MOC" = "no" ; then
|
|
+ AC_MSG_ERROR([TQt3 Meta Object Compiler not found. Please specify
|
|
+the root of your Qt3 installation by exporting QTDIR before running "configure".])
|
|
+ fi
|
|
+
|
|
+ dnl Check for TDE headers
|
|
+ AC_MSG_CHECKING([for TDE headers])
|
|
+ tde_incdir="no"
|
|
+ for tde_check in $tde_incdirs ; do
|
|
+ if test -r "$tde_check/$tde_test_include" ; then
|
|
+ tde_incdir="$tde_check"
|
|
+ break
|
|
+ fi
|
|
+ done
|
|
+ AC_MSG_RESULT([$tde_incdir])
|
|
+ if test "x$tde_incdir" = "xno" ; then
|
|
+ AC_MSG_ERROR([TDE headers not found. Please specify the root of
|
|
+your TDE installation by exporting TDEDIR before running "configure".])
|
|
+ fi
|
|
+
|
|
+ dnl Check for TDE libraries
|
|
+ AC_MSG_CHECKING([for TDE libraries])
|
|
+ tde_libdir="no"
|
|
+ for tde_check in $tde_libdirs ; do
|
|
+ if test -r "`ls $tde_check/$tde_test_library 2>/dev/null | head -1`" ; then
|
|
+ tde_libdir="$tde_check"
|
|
+ break
|
|
+ fi
|
|
+ done
|
|
+ AC_MSG_RESULT([$tde_libdir])
|
|
+ if test "x$tde_libdir" = "xno" ; then
|
|
+ AC_MSG_ERROR([TDE libraries not found. Please specify the root of
|
|
+your TDE installation by exporting TDEDIR before running "configure".])
|
|
+ fi
|
|
+
|
|
+ dnl Set the variables
|
|
+ TDE_CFLAGS="-I$qt_incdir -I$tde_incdir -I/usr/include/tqt -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT"
|
|
+ TDE_LIBS="-L$tde_libdir -L$qt_libdir -lkdeui -lkdecore -ltqt -lqt-mt"
|
|
+fi
|
|
+AC_SUBST(TDE_CFLAGS)
|
|
+AC_SUBST(TDE_LIBS)
|
|
+AC_SUBST(MOC)
|
|
+
|
|
+dnl ===================================================================
|
|
dnl Test for the enabling the lockdown pieces
|
|
dnl ===================================================================
|
|
AC_MSG_CHECKING([whether to enable the lockdown pieces])
|
|
@@ -7908,6 +8052,33 @@ fi
|
|
AC_SUBST(ENABLE_KAB)
|
|
|
|
dnl ===================================================================
|
|
+dnl Test whether to include TDE AB support
|
|
+dnl ===================================================================
|
|
+AC_MSG_CHECKING([whether to enable TDE address book support])
|
|
+if test "$enable_tdeab" = "yes" && test "$enable_tde" = "yes"; then
|
|
+ AC_MSG_RESULT([yes])
|
|
+ AC_LANG_PUSH([C++])
|
|
+ save_CXXFLAGS=$CXXFLAGS
|
|
+ CXXFLAGS="$CXXFLAGS $TDE_CFLAGS"
|
|
+ AC_MSG_CHECKING([whether TDE is between 3.2 and 3.6])
|
|
+ AC_TRY_RUN([
|
|
+#include <kdeversion.h>
|
|
+
|
|
+int main(int argc, char **argv) {
|
|
+ if (KDE_VERSION_MAJOR == 3 && 2 <= KDE_VERSION_MINOR && KDE_VERSION_MINOR <= 6) return 0;
|
|
+ else return 1;
|
|
+}
|
|
+ ], [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([TDE version too old or too recent, please use another version of TDE or disable TDE address book support])])
|
|
+ CXXFLAGS=$save_CXXFLAGS
|
|
+ AC_LANG_POP([C++])
|
|
+ ENABLE_TDEAB=TRUE
|
|
+else
|
|
+ AC_MSG_RESULT([no])
|
|
+ ENABLE_TDEAB=
|
|
+fi
|
|
+AC_SUBST(ENABLE_TDEAB)
|
|
+
|
|
+dnl ===================================================================
|
|
dnl Test whether to include MathMLDTD
|
|
dnl ===================================================================
|
|
AC_MSG_CHECKING([whether to include MathMLDTD])
|
|
diff --git a/connectivity/prj/build.lst b/connectivity/prj/build.lst
|
|
index 9860897..be07edb 100644
|
|
--- a/connectivity/prj/build.lst
|
|
+++ b/connectivity/prj/build.lst
|
|
@@ -12,6 +12,7 @@ cn connectivity\source\drivers\mozab\mozillasrc nmake - all cn_mozab_moz
|
|
cn connectivity\source\drivers\mozab\bootstrap nmake - all cn_mozab_bootstrap cn_mozab_mozillasrc cn_inc NULL
|
|
cn connectivity\source\drivers\mozab nmake - all cn_mozab cn_mozab_bootstrap cn_dbtools cn_inc NULL
|
|
cn connectivity\source\drivers\kab nmake - all cn_kab cn_dbtools cn_inc NULL
|
|
+cn connectivity\source\drivers\tdeab nmake - all cn_tdeab cn_dbtools cn_inc NULL
|
|
cn connectivity\source\drivers\macab nmake - all cn_macab cn_dbtools cn_inc NULL
|
|
cn connectivity\source\drivers\evoab2 nmake - all cn_evoab2 cn_dbtools cn_file cn_inc NULL
|
|
cn connectivity\source\drivers\calc nmake - all cn_calc cn_file cn_inc NULL
|
|
@@ -28,4 +29,4 @@ cn connectivity\source\simpledbt nmake - all cn_simpledbt
|
|
cn connectivity\source\dbtools nmake - all cn_dbtools cn_simpledbt cn_cmtools cn_parse cn_res cn_sdbcx cn_inc cn_res NULL
|
|
cn connectivity\qa\connectivity\tools nmake - all cn_qa_tools cn_inc NULL
|
|
cn connectivity\qa nmake - all cn_qa cn_inc NULL
|
|
-cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_flat cn_dbase cn_hsqldb cn_macab NULL
|
|
+cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_tdeab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_flat cn_dbase cn_hsqldb cn_macab NULL
|
|
diff --git a/connectivity/prj/d.lst b/connectivity/prj/d.lst
|
|
index 1387da4..400ecaa 100644
|
|
--- a/connectivity/prj/d.lst
|
|
+++ b/connectivity/prj/d.lst
|
|
@@ -11,6 +11,7 @@
|
|
..\source\drivers\adabas\*.xml %_DEST%\xml\*.xml
|
|
..\source\drivers\ado\*.xml %_DEST%\xml\*.xml
|
|
..\source\drivers\kab\*.xml %_DEST%\xml\*.xml
|
|
+..\source\drivers\tdeab\*.xml %_DEST%\xml\*.xml
|
|
..\source\drivers\macab\*.xml %_DEST%\xml\*.xml
|
|
..\source\drivers\file\*.xml %_DEST%\xml\*.xml
|
|
..\source\drivers\flat\*.xml %_DEST%\xml\*.xml
|
|
diff --git a/connectivity/source/drivers/tdeab/KCatalog.cxx b/connectivity/source/drivers/tdeab/KCatalog.cxx
|
|
new file mode 100644
|
|
index 0000000..262144e
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KCatalog.cxx
|
|
@@ -0,0 +1,128 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KCatalog.hxx b/connectivity/source/drivers/tdeab/KCatalog.hxx
|
|
new file mode 100644
|
|
index 0000000..ddfe1e9
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KCatalog.hxx
|
|
@@ -0,0 +1,68 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KColumns.cxx b/connectivity/source/drivers/tdeab/KColumns.cxx
|
|
new file mode 100644
|
|
index 0000000..e61e457
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KColumns.cxx
|
|
@@ -0,0 +1,102 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KColumns.hxx b/connectivity/source/drivers/tdeab/KColumns.hxx
|
|
new file mode 100644
|
|
index 0000000..1919747
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KColumns.hxx
|
|
@@ -0,0 +1,58 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KConnection.cxx b/connectivity/source/drivers/tdeab/KConnection.cxx
|
|
new file mode 100644
|
|
index 0000000..26824bf
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KConnection.cxx
|
|
@@ -0,0 +1,332 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
+#include "precompiled_connectivity.hxx"
|
|
+
|
|
+#include "KConnection.hxx"
|
|
+#include "KDatabaseMetaData.hxx"
|
|
+#include "KStatement.hxx"
|
|
+#include "KPreparedStatement.hxx"
|
|
+#include "KDriver.hxx"
|
|
+#include "KCatalog.hxx"
|
|
+#include <com/sun/star/sdbc/ColumnValue.hpp>
|
|
+#include <com/sun/star/sdbc/TransactionIsolation.hpp>
|
|
+#include <shell/tde_headers.h>
|
|
+
|
|
+using namespace connectivity::kab;
|
|
+using namespace com::sun::star::uno;
|
|
+using namespace com::sun::star::lang;
|
|
+using namespace com::sun::star::beans;
|
|
+using namespace com::sun::star::sdbc;
|
|
+using namespace com::sun::star::sdbcx;
|
|
+
|
|
+IMPLEMENT_SERVICE_INFO(KabConnection, "com.sun.star.sdbc.drivers.KabConnection", "com.sun.star.sdbc.Connection")
|
|
+//-----------------------------------------------------------------------------
|
|
+KabConnection::KabConnection(KabDriver* _pDriver)
|
|
+ : OMetaConnection_BASE(m_aMutex),
|
|
+ OSubComponent<KabConnection, KabConnection_BASE>((::cppu::OWeakObject*)_pDriver, this),
|
|
+ m_xMetaData(NULL),
|
|
+ m_pAddressBook(NULL),
|
|
+ m_pDriver(_pDriver)
|
|
+{
|
|
+ m_pDriver->acquire();
|
|
+}
|
|
+//-----------------------------------------------------------------------------
|
|
+KabConnection::~KabConnection()
|
|
+{
|
|
+ if (!isClosed())
|
|
+ close();
|
|
+
|
|
+ m_pDriver->release();
|
|
+ m_pDriver = NULL;
|
|
+}
|
|
+//-----------------------------------------------------------------------------
|
|
+void SAL_CALL KabConnection::release() throw()
|
|
+{
|
|
+ relase_ChildImpl();
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+void KabConnection::construct(const ::rtl::OUString&, const Sequence< PropertyValue >&) throw(SQLException)
|
|
+{
|
|
+ osl_incrementInterlockedCount( &m_refCount );
|
|
+
|
|
+ // create a TDE address book object
|
|
+ m_pAddressBook = KABC::StdAddressBook::self();
|
|
+ m_pAddressBook->setAutomaticSave(false);
|
|
+// perharps we should analyze the URL to know whether the addressbook is local, over LDAP, etc...
|
|
+// perharps we should get some user and password information from "info" properties
|
|
+
|
|
+ osl_decrementInterlockedCount( &m_refCount );
|
|
+}
|
|
+// XServiceInfo
|
|
+// --------------------------------------------------------------------------------
|
|
+Reference< XStatement > SAL_CALL KabConnection::createStatement( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // create a statement
|
|
+ // the statement can only be executed once
|
|
+ Reference< XStatement > xReturn = new KabStatement(this);
|
|
+ m_aStatements.push_back(WeakReferenceHelper(xReturn));
|
|
+ return xReturn;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+Reference< XPreparedStatement > SAL_CALL KabConnection::prepareStatement( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // create a statement
|
|
+ // the statement can only be executed more than once
|
|
+ Reference< XPreparedStatement > xReturn = new KabPreparedStatement(this, _sSql);
|
|
+ m_aStatements.push_back(WeakReferenceHelper(xReturn));
|
|
+ return xReturn;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+Reference< XPreparedStatement > SAL_CALL KabConnection::prepareCall( const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // not implemented yet :-) a task to do
|
|
+ return NULL;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabConnection::nativeSQL( const ::rtl::OUString& _sSql ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ // when you need to transform SQL92 to you driver specific you can do it here
|
|
+
|
|
+ return _sSql;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabConnection::setAutoCommit( sal_Bool ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+ // here you have to set your commit mode please have a look at the jdbc documentation to get a clear explanation
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabConnection::getAutoCommit( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+ // you have to distinguish which if you are in autocommit mode or not
|
|
+ // at normal case true should be fine here
|
|
+
|
|
+ return sal_True;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabConnection::commit( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // when you database does support transactions you should commit here
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabConnection::rollback( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // same as commit but for the other case
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabConnection::isClosed( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+
|
|
+ // just simple -> we are closed when we are disposed, that means someone called dispose(); (XComponent)
|
|
+ return KabConnection_BASE::rBHelper.bDisposed;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+Reference< XDatabaseMetaData > SAL_CALL KabConnection::getMetaData( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // here we have to create the class with biggest interface
|
|
+ // The answer is 42 :-)
|
|
+ Reference< XDatabaseMetaData > xMetaData = m_xMetaData;
|
|
+ if (!xMetaData.is())
|
|
+ {
|
|
+ xMetaData = new KabDatabaseMetaData(this); // need the connection because it can return it
|
|
+ m_xMetaData = xMetaData;
|
|
+ }
|
|
+
|
|
+ return xMetaData;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabConnection::setReadOnly( sal_Bool ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // set you connection to readonly
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabConnection::isReadOnly( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // return if your connection to readonly
|
|
+ return sal_False;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabConnection::setCatalog( const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // if your database doesn't work with catalogs you go to next method otherwise you kjnow what to do
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabConnection::getCatalog( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+
|
|
+ // return your current catalog
|
|
+ return ::rtl::OUString();
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabConnection::setTransactionIsolation( sal_Int32 ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // set your isolation level
|
|
+ // please have a look at @see com.sun.star.sdbc.TransactionIsolation
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabConnection::getTransactionIsolation( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+
|
|
+ // please have a look at @see com.sun.star.sdbc.TransactionIsolation
|
|
+ return TransactionIsolation::NONE;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+Reference< ::com::sun::star::container::XNameAccess > SAL_CALL KabConnection::getTypeMap( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // if your driver has special database types you can return it here
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabConnection::setTypeMap( const Reference< ::com::sun::star::container::XNameAccess >& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ // the other way around
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+// XCloseable
|
|
+void SAL_CALL KabConnection::close( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ {
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabConnection_BASE::rBHelper.bDisposed);
|
|
+ }
|
|
+ dispose();
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+// XWarningsSupplier
|
|
+Any SAL_CALL KabConnection::getWarnings( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ // when you collected some warnings -> return it
|
|
+ return Any();
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabConnection::clearWarnings( ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ // you should clear your collected warnings here
|
|
+}
|
|
+//------------------------------------------------------------------------------
|
|
+void KabConnection::disposing()
|
|
+{
|
|
+ // we noticed that we should be destroied in near future so we have to dispose our statements
|
|
+ ::osl::MutexGuard aGuard(m_aMutex);
|
|
+
|
|
+ for (OWeakRefArray::iterator i = m_aStatements.begin(); m_aStatements.end() != i; ++i)
|
|
+ {
|
|
+ Reference< XComponent > xComp(i->get(), UNO_QUERY);
|
|
+ if (xComp.is())
|
|
+ xComp->dispose();
|
|
+ }
|
|
+ m_aStatements.clear();
|
|
+
|
|
+ if (m_pAddressBook != NULL)
|
|
+ {
|
|
+ m_pAddressBook->close();
|
|
+ m_pAddressBook = NULL;
|
|
+ }
|
|
+
|
|
+ m_xMetaData = ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XDatabaseMetaData>();
|
|
+
|
|
+ dispose_ChildImpl();
|
|
+ KabConnection_BASE::disposing();
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+Reference< XTablesSupplier > SAL_CALL KabConnection::createCatalog()
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+
|
|
+ Reference< XTablesSupplier > xTab = m_xCatalog;
|
|
+ if (!m_xCatalog.is())
|
|
+ {
|
|
+ KabCatalog *pCat = new KabCatalog(this);
|
|
+ xTab = pCat;
|
|
+ m_xCatalog = xTab;
|
|
+ }
|
|
+ return xTab;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+::KABC::AddressBook* KabConnection::getAddressBook() const
|
|
+{
|
|
+ return m_pAddressBook;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL createKabConnection( void* _pDriver )
|
|
+{
|
|
+ KabConnection* pConnection = new KabConnection( static_cast< KabDriver* >( _pDriver ) );
|
|
+ // by definition, the pointer crossing library boundaries as void ptr is acquired once
|
|
+ pConnection->acquire();
|
|
+ return pConnection;
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/KConnection.hxx b/connectivity/source/drivers/tdeab/KConnection.hxx
|
|
new file mode 100644
|
|
index 0000000..66b75d4
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KConnection.hxx
|
|
@@ -0,0 +1,142 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#ifndef _CONNECTIVITY_KAB_CONNECTION_HXX_
|
|
+#define _CONNECTIVITY_KAB_CONNECTION_HXX_
|
|
+
|
|
+#include <map>
|
|
+#include "OSubComponent.hxx"
|
|
+#include "connectivity/CommonTools.hxx"
|
|
+#include <com/sun/star/lang/XServiceInfo.hpp>
|
|
+#include <com/sun/star/sdbc/SQLWarning.hpp>
|
|
+#include <com/sun/star/sdbc/XWarningsSupplier.hpp>
|
|
+#include <com/sun/star/sdbc/XConnection.hpp>
|
|
+#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
|
|
+#include <comphelper/broadcasthelper.hxx>
|
|
+#include <cppuhelper/compbase3.hxx>
|
|
+
|
|
+namespace KABC
|
|
+{
|
|
+ class StdAddressBook;
|
|
+ class AddressBook;
|
|
+}
|
|
+
|
|
+namespace connectivity
|
|
+{
|
|
+ namespace kab
|
|
+ {
|
|
+
|
|
+ typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::sdbc::XConnection,
|
|
+ ::com::sun::star::sdbc::XWarningsSupplier,
|
|
+ ::com::sun::star::lang::XServiceInfo
|
|
+ > OMetaConnection_BASE;
|
|
+
|
|
+ class KabStatement_Base;
|
|
+ class KabDriver;
|
|
+ class KabDatabaseMetaData;
|
|
+
|
|
+ typedef OMetaConnection_BASE KabConnection_BASE; // implements basics and text encoding
|
|
+ typedef std::vector< ::com::sun::star::uno::WeakReferenceHelper > OWeakRefArray;
|
|
+
|
|
+ class KabConnection : public comphelper::OBaseMutex,
|
|
+ public KabConnection_BASE,
|
|
+ public OSubComponent<KabConnection, KabConnection_BASE>
|
|
+ {
|
|
+ friend class OSubComponent<KabConnection, KabConnection_BASE>;
|
|
+
|
|
+ protected:
|
|
+ //====================================================================
|
|
+ // Data attributes
|
|
+ //====================================================================
|
|
+ ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData;
|
|
+
|
|
+ OWeakRefArray m_aStatements; // vector containing a list of all the Statement objects
|
|
+ // for this Connection
|
|
+
|
|
+ ::KABC::StdAddressBook* m_pAddressBook; // the address book
|
|
+ KabDriver* m_pDriver; // pointer to the owning driver object
|
|
+ ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier>
|
|
+ m_xCatalog; // needed for the SQL interpreter
|
|
+
|
|
+ public:
|
|
+ virtual void construct( const ::rtl::OUString& url,const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info) throw(::com::sun::star::sdbc::SQLException);
|
|
+
|
|
+ KabConnection(KabDriver* _pDriver);
|
|
+ virtual ~KabConnection();
|
|
+
|
|
+ void closeAllStatements () throw( ::com::sun::star::sdbc::SQLException);
|
|
+
|
|
+ // OComponentHelper
|
|
+ virtual void SAL_CALL disposing(void);
|
|
+
|
|
+ // XInterface
|
|
+ virtual void SAL_CALL release() throw();
|
|
+
|
|
+ // XServiceInfo
|
|
+ DECLARE_SERVICE_INFO();
|
|
+
|
|
+ // XConnection
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement > SAL_CALL createStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareCall( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::rtl::OUString SAL_CALL nativeSQL( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL getAutoCommit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL commit( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL rollback( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL isClosed( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL setCatalog( const ::rtl::OUString& catalog ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::rtl::OUString SAL_CALL getCatalog( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Int32 SAL_CALL getTransactionIsolation( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTypeMap( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL setTypeMap( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XCloseable
|
|
+ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XWarningsSupplier
|
|
+ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // needed for the SQL interpreter
|
|
+ ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > SAL_CALL createCatalog();
|
|
+
|
|
+ // accessors
|
|
+ inline KabDriver* getDriver() const { return m_pDriver;}
|
|
+ ::KABC::AddressBook* getAddressBook() const;
|
|
+ };
|
|
+ }
|
|
+}
|
|
+
|
|
+#endif // _CONNECTIVITY_KAB_CONNECTION_HXX_
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx b/connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx
|
|
new file mode 100644
|
|
index 0000000..1bff0ea
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KDatabaseMetaData.cxx
|
|
@@ -0,0 +1,1084 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 = ::KABC::Addressee::revisionLabel();
|
|
+ sName = (const sal_Unicode *) aQtName.ucs2();
|
|
+ if (match(columnNamePattern, sName, '\0'))
|
|
+ {
|
|
+ aRow[4] = new ORowSetValueDecorator(sName);
|
|
+ aRow[5] = new ORowSetValueDecorator(DataType::TIMESTAMP);
|
|
+ aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP"));
|
|
+ aRow[17] = new ORowSetValueDecorator(nPosition++);
|
|
+ aRows.push_back(aRow);
|
|
+ }
|
|
+
|
|
+ ::KABC::Field::List aFields = ::KABC::Field::allFields();
|
|
+ ::KABC::Field::List::iterator aField;
|
|
+
|
|
+ for ( aField = aFields.begin();
|
|
+ aField != aFields.end();
|
|
+ ++aField, ++nPosition)
|
|
+ {
|
|
+ aQtName = (*aField)->label();
|
|
+ sName = (const sal_Unicode *) aQtName.ucs2();
|
|
+ if (match(columnNamePattern, sName, '\0'))
|
|
+ {
|
|
+ aRow[4] = new ORowSetValueDecorator(sName);
|
|
+ aRow[5] = new ORowSetValueDecorator(DataType::CHAR);
|
|
+ aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("CHAR"));
|
|
+ aRow[7] = new ORowSetValueDecorator((sal_Int32) 256);
|
|
+// Might be VARCHAR and not CHAR[256]...
|
|
+ aRow[17] = new ORowSetValueDecorator(nPosition);
|
|
+ aRows.push_back(aRow);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ pResult->setRows(aRows);
|
|
+ return xRef;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTables(
|
|
+ const Any&,
|
|
+ const ::rtl::OUString&,
|
|
+ const ::rtl::OUString&,
|
|
+ const Sequence< ::rtl::OUString >& types) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTables);
|
|
+ Reference< XResultSet > xRef = pResult;
|
|
+
|
|
+ // check whether we have tables in the requested types
|
|
+ // for the moment, we answer only the "TABLE" table type
|
|
+ // when no types are given at all, we return all the tables
|
|
+ static const ::rtl::OUString aTable(::rtl::OUString::createFromAscii("TABLE"));
|
|
+ sal_Bool bTableFound = sal_False;
|
|
+ const ::rtl::OUString* p = types.getConstArray(),
|
|
+ * pEnd = p + types.getLength();
|
|
+
|
|
+ if (p == pEnd)
|
|
+ {
|
|
+ bTableFound = sal_True;
|
|
+ }
|
|
+ else while (p < pEnd)
|
|
+ {
|
|
+ if (match(*p, aTable, '\0'))
|
|
+ {
|
|
+ bTableFound = sal_True;
|
|
+ break;
|
|
+ }
|
|
+ p++;
|
|
+ }
|
|
+ if (!bTableFound)
|
|
+ return xRef;
|
|
+
|
|
+ static ODatabaseMetaDataResultSet::ORows aRows;
|
|
+
|
|
+ if (aRows.empty())
|
|
+ {
|
|
+ ODatabaseMetaDataResultSet::ORow aRow(6);
|
|
+
|
|
+ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+ aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+ aRow[3] = new ORowSetValueDecorator(getAddressBookTableName());
|
|
+ aRow[4] = new ORowSetValueDecorator(aTable);
|
|
+ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+ aRows.push_back(aRow);
|
|
+ }
|
|
+ pResult->setRows(aRows);
|
|
+ return xRef;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedureColumns(
|
|
+ const Any&, const ::rtl::OUString&,
|
|
+ const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedureColumns );
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getProcedures(
|
|
+ const Any&, const ::rtl::OUString&,
|
|
+ const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eProcedures );
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getVersionColumns(
|
|
+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& table ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eVersionColumns);
|
|
+
|
|
+ Reference< XResultSet > xRef = pResult;
|
|
+
|
|
+ ODatabaseMetaDataResultSet::ORows aRows;
|
|
+
|
|
+ if (table == getAddressBookTableName())
|
|
+ {
|
|
+ ODatabaseMetaDataResultSet::ORow aRow( 9 );
|
|
+ TQString aQtName = ::KABC::Addressee::revisionLabel();
|
|
+ ::rtl::OUString sName = (const sal_Unicode *) aQtName.ucs2();
|
|
+
|
|
+ aRow[0] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+ aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+
|
|
+ aRow[2] = new ORowSetValueDecorator(sName);
|
|
+ aRow[3] = new ORowSetValueDecorator(DataType::TIMESTAMP);
|
|
+ aRow[4] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP"));
|
|
+
|
|
+ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+ aRow[6] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+ aRow[7] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+ aRow[8] = ODatabaseMetaDataResultSet::getEmptyValue();
|
|
+
|
|
+ aRows.push_back(aRow);
|
|
+ }
|
|
+ pResult->setRows(aRows);
|
|
+ return xRef;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getExportedKeys(
|
|
+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eExportedKeys );
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getImportedKeys(
|
|
+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eImportedKeys );
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getPrimaryKeys(
|
|
+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::ePrimaryKeys );
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getIndexInfo(
|
|
+ const Any&, const ::rtl::OUString&, const ::rtl::OUString&,
|
|
+ sal_Bool, sal_Bool ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eIndexInfo );
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getBestRowIdentifier(
|
|
+ const Any&, const ::rtl::OUString&, const ::rtl::OUString&, sal_Int32,
|
|
+ sal_Bool ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eBestRowIdentifier );
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getTablePrivileges(
|
|
+ const Any&, const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTablePrivileges );
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getCrossReference(
|
|
+ const Any&, const ::rtl::OUString&,
|
|
+ const ::rtl::OUString&, const Any&,
|
|
+ const ::rtl::OUString&, const ::rtl::OUString& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eCrossReference );
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Reference< XResultSet > SAL_CALL KabDatabaseMetaData::getUDTs( const Any&, const ::rtl::OUString&, const ::rtl::OUString&, const Sequence< sal_Int32 >& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ OSL_ENSURE(0,"Not implemented yet!");
|
|
+ throw SQLException();
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx b/connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx
|
|
new file mode 100644
|
|
index 0000000..9ddc063
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KDatabaseMetaData.hxx
|
|
@@ -0,0 +1,217 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KDriver.cxx b/connectivity/source/drivers/tdeab/KDriver.cxx
|
|
new file mode 100644
|
|
index 0000000..cdf0463
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KDriver.cxx
|
|
@@ -0,0 +1,476 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
+#include "precompiled_connectivity.hxx"
|
|
+
|
|
+#include "KDriver.hxx"
|
|
+#include "TDEInit.h"
|
|
+#include "KConnection.hxx"
|
|
+
|
|
+/** === begin UNO includes === **/
|
|
+#include <com/sun/star/sdb/SQLContext.hpp>
|
|
+#include <com/sun/star/lang/NullPointerException.hpp>
|
|
+#include <com/sun/star/frame/XDesktop.hpp>
|
|
+/** === end UNO includes === **/
|
|
+#include <rtl/ustrbuf.hxx>
|
|
+#include <tools/diagnose_ex.h>
|
|
+#include "resource/tdeab_res.hrc"
|
|
+#include "resource/sharedresources.hxx"
|
|
+
|
|
+using namespace com::sun::star::uno;
|
|
+using namespace com::sun::star::lang;
|
|
+using namespace com::sun::star::beans;
|
|
+using namespace com::sun::star::sdbc;
|
|
+using namespace com::sun::star::sdb;
|
|
+using namespace com::sun::star::frame;
|
|
+using namespace connectivity::kab;
|
|
+
|
|
+// =======================================================================
|
|
+// = KabImplModule
|
|
+// =======================================================================
|
|
+// --------------------------------------------------------------------------------
|
|
+KabImplModule::KabImplModule( const Reference< XMultiServiceFactory >& _rxFactory )
|
|
+ :m_xORB(_rxFactory)
|
|
+ ,m_bAttemptedLoadModule(false)
|
|
+ ,m_bAttemptedInitialize(false)
|
|
+ ,m_hConnectorModule(NULL)
|
|
+ ,m_pConnectionFactoryFunc(NULL)
|
|
+ ,m_pApplicationInitFunc(NULL)
|
|
+ ,m_pApplicationShutdownFunc(NULL)
|
|
+ ,m_pTDEVersionCheckFunc(NULL)
|
|
+{
|
|
+ if ( !m_xORB.is() )
|
|
+ throw NullPointerException();
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+bool KabImplModule::isTDEPresent()
|
|
+{
|
|
+ if ( !impl_loadModule() )
|
|
+ return false;
|
|
+
|
|
+ return true;
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+KabImplModule::TDEVersionType KabImplModule::matchTDEVersion()
|
|
+{
|
|
+ OSL_PRECOND( m_pTDEVersionCheckFunc, "KabImplModule::matchTDEVersion: module not loaded!" );
|
|
+
|
|
+ int nVersionInfo = (*m_pTDEVersionCheckFunc)();
|
|
+ if ( nVersionInfo < 0 )
|
|
+ return eTooOld;
|
|
+ if ( nVersionInfo > 0 )
|
|
+ return eToNew;
|
|
+ return eSupported;
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+namespace
|
|
+{
|
|
+ template< typename FUNCTION >
|
|
+ void lcl_getFunctionFromModuleOrUnload( oslModule& _rModule, const sal_Char* _pAsciiSymbolName, FUNCTION& _rFunction )
|
|
+ {
|
|
+ _rFunction = NULL;
|
|
+ if ( _rModule )
|
|
+ {
|
|
+ //
|
|
+ const ::rtl::OUString sSymbolName = ::rtl::OUString::createFromAscii( _pAsciiSymbolName );
|
|
+ _rFunction = (FUNCTION)( osl_getSymbol( _rModule, sSymbolName.pData ) );
|
|
+
|
|
+ if ( !_rFunction )
|
|
+ { // did not find the symbol
|
|
+ OSL_ENSURE( false, ::rtl::OString( "lcl_getFunctionFromModuleOrUnload: could not find the symbol " ) + ::rtl::OString( _pAsciiSymbolName ) );
|
|
+ osl_unloadModule( _rModule );
|
|
+ _rModule = NULL;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+extern "C" { void SAL_CALL thisModule() {} }
|
|
+
|
|
+bool KabImplModule::impl_loadModule()
|
|
+{
|
|
+ if ( m_bAttemptedLoadModule )
|
|
+ return ( m_hConnectorModule != NULL );
|
|
+ m_bAttemptedLoadModule = true;
|
|
+
|
|
+ OSL_ENSURE( !m_hConnectorModule && !m_pConnectionFactoryFunc && !m_pApplicationInitFunc && !m_pApplicationShutdownFunc && !m_pTDEVersionCheckFunc,
|
|
+ "KabImplModule::impl_loadModule: inconsistence: inconsistency (never attempted load before, but some values already set)!");
|
|
+
|
|
+ const ::rtl::OUString sModuleName = ::rtl::OUString::createFromAscii( SAL_MODULENAME( "kabdrv1" ) );
|
|
+ m_hConnectorModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, SAL_LOADMODULE_NOW ); // LAZY! #i61335#
|
|
+ OSL_ENSURE( m_hConnectorModule, "KabImplModule::impl_loadModule: could not load the implementation library!" );
|
|
+ if ( !m_hConnectorModule )
|
|
+ return false;
|
|
+
|
|
+ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "createKabConnection", m_pConnectionFactoryFunc );
|
|
+ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "initKApplication", m_pApplicationInitFunc );
|
|
+ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "shutdownKApplication", m_pApplicationShutdownFunc );
|
|
+ lcl_getFunctionFromModuleOrUnload( m_hConnectorModule, "matchTDEVersion", m_pTDEVersionCheckFunc );
|
|
+
|
|
+ if ( !m_hConnectorModule )
|
|
+ // one of the symbols did not exist
|
|
+ throw RuntimeException();
|
|
+
|
|
+ return true;
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+void KabImplModule::impl_unloadModule()
|
|
+{
|
|
+ OSL_PRECOND( m_hConnectorModule != NULL, "KabImplModule::impl_unloadModule: no module!" );
|
|
+
|
|
+ osl_unloadModule( m_hConnectorModule );
|
|
+ m_hConnectorModule = NULL;
|
|
+
|
|
+ m_pConnectionFactoryFunc = NULL;
|
|
+ m_pApplicationInitFunc = NULL;
|
|
+ m_pApplicationShutdownFunc = NULL;
|
|
+ m_pTDEVersionCheckFunc = NULL;
|
|
+
|
|
+ m_bAttemptedLoadModule = false;
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+void KabImplModule::init()
|
|
+{
|
|
+ if ( !impl_loadModule() )
|
|
+ impl_throwNoKdeException();
|
|
+
|
|
+ // if we're not running on a supported version, throw
|
|
+ KabImplModule::TDEVersionType eTDEVersion = matchTDEVersion();
|
|
+
|
|
+ if ( eTDEVersion == eTooOld )
|
|
+ impl_throwKdeTooOldException();
|
|
+
|
|
+ if ( ( eTDEVersion == eToNew ) && !impl_doAllowNewTDEVersion() )
|
|
+ impl_throwKdeTooNewException();
|
|
+
|
|
+ if ( !m_bAttemptedInitialize )
|
|
+ {
|
|
+ m_bAttemptedInitialize = true;
|
|
+ (*m_pApplicationInitFunc)();
|
|
+ }
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+bool KabImplModule::impl_doAllowNewTDEVersion()
|
|
+{
|
|
+ try
|
|
+ {
|
|
+ Reference< XMultiServiceFactory > xConfigProvider(
|
|
+ m_xORB->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) ) ),
|
|
+ UNO_QUERY_THROW );
|
|
+ Sequence< Any > aCreationArgs(1);
|
|
+ aCreationArgs[0] <<= PropertyValue(
|
|
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) ),
|
|
+ 0,
|
|
+ makeAny( KabDriver::impl_getConfigurationSettingsPath() ),
|
|
+ PropertyState_DIRECT_VALUE );
|
|
+ Reference< XPropertySet > xSettings( xConfigProvider->createInstanceWithArguments(
|
|
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationAccess" ) ),
|
|
+ aCreationArgs ),
|
|
+ UNO_QUERY_THROW );
|
|
+
|
|
+ sal_Bool bDisableCheck = sal_False;
|
|
+ xSettings->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DisableTDEMaximumVersionCheck" ) ) ) >>= bDisableCheck;
|
|
+
|
|
+ return bDisableCheck != sal_False;
|
|
+ }
|
|
+ catch( const Exception& )
|
|
+ {
|
|
+ DBG_UNHANDLED_EXCEPTION();
|
|
+ }
|
|
+ return false;
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+void KabImplModule::impl_throwNoKdeException()
|
|
+{
|
|
+ ::connectivity::SharedResources aResources;
|
|
+ const ::rtl::OUString sError( aResources.getResourceString(
|
|
+ STR_NO_TDE_INST
|
|
+ ) );
|
|
+ impl_throwGenericSQLException( sError );
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+void KabImplModule::impl_throwKdeTooOldException()
|
|
+{
|
|
+ ::connectivity::SharedResources aResources;
|
|
+ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(
|
|
+ STR_TDE_VERSION_TOO_OLD,
|
|
+ "$major$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MAJOR),
|
|
+ "$minor$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MINOR)
|
|
+ ) );
|
|
+ impl_throwGenericSQLException( sError );
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+void KabImplModule::impl_throwGenericSQLException( const ::rtl::OUString& _rMessage )
|
|
+{
|
|
+ SQLException aError;
|
|
+ aError.Message = _rMessage;
|
|
+ aError.SQLState = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) );
|
|
+ aError.ErrorCode = 0;
|
|
+ throw aError;
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+void KabImplModule::impl_throwKdeTooNewException()
|
|
+{
|
|
+ ::connectivity::SharedResources aResources;
|
|
+
|
|
+ SQLException aError;
|
|
+ aError.Message = aResources.getResourceStringWithSubstitution(
|
|
+ STR_TDE_VERSION_TOO_NEW,
|
|
+ "$major$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MAJOR),
|
|
+ "$minor$",::rtl::OUString::valueOf((sal_Int32)MIN_TDE_VERSION_MINOR)
|
|
+ );
|
|
+ aError.SQLState = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) );
|
|
+ aError.ErrorCode = 0;
|
|
+
|
|
+ SQLContext aDetails;
|
|
+ ::rtl::OUStringBuffer aMessage;
|
|
+ aMessage.append( aResources.getResourceString(STR_TDE_VERSION_TOO_NEW_WORK_AROUND) );
|
|
+
|
|
+ aMessage.appendAscii( "Sub disableTDEMaxVersionCheck\n" );
|
|
+ aMessage.appendAscii( " BasicLibraries.LoadLibrary( \"Tools\" )\n" );
|
|
+
|
|
+ aMessage.appendAscii( " Dim configNode as Object\n" );
|
|
+ aMessage.appendAscii( " configNode = GetRegistryKeyContent( \"" );
|
|
+ aMessage.append( KabDriver::impl_getConfigurationSettingsPath() );
|
|
+ aMessage.appendAscii( "\", true )\n" );
|
|
+
|
|
+ aMessage.appendAscii( " configNode.DisableTDEMaximumVersionCheck = TRUE\n" );
|
|
+ aMessage.appendAscii( " configNode.commitChanges\n" );
|
|
+ aMessage.appendAscii( "End Sub\n" );
|
|
+
|
|
+ aDetails.Message = aMessage.makeStringAndClear();
|
|
+
|
|
+ aError.NextException <<= aDetails;
|
|
+
|
|
+ throw aError;
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+KabConnection* KabImplModule::createConnection( KabDriver* _pDriver ) const
|
|
+{
|
|
+ OSL_PRECOND( m_hConnectorModule, "KabImplModule::createConnection: not initialized!" );
|
|
+
|
|
+ void* pUntypedConnection = (*m_pConnectionFactoryFunc)( _pDriver );
|
|
+ if ( !pUntypedConnection )
|
|
+ throw RuntimeException();
|
|
+
|
|
+ return static_cast< KabConnection* >( pUntypedConnection );
|
|
+}
|
|
+
|
|
+// --------------------------------------------------------------------------------
|
|
+void KabImplModule::shutdown()
|
|
+{
|
|
+ if ( !m_hConnectorModule )
|
|
+ return;
|
|
+
|
|
+ (*m_pApplicationShutdownFunc)();
|
|
+ m_bAttemptedInitialize = false;
|
|
+
|
|
+ impl_unloadModule();
|
|
+}
|
|
+
|
|
+// =======================================================================
|
|
+// = KabDriver
|
|
+// =======================================================================
|
|
+KabDriver::KabDriver(
|
|
+ const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory)
|
|
+ : KDriver_BASE(m_aMutex),
|
|
+ m_xMSFactory(_rxFactory),
|
|
+ m_aImplModule(_rxFactory)
|
|
+{
|
|
+ if ( !m_xMSFactory.is() )
|
|
+ throw NullPointerException();
|
|
+
|
|
+ osl_incrementInterlockedCount( &m_refCount );
|
|
+ try
|
|
+ {
|
|
+ Reference< XDesktop > xDesktop(
|
|
+ m_xMSFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ) ),
|
|
+ UNO_QUERY_THROW );
|
|
+ xDesktop->addTerminateListener( this );
|
|
+ }
|
|
+ catch( const Exception& )
|
|
+ {
|
|
+ DBG_UNHANDLED_EXCEPTION();
|
|
+ }
|
|
+ osl_decrementInterlockedCount( &m_refCount );
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void KabDriver::disposing()
|
|
+{
|
|
+ ::osl::MutexGuard aGuard(m_aMutex);
|
|
+
|
|
+ // when driver will be destroied so all our connections have to be destroied as well
|
|
+ for (OWeakRefArray::iterator i = m_xConnections.begin(); m_xConnections.end() != i; ++i)
|
|
+ {
|
|
+ Reference< XComponent > xComp(i->get(), UNO_QUERY);
|
|
+ if (xComp.is())
|
|
+ xComp->dispose();
|
|
+ }
|
|
+ m_xConnections.clear();
|
|
+
|
|
+ WeakComponentImplHelperBase::disposing();
|
|
+}
|
|
+// static ServiceInfo
|
|
+//------------------------------------------------------------------------------
|
|
+rtl::OUString KabDriver::getImplementationName_Static( ) throw(RuntimeException)
|
|
+{
|
|
+ return rtl::OUString::createFromAscii( impl_getAsciiImplementationName() );
|
|
+}
|
|
+//------------------------------------------------------------------------------
|
|
+Sequence< ::rtl::OUString > KabDriver::getSupportedServiceNames_Static( ) throw (RuntimeException)
|
|
+{
|
|
+ // which service is supported
|
|
+ // for more information @see com.sun.star.sdbc.Driver
|
|
+ Sequence< ::rtl::OUString > aSNS( 1 );
|
|
+ aSNS[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdbc.Driver");
|
|
+
|
|
+ return aSNS;
|
|
+}
|
|
+//------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabDriver::getImplementationName( ) throw(RuntimeException)
|
|
+{
|
|
+ return getImplementationName_Static();
|
|
+}
|
|
+//------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabDriver::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException)
|
|
+{
|
|
+ Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames());
|
|
+ const ::rtl::OUString* pSupported = aSupported.getConstArray();
|
|
+ const ::rtl::OUString* pEnd = pSupported + aSupported.getLength();
|
|
+
|
|
+ while (pSupported != pEnd && !pSupported->equals(_rServiceName))
|
|
+ ++pSupported;
|
|
+ return pSupported != pEnd;
|
|
+}
|
|
+//------------------------------------------------------------------
|
|
+Sequence< ::rtl::OUString > SAL_CALL KabDriver::getSupportedServiceNames( ) throw(RuntimeException)
|
|
+{
|
|
+ return getSupportedServiceNames_Static();
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+Reference< XConnection > SAL_CALL KabDriver::connect( const ::rtl::OUString& url, const Sequence< PropertyValue >& info ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard(m_aMutex);
|
|
+
|
|
+ m_aImplModule.init();
|
|
+
|
|
+ // create a new connection with the given properties and append it to our vector
|
|
+ KabConnection* pConnection = m_aImplModule.createConnection( this );
|
|
+ OSL_POSTCOND( pConnection, "KabDriver::connect: no connection has been created by the factory!" );
|
|
+
|
|
+ // by definition, the factory function returned an object which was acquired once
|
|
+ Reference< XConnection > xConnection = pConnection;
|
|
+ pConnection->release();
|
|
+
|
|
+ // late constructor call which can throw exception and allows a correct dtor call when so
|
|
+ pConnection->construct( url, info );
|
|
+
|
|
+ // remember it
|
|
+ m_xConnections.push_back( WeakReferenceHelper( *pConnection ) );
|
|
+
|
|
+ return xConnection;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabDriver::acceptsURL( const ::rtl::OUString& url )
|
|
+ throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard(m_aMutex);
|
|
+
|
|
+ if ( !m_aImplModule.isTDEPresent() )
|
|
+ return sal_False;
|
|
+
|
|
+ // here we have to look whether we support this URL format
|
|
+ return (!url.compareTo(::rtl::OUString::createFromAscii("sdbc:address:kab:"), 16));
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+Sequence< DriverPropertyInfo > SAL_CALL KabDriver::getPropertyInfo( const ::rtl::OUString&, const Sequence< PropertyValue >& ) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ // if you have something special to say, return it here :-)
|
|
+ return Sequence< DriverPropertyInfo >();
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabDriver::getMajorVersion( ) throw(RuntimeException)
|
|
+{
|
|
+ return KAB_DRIVER_VERSION_MAJOR;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabDriver::getMinorVersion( ) throw(RuntimeException)
|
|
+{
|
|
+ return KAB_DRIVER_VERSION_MINOR;
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabDriver::queryTermination( const EventObject& ) throw (TerminationVetoException, RuntimeException)
|
|
+{
|
|
+ // nothing to do, nothing to veto
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabDriver::notifyTermination( const EventObject& ) throw (RuntimeException)
|
|
+{
|
|
+ m_aImplModule.shutdown();
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+void SAL_CALL KabDriver::disposing( const EventObject& ) throw (RuntimeException)
|
|
+{
|
|
+ // not interested in (this is the disposing of the desktop, if any)
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+const sal_Char* KabDriver::impl_getAsciiImplementationName()
|
|
+{
|
|
+ return "com.sun.star.comp.sdbc.kab.Driver";
|
|
+ // this name is referenced in the configuration and in the kab.xml
|
|
+ // Please be careful when changing it.
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+::rtl::OUString KabDriver::impl_getConfigurationSettingsPath()
|
|
+{
|
|
+ ::rtl::OUStringBuffer aPath;
|
|
+ aPath.appendAscii( "/org.openoffice.Office.DataAccess/DriverSettings/" );
|
|
+ aPath.appendAscii( "com.sun.star.comp.sdbc.kab.Driver" );
|
|
+ return aPath.makeStringAndClear();
|
|
+}
|
|
+// --------------------------------------------------------------------------------
|
|
+Reference< XInterface > SAL_CALL KabDriver::Create( const Reference< XMultiServiceFactory >& _rxFactory ) throw( Exception )
|
|
+{
|
|
+ return *(new KabDriver(_rxFactory));
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/KDriver.hxx b/connectivity/source/drivers/tdeab/KDriver.hxx
|
|
new file mode 100644
|
|
index 0000000..b09a7d2
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KDriver.hxx
|
|
@@ -0,0 +1,227 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KPreparedStatement.cxx b/connectivity/source/drivers/tdeab/KPreparedStatement.cxx
|
|
new file mode 100644
|
|
index 0000000..12816c2
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KPreparedStatement.cxx
|
|
@@ -0,0 +1,394 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KPreparedStatement.hxx b/connectivity/source/drivers/tdeab/KPreparedStatement.hxx
|
|
new file mode 100644
|
|
index 0000000..25a7a01
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KPreparedStatement.hxx
|
|
@@ -0,0 +1,123 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KResultSet.cxx b/connectivity/source/drivers/tdeab/KResultSet.cxx
|
|
new file mode 100644
|
|
index 0000000..a0d6b07
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KResultSet.cxx
|
|
@@ -0,0 +1,991 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
+#include "precompiled_connectivity.hxx"
|
|
+
|
|
+#include "KResultSet.hxx"
|
|
+#include "KResultSetMetaData.hxx"
|
|
+#include "KConnection.hxx"
|
|
+#include "kcondition.hxx"
|
|
+#include "korder.hxx"
|
|
+#include "kfields.hxx"
|
|
+#include <com/sun/star/beans/PropertyAttribute.hpp>
|
|
+#include <com/sun/star/sdbcx/CompareBookmark.hpp>
|
|
+#include "TConnection.hxx"
|
|
+#include <connectivity/dbexception.hxx>
|
|
+#include "resource/tdeab_res.hrc"
|
|
+#include "resource/sharedresources.hxx"
|
|
+
|
|
+using namespace connectivity::kab;
|
|
+using namespace cppu;
|
|
+using namespace com::sun::star::uno;
|
|
+using namespace com::sun::star::lang;
|
|
+using namespace com::sun::star::beans;
|
|
+using namespace com::sun::star::sdbc;
|
|
+using namespace com::sun::star::sdbcx;
|
|
+using namespace com::sun::star::io;
|
|
+using namespace com::sun::star::util;
|
|
+
|
|
+IMPLEMENT_SERVICE_INFO(KabResultSet, "com.sun.star.sdbc.drivers.KabResultSet", "com.sun.star.sdbc.ResultSet");
|
|
+// -------------------------------------------------------------------------
|
|
+KabResultSet::KabResultSet(KabCommonStatement* pStmt)
|
|
+ : KabResultSet_BASE(m_aMutex),
|
|
+ OPropertySetHelper(KabResultSet_BASE::rBHelper),
|
|
+ m_xStatement(pStmt),
|
|
+ m_xMetaData(NULL),
|
|
+ m_aKabAddressees(),
|
|
+ m_nRowPos(-1),
|
|
+ m_bWasNull(sal_True)
|
|
+{
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+KabResultSet::~KabResultSet()
|
|
+{
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+void KabResultSet::allKabAddressees()
|
|
+{
|
|
+ KabConnection* pConnection = static_cast< KabConnection *>(m_xStatement->getConnection().get());
|
|
+ KABC::AddressBook* pAddressBook = pConnection->getAddressBook();
|
|
+
|
|
+ m_aKabAddressees = pAddressBook->allAddressees();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+void KabResultSet::someKabAddressees(const KabCondition *pCondition)
|
|
+{
|
|
+ KabConnection* pConnection = static_cast< KabConnection *>(m_xStatement->getConnection().get());
|
|
+ KABC::AddressBook* pAddressBook = pConnection->getAddressBook();
|
|
+
|
|
+ KABC::AddressBook::Iterator iterator;
|
|
+
|
|
+ for (iterator = pAddressBook->begin();
|
|
+ iterator != pAddressBook->end();
|
|
+ ++iterator)
|
|
+ {
|
|
+ if (pCondition->eval(*iterator))
|
|
+ m_aKabAddressees.push_back(*iterator);
|
|
+ }
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+void KabResultSet::sortKabAddressees(const KabOrder *pOrder)
|
|
+{
|
|
+ // We do not use class KAddresseeList, which has a sorting algorithm in it, because
|
|
+ // it uses templates. It would expand to more or less the same code as the one
|
|
+ // which follows, but it would need not be called in a much less convenient way.
|
|
+
|
|
+ KABC::Addressee::List::Iterator
|
|
+ begin = m_aKabAddressees.begin(),
|
|
+ end = m_aKabAddressees.end(),
|
|
+ iterator;
|
|
+
|
|
+ // Bubble sort. Feel free to implement a better algorithm.
|
|
+ while (begin != end)
|
|
+ {
|
|
+ end--;
|
|
+ for (iterator = begin; iterator != end; ++iterator)
|
|
+ {
|
|
+ if (pOrder->compare(*iterator, *end) > 0)
|
|
+ qSwap(*iterator, *end);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+void KabResultSet::disposing()
|
|
+{
|
|
+ OPropertySetHelper::disposing();
|
|
+
|
|
+ ::osl::MutexGuard aGuard(m_aMutex);
|
|
+
|
|
+m_xStatement.clear();
|
|
+m_xMetaData.clear();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Any SAL_CALL KabResultSet::queryInterface(const Type & rType) throw(RuntimeException)
|
|
+{
|
|
+ Any aRet = OPropertySetHelper::queryInterface(rType);
|
|
+ if (!aRet.hasValue())
|
|
+ aRet = KabResultSet_BASE::queryInterface(rType);
|
|
+ return aRet;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+void SAL_CALL KabResultSet::acquire() throw()
|
|
+{
|
|
+ KabResultSet_BASE::acquire();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+void SAL_CALL KabResultSet::release() throw()
|
|
+{
|
|
+ KabResultSet_BASE::release();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+Sequence< Type > SAL_CALL KabResultSet::getTypes() throw(RuntimeException)
|
|
+{
|
|
+ OTypeCollection aTypes(
|
|
+ ::getCppuType( (const Reference< ::com::sun::star::beans::XMultiPropertySet >*) 0),
|
|
+ ::getCppuType( (const Reference< ::com::sun::star::beans::XFastPropertySet >*) 0),
|
|
+ ::getCppuType( (const Reference< ::com::sun::star::beans::XPropertySet >*) 0));
|
|
+
|
|
+ return comphelper::concatSequences(aTypes.getTypes(), KabResultSet_BASE::getTypes());
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL KabResultSet::getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException)
|
|
+{
|
|
+ return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper());
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabResultSet::findColumn(const ::rtl::OUString& columnName) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ // find the first column with the name columnName
|
|
+ Reference< XResultSetMetaData > xMeta = getMetaData();
|
|
+ sal_Int32 nLen = xMeta->getColumnCount();
|
|
+
|
|
+ for (sal_Int32 i = 1; i <= nLen; ++i)
|
|
+ if (xMeta->isCaseSensitive(i) ?
|
|
+ columnName == xMeta->getColumnName(i) :
|
|
+ columnName.equalsIgnoreAsciiCase(xMeta->getColumnName(i)))
|
|
+ return i;
|
|
+
|
|
+ ::connectivity::SharedResources aResources;
|
|
+ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(
|
|
+ STR_INVALID_COLUMNNAME,
|
|
+ "$columnname$",columnName
|
|
+ ) );
|
|
+ ::dbtools::throwGenericSQLException(sError,NULL);
|
|
+
|
|
+ // Unreachable:
|
|
+ OSL_ASSERT(false);
|
|
+ return 0;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabResultSet::getString(sal_Int32 columnIndex) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ ::osl::MutexGuard aGuard( m_aMutex );
|
|
+ checkDisposed(KabResultSet_BASE::rBHelper.bDisposed);
|
|
+
|
|
+ ::rtl::OUString aRet;
|
|
+ sal_Int32 nAddressees = m_aKabAddressees.size();
|
|
+ ::KABC::Field::List aFields = ::KABC::Field::allFields();
|
|
+
|
|
+ if (m_nRowPos != -1 && m_nRowPos != nAddressees && m_xMetaData.is())
|
|
+ {
|
|
+ sal_Int32 nFieldNumber = m_xMetaData->fieldAtColumn(columnIndex);
|
|
+ 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 --git a/connectivity/source/drivers/tdeab/KResultSet.hxx b/connectivity/source/drivers/tdeab/KResultSet.hxx
|
|
new file mode 100644
|
|
index 0000000..d68f676
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KResultSet.hxx
|
|
@@ -0,0 +1,228 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#ifndef _CONNECTIVITY_KAB_RESULTSET_HXX_
|
|
+#define _CONNECTIVITY_KAB_RESULTSET_HXX_
|
|
+
|
|
+#include "KStatement.hxx"
|
|
+#include "KResultSetMetaData.hxx"
|
|
+#include <shell/tde_headers.h>
|
|
+#include <com/sun/star/sdbc/XRow.hpp>
|
|
+#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
|
|
+#include <com/sun/star/sdbc/XColumnLocate.hpp>
|
|
+#include <com/sun/star/sdbc/XResultSetUpdate.hpp>
|
|
+#include <com/sun/star/sdbc/XRowUpdate.hpp>
|
|
+#include <com/sun/star/sdbcx/XRowLocate.hpp>
|
|
+#include <com/sun/star/sdbcx/XDeleteRows.hpp>
|
|
+#include <cppuhelper/compbase12.hxx>
|
|
+
|
|
+namespace connectivity
|
|
+{
|
|
+ namespace kab
|
|
+ {
|
|
+ /*
|
|
+ ** KabResultSet
|
|
+ */
|
|
+ typedef ::cppu::WeakComponentImplHelper12< ::com::sun::star::sdbc::XResultSet,
|
|
+ ::com::sun::star::sdbc::XRow,
|
|
+ ::com::sun::star::sdbc::XResultSetMetaDataSupplier,
|
|
+ ::com::sun::star::util::XCancellable,
|
|
+ ::com::sun::star::sdbc::XWarningsSupplier,
|
|
+ ::com::sun::star::sdbc::XResultSetUpdate,
|
|
+ ::com::sun::star::sdbc::XRowUpdate,
|
|
+ ::com::sun::star::sdbcx::XRowLocate,
|
|
+ ::com::sun::star::sdbcx::XDeleteRows,
|
|
+ ::com::sun::star::sdbc::XCloseable,
|
|
+ ::com::sun::star::sdbc::XColumnLocate,
|
|
+ ::com::sun::star::lang::XServiceInfo> KabResultSet_BASE;
|
|
+
|
|
+ class KabResultSet : public comphelper::OBaseMutex,
|
|
+ public KabResultSet_BASE,
|
|
+ public ::cppu::OPropertySetHelper,
|
|
+ public comphelper::OPropertyArrayUsageHelper<KabResultSet>
|
|
+ {
|
|
+ protected:
|
|
+ ::rtl::Reference< KabCommonStatement > m_xStatement; // the statement that has created this result set
|
|
+ ::rtl::Reference< KabResultSetMetaData > m_xMetaData; // the description of the columns in this result set
|
|
+ ::KABC::Addressee::List m_aKabAddressees; // address book entries matching the query
|
|
+ sal_Int32 m_nRowPos; // the current row within the result set
|
|
+ sal_Bool m_bWasNull; // last entry retrieved from this result set was NULL
|
|
+
|
|
+ // OPropertyArrayUsageHelper
|
|
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const;
|
|
+
|
|
+ // OPropertySetHelper
|
|
+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
|
|
+
|
|
+ virtual sal_Bool SAL_CALL convertFastPropertyValue(
|
|
+ ::com::sun::star::uno::Any & rConvertedValue,
|
|
+ ::com::sun::star::uno::Any & rOldValue,
|
|
+ sal_Int32 nHandle,
|
|
+ const ::com::sun::star::uno::Any& rValue)
|
|
+ throw (::com::sun::star::lang::IllegalArgumentException);
|
|
+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
|
|
+ sal_Int32 nHandle,
|
|
+ const ::com::sun::star::uno::Any& rValue)
|
|
+ throw (::com::sun::star::uno::Exception);
|
|
+ virtual void SAL_CALL getFastPropertyValue(
|
|
+ ::com::sun::star::uno::Any& rValue,
|
|
+ sal_Int32 nHandle) const;
|
|
+
|
|
+ // you can't delete objects of this type
|
|
+ virtual ~KabResultSet();
|
|
+
|
|
+ public:
|
|
+ DECLARE_SERVICE_INFO();
|
|
+
|
|
+ KabResultSet(KabCommonStatement *pStmt);
|
|
+
|
|
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > operator *()
|
|
+ {
|
|
+ return ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >(*(KabResultSet_BASE*) this);
|
|
+ }
|
|
+
|
|
+ void allKabAddressees();
|
|
+ void someKabAddressees(const class KabCondition *pCondition);
|
|
+ void sortKabAddressees(const class KabOrder *pOrder);
|
|
+
|
|
+ // ::cppu::OComponentHelper
|
|
+ virtual void SAL_CALL disposing(void);
|
|
+
|
|
+ // XInterface
|
|
+ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL acquire() throw();
|
|
+ virtual void SAL_CALL release() throw();
|
|
+
|
|
+ // XTypeProvider
|
|
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XPropertySet
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XResultSet
|
|
+ virtual sal_Bool SAL_CALL isBeforeFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL isAfterLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL isFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL isLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL beforeFirst( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL afterLast( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL first( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL last( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Int32 SAL_CALL getRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL next( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL previous( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL refreshRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL rowUpdated( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL rowInserted( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL rowDeleted( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XRow
|
|
+ virtual sal_Bool SAL_CALL wasNull( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::rtl::OUString SAL_CALL getString( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XResultSetMetaDataSupplier
|
|
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XCancellable
|
|
+ virtual void SAL_CALL cancel( ) throw(::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XCloseable
|
|
+ virtual void SAL_CALL close( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XWarningsSupplier
|
|
+ virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL clearWarnings( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XResultSetUpdate
|
|
+ virtual void SAL_CALL insertRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL deleteRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL cancelRowUpdates( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL moveToInsertRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL moveToCurrentRow( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ // XRowUpdate
|
|
+ virtual void SAL_CALL updateNull( sal_Int32 columnIndex ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateBoolean( sal_Int32 columnIndex, sal_Bool x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateByte( sal_Int32 columnIndex, sal_Int8 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateShort( sal_Int32 columnIndex, sal_Int16 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateInt( sal_Int32 columnIndex, sal_Int32 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateLong( sal_Int32 columnIndex, sal_Int64 x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateFloat( sal_Int32 columnIndex, float x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateDouble( sal_Int32 columnIndex, double x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateString( sal_Int32 columnIndex, const ::rtl::OUString& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateBytes( sal_Int32 columnIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateDate( sal_Int32 columnIndex, const ::com::sun::star::util::Date& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateTime( sal_Int32 columnIndex, const ::com::sun::star::util::Time& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateTimestamp( sal_Int32 columnIndex, const ::com::sun::star::util::DateTime& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateBinaryStream( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateCharacterStream( sal_Int32 columnIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Any& x ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual void SAL_CALL updateNumericObject( sal_Int32 columnIndex, const ::com::sun::star::uno::Any& x, sal_Int32 scale ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XColumnLocate
|
|
+ virtual sal_Int32 SAL_CALL findColumn( const ::rtl::OUString& columnName ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XRowLocate
|
|
+ virtual ::com::sun::star::uno::Any SAL_CALL getBookmark( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL moveToBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL moveRelativeToBookmark( const ::com::sun::star::uno::Any& bookmark, sal_Int32 rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Int32 SAL_CALL compareBookmarks( const ::com::sun::star::uno::Any& firstItem, const ::com::sun::star::uno::Any& secondItem ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Bool SAL_CALL hasOrderedBookmarks( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ virtual sal_Int32 SAL_CALL hashBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+
|
|
+ // XDeleteRows
|
|
+ virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL deleteRows( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException);
|
|
+ };
|
|
+ }
|
|
+}
|
|
+
|
|
+#endif // _CONNECTIVITY_KAB_RESULTSET_HXX_
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/KResultSetMetaData.cxx b/connectivity/source/drivers/tdeab/KResultSetMetaData.cxx
|
|
new file mode 100644
|
|
index 0000000..08dfb05
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KResultSetMetaData.cxx
|
|
@@ -0,0 +1,191 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
+#include "precompiled_connectivity.hxx"
|
|
+
|
|
+#include "KResultSetMetaData.hxx"
|
|
+#include "kfields.hxx"
|
|
+#include "KDatabaseMetaData.hxx"
|
|
+#include <com/sun/star/sdbc/DataType.hpp>
|
|
+
|
|
+using namespace connectivity::kab;
|
|
+using namespace com::sun::star::uno;
|
|
+using namespace com::sun::star::lang;
|
|
+using namespace com::sun::star::sdbc;
|
|
+
|
|
+KabResultSetMetaData::KabResultSetMetaData(KabConnection* _pConnection)
|
|
+ : m_pConnection(_pConnection),
|
|
+ m_aKabFields()
|
|
+{
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+KabResultSetMetaData::~KabResultSetMetaData()
|
|
+{
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+void KabResultSetMetaData::setKabFields(const ::rtl::Reference<connectivity::OSQLColumns> &xColumns) throw(SQLException)
|
|
+{
|
|
+ OSQLColumns::Vector::const_iterator aIter;
|
|
+ static const ::rtl::OUString aName(::rtl::OUString::createFromAscii("Name"));
|
|
+
|
|
+ for (aIter = xColumns->get().begin(); aIter != xColumns->get().end(); ++aIter)
|
|
+ {
|
|
+ ::rtl::OUString aFieldName;
|
|
+ sal_uInt32 nFieldNumber;
|
|
+
|
|
+ (*aIter)->getPropertyValue(aName) >>= aFieldName;
|
|
+ nFieldNumber = findKabField(aFieldName);
|
|
+ m_aKabFields.push_back(nFieldNumber);
|
|
+ }
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabResultSetMetaData::getColumnDisplaySize(sal_Int32 column) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return m_aKabFields[column - 1] < KAB_DATA_FIELDS? 20: 50;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabResultSetMetaData::getColumnType(sal_Int32 column) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return m_aKabFields[column - 1] == KAB_FIELD_REVISION? DataType::TIMESTAMP: DataType::CHAR;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabResultSetMetaData::getColumnCount() throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return m_aKabFields.size();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabResultSetMetaData::isCaseSensitive(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return sal_True;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabResultSetMetaData::getSchemaName(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return ::rtl::OUString();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnName(sal_Int32 column) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ sal_uInt32 nFieldNumber = m_aKabFields[column - 1];
|
|
+ ::KABC::Field::List aFields = ::KABC::Field::allFields();
|
|
+ TQString aQtName;
|
|
+
|
|
+ switch (nFieldNumber)
|
|
+ {
|
|
+ case KAB_FIELD_REVISION:
|
|
+ aQtName = KABC::Addressee::revisionLabel();
|
|
+ break;
|
|
+ default:
|
|
+ aQtName = aFields[nFieldNumber - KAB_DATA_FIELDS]->label();
|
|
+ }
|
|
+ ::rtl::OUString aName((const sal_Unicode *) aQtName.ucs2());
|
|
+
|
|
+ return aName;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabResultSetMetaData::getTableName(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return KabDatabaseMetaData::getAddressBookTableName();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabResultSetMetaData::getCatalogName(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return ::rtl::OUString();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnTypeName(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return ::rtl::OUString();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnLabel(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return ::rtl::OUString();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+::rtl::OUString SAL_CALL KabResultSetMetaData::getColumnServiceName(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return ::rtl::OUString();
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabResultSetMetaData::isCurrency(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return sal_False;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabResultSetMetaData::isAutoIncrement(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return sal_False;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabResultSetMetaData::isSigned(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return sal_False;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabResultSetMetaData::getPrecision(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return 0;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabResultSetMetaData::getScale(sal_Int32) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException)
|
|
+{
|
|
+ return 0;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Int32 SAL_CALL KabResultSetMetaData::isNullable(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return (sal_Int32) sal_True;
|
|
+// TDE address book currently does not use NULL values.
|
|
+// But it might do it someday
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabResultSetMetaData::isSearchable(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return sal_True;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabResultSetMetaData::isReadOnly(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return sal_True;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabResultSetMetaData::isDefinitelyWritable(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return sal_False;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+sal_Bool SAL_CALL KabResultSetMetaData::isWritable(sal_Int32) throw(SQLException, RuntimeException)
|
|
+{
|
|
+ return sal_False;
|
|
+}
|
|
+// -------------------------------------------------------------------------
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/KResultSetMetaData.hxx b/connectivity/source/drivers/tdeab/KResultSetMetaData.hxx
|
|
new file mode 100644
|
|
index 0000000..8a04fc0
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KResultSetMetaData.hxx
|
|
@@ -0,0 +1,95 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KServices.cxx b/connectivity/source/drivers/tdeab/KServices.cxx
|
|
new file mode 100644
|
|
index 0000000..a82b756
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KServices.cxx
|
|
@@ -0,0 +1,180 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KStatement.cxx b/connectivity/source/drivers/tdeab/KStatement.cxx
|
|
new file mode 100644
|
|
index 0000000..1301349
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KStatement.cxx
|
|
@@ -0,0 +1,588 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KStatement.hxx b/connectivity/source/drivers/tdeab/KStatement.hxx
|
|
new file mode 100644
|
|
index 0000000..c5f6564
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KStatement.hxx
|
|
@@ -0,0 +1,174 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KTable.cxx b/connectivity/source/drivers/tdeab/KTable.cxx
|
|
new file mode 100644
|
|
index 0000000..6103ce9
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KTable.cxx
|
|
@@ -0,0 +1,100 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KTable.hxx b/connectivity/source/drivers/tdeab/KTable.hxx
|
|
new file mode 100644
|
|
index 0000000..608cf18
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KTable.hxx
|
|
@@ -0,0 +1,72 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KTables.cxx b/connectivity/source/drivers/tdeab/KTables.cxx
|
|
new file mode 100644
|
|
index 0000000..f63aaa9
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KTables.cxx
|
|
@@ -0,0 +1,94 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/KTables.hxx b/connectivity/source/drivers/tdeab/KTables.hxx
|
|
new file mode 100644
|
|
index 0000000..8c1c036
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/KTables.hxx
|
|
@@ -0,0 +1,65 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/TDEInit.cxx b/connectivity/source/drivers/tdeab/TDEInit.cxx
|
|
new file mode 100644
|
|
index 0000000..375b158
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/TDEInit.cxx
|
|
@@ -0,0 +1,158 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
+#include "precompiled_connectivity.hxx"
|
|
+#include "TDEInit.h"
|
|
+#include <osl/diagnose.h>
|
|
+#include <osl/process.h>
|
|
+#include <shell/tde_headers.h>
|
|
+
|
|
+namespace connectivity
|
|
+{
|
|
+ namespace kab
|
|
+ {
|
|
+ // ===============================================================
|
|
+ // = TDEInit
|
|
+ // ===============================================================
|
|
+ class TDEInit
|
|
+ {
|
|
+ private:
|
|
+ /// TDE application if we own it
|
|
+ static KApplication* s_pKApplication;
|
|
+ static bool s_bDidInsertCatalogue;
|
|
+
|
|
+ public:
|
|
+ static void Init();
|
|
+ static void Shutdown();
|
|
+ };
|
|
+
|
|
+ // ---------------------------------------------------------------
|
|
+ KApplication* TDEInit::s_pKApplication = NULL;
|
|
+ bool TDEInit::s_bDidInsertCatalogue = false;
|
|
+
|
|
+ // ---------------------------------------------------------------
|
|
+ void TDEInit::Init()
|
|
+ {
|
|
+ // TODO: All this is not thread-safe
|
|
+
|
|
+ // we create a TDE application only if it is not already done
|
|
+ if (KApplication::kApplication() == NULL)
|
|
+ {
|
|
+ OSL_ENSURE(s_pKApplication == NULL, "TDEInit::Init: inconsistency in the application pointers!");
|
|
+
|
|
+ char *kabargs[1] = {(char*)"libkab1"};
|
|
+ KCmdLineArgs::init(1, kabargs, "KAddressBook", *kabargs, "Address Book driver", KAB_DRIVER_VERSION);
|
|
+
|
|
+ s_pKApplication = new KApplication(false, false);
|
|
+ }
|
|
+
|
|
+ // set language
|
|
+ rtl_Locale *pProcessLocale;
|
|
+ osl_getProcessLocale(&pProcessLocale);
|
|
+ // sal_Unicode and TQChar are (currently) both 16 bits characters
|
|
+ TQString aLanguage(
|
|
+ (const TQChar *) pProcessLocale->Language->buffer,
|
|
+ (int) pProcessLocale->Language->length);
|
|
+ KGlobal::locale()->setLanguage(aLanguage);
|
|
+
|
|
+ // load TDE address book's localized messages
|
|
+ KGlobal::locale()->insertCatalogue("kaddressbook");
|
|
+ s_bDidInsertCatalogue = true;
|
|
+ }
|
|
+
|
|
+ // ---------------------------------------------------------------
|
|
+ void TDEInit::Shutdown()
|
|
+ {
|
|
+ if ( s_bDidInsertCatalogue )
|
|
+ // this guard is necessary, since TDE 3.3 seems to crash if we remove a catalogue
|
|
+ // which we did not previously insert
|
|
+ KGlobal::locale()->removeCatalogue("kaddressbook");
|
|
+
|
|
+ if ( s_pKApplication != NULL )
|
|
+ {
|
|
+ delete s_pKApplication;
|
|
+ s_pKApplication = NULL;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+// =======================================================================
|
|
+namespace
|
|
+{
|
|
+ double normalizeVersion( unsigned int major, unsigned int minor )
|
|
+ {
|
|
+ return major + 1.0 * minor / 1000;
|
|
+ }
|
|
+}
|
|
+
|
|
+// -----------------------------------------------------------------------
|
|
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL initKApplication()
|
|
+{
|
|
+ ::connectivity::kab::TDEInit::Init();
|
|
+}
|
|
+
|
|
+// -----------------------------------------------------------------------
|
|
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL shutdownKApplication()
|
|
+{
|
|
+ ::connectivity::kab::TDEInit::Shutdown();
|
|
+}
|
|
+// -----------------------------------------------------------------------
|
|
+/** checks whether the TDE version on the system we're running at is supported
|
|
+ by the driver
|
|
+
|
|
+ Has to be called before any other code from this library, in particular,
|
|
+ it has to be called before initKApplication()
|
|
+
|
|
+ If this function returns <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 --git a/connectivity/source/drivers/tdeab/TDEInit.h b/connectivity/source/drivers/tdeab/TDEInit.h
|
|
new file mode 100644
|
|
index 0000000..350502d
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/TDEInit.h
|
|
@@ -0,0 +1,47 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/source/drivers/tdeab/exports.dxp b/connectivity/source/drivers/tdeab/exports.dxp
|
|
new file mode 100644
|
|
index 0000000..9630d7e
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/exports.dxp
|
|
@@ -0,0 +1,3 @@
|
|
+component_getImplementationEnvironment
|
|
+component_writeInfo
|
|
+component_getFactory
|
|
diff --git a/connectivity/source/drivers/tdeab/kcondition.cxx b/connectivity/source/drivers/tdeab/kcondition.cxx
|
|
new file mode 100644
|
|
index 0000000..57d2745
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/kcondition.cxx
|
|
@@ -0,0 +1,233 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
+#include "precompiled_connectivity.hxx"
|
|
+
|
|
+#include "kcondition.hxx"
|
|
+#include "kfields.hxx"
|
|
+#include "connectivity/CommonTools.hxx"
|
|
+
|
|
+using namespace ::connectivity::kab;
|
|
+using namespace ::com::sun::star::sdbc;
|
|
+// -----------------------------------------------------------------------------
|
|
+KabCondition::~KabCondition()
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionConstant::KabConditionConstant(const sal_Bool bValue)
|
|
+ : KabCondition(),
|
|
+ m_bValue(bValue)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionConstant::isAlwaysTrue() const
|
|
+{
|
|
+ return m_bValue;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionConstant::isAlwaysFalse() const
|
|
+{
|
|
+ return !m_bValue;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionConstant::eval(const ::KABC::Addressee &) const
|
|
+{
|
|
+ return m_bValue;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionColumn::KabConditionColumn(const ::rtl::OUString &sColumnName) throw(SQLException)
|
|
+ : KabCondition(),
|
|
+ m_nFieldNumber(findKabField(sColumnName))
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionColumn::isAlwaysTrue() const
|
|
+{
|
|
+ // Sometimes true, sometimes false
|
|
+ return sal_False;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionColumn::isAlwaysFalse() const
|
|
+{
|
|
+ // Sometimes true, sometimes false
|
|
+ return sal_False;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionNull::KabConditionNull(const ::rtl::OUString &sColumnName) throw(SQLException)
|
|
+ : KabConditionColumn(sColumnName)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionNull::eval(const ::KABC::Addressee &aAddressee) const
|
|
+{
|
|
+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
+
|
|
+ return aQtName.isNull();
|
|
+// TDE address book currently does not use NULL values.
|
|
+// But it might do it someday
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionNotNull::KabConditionNotNull(const ::rtl::OUString &sColumnName) throw(SQLException)
|
|
+ : KabConditionColumn(sColumnName)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionNotNull::eval(const ::KABC::Addressee &aAddressee) const
|
|
+{
|
|
+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
+
|
|
+ return !aQtName.isNull();
|
|
+// TDE address book currently does not use NULL values.
|
|
+// But it might do it someday
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionCompare::KabConditionCompare(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException)
|
|
+ : KabConditionColumn(sColumnName),
|
|
+ m_sMatchString(sMatchString)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionEqual::KabConditionEqual(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException)
|
|
+ : KabConditionCompare(sColumnName, sMatchString)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionEqual::eval(const ::KABC::Addressee &aAddressee) const
|
|
+{
|
|
+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
+// Timestamps should not be compared according to their string value
|
|
+// The syntax for such queries should be like
|
|
+// {ts '2004-03-29 12:55:00.000000'}
|
|
+// They should also support operators like '<' or '>='
|
|
+
|
|
+ if (aQtName.isNull()) return sal_False;
|
|
+
|
|
+ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2());
|
|
+ return sValue == m_sMatchString;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionDifferent::KabConditionDifferent(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException)
|
|
+ : KabConditionCompare(sColumnName, sMatchString)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionDifferent::eval(const ::KABC::Addressee &aAddressee) const
|
|
+{
|
|
+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
+
|
|
+ if (aQtName.isNull()) return sal_False;
|
|
+
|
|
+ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2());
|
|
+ return sValue != m_sMatchString;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionSimilar::KabConditionSimilar(const ::rtl::OUString &sColumnName, const ::rtl::OUString &sMatchString) throw(SQLException)
|
|
+ : KabConditionCompare(sColumnName, sMatchString)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionSimilar::eval(const ::KABC::Addressee &aAddressee) const
|
|
+{
|
|
+ TQString aQtName = valueOfKabField(aAddressee, m_nFieldNumber);
|
|
+
|
|
+ if (aQtName.isNull()) return sal_False;
|
|
+
|
|
+ ::rtl::OUString sValue((const sal_Unicode *) aQtName.ucs2());
|
|
+ return match(m_sMatchString, sValue, '\0');
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionBoolean::KabConditionBoolean(KabCondition *pLeft, KabCondition *pRight)
|
|
+ : KabCondition(),
|
|
+ m_pLeft(pLeft),
|
|
+ m_pRight(pRight)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionBoolean::~KabConditionBoolean()
|
|
+{
|
|
+ delete m_pLeft;
|
|
+ delete m_pRight;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionOr::KabConditionOr(KabCondition *pLeft, KabCondition *pRight)
|
|
+ : KabConditionBoolean(pLeft, pRight)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionOr::isAlwaysTrue() const
|
|
+{
|
|
+ return m_pLeft->isAlwaysTrue() || m_pRight->isAlwaysTrue();
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionOr::isAlwaysFalse() const
|
|
+{
|
|
+ return m_pLeft->isAlwaysFalse() && m_pRight->isAlwaysFalse();
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionOr::eval(const ::KABC::Addressee &aAddressee) const
|
|
+{
|
|
+ // We avoid evaluating terms as much as we can
|
|
+ if (m_pLeft->isAlwaysTrue() || m_pRight->isAlwaysTrue()) return sal_True;
|
|
+ if (m_pLeft->isAlwaysFalse() && m_pRight->isAlwaysFalse()) return sal_False;
|
|
+
|
|
+ if (m_pLeft->eval(aAddressee)) return sal_True;
|
|
+ if (m_pRight->eval(aAddressee)) return sal_True;
|
|
+
|
|
+ return sal_False;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabConditionAnd::KabConditionAnd(KabCondition *pLeft, KabCondition *pRight)
|
|
+ : KabConditionBoolean(pLeft, pRight)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionAnd::isAlwaysTrue() const
|
|
+{
|
|
+ return m_pLeft->isAlwaysTrue() && m_pRight->isAlwaysTrue();
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionAnd::isAlwaysFalse() const
|
|
+{
|
|
+ return m_pLeft->isAlwaysFalse() || m_pRight->isAlwaysFalse();
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Bool KabConditionAnd::eval(const ::KABC::Addressee &aAddressee) const
|
|
+{
|
|
+ // We avoid evaluating terms as much as we can
|
|
+ if (m_pLeft->isAlwaysFalse() || m_pRight->isAlwaysFalse()) return sal_False;
|
|
+ if (m_pLeft->isAlwaysTrue() && m_pRight->isAlwaysTrue()) return sal_True;
|
|
+
|
|
+ if (!m_pLeft->eval(aAddressee)) return sal_False;
|
|
+ if (!m_pRight->eval(aAddressee)) return sal_False;
|
|
+
|
|
+ return sal_True;
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/kcondition.hxx b/connectivity/source/drivers/tdeab/kcondition.hxx
|
|
new file mode 100644
|
|
index 0000000..a8b729f
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/kcondition.hxx
|
|
@@ -0,0 +1,164 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#ifndef _CONNECTIVITY_KAB_CONDITION_HXX_
|
|
+#define _CONNECTIVITY_KAB_CONDITION_HXX_
|
|
+
|
|
+#include <comphelper/types.hxx>
|
|
+#include <shell/tde_headers.h>
|
|
+#include <connectivity/dbexception.hxx>
|
|
+
|
|
+namespace connectivity
|
|
+{
|
|
+ namespace kab
|
|
+ {
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabCondition
|
|
+{
|
|
+ public:
|
|
+ virtual ~KabCondition();
|
|
+ virtual sal_Bool isAlwaysTrue() const = 0;
|
|
+ virtual sal_Bool isAlwaysFalse() const = 0;
|
|
+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const = 0;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionConstant : public KabCondition
|
|
+{
|
|
+ protected:
|
|
+ sal_Bool m_bValue;
|
|
+
|
|
+ public:
|
|
+ KabConditionConstant(const sal_Bool bValue);
|
|
+ virtual sal_Bool isAlwaysTrue() const;
|
|
+ virtual sal_Bool isAlwaysFalse() const;
|
|
+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionColumn : public KabCondition
|
|
+{
|
|
+ protected:
|
|
+ sal_Int32 m_nFieldNumber;
|
|
+
|
|
+ TQString value(const ::KABC::Addressee &aAddressee) const;
|
|
+
|
|
+ public:
|
|
+ KabConditionColumn(
|
|
+ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException);
|
|
+ virtual sal_Bool isAlwaysTrue() const;
|
|
+ virtual sal_Bool isAlwaysFalse() const;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionNull : public KabConditionColumn
|
|
+{
|
|
+ public:
|
|
+ KabConditionNull(
|
|
+ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException);
|
|
+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionNotNull : public KabConditionColumn
|
|
+{
|
|
+ public:
|
|
+ KabConditionNotNull(
|
|
+ const ::rtl::OUString &sColumnName) throw(::com::sun::star::sdbc::SQLException);
|
|
+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionCompare : public KabConditionColumn
|
|
+{
|
|
+ protected:
|
|
+ const ::rtl::OUString m_sMatchString;
|
|
+
|
|
+ public:
|
|
+ KabConditionCompare(
|
|
+ const ::rtl::OUString &sColumnName,
|
|
+ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException);
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionEqual : public KabConditionCompare
|
|
+{
|
|
+ public:
|
|
+ KabConditionEqual(
|
|
+ const ::rtl::OUString &sColumnName,
|
|
+ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException);
|
|
+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionDifferent : public KabConditionCompare
|
|
+{
|
|
+ public:
|
|
+ KabConditionDifferent(
|
|
+ const ::rtl::OUString &sColumnName,
|
|
+ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException);
|
|
+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionSimilar : public KabConditionCompare
|
|
+{
|
|
+ public:
|
|
+ KabConditionSimilar(
|
|
+ const ::rtl::OUString &sColumnName,
|
|
+ const ::rtl::OUString &sMatchString) throw(::com::sun::star::sdbc::SQLException);
|
|
+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionBoolean : public KabCondition
|
|
+{
|
|
+ protected:
|
|
+ KabCondition *m_pLeft, *m_pRight;
|
|
+
|
|
+ public:
|
|
+ KabConditionBoolean(KabCondition *pLeft, KabCondition *pRight);
|
|
+ virtual ~KabConditionBoolean();
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionOr : public KabConditionBoolean
|
|
+{
|
|
+ public:
|
|
+ KabConditionOr(KabCondition *pLeft, KabCondition *pRight);
|
|
+ virtual sal_Bool isAlwaysTrue() const;
|
|
+ virtual sal_Bool isAlwaysFalse() const;
|
|
+ virtual sal_Bool eval(const ::KABC::Addressee &aAddressee) const;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+class KabConditionAnd : public KabConditionBoolean
|
|
+{
|
|
+ public:
|
|
+ KabConditionAnd(KabCondition *pLeft, KabCondition *pRight);
|
|
+ virtual sal_Bool isAlwaysTrue() const;
|
|
+ virtual sal_Bool isAlwaysFalse() const;
|
|
+ virtual sal_Bool eval(const ::KABC::Addressee &addressee) const;
|
|
+};
|
|
+// -----------------------------------------------------------------------------
|
|
+ }
|
|
+}
|
|
+
|
|
+#endif // _CONNECTIVITY_KAB_CONDITION_HXX_
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/kfields.cxx b/connectivity/source/drivers/tdeab/kfields.cxx
|
|
new file mode 100644
|
|
index 0000000..2d375d7
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/kfields.cxx
|
|
@@ -0,0 +1,98 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 ::KABC::Addressee &aAddressee, sal_Int32 nFieldNumber)
|
|
+{
|
|
+ switch (nFieldNumber)
|
|
+ {
|
|
+ case KAB_FIELD_REVISION:
|
|
+ return aAddressee.revision().toString("yyyy-MM-dd hh:mm:ss");
|
|
+ default:
|
|
+ ::KABC::Field::List aFields = ::KABC::Field::allFields();
|
|
+ return aFields[nFieldNumber - KAB_DATA_FIELDS]->value(aAddressee);
|
|
+ }
|
|
+}
|
|
+// ------------------------------------------------------------------------------
|
|
+// search the TDE address book field number of a given column name
|
|
+sal_uInt32 findKabField(const ::rtl::OUString& columnName) throw(SQLException)
|
|
+{
|
|
+ TQString aQtName;
|
|
+ ::rtl::OUString aName;
|
|
+
|
|
+ aQtName = KABC::Addressee::revisionLabel();
|
|
+ aName = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2());
|
|
+ if (columnName == aName)
|
|
+ return KAB_FIELD_REVISION;
|
|
+
|
|
+ ::KABC::Field::List aFields = ::KABC::Field::allFields();
|
|
+ ::KABC::Field::List::iterator aField;
|
|
+ sal_uInt32 nResult;
|
|
+
|
|
+ for ( aField = aFields.begin(), nResult = KAB_DATA_FIELDS;
|
|
+ aField != aFields.end();
|
|
+ ++aField, ++nResult)
|
|
+ {
|
|
+ aQtName = (*aField)->label();
|
|
+ aName = ::rtl::OUString((const sal_Unicode *) aQtName.ucs2());
|
|
+
|
|
+ if (columnName == aName)
|
|
+ return nResult;
|
|
+ }
|
|
+
|
|
+ ::connectivity::SharedResources aResources;
|
|
+ const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(
|
|
+ STR_INVALID_COLUMNNAME,
|
|
+ "$columnname$",columnName
|
|
+ ) );
|
|
+ ::dbtools::throwGenericSQLException(sError,NULL);
|
|
+ // Unreachable:
|
|
+ OSL_ASSERT(false);
|
|
+ return 0;
|
|
+}
|
|
+// ------------------------------------------------------------------------------
|
|
+ }
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/kfields.hxx b/connectivity/source/drivers/tdeab/kfields.hxx
|
|
new file mode 100644
|
|
index 0000000..2c5c63b
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/kfields.hxx
|
|
@@ -0,0 +1,51 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 ::KABC::Addressee &aAddressee, sal_Int32 nFieldNumber);
|
|
+ sal_uInt32 findKabField(const ::rtl::OUString& columnName) throw(::com::sun::star::sdbc::SQLException);
|
|
+ }
|
|
+}
|
|
+
|
|
+#endif
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/korder.cxx b/connectivity/source/drivers/tdeab/korder.cxx
|
|
new file mode 100644
|
|
index 0000000..994c41f
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/korder.cxx
|
|
@@ -0,0 +1,92 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
+#include "precompiled_connectivity.hxx"
|
|
+
|
|
+#include "korder.hxx"
|
|
+#include "kfields.hxx"
|
|
+
|
|
+using namespace ::connectivity::kab;
|
|
+
|
|
+KabOrder::~KabOrder()
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabSimpleOrder::KabSimpleOrder(::rtl::OUString &sColumnName, sal_Bool bAscending)
|
|
+ : KabOrder(),
|
|
+ m_nFieldNumber(findKabField(sColumnName)),
|
|
+ m_bAscending(bAscending)
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Int32 KabSimpleOrder::compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const
|
|
+{
|
|
+ sal_Int32 result;
|
|
+
|
|
+ result = TQString::compare(
|
|
+ valueOfKabField(aAddressee1, m_nFieldNumber),
|
|
+ valueOfKabField(aAddressee2, m_nFieldNumber));
|
|
+// Timestamps should be compared differently than with their string value
|
|
+
|
|
+ if (!m_bAscending) result = -result;
|
|
+
|
|
+ return result;
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabComplexOrder::KabComplexOrder()
|
|
+ : KabOrder(),
|
|
+ m_aOrders()
|
|
+{
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+KabComplexOrder::~KabComplexOrder()
|
|
+{
|
|
+ for (sal_uInt32 i = 0; i < m_aOrders.size(); i++)
|
|
+ delete m_aOrders[i];
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+void KabComplexOrder::addOrder(KabOrder *pOrder)
|
|
+{
|
|
+ m_aOrders.push_back(pOrder);
|
|
+}
|
|
+// -----------------------------------------------------------------------------
|
|
+sal_Int32 KabComplexOrder::compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const
|
|
+{
|
|
+ for (sal_uInt32 i = 0; i < m_aOrders.size(); i++)
|
|
+ {
|
|
+ const KabOrder *pOrder = m_aOrders[i];
|
|
+ sal_Int32 result = pOrder->compare(aAddressee1, aAddressee2);
|
|
+
|
|
+ if (result) return result;
|
|
+ }
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/korder.hxx b/connectivity/source/drivers/tdeab/korder.hxx
|
|
new file mode 100644
|
|
index 0000000..8e62b79
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/korder.hxx
|
|
@@ -0,0 +1,78 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#ifndef _CONNECTIVITY_KAB_ORDER_HXX_
|
|
+#define _CONNECTIVITY_KAB_ORDER_HXX_
|
|
+
|
|
+#include "rtl/ustring.hxx"
|
|
+#include <shell/tde_headers.h>
|
|
+
|
|
+#include <vector>
|
|
+
|
|
+namespace connectivity
|
|
+{
|
|
+ namespace kab
|
|
+ {
|
|
+ class KabOrder
|
|
+ {
|
|
+ public:
|
|
+ virtual ~KabOrder();
|
|
+
|
|
+ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const = 0;
|
|
+ };
|
|
+
|
|
+ class KabSimpleOrder : public KabOrder
|
|
+ {
|
|
+ sal_Int32 m_nFieldNumber;
|
|
+ sal_Bool m_bAscending;
|
|
+
|
|
+ TQString value(const ::KABC::Addressee &aAddressee) const;
|
|
+ public:
|
|
+ KabSimpleOrder(::rtl::OUString &sColumnName, sal_Bool bAscending);
|
|
+
|
|
+ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const;
|
|
+ };
|
|
+
|
|
+ class KabComplexOrder : public KabOrder
|
|
+ {
|
|
+ ::std::vector<KabOrder *> m_aOrders;
|
|
+
|
|
+ public:
|
|
+ KabComplexOrder();
|
|
+ virtual ~KabComplexOrder();
|
|
+
|
|
+ void addOrder(KabOrder *pOrder);
|
|
+ virtual sal_Int32 compare(const ::KABC::Addressee &aAddressee1, const ::KABC::Addressee &aAddressee2) const;
|
|
+ };
|
|
+ }
|
|
+}
|
|
+
|
|
+#endif
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/connectivity/source/drivers/tdeab/makefile.mk b/connectivity/source/drivers/tdeab/makefile.mk
|
|
new file mode 100644
|
|
index 0000000..cde838a
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/makefile.mk
|
|
@@ -0,0 +1,139 @@
|
|
+#*************************************************************************
|
|
+#
|
|
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+#
|
|
+# Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+# Copyright 2011 Timothy Pearson
|
|
+#
|
|
+# OpenOffice.org - a multi-platform office productivity suite
|
|
+#
|
|
+# This file is part of OpenOffice.org.
|
|
+#
|
|
+# OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+# it under the terms of the GNU Lesser General Public License version 3
|
|
+# only, as published by the Free Software Foundation.
|
|
+#
|
|
+# OpenOffice.org is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU Lesser General Public License version 3 for more details
|
|
+# (a copy is included in the LICENSE file that accompanied this code).
|
|
+#
|
|
+# You should have received a copy of the GNU Lesser General Public License
|
|
+# version 3 along with OpenOffice.org. If not, see
|
|
+# <http://www.openoffice.org/license.html>
|
|
+# for a copy of the LGPLv3 License.
|
|
+#
|
|
+#*************************************************************************
|
|
+
|
|
+PRJ=..$/..$/..
|
|
+PRJINC=..$/..
|
|
+PRJNAME=connectivity
|
|
+TARGET=tdeab
|
|
+TARGET2=$(TARGET)drv
|
|
+
|
|
+ENABLE_EXCEPTIONS=TRUE
|
|
+VISIBILITY_HIDDEN=TRUE
|
|
+
|
|
+# --- Settings ----------------------------------
|
|
+
|
|
+.INCLUDE : $(PRJ)$/makefile.pmk
|
|
+.INCLUDE : $(PRJ)$/version.mk
|
|
+
|
|
+.IF "$(GUI)" == "UNX"
|
|
+.IF "$(ENABLE_TDEAB)" == "TRUE"
|
|
+
|
|
+CFLAGS+=$(TDE_CFLAGS)
|
|
+
|
|
+.IF "$(TDE_ROOT)"!=""
|
|
+EXTRALIBPATHS+=-L$(TDE_ROOT)$/lib
|
|
+.ENDIF
|
|
+
|
|
+# === TDEAB base library ==========================
|
|
+
|
|
+# --- Files -------------------------------------
|
|
+
|
|
+SLOFILES= \
|
|
+ $(SLO)$/KDriver.obj \
|
|
+ $(SLO)$/KServices.obj
|
|
+
|
|
+DEPOBJFILES= \
|
|
+ $(SLO2FILES)
|
|
+
|
|
+# --- Library -----------------------------------
|
|
+
|
|
+SHL1VERSIONMAP=$(SOLARENV)/src/component.map
|
|
+
|
|
+SHL1TARGET= $(TARGET)$(TDEAB_MAJOR)
|
|
+SHL1OBJS=$(SLOFILES)
|
|
+SHL1STDLIBS=\
|
|
+ $(CPPULIB) \
|
|
+ $(CPPUHELPERLIB) \
|
|
+ $(DBTOOLSLIB) \
|
|
+ $(SALLIB) \
|
|
+ $(SALHELPERLIB)
|
|
+
|
|
+SHL1DEPN=
|
|
+SHL1IMPLIB= i$(TARGET)
|
|
+
|
|
+SHL1DEF= $(MISC)$/$(SHL1TARGET).def
|
|
+
|
|
+DEF1NAME= $(SHL1TARGET)
|
|
+
|
|
+# === TDEAB impl library ==========================
|
|
+
|
|
+# --- Files -------------------------------------
|
|
+
|
|
+SLO2FILES=\
|
|
+ $(SLO)$/KColumns.obj \
|
|
+ $(SLO)$/KTable.obj \
|
|
+ $(SLO)$/KTables.obj \
|
|
+ $(SLO)$/KCatalog.obj \
|
|
+ $(SLO)$/KResultSet.obj \
|
|
+ $(SLO)$/KStatement.obj \
|
|
+ $(SLO)$/KPreparedStatement.obj \
|
|
+ $(SLO)$/KDatabaseMetaData.obj \
|
|
+ $(SLO)$/KConnection.obj \
|
|
+ $(SLO)$/KResultSetMetaData.obj \
|
|
+ $(SLO)$/kcondition.obj \
|
|
+ $(SLO)$/korder.obj \
|
|
+ $(SLO)$/kfields.obj \
|
|
+ $(SLO)$/TDEInit.obj
|
|
+
|
|
+TDEAB_LIB=$(TDE_LIBS) -lkabc
|
|
+
|
|
+# --- Library -----------------------------------
|
|
+
|
|
+SHL2VERSIONMAP=$(TARGET2).map
|
|
+
|
|
+SHL2TARGET= $(TARGET2)$(TDEAB_MAJOR)
|
|
+SHL2OBJS=$(SLO2FILES)
|
|
+SHL2LINKFLAGS+=$(TDEAB_LIB)
|
|
+SHL2STDLIBS=\
|
|
+ $(CPPULIB) \
|
|
+ $(CPPUHELPERLIB) \
|
|
+ $(SALLIB) \
|
|
+ $(SALHELPERLIB) \
|
|
+ $(DBTOOLSLIB) \
|
|
+ $(COMPHELPERLIB)
|
|
+
|
|
+SHL2DEPN=
|
|
+SHL2IMPLIB= i$(TARGET2)
|
|
+
|
|
+SHL2DEF= $(MISC)$/$(SHL2TARGET).def
|
|
+
|
|
+DEF2NAME= $(SHL2TARGET)
|
|
+
|
|
+# --- Targets -----------------------------------
|
|
+.ELSE # "$(ENABLE_TDEAB)" == "TRUE"
|
|
+dummy:
|
|
+ @echo TDE Addressbook disabled - nothing to build
|
|
+.ENDIF
|
|
+
|
|
+.ELSE # "$(GUI)" == "UNX"
|
|
+dummy:
|
|
+ @echo "Nothing to build for GUI $(GUI)"
|
|
+.ENDIF
|
|
+
|
|
+.INCLUDE : $(PRJ)$/target.pmk
|
|
+
|
|
diff --git a/connectivity/source/drivers/tdeab/tdeab.xcu b/connectivity/source/drivers/tdeab/tdeab.xcu
|
|
new file mode 100644
|
|
index 0000000..63b2761
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/tdeab.xcu
|
|
@@ -0,0 +1,47 @@
|
|
+<?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 --git a/connectivity/source/drivers/tdeab/tdeab.xml b/connectivity/source/drivers/tdeab/tdeab.xml
|
|
new file mode 100644
|
|
index 0000000..4deb1d1
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/tdeab.xml
|
|
@@ -0,0 +1,77 @@
|
|
+<?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 --git a/connectivity/source/drivers/tdeab/tdeabdrv.map b/connectivity/source/drivers/tdeab/tdeabdrv.map
|
|
new file mode 100644
|
|
index 0000000..2c828d8
|
|
--- /dev/null
|
|
+++ b/connectivity/source/drivers/tdeab/tdeabdrv.map
|
|
@@ -0,0 +1,9 @@
|
|
+UDK_3_0_0 {
|
|
+ global:
|
|
+ createKabConnection;
|
|
+ initKApplication;
|
|
+ shutdownKApplication;
|
|
+ matchTDEVersion;
|
|
+ local:
|
|
+ *;
|
|
+};
|
|
diff --git a/connectivity/source/inc/resource/tdeab_res.hrc b/connectivity/source/inc/resource/tdeab_res.hrc
|
|
new file mode 100644
|
|
index 0000000..ff6a7b2
|
|
--- /dev/null
|
|
+++ b/connectivity/source/inc/resource/tdeab_res.hrc
|
|
@@ -0,0 +1,44 @@
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/connectivity/version.mk b/connectivity/version.mk
|
|
index fd2235c..9ff6151 100755
|
|
--- a/connectivity/version.mk
|
|
+++ b/connectivity/version.mk
|
|
@@ -101,6 +101,16 @@ KAB_MINOR=0
|
|
# the micro
|
|
KAB_MICRO=0
|
|
|
|
+# ----------------------------Tdeab settings-------------------------------------#
|
|
+# target
|
|
+TDEAB_TARGET=tdeab
|
|
+
|
|
+# the major
|
|
+TDEAB_MAJOR=1
|
|
+# the minor
|
|
+TDEAB_MINOR=0
|
|
+# the micro
|
|
+TDEAB_MICRO=0
|
|
|
|
# ----------------------------Macab settings-------------------------------------#
|
|
# target
|
|
diff --git a/cui/Library_cui.mk b/cui/Library_cui.mk
|
|
index 94d8a4a..1113ab0 100644
|
|
--- a/cui/Library_cui.mk
|
|
+++ b/cui/Library_cui.mk
|
|
@@ -41,6 +41,7 @@ $(eval $(call gb_Library_set_include,cui,\
|
|
$(eval $(call gb_Library_add_defs,cui,\
|
|
$(if $(filter TRUE,$(ENABLE_GTK)),-DENABLE_GTK) \
|
|
$(if $(filter TRUE,$(ENABLE_KDE)),-DENABLE_KDE) \
|
|
+ $(if $(filter TRUE,$(ENABLE_TDE)),-DENABLE_TDE) \
|
|
$(if $(filter TRUE,$(ENABLE_KDE4)),-DENABLE_KDE4) \
|
|
))
|
|
|
|
diff --git a/cui/source/options/optgdlg.cxx b/cui/source/options/optgdlg.cxx
|
|
index e08dcc7..8237c02 100644
|
|
--- a/cui/source/options/optgdlg.cxx
|
|
+++ b/cui/source/options/optgdlg.cxx
|
|
@@ -153,6 +153,14 @@ namespace
|
|
return rtl::OUString();
|
|
#endif
|
|
}
|
|
+ else if ( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "tde" ) )
|
|
+ {
|
|
+ #ifdef ENABLE_TDE
|
|
+ return ::rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.TDEFilePicker" );
|
|
+ #else
|
|
+ return rtl::OUString();
|
|
+ #endif
|
|
+ }
|
|
#if defined WNT
|
|
return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ui.dialogs.SystemFilePicker") );
|
|
#elif (defined MACOSX && defined QUARTZ)
|
|
diff --git a/desktop/Pagein_common.mk b/desktop/Pagein_common.mk
|
|
index 3b0330c..e119474 100644
|
|
--- a/desktop/Pagein_common.mk
|
|
+++ b/desktop/Pagein_common.mk
|
|
@@ -46,6 +46,7 @@ $(eval $(call desktop_Pagein_add_libs,common,\
|
|
vclplug_gen \
|
|
$(if $(findstring TRUE,$(ENABLE_GTK)),vclplug_gtk) \
|
|
$(if $(findstring TRUE,$(ENABLE_KDE)),vclplug_kde) \
|
|
+ $(if $(findstring TRUE,$(ENABLE_TDE)),vclplug_tde) \
|
|
basegfx \
|
|
sot \
|
|
xcr \
|
|
diff --git a/fpicker/prj/build.lst b/fpicker/prj/build.lst
|
|
index 114a301..b4f0898f 100644
|
|
--- a/fpicker/prj/build.lst
|
|
+++ b/fpicker/prj/build.lst
|
|
@@ -7,8 +7,10 @@ fp fpicker\source\unx\gnome nmake - u fp_gnome_filepicker fp_inc NULL
|
|
fp fpicker\source\unx\kde4 nmake - u fp_kde4_filepicker fp_inc NULL
|
|
fp fpicker\source\unx\kde_unx nmake - u fp_unx_common fp_inc NULL
|
|
fp fpicker\source\unx\kde nmake - u fp_unx_kde_filepicker fp_inc NULL
|
|
+fp fpicker\source\unx\tde_unx nmake - u fp_unx_tdecommon fp_inc NULL
|
|
+fp fpicker\source\unx\tde nmake - u fp_unx_tde_filepicker fp_inc NULL
|
|
fp fpicker\source\aqua nmake - u fp_macosx_filepicker NULL
|
|
fp fpicker\source\win32\filepicker nmake - w fp_win32_filepicker fp_inc NULL
|
|
fp fpicker\source\win32\folderpicker nmake - w fp_win32_folderpicker fp_inc NULL
|
|
fp fpicker\source\win32\misc nmake - w fp_win32_misc fp_win32_filepicker.w fp_win32_folderpicker.w fp_inc NULL
|
|
-fp fpicker\util nmake - all fp_util fp_gnome_filepicker.u fp_unx_common.u fp_unx_kde_filepicker.u fp_win32_filepicker.w fp_win32_misc.w fp_win32_folderpicker.w NULL
|
|
+fp fpicker\util nmake - all fp_util fp_gnome_filepicker.u fp_unx_common.u fp_unx_kde_filepicker.u fp_unx_tdecommon.u fp_unx_tde_filepicker.u fp_win32_filepicker.w fp_win32_misc.w fp_win32_folderpicker.w NULL
|
|
diff --git a/fpicker/prj/d.lst b/fpicker/prj/d.lst
|
|
index 71ec565..bef8b71 100644
|
|
--- a/fpicker/prj/d.lst
|
|
+++ b/fpicker/prj/d.lst
|
|
@@ -5,6 +5,7 @@ mkdir: %COMMON_DEST%\bin\hid
|
|
..\%__SRC%\bin\f*.res %_DEST%\bin\
|
|
..\%__SRC%\bin\f*.dll %_DEST%\bin\
|
|
..\%__SRC%\bin\kdefilepicker %_DEST%\bin\kdefilepicker
|
|
+..\%__SRC%\bin\tdefilepicker %_DEST%\bin\tdefilepicker
|
|
..\%__SRC%\lib\f*.so %_DEST%\lib\
|
|
..\%__SRC%\lib\*.dylib %_DEST%\lib\*.dylib
|
|
|
|
diff --git a/fpicker/source/generic/fpicker.cxx b/fpicker/source/generic/fpicker.cxx
|
|
index 1444fde..fa5b2ec 100644
|
|
--- a/fpicker/source/generic/fpicker.cxx
|
|
+++ b/fpicker/source/generic/fpicker.cxx
|
|
@@ -65,6 +65,8 @@ static OUString FilePicker_getSystemPickerServiceName()
|
|
return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDEFilePicker"));
|
|
else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde4"))
|
|
return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDE4FilePicker"));
|
|
+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("tde"))
|
|
+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.TDEFilePicker"));
|
|
else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("macosx"))
|
|
return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.AquaFilePicker"));
|
|
else
|
|
@@ -141,6 +143,8 @@ static OUString FolderPicker_getSystemPickerServiceName()
|
|
return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.GtkFolderPicker"));
|
|
else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde"))
|
|
return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDEFolderPicker"));
|
|
+ else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("tde"))
|
|
+ return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.TDEFolderPicker"));
|
|
else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("macosx"))
|
|
return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.AquaFolderPicker"));
|
|
#endif
|
|
diff --git a/fpicker/source/unx/kde/makefile.mk b/fpicker/source/unx/kde/makefile.mk
|
|
index 1548d7b..768c946 100644
|
|
--- a/fpicker/source/unx/kde/makefile.mk
|
|
+++ b/fpicker/source/unx/kde/makefile.mk
|
|
@@ -29,8 +29,8 @@ PRJ=..$/..$/..
|
|
|
|
PRJNAME=fpicker
|
|
TARGET=kdefilepicker
|
|
-LIBTARGET=NO
|
|
ENABLE_EXCEPTIONS=TRUE
|
|
+LIBTARGET=NO
|
|
EXTERNAL_WARNINGS_NOT_ERRORS=TRUE
|
|
|
|
# --- Settings -----------------------------------------------------
|
|
@@ -63,7 +63,7 @@ SLOFILES =\
|
|
|
|
APP1TARGET=$(TARGET)
|
|
APP1OBJS=$(SLOFILES)
|
|
-APP1RPATH=OOO
|
|
+APP1RPATH=BRAND
|
|
APP1LINKFLAGS=$(KDE_LIBS) -lkio -lX11
|
|
APP1STDLIBS=$(SALLIB)
|
|
|
|
diff --git a/fpicker/source/unx/tde/makefile.mk b/fpicker/source/unx/tde/makefile.mk
|
|
new file mode 100644
|
|
index 0000000..26d7979
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde/makefile.mk
|
|
@@ -0,0 +1,78 @@
|
|
+#*************************************************************************
|
|
+#
|
|
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+#
|
|
+# Copyright 2010 Novell, Inc.
|
|
+# Copyright 2011 Timothy Pearson
|
|
+#
|
|
+# OpenOffice.org - a multi-platform office productivity suite
|
|
+#
|
|
+# This file is part of OpenOffice.org.
|
|
+#
|
|
+# OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+# it under the terms of the GNU Lesser General Public License version 3
|
|
+# only, as published by the Free Software Foundation.
|
|
+#
|
|
+# OpenOffice.org is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU Lesser General Public License version 3 for more details
|
|
+# (a copy is included in the LICENSE file that accompanied this code).
|
|
+#
|
|
+# You should have received a copy of the GNU Lesser General Public License
|
|
+# version 3 along with OpenOffice.org. If not, see
|
|
+# <http://www.openoffice.org/license.html>
|
|
+# for a copy of the LGPLv3 License.
|
|
+#
|
|
+#*************************************************************************
|
|
+
|
|
+PRJ=..$/..$/..
|
|
+
|
|
+PRJNAME=fpicker
|
|
+TARGET=tdefilepicker
|
|
+ENABLE_EXCEPTIONS=TRUE
|
|
+LIBTARGET=NO
|
|
+EXTERNAL_WARNINGS_NOT_ERRORS=TRUE
|
|
+
|
|
+# --- Settings -----------------------------------------------------
|
|
+
|
|
+.INCLUDE : settings.mk
|
|
+
|
|
+# ------------------------------------------------------------------
|
|
+
|
|
+.IF "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE"
|
|
+
|
|
+dummy:
|
|
+ @echo "Nothing to build. GUIBASE == $(GUIBASE), ENABLE_TDE is not set"
|
|
+
|
|
+.ELSE # we build for TDE
|
|
+
|
|
+CFLAGS+= $(TDE_CFLAGS)
|
|
+
|
|
+.IF "$(COM)" == "GCC"
|
|
+CFLAGSCXX+=-Wno-shadow
|
|
+.ENDIF
|
|
+
|
|
+# --- Files --------------------------------------------------------
|
|
+
|
|
+SLOFILES =\
|
|
+ $(SLO)$/tdecommandthread.obj \
|
|
+ $(SLO)$/tdefilepicker.obj \
|
|
+ $(SLO)$/tdefilepicker.moc.obj \
|
|
+ $(SLO)$/tdefpmain.obj \
|
|
+ $(SLO)$/tdemodalityfilter.obj
|
|
+
|
|
+APP1TARGET=$(TARGET)
|
|
+APP1OBJS=$(SLOFILES)
|
|
+APP1RPATH=OOO
|
|
+APP1LINKFLAGS=$(TDE_LIBS) -lkio -lX11
|
|
+APP1STDLIBS=$(SALLIB)
|
|
+
|
|
+.ENDIF # "$(GUIBASE)" != "unx" || "$(ENABLE_TDE)" != "TRUE"
|
|
+
|
|
+# --- Targets ------------------------------------------------------
|
|
+
|
|
+.INCLUDE : target.mk
|
|
+
|
|
+$(MISC)$/tdefilepicker.moc.cxx : tdefilepicker.hxx
|
|
+ $(MOC) $< -o $@
|
|
diff --git a/fpicker/source/unx/tde/tdecommandthread.cxx b/fpicker/source/unx/tde/tdecommandthread.cxx
|
|
new file mode 100644
|
|
index 0000000..8da50d2
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde/tdecommandthread.cxx
|
|
@@ -0,0 +1,183 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#include <cstddef>
|
|
+
|
|
+#include <tdecommandthread.hxx>
|
|
+
|
|
+#include <tqstringlist.h>
|
|
+
|
|
+#include <kapplication.h>
|
|
+
|
|
+#if OSL_DEBUG_LEVEL > 1
|
|
+#include <iostream>
|
|
+#endif
|
|
+
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+// CommandEvent
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+
|
|
+TDECommandEvent::TDECommandEvent( const TQString &qCommand, TQStringList *pStringList )
|
|
+ : TQCustomEvent( TypeId, pStringList ),
|
|
+ m_eCommand( Unknown )
|
|
+{
|
|
+ struct {
|
|
+ const char *pName;
|
|
+ CommandEventType eType;
|
|
+ } *pIdx, pMapping[] =
|
|
+ {
|
|
+ { "appendControl", AppendControl },
|
|
+ { "enableControl", EnableControl },
|
|
+ { "getValue", GetValue },
|
|
+ { "setValue", SetValue },
|
|
+ { "appendFilter", AppendFilter },
|
|
+ { "appendFilterGroup", AppendFilterGroup },
|
|
+ { "getCurrentFilter", GetCurrentFilter },
|
|
+ { "setCurrentFilter", SetCurrentFilter },
|
|
+ { "getDirectory", GetDirectory },
|
|
+ { "setDirectory", SetDirectory },
|
|
+ { "getFiles", GetFiles },
|
|
+ { "setTitle", SetTitle },
|
|
+ { "setType", SetType },
|
|
+ { "setDefaultName", SetDefaultName },
|
|
+ { "setMultiSelection", SetMultiSelection },
|
|
+ { "exec", Exec },
|
|
+ { 0, Unknown }
|
|
+ };
|
|
+
|
|
+ for ( pIdx = pMapping; pIdx->pName && qCommand != pIdx->pName; ++pIdx )
|
|
+ ;
|
|
+
|
|
+ m_eCommand = pIdx->eType;
|
|
+}
|
|
+
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+// CommandThread
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+
|
|
+TDECommandThread::TDECommandThread( TQWidget *pObject )
|
|
+ : m_pObject( pObject )
|
|
+{
|
|
+}
|
|
+
|
|
+TDECommandThread::~TDECommandThread()
|
|
+{
|
|
+}
|
|
+
|
|
+void TDECommandThread::run()
|
|
+{
|
|
+ TQTextIStream qStream( stdin );
|
|
+ qStream.setEncoding( TQTextStream::UnicodeUTF8 );
|
|
+
|
|
+ TQString qLine;
|
|
+ bool bQuit = false;
|
|
+ while ( !bQuit && !qStream.atEnd() )
|
|
+ {
|
|
+ qLine = qStream.readLine();
|
|
+ handleCommand( qLine, bQuit );
|
|
+ }
|
|
+}
|
|
+
|
|
+void TDECommandThread::handleCommand( const TQString &rString, bool &bQuit )
|
|
+{
|
|
+ TQMutexLocker qMutexLocker( &m_aMutex );
|
|
+
|
|
+#if OSL_DEBUG_LEVEL > 1
|
|
+ ::std::cerr << "tdefilepicker received: " << rString.latin1() << ::std::endl;
|
|
+#endif
|
|
+
|
|
+ bQuit = false;
|
|
+ TQStringList *pTokens = tokenize( rString );
|
|
+
|
|
+ if ( !pTokens )
|
|
+ return;
|
|
+ if ( pTokens->empty() )
|
|
+ {
|
|
+ delete pTokens, pTokens = NULL;
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ TQString qCommand = pTokens->front();
|
|
+ pTokens->pop_front();
|
|
+
|
|
+ if ( qCommand == "exit" )
|
|
+ {
|
|
+ bQuit = true;
|
|
+ kapp->exit();
|
|
+ kapp->wakeUpGuiThread();
|
|
+ _exit(0); // FIXME This prevents a SIGABRT on some systems Why?
|
|
+ }
|
|
+ else
|
|
+ kapp->postEvent( m_pObject, new TDECommandEvent( qCommand, pTokens ) );
|
|
+}
|
|
+
|
|
+TQStringList* TDECommandThread::tokenize( const TQString &rString )
|
|
+{
|
|
+ // Commands look like:
|
|
+ // command arg1 arg2 arg3 ...
|
|
+ // Args may be enclosed in '"', if they contain spaces.
|
|
+
|
|
+ TQStringList *pList = new TQStringList();
|
|
+
|
|
+ TQString qBuffer;
|
|
+ qBuffer.reserve( 1024 );
|
|
+
|
|
+ const TQChar *pUnicode = rString.unicode();
|
|
+ const TQChar *pEnd = pUnicode + rString.length();
|
|
+ bool bQuoted = false;
|
|
+
|
|
+ for ( ; pUnicode != pEnd; ++pUnicode )
|
|
+ {
|
|
+ if ( *pUnicode == '\\' )
|
|
+ {
|
|
+ ++pUnicode;
|
|
+ if ( pUnicode != pEnd )
|
|
+ {
|
|
+ if ( *pUnicode == 'n' )
|
|
+ qBuffer.append( '\n' );
|
|
+ else
|
|
+ qBuffer.append( *pUnicode );
|
|
+ }
|
|
+ }
|
|
+ else if ( *pUnicode == '"' )
|
|
+ bQuoted = !bQuoted;
|
|
+ else if ( *pUnicode == ' ' && !bQuoted )
|
|
+ {
|
|
+ pList->push_back( qBuffer );
|
|
+ qBuffer.setLength( 0 );
|
|
+ }
|
|
+ else
|
|
+ qBuffer.append( *pUnicode );
|
|
+ }
|
|
+ pList->push_back( qBuffer );
|
|
+
|
|
+ return pList;
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/fpicker/source/unx/tde/tdecommandthread.hxx b/fpicker/source/unx/tde/tdecommandthread.hxx
|
|
new file mode 100644
|
|
index 0000000..8697de9
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde/tdecommandthread.hxx
|
|
@@ -0,0 +1,98 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/fpicker/source/unx/tde/tdefilepicker.cxx b/fpicker/source/unx/tde/tdefilepicker.cxx
|
|
new file mode 100644
|
|
index 0000000..46ab20d
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde/tdefilepicker.cxx
|
|
@@ -0,0 +1,735 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#include <cstddef>
|
|
+
|
|
+#include <tdecommandthread.hxx>
|
|
+#include <tdefilepicker.hxx>
|
|
+
|
|
+#include <tqcheckbox.h>
|
|
+#include <tqcombobox.h>
|
|
+#include <tqgrid.h>
|
|
+#include <tqhbox.h>
|
|
+#include <tqlabel.h>
|
|
+#include <tqlayout.h>
|
|
+#include <tqobjectlist.h>
|
|
+#include <tqpushbutton.h>
|
|
+#include <tqregexp.h>
|
|
+#include <tqvbox.h>
|
|
+
|
|
+#ifdef TQT_NO_EMIT
|
|
+#define emit
|
|
+#endif
|
|
+
|
|
+#include <kdeversion.h>
|
|
+#include <kdiroperator.h>
|
|
+#include <kfiledialog.h>
|
|
+#include <kfilefiltercombo.h>
|
|
+#include <kio/netaccess.h>
|
|
+#include <klocale.h>
|
|
+#include <kmessagebox.h>
|
|
+#include <ktempfile.h>
|
|
+
|
|
+#include <algorithm>
|
|
+#include <iostream>
|
|
+
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+// TDEFileDialog
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+
|
|
+TDEFileDialog::TDEFileDialog( const TQString &startDir, const TQString &filter,
|
|
+ TQWidget *parent, const char *name )
|
|
+ : KFileDialog( startDir, filter, parent, name, true, m_pCustomWidget = new TQVBox() ),
|
|
+ m_pCombosAndButtons( new TQHBox( m_pCustomWidget ) ),
|
|
+ m_pLabels( new TQVBox( m_pCombosAndButtons ) ),
|
|
+ m_pComboBoxes( new TQVBox( m_pCombosAndButtons ) ),
|
|
+ m_pPushButtons( new TQVBox( m_pCombosAndButtons ) ),
|
|
+ m_pCheckBoxes( new TQGrid( 2, m_pCustomWidget ) ),
|
|
+ m_bIsSave( false ),
|
|
+ m_bIsExecuting( false ),
|
|
+ m_bCanNotifySelection( true )
|
|
+{
|
|
+ connect( this, TQT_SIGNAL( fileHighlighted( const TQString & ) ),
|
|
+ this, TQT_SLOT( fileHighlightedCommand( const TQString & ) ) );
|
|
+
|
|
+ connect( this, TQT_SIGNAL( selectionChanged() ),
|
|
+ this, TQT_SLOT( selectionChangedCommand() ) );
|
|
+
|
|
+ m_pCustomWidget->setSpacing( KDialog::spacingHint() );
|
|
+ m_pCombosAndButtons->setSpacing( KDialog::spacingHint() );
|
|
+
|
|
+ updateCustomWidgetLayout();
|
|
+}
|
|
+
|
|
+TDEFileDialog::~TDEFileDialog()
|
|
+{
|
|
+}
|
|
+
|
|
+void TDEFileDialog::resizeEvent( TQResizeEvent *pEvent )
|
|
+{
|
|
+ KFileDialog::resizeEvent( pEvent );
|
|
+
|
|
+ updateCustomWidgetLayout();
|
|
+}
|
|
+
|
|
+void TDEFileDialog::showEvent( TQShowEvent *pEvent )
|
|
+{
|
|
+ KFileDialog::showEvent( pEvent );
|
|
+
|
|
+ updateCustomWidgetLayout();
|
|
+}
|
|
+
|
|
+void TDEFileDialog::updateCustomWidgetLayout()
|
|
+{
|
|
+ TQPoint qReferencePoint = filterWidget->mapTo( this, TQPoint( 0, 0 ) );
|
|
+ TQPoint qCustomPoint = m_pCustomWidget->mapTo( this, TQPoint( 0, 0 ) );
|
|
+
|
|
+ int nLeft = qReferencePoint.x() - qCustomPoint.x();
|
|
+ int nRight = m_pCustomWidget->width() - filterWidget->width() - nLeft;
|
|
+
|
|
+ nLeft -= KDialog::spacingHint();
|
|
+ nRight -= KDialog::spacingHint();
|
|
+ m_pLabels->setFixedWidth( ( nLeft > 0 )? nLeft: 80 );
|
|
+ // FIXME The following call sets the width of m_pPushButtons all right,
|
|
+ // but it also increases the width of m_pComboBoxes rapidly. Can we do
|
|
+ // anything about it?
|
|
+ m_pPushButtons->setFixedWidth( ( nRight > 0 )? nRight: 100 );
|
|
+}
|
|
+
|
|
+void TDEFileDialog::customEvent( TQCustomEvent *pEvent )
|
|
+{
|
|
+ if ( pEvent && pEvent->type() == TDECommandEvent::TypeId )
|
|
+ {
|
|
+ TDECommandEvent *pCommandEvent = static_cast< TDECommandEvent* >( pEvent );
|
|
+ TQStringList *pStringList = pCommandEvent->stringList();
|
|
+
|
|
+ int nListSize = -1;
|
|
+ if ( pStringList )
|
|
+ nListSize = pStringList->size();
|
|
+
|
|
+ switch ( pCommandEvent->command() )
|
|
+ {
|
|
+ case TDECommandEvent::AppendControl:
|
|
+ if ( nListSize >= 3 )
|
|
+ {
|
|
+ appendControl( (*pStringList)[0], (*pStringList)[1], (*pStringList)[2] );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::EnableControl:
|
|
+ if ( nListSize >= 2 )
|
|
+ {
|
|
+ enableControl( (*pStringList)[0], (*pStringList)[1] );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::GetValue:
|
|
+ if ( nListSize >= 2 )
|
|
+ {
|
|
+ getValue( (*pStringList)[0], (*pStringList)[1] );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::SetValue:
|
|
+ if ( nListSize >= 2 )
|
|
+ {
|
|
+ TQStringList qStringList = (*pStringList);
|
|
+ qStringList.pop_front();
|
|
+ qStringList.pop_front();
|
|
+
|
|
+ setValue( (*pStringList)[0], (*pStringList)[1], qStringList );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::AppendFilter:
|
|
+ if ( nListSize >= 2 )
|
|
+ {
|
|
+ appendFilter( (*pStringList)[0], (*pStringList)[1] );
|
|
+
|
|
+ // update the filters widget
|
|
+ setFilter( filters() );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::AppendFilterGroup:
|
|
+ if ( nListSize >= 1 )
|
|
+ {
|
|
+ TQStringList::const_iterator it = pStringList->begin();
|
|
+ ++it; // We ignore the filter group name
|
|
+
|
|
+ while ( it != pStringList->end() )
|
|
+ {
|
|
+ TQString qTitle = *it;
|
|
+ ++it;
|
|
+ if ( it != pStringList->end() )
|
|
+ {
|
|
+ appendFilter( qTitle, (*it) );
|
|
+ ++it;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // update the filters widget
|
|
+ setFilter( filters() );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::GetCurrentFilter:
|
|
+ {
|
|
+ TQString qCurrentFilter = filterWidget->currentText();
|
|
+ sendCommand( "currentFilter " + escapeString( qCurrentFilter ) );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::SetCurrentFilter:
|
|
+ if ( nListSize >= 1 )
|
|
+ {
|
|
+ static_cast< TDEFileFilterComboHack* >( filterWidget )->setCurrentFilter( pStringList->front() );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::GetDirectory:
|
|
+ {
|
|
+ TQString qDirectory = baseURL().url();
|
|
+ if ( qDirectory.startsWith( "file:/" ) && qDirectory.mid( 6, 1 ) != "/" )
|
|
+ qDirectory.replace( "file:/", "file:///" );
|
|
+ sendCommand( "currentDirectory " + escapeString( qDirectory ) );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::SetDirectory:
|
|
+ if ( nListSize >= 1 )
|
|
+ {
|
|
+ setURL( pStringList->front() );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::GetFiles:
|
|
+ {
|
|
+ TQString qString;
|
|
+ qString.reserve( 1024 );
|
|
+
|
|
+ qString.append( "files" );
|
|
+
|
|
+ if ( result() == TQDialog::Accepted )
|
|
+ {
|
|
+ KURL::List qList( selectedURLs() );
|
|
+ for ( KURL::List::const_iterator it = qList.begin(); it != qList.end(); ++it )
|
|
+ appendURL( qString, (*it) );
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ // we have to return the selected files anyway
|
|
+ const KFileItemList *pItems = ops->selectedItems();
|
|
+ for ( KFileItemListIterator it( *pItems ); it.current(); ++it )
|
|
+ appendURL( qString, (*it)->url() );
|
|
+ }
|
|
+
|
|
+ sendCommand( qString );
|
|
+ setCanNotifySelection( true );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::SetTitle:
|
|
+ if ( nListSize >= 1 )
|
|
+ {
|
|
+ setCaption( pStringList->front() );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::SetType:
|
|
+ if ( nListSize >= 1 )
|
|
+ {
|
|
+ TQString qType( pStringList->front() );
|
|
+ if ( qType == "open" )
|
|
+ {
|
|
+ setIsSave( false );
|
|
+ setCaption( i18n( "Open" ) );
|
|
+ }
|
|
+ else if ( qType == "save" )
|
|
+ {
|
|
+ setIsSave( true );
|
|
+ setCaption( i18n( "Save As" ) );
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::SetDefaultName:
|
|
+ if ( nListSize >= 1 )
|
|
+ {
|
|
+ setKeepLocation( true );
|
|
+ setSelection( pStringList->front() );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::SetMultiSelection:
|
|
+ if ( nListSize >= 1 )
|
|
+ {
|
|
+ if ( pStringList->front() == "true" )
|
|
+ setMode( KFile::Files );
|
|
+ else
|
|
+ setMode( KFile::File );
|
|
+ }
|
|
+ break;
|
|
+ case TDECommandEvent::Exec:
|
|
+ {
|
|
+ filterWidget->setEditable( false );
|
|
+ setIsExecuting( true );
|
|
+ bool bCanExit = false;
|
|
+ do {
|
|
+ setCanNotifySelection( true );
|
|
+ exec();
|
|
+
|
|
+ KURL qLocalSelectedURL = mostLocalURL( selectedURL() );
|
|
+ TQString qProtocol( qLocalSelectedURL.protocol() );
|
|
+
|
|
+ if ( isSave() && result() == TQDialog::Accepted )
|
|
+ {
|
|
+ if ( qProtocol == "file" )
|
|
+ {
|
|
+ TQString qFileName( addExtension( qLocalSelectedURL.path() ) );
|
|
+ bCanExit =
|
|
+ !QFile::exists( qFileName ) ||
|
|
+ ( KMessageBox::warningYesNo( 0,
|
|
+ i18n( "A file named \"%1\" already exists. "
|
|
+ "Are you sure you want to overwrite it?" ).arg( qFileName ),
|
|
+ i18n( "Overwrite File?" ),
|
|
+ i18n( "Overwrite" ), KStdGuiItem::cancel() ) == KMessageBox::Yes );
|
|
+ }
|
|
+ else if ( !isSupportedProtocol( qProtocol ) )
|
|
+ {
|
|
+ KMessageBox::sorry( 0,
|
|
+ i18n( "Saving using protocol \"%1\" is not supported." ).arg( qProtocol ) );
|
|
+ bCanExit = false;
|
|
+ }
|
|
+ else
|
|
+ bCanExit = true;
|
|
+ }
|
|
+ else if ( !isSave() && result() == TQDialog::Accepted && !isSupportedProtocol( qProtocol ) )
|
|
+ {
|
|
+ KMessageBox::information( 0,
|
|
+ i18n( "Protocol \"%1\" is supported only partially. "
|
|
+ "Local copy of the file will be created." ).arg( qProtocol ) );
|
|
+ bCanExit = true;
|
|
+ }
|
|
+ else
|
|
+ bCanExit = true;
|
|
+ } while ( !bCanExit );
|
|
+ setIsExecuting( false );
|
|
+
|
|
+ if ( result() == TQDialog::Accepted )
|
|
+ sendCommand( "accept" );
|
|
+ else
|
|
+ sendCommand( "reject" );
|
|
+ }
|
|
+ break;
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ // FIXME Some cleanup of pEvent? delete something, etc.?
|
|
+ }
|
|
+}
|
|
+
|
|
+void TDEFileDialog::appendControl( const TQString &rId, const TQString &rType, const TQString &rTitle )
|
|
+{
|
|
+ TQString qLabel( rTitle );
|
|
+ qLabel.replace( '~', '&' );
|
|
+
|
|
+ if ( rType == "checkbox" )
|
|
+ {
|
|
+ TQCheckBox *pCheckBox = new TQCheckBox( qLabel, m_pCheckBoxes, rId.utf8() );
|
|
+
|
|
+ pCheckBox->setEnabled( true );
|
|
+ pCheckBox->setChecked( false );
|
|
+ }
|
|
+ else if ( rType == "listbox" )
|
|
+ {
|
|
+ TQLabel *pComboLabel = new TQLabel( qLabel, m_pLabels );
|
|
+ TQComboBox *pComboBox = new TQComboBox( m_pComboBoxes, rId.utf8() );
|
|
+
|
|
+ pComboLabel->setBuddy( pComboBox );
|
|
+ pComboBox->setEnabled( true );
|
|
+ }
|
|
+ else if ( rType == "pushbutton" )
|
|
+ {
|
|
+ TQPushButton *pPushButton = new TQPushButton( qLabel, m_pPushButtons, rId.utf8() );
|
|
+ pPushButton->setEnabled( true );
|
|
+ }
|
|
+}
|
|
+
|
|
+TQWidget* TDEFileDialog::findControl( const TQString &rId ) const
|
|
+{
|
|
+ TQObjectList *pList = m_pCustomWidget->queryList();
|
|
+ TQCString qName( rId.utf8() );
|
|
+ TQObjectList::const_iterator it = pList->begin();
|
|
+
|
|
+ for ( ; it != pList->end() && qName != (*it)->name(); ++it )
|
|
+ ;
|
|
+
|
|
+ TQWidget *pWidget = NULL;
|
|
+ if ( it != pList->end() )
|
|
+ pWidget = static_cast< TQWidget* >( *it );
|
|
+
|
|
+ delete pList;
|
|
+
|
|
+ return pWidget;
|
|
+}
|
|
+
|
|
+void TDEFileDialog::enableControl( const TQString &rId, const TQString &rValue )
|
|
+{
|
|
+ TQWidget *pWidget = findControl( rId );
|
|
+
|
|
+ if ( pWidget )
|
|
+ pWidget->setEnabled( rValue.lower() == "true" );
|
|
+}
|
|
+
|
|
+void TDEFileDialog::getValue( const TQString &rId, const TQString &rAction )
|
|
+{
|
|
+ TQWidget *pWidget = findControl( rId );
|
|
+ TQString qString;
|
|
+ qString.reserve( 1024 );
|
|
+ qString.append( "value" );
|
|
+
|
|
+ if ( pWidget )
|
|
+ {
|
|
+ TQCString qClassName = pWidget->className();
|
|
+ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING )
|
|
+ {
|
|
+ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget );
|
|
+
|
|
+ if ( pCheckBox->isChecked() )
|
|
+ qString.append( " bool true" );
|
|
+ else
|
|
+ qString.append( " bool false" );
|
|
+ }
|
|
+ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING )
|
|
+ {
|
|
+ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget );
|
|
+ if ( rAction == "getItems" )
|
|
+ {
|
|
+ qString.append( " stringList" );
|
|
+ for ( int nIdx = 0; nIdx < pComboBox->count(); ++nIdx )
|
|
+ {
|
|
+ qString.append( ' ' );
|
|
+ appendEscaped( qString, pComboBox->text( nIdx ) );
|
|
+ }
|
|
+ }
|
|
+ else if ( rAction == "getSelectedItem" )
|
|
+ {
|
|
+ qString.append( " string " );
|
|
+ appendEscaped( qString, pComboBox->currentText() );
|
|
+ }
|
|
+ else if ( rAction == "getSelectedItemIndex" )
|
|
+ {
|
|
+ qString.append( " int " );
|
|
+ qString.append( TQString().setNum( pComboBox->currentItem() ) );
|
|
+ }
|
|
+ // TODO getHelpURL
|
|
+ }
|
|
+ // TODO push button
|
|
+ }
|
|
+
|
|
+ sendCommand( qString );
|
|
+}
|
|
+
|
|
+void TDEFileDialog::setValue( const TQString &rId, const TQString &rAction, const TQStringList &rValue )
|
|
+{
|
|
+ TQWidget *pWidget = findControl( rId );
|
|
+
|
|
+ if ( pWidget )
|
|
+ {
|
|
+ TQCString qClassName = pWidget->className();
|
|
+ if ( qClassName == TQCHECKBOX_OBJECT_NAME_STRING )
|
|
+ {
|
|
+ TQCheckBox *pCheckBox = static_cast< TQCheckBox* >( pWidget );
|
|
+
|
|
+ bool bValue = ( !rValue.isEmpty() ) && ( rValue.front().lower() == "true" );
|
|
+ pCheckBox->setChecked( bValue );
|
|
+ }
|
|
+ else if ( qClassName == TQCOMBOBOX_OBJECT_NAME_STRING )
|
|
+ {
|
|
+ TQComboBox *pComboBox = static_cast< TQComboBox* >( pWidget );
|
|
+ if ( rAction == "addItem" )
|
|
+ {
|
|
+ if ( !rValue.isEmpty() )
|
|
+ pComboBox->insertItem( rValue.front() );
|
|
+ }
|
|
+ else if ( rAction == "addItems" )
|
|
+ {
|
|
+ pComboBox->insertStringList( rValue );
|
|
+ }
|
|
+ else if ( rAction == "deleteItem" )
|
|
+ {
|
|
+ if ( !rValue.isEmpty() )
|
|
+ pComboBox->removeItem( rValue.front().toInt() );
|
|
+ }
|
|
+ else if ( rAction == "deleteItems" )
|
|
+ {
|
|
+ pComboBox->clear();
|
|
+ }
|
|
+ else if ( rAction == "setSelectedItem" )
|
|
+ {
|
|
+ if ( !rValue.isEmpty() )
|
|
+ pComboBox->setCurrentItem( rValue.front().toInt() );
|
|
+ }
|
|
+ // FIXME setHelpURL is ignored
|
|
+ }
|
|
+ // TODO push button
|
|
+ }
|
|
+}
|
|
+
|
|
+void TDEFileDialog::appendFilter( const TQString &rTitle, const TQString &rFilter )
|
|
+{
|
|
+ // Filters are separated by ';'
|
|
+ TQString qFilter( rFilter );
|
|
+ qFilter.replace( TQChar( ';' ), TQChar( ' ' ) ).replace( "*.*", "*" );
|
|
+
|
|
+ // Workaround for too wide <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( KIO::NetAccess::mostLocalURL( rURL, const_cast<TDEFileDialog*>( this ) ) );
|
|
+ if ( qMostLocalURL.isLocalFile() )
|
|
+ return qMostLocalURL;
|
|
+ else
|
|
+ {
|
|
+ // Terrible hack to get even non-existing media:// files right
|
|
+ qMostLocalURL.cd( ".." );
|
|
+ KURL qMostLocalPath( KIO::NetAccess::mostLocalURL( qMostLocalURL, const_cast<TDEFileDialog*>( this ) ) );
|
|
+ if ( qMostLocalPath.isLocalFile() )
|
|
+ {
|
|
+ qMostLocalPath.addPath( rURL.fileName() );
|
|
+ return qMostLocalPath;
|
|
+ }
|
|
+ }
|
|
+#endif
|
|
+
|
|
+ return rURL;
|
|
+}
|
|
+
|
|
+TQString TDEFileDialog::localCopy( const TQString &rFileName ) const
|
|
+{
|
|
+ // 106 == MIB enum for UTF-8
|
|
+ KURL qLocalURL = mostLocalURL( KURL( rFileName, 106 ) );
|
|
+ if ( qLocalURL.isLocalFile() )
|
|
+ return qLocalURL.url();
|
|
+
|
|
+ int nExtensionPos = rFileName.findRev( '/' );
|
|
+ if ( nExtensionPos >= 0 )
|
|
+ nExtensionPos = rFileName.find( '.', nExtensionPos );
|
|
+ else
|
|
+ nExtensionPos = rFileName.find( '.' );
|
|
+
|
|
+ KTempFile qTempFile( TQString::null, ( nExtensionPos < 0 )? TQString(): rFileName.mid( nExtensionPos ) );
|
|
+ KURL qDestURL;
|
|
+ qDestURL.setPath( qTempFile.name() );
|
|
+
|
|
+ if ( !KIO::NetAccess::file_copy( rFileName, qDestURL, 0600, true, false, NULL ) )
|
|
+ {
|
|
+ KMessageBox::error( 0, KIO::NetAccess::lastErrorString() );
|
|
+ return TQString::null;
|
|
+ }
|
|
+
|
|
+ return qDestURL.url();
|
|
+}
|
|
+
|
|
+void TDEFileDialog::fileHighlightedCommand( const TQString & )
|
|
+{
|
|
+ if ( canNotifySelection() )
|
|
+ {
|
|
+ sendCommand( "fileSelectionChanged" );
|
|
+ setCanNotifySelection( false );
|
|
+ }
|
|
+}
|
|
+
|
|
+void TDEFileDialog::selectionChangedCommand()
|
|
+{
|
|
+ if ( canNotifySelection() )
|
|
+ {
|
|
+ sendCommand( "fileSelectionChanged" );
|
|
+ setCanNotifySelection( false );
|
|
+ }
|
|
+}
|
|
+
|
|
+void TDEFileDialog::sendCommand( const TQString &rCommand )
|
|
+{
|
|
+#if OSL_DEBUG_LEVEL > 1
|
|
+ ::std::cerr << "tdefilepicker sent: " << rCommand.latin1() << ::std::endl;
|
|
+#endif
|
|
+
|
|
+ //m_aOutputStream << rCommand << endl;
|
|
+ ::std::cout << rCommand.utf8() << ::std::endl;
|
|
+}
|
|
+
|
|
+void TDEFileDialog::appendURL( TQString &rBuffer, const KURL &rURL )
|
|
+{
|
|
+ // From Martin Kretzschmar:
|
|
+ // file:///path/to/test%E0.odt is not a valid URL from OOo's point of
|
|
+ // view. (?Most modern parts of?) OOo assume(s) that the URL contains only
|
|
+ // ASCII characters (which test%E0.odt does) and is UTF-8 after unescaping
|
|
+ // (which file:///path/test%E0.odt is not).
|
|
+ // Cf. the comment in sal/inc/osl/file.h.
|
|
+ // 106 == MIB enum for UTF-8
|
|
+ TQString qUrlStr = addExtension( rURL.url( 0, 106 ) );
|
|
+
|
|
+ if ( !isExecuting() && !isSupportedProtocol( rURL.protocol() ) )
|
|
+ qUrlStr = localCopy( qUrlStr );
|
|
+
|
|
+ if ( qUrlStr.startsWith( "file:/" ) && qUrlStr.mid( 6, 1 ) != "/" )
|
|
+ qUrlStr.replace( "file:/", "file:///" );
|
|
+
|
|
+ rBuffer.append( " " );
|
|
+ if ( !qUrlStr.isEmpty() )
|
|
+ appendEscaped( rBuffer, qUrlStr );
|
|
+}
|
|
+
|
|
+void TDEFileDialog::appendEscaped( TQString &rBuffer, const TQString &rString )
|
|
+{
|
|
+ const TQChar *pUnicode = rString.unicode();
|
|
+ const TQChar *pEnd = pUnicode + rString.length();
|
|
+
|
|
+ rBuffer.append( '"' );
|
|
+ for ( ; pUnicode != pEnd; ++pUnicode )
|
|
+ {
|
|
+ if ( *pUnicode == '\\' )
|
|
+ rBuffer.append( "\\\\" );
|
|
+ else if ( *pUnicode == '"' )
|
|
+ rBuffer.append( "\\\"" );
|
|
+ else if ( *pUnicode == '\n' )
|
|
+ rBuffer.append( "\\\n" );
|
|
+ else
|
|
+ rBuffer.append( *pUnicode );
|
|
+ }
|
|
+ rBuffer.append( '"' );
|
|
+}
|
|
+
|
|
+TQString TDEFileDialog::escapeString( const TQString &rString )
|
|
+{
|
|
+ TQString qString;
|
|
+ qString.reserve( 2*rString.length() + 2 ); // every char escaped + quotes
|
|
+
|
|
+ appendEscaped( qString, rString );
|
|
+
|
|
+ return qString;
|
|
+}
|
|
+
|
|
+
|
|
+void TDEFileFilterComboHack::setCurrentFilter( const TQString& filter )
|
|
+{
|
|
+ setCurrentText( filter );
|
|
+ filterChanged();
|
|
+
|
|
+ // Workaround for 'Filter name (*.blah)' vs. 'Filter name'
|
|
+ if ( currentText() != text( currentItem() ) )
|
|
+ {
|
|
+ int nItem = 0;
|
|
+ for ( ; nItem < count() && !text( nItem ).startsWith( filter ); ++nItem );
|
|
+
|
|
+ if ( nItem < count() )
|
|
+ setCurrentItem( nItem );
|
|
+ else
|
|
+ setCurrentItem( 0 );
|
|
+
|
|
+ filterChanged();
|
|
+ }
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/fpicker/source/unx/tde/tdefilepicker.hxx b/fpicker/source/unx/tde/tdefilepicker.hxx
|
|
new file mode 100644
|
|
index 0000000..f411db5
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde/tdefilepicker.hxx
|
|
@@ -0,0 +1,128 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#ifndef _TDEFILEPICKER_HXX_
|
|
+#define _TDEFILEPICKER_HXX_
|
|
+
|
|
+#include <cstddef>
|
|
+
|
|
+#include <kfiledialog.h>
|
|
+#include <kfilefiltercombo.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 --git a/fpicker/source/unx/tde/tdefpmain.cxx b/fpicker/source/unx/tde/tdefpmain.cxx
|
|
new file mode 100644
|
|
index 0000000..eb20aa3
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde/tdefpmain.cxx
|
|
@@ -0,0 +1,95 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#include <cstddef>
|
|
+
|
|
+#include <tdemodalityfilter.hxx>
|
|
+#include <tdefilepicker.hxx>
|
|
+#include <tdecommandthread.hxx>
|
|
+
|
|
+#include <kaboutdata.h>
|
|
+#include <kapplication.h>
|
|
+#include <kcmdlineargs.h>
|
|
+
|
|
+#include <iostream>
|
|
+#include <stdlib.h>
|
|
+
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+// Main
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+
|
|
+static KCmdLineOptions sOptions[] =
|
|
+{
|
|
+ { "winid <argument>", I18N_NOOP("Window ID to which is the fpicker modal"), "0" },
|
|
+ KCmdLineLastOption
|
|
+};
|
|
+
|
|
+int main( int argc, char* argv[] )
|
|
+{
|
|
+ // we fake the name of the application to have "OpenOffice.org" in the
|
|
+ // title
|
|
+ KAboutData qAboutData( "tdefilepicker", I18N_NOOP( "OpenOffice.org" ),
|
|
+ "0.1", I18N_NOOP( "tdefilepicker is an implementation of the TDE file dialog for OpenOffice.org." ),
|
|
+ KAboutData::License_LGPL,
|
|
+ "(c) 2004, Jan Holesovsky" );
|
|
+ qAboutData.addAuthor( "Jan Holesovsky", I18N_NOOP("Original author and current maintainer"), "kendy@openoffice.org" );
|
|
+
|
|
+ // Let the user see that this does something...
|
|
+ ::std::cerr << "tdefilepicker, an implementation of TDE file dialog for OOo." << ::std::endl
|
|
+ << "Type 'exit' and press Enter to finish." << ::std::endl;
|
|
+
|
|
+ KCmdLineArgs::addCmdLineOptions( sOptions );
|
|
+ KCmdLineArgs::init( argc, argv, &qAboutData );
|
|
+
|
|
+ KLocale::setMainCatalogue( "kdialog" );
|
|
+
|
|
+ KApplication kApplication;
|
|
+
|
|
+ // Setup the modality
|
|
+ KCmdLineArgs *pArgs = KCmdLineArgs::parsedArgs();
|
|
+ long nWinId = atol( pArgs->getOption( "winid" ) );
|
|
+ pArgs->clear();
|
|
+
|
|
+ TDEModalityFilter qModalityFilter( nWinId );
|
|
+
|
|
+ TDEFileDialog aFileDialog( NULL, TQString(), NULL, "tdefiledialog" );
|
|
+
|
|
+ TDECommandThread qCommandThread( &aFileDialog );
|
|
+ qCommandThread.start();
|
|
+
|
|
+ kApplication.exec();
|
|
+
|
|
+ qCommandThread.wait();
|
|
+
|
|
+ ::std::cout << "exited" << ::std::endl;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/fpicker/source/unx/tde/tdemodalityfilter.cxx b/fpicker/source/unx/tde/tdemodalityfilter.cxx
|
|
new file mode 100644
|
|
index 0000000..6ced314
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde/tdemodalityfilter.cxx
|
|
@@ -0,0 +1,70 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#include <cstddef>
|
|
+
|
|
+#include <tdemodalityfilter.hxx>
|
|
+
|
|
+#include <kapplication.h>
|
|
+#include <kdialogbase.h>
|
|
+
|
|
+#include <netwm.h>
|
|
+#include <X11/Xlib.h>
|
|
+#include <X11/Xutil.h>
|
|
+
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+// Modality filter
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+
|
|
+TDEModalityFilter::TDEModalityFilter( WId nWinId )
|
|
+ : m_nWinId( nWinId )
|
|
+{
|
|
+ kapp->installEventFilter( this );
|
|
+}
|
|
+
|
|
+TDEModalityFilter::~TDEModalityFilter()
|
|
+{
|
|
+ kapp->removeEventFilter( this );
|
|
+}
|
|
+
|
|
+bool TDEModalityFilter::eventFilter( TQObject *pObject, TQEvent *pEvent )
|
|
+{
|
|
+ if ( pObject->isWidgetType() && pEvent->type() == TQEvent::Show )
|
|
+ {
|
|
+ KDialogBase* pDlg = ::qt_cast< KDialogBase* >( pObject );
|
|
+ if ( pDlg != NULL && m_nWinId != 0 )
|
|
+ {
|
|
+ XSetTransientForHint( qt_xdisplay(), pDlg->winId(), m_nWinId );
|
|
+ m_nWinId = 0;
|
|
+ }
|
|
+ }
|
|
+ return false;
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/fpicker/source/unx/tde/tdemodalityfilter.hxx b/fpicker/source/unx/tde/tdemodalityfilter.hxx
|
|
new file mode 100644
|
|
index 0000000..b00f9a3
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde/tdemodalityfilter.hxx
|
|
@@ -0,0 +1,49 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/fpicker/source/unx/tde_unx/FPServiceInfo.hxx b/fpicker/source/unx/tde_unx/FPServiceInfo.hxx
|
|
new file mode 100644
|
|
index 0000000..2dcbe6d
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/FPServiceInfo.hxx
|
|
@@ -0,0 +1,48 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/fpicker/source/unx/tde_unx/UnxCommandThread.cxx b/fpicker/source/unx/tde_unx/UnxCommandThread.cxx
|
|
new file mode 100644
|
|
index 0000000..e6ae0bb
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/UnxCommandThread.cxx
|
|
@@ -0,0 +1,315 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/fpicker/source/unx/tde_unx/UnxCommandThread.hxx b/fpicker/source/unx/tde_unx/UnxCommandThread.hxx
|
|
new file mode 100644
|
|
index 0000000..41b82bd
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/UnxCommandThread.hxx
|
|
@@ -0,0 +1,136 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/fpicker/source/unx/tde_unx/UnxFPentry.cxx b/fpicker/source/unx/tde_unx/UnxFPentry.cxx
|
|
new file mode 100644
|
|
index 0000000..bd4582d
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/UnxFPentry.cxx
|
|
@@ -0,0 +1,112 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 ) ) );
|
|
+}
|
|
+
|
|
+extern "C"
|
|
+{
|
|
+
|
|
+sal_Bool SAL_CALL component_writeInfo( void* /*pServiceManager*/, void* pRegistryKey )
|
|
+{
|
|
+ sal_Bool bRetVal = sal_True;
|
|
+
|
|
+ if ( pRegistryKey )
|
|
+ {
|
|
+ try
|
|
+ {
|
|
+ Reference< XRegistryKey > pXNewKey( static_cast< XRegistryKey* >( pRegistryKey ) );
|
|
+ pXNewKey->createKey( OUString(RTL_CONSTASCII_USTRINGPARAM( FILE_PICKER_REGKEY_NAME ) ));
|
|
+ }
|
|
+ catch( InvalidRegistryException& )
|
|
+ {
|
|
+ OSL_FAIL( "InvalidRegistryException caught" );
|
|
+ bRetVal = sal_False;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return bRetVal;
|
|
+}
|
|
+
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+//
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
+
|
|
+SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory( const sal_Char* pImplName, uno_Interface* pSrvManager, uno_Interface* /*pRegistryKey*/ )
|
|
+{
|
|
+ void* pRet = 0;
|
|
+
|
|
+ if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FILE_PICKER_IMPL_NAME ) ) )
|
|
+// if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FILE_PICKER_SERVICE_NAME ) ) )
|
|
+ {
|
|
+ Sequence< OUString > aSNS( 1 );
|
|
+ aSNS.getArray( )[0] = OUString(RTL_CONSTASCII_USTRINGPARAM( FILE_PICKER_SERVICE_NAME ));
|
|
+
|
|
+ Reference< XSingleServiceFactory > xFactory ( createSingleFactory(
|
|
+ reinterpret_cast< XMultiServiceFactory* > ( pSrvManager ),
|
|
+ OUString::createFromAscii( pImplName ),
|
|
+ createInstance,
|
|
+ aSNS ) );
|
|
+ if ( xFactory.is() )
|
|
+ {
|
|
+ xFactory->acquire();
|
|
+ pRet = xFactory.get();
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return pRet;
|
|
+}
|
|
+
|
|
+} // extern "C"
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/fpicker/source/unx/tde_unx/UnxFilePicker.cxx b/fpicker/source/unx/tde_unx/UnxFilePicker.cxx
|
|
new file mode 100644
|
|
index 0000000..c2a5ca8
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/UnxFilePicker.cxx
|
|
@@ -0,0 +1,932 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/fpicker/source/unx/tde_unx/UnxFilePicker.hxx b/fpicker/source/unx/tde_unx/UnxFilePicker.hxx
|
|
new file mode 100644
|
|
index 0000000..4e0b526
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/UnxFilePicker.hxx
|
|
@@ -0,0 +1,178 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/fpicker/source/unx/tde_unx/UnxNotifyThread.cxx b/fpicker/source/unx/tde_unx/UnxNotifyThread.cxx
|
|
new file mode 100644
|
|
index 0000000..3bc96b1
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/UnxNotifyThread.cxx
|
|
@@ -0,0 +1,116 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/fpicker/source/unx/tde_unx/UnxNotifyThread.hxx b/fpicker/source/unx/tde_unx/UnxNotifyThread.hxx
|
|
new file mode 100644
|
|
index 0000000..9f5d1a5
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/UnxNotifyThread.hxx
|
|
@@ -0,0 +1,90 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2010 Novell, Inc.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/fpicker/source/unx/tde_unx/fps_tde.component b/fpicker/source/unx/tde_unx/fps_tde.component
|
|
new file mode 100644
|
|
index 0000000..e7a201d
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/fps_tde.component
|
|
@@ -0,0 +1,35 @@
|
|
+<?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.
|
|
+*
|
|
+**********************************************************************-->
|
|
+
|
|
+<component loader="com.sun.star.loader.SharedLibrary"
|
|
+ xmlns="http://openoffice.org/2010/uno-components">
|
|
+ <implementation name="com.sun.star.ui.dialogs.UnxFilePicker">
|
|
+ <service name="com.sun.star.ui.dialogs.TDEFilePicker"/>
|
|
+ </implementation>
|
|
+</component>
|
|
diff --git a/fpicker/source/unx/tde_unx/fps_tde.xml b/fpicker/source/unx/tde_unx/fps_tde.xml
|
|
new file mode 100644
|
|
index 0000000..fc1ed68
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/fps_tde.xml
|
|
@@ -0,0 +1,51 @@
|
|
+<?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 --git a/fpicker/source/unx/tde_unx/makefile.mk b/fpicker/source/unx/tde_unx/makefile.mk
|
|
new file mode 100644
|
|
index 0000000..196c948
|
|
--- /dev/null
|
|
+++ b/fpicker/source/unx/tde_unx/makefile.mk
|
|
@@ -0,0 +1,86 @@
|
|
+#*************************************************************************
|
|
+#
|
|
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+#
|
|
+# Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+# Copyright 2010 Novell, Inc.
|
|
+# Copyright 2011 Timothy Pearson
|
|
+#
|
|
+# OpenOffice.org - a multi-platform office productivity suite
|
|
+#
|
|
+# This file is part of OpenOffice.org.
|
|
+#
|
|
+# OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+# it under the terms of the GNU Lesser General Public License version 3
|
|
+# only, as published by the Free Software Foundation.
|
|
+#
|
|
+# OpenOffice.org is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU Lesser General Public License version 3 for more details
|
|
+# (a copy is included in the LICENSE file that accompanied this code).
|
|
+#
|
|
+# You should have received a copy of the GNU Lesser General Public License
|
|
+# version 3 along with OpenOffice.org. If not, see
|
|
+# <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
|
|
+
|
|
+ALLTAR : $(MISC)/fps_tde.component
|
|
+
|
|
+$(MISC)/fps_tde.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
|
|
+ fps_tde.component
|
|
+ $(XSLTPROC) --nonet --stringparam uri \
|
|
+ '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \
|
|
+ $(SOLARENV)/bin/createcomponent.xslt fps_tde.component
|
|
diff --git a/postprocess/packcomponents/makefile.mk b/postprocess/packcomponents/makefile.mk
|
|
index b983928..a47e9c6 100644
|
|
--- a/postprocess/packcomponents/makefile.mk
|
|
+++ b/postprocess/packcomponents/makefile.mk
|
|
@@ -235,6 +235,10 @@ my_components += kab1
|
|
my_components += kdebe1
|
|
.END
|
|
|
|
+.IF "$(ENABLE_TDE)" != ""
|
|
+my_components += tdebe1
|
|
+.END
|
|
+
|
|
.IF "$(ENABLE_KDE4)" != ""
|
|
my_components += kde4be1
|
|
.END
|
|
@@ -354,6 +358,10 @@ my_components += fps_gnome
|
|
my_components += fps_kde4
|
|
.END
|
|
|
|
+.IF "$(ENABLE_TDE)" != ""
|
|
+my_components += fps_tde
|
|
+.END
|
|
+
|
|
.IF "$(OS)" != "WNT"
|
|
my_components += cmdmail
|
|
.END
|
|
diff --git a/postprocess/packregistry/makefile.mk b/postprocess/packregistry/makefile.mk
|
|
index d82c9ef..a3a6de4 100644
|
|
--- a/postprocess/packregistry/makefile.mk
|
|
+++ b/postprocess/packregistry/makefile.mk
|
|
@@ -328,6 +328,9 @@ MY_FILES_main += \
|
|
.IF "$(ENABLE_KAB)" == "TRUE"
|
|
MY_FILES_main += $(MY_MOD)/DataAccess/kab.xcu
|
|
.END
|
|
+.IF "$(ENABLE_TDEAB)" == "TRUE"
|
|
+MY_FILES_main += $(MY_MOD)/DataAccess/tdeab.xcu
|
|
+.END
|
|
.IF "$(SYSTEM_MOZILLA)" != "YES" && "$(WITH_MOZILLA)" != "NO" && \
|
|
"$(OS)" != "MACOSX"
|
|
.IF "$(OS)" == "WNT"
|
|
diff --git a/scp2/prj/build.lst b/scp2/prj/build.lst
|
|
index f225c3e..41be4f3 100644
|
|
--- a/scp2/prj/build.lst
|
|
+++ b/scp2/prj/build.lst
|
|
@@ -14,6 +14,7 @@ cp scp2\source\graphicfilter nmake - all cp_graphicfilter cp_langm
|
|
cp scp2\source\impress nmake - all cp_impress cp_langmacros cp_langtemplates NULL
|
|
cp scp2\source\javafilter nmake - all cp_javafilter cp_langmacros cp_langtemplates NULL
|
|
cp scp2\source\kde nmake - all cp_kde cp_langmacros cp_langtemplates NULL
|
|
+cp scp2\source\tde nmake - all cp_tde cp_langmacros cp_langtemplates NULL
|
|
cp scp2\source\layout nmake - all cp_layout cp_langmacros NULL
|
|
cp scp2\source\math nmake - all cp_math cp_langmacros cp_langtemplates NULL
|
|
cp scp2\source\ooo nmake - all cp_ooo cp_langmacros cp_langtemplates NULL
|
|
@@ -27,4 +28,4 @@ cp scp2\source\xsltfilter nmake - all cp_xsltfilter cp_langmacr
|
|
cp scp2\source\winexplorerext nmake - all cp_winexplorerext cp_langmacros cp_langtemplates NULL
|
|
cp scp2\source\onlineupdate nmake - all cp_update cp_langmacros cp_langtemplates NULL
|
|
cp scp2\source\accessories nmake - all cp_accessories cp_langmacros NULL
|
|
-cp scp2\util nmake - all cp_util cp_activex cp_binfilter cp_calc cp_canvas cp_crashrep cp_draw cp_extensions cp_gnome cp_graphicfilter cp_impress cp_javafilter cp_kde cp_layout cp_math cp_ooo cp_python cp_quickstart cp_testtool cp_writer cp_base cp_xsltfilter cp_winexplorerext cp_sdkoo cp_update cp_accessories NULL
|
|
+cp scp2\util nmake - all cp_util cp_activex cp_binfilter cp_calc cp_canvas cp_crashrep cp_draw cp_extensions cp_gnome cp_graphicfilter cp_impress cp_javafilter cp_kde cp_tde cp_layout cp_math cp_ooo cp_python cp_quickstart cp_testtool cp_writer cp_base cp_xsltfilter cp_winexplorerext cp_sdkoo cp_update cp_accessories NULL
|
|
diff --git a/scp2/source/ooo/file_library_ooo.scp b/scp2/source/ooo/file_library_ooo.scp
|
|
index d83d6cf..fe378e1 100644
|
|
--- a/scp2/source/ooo/file_library_ooo.scp
|
|
+++ b/scp2/source/ooo/file_library_ooo.scp
|
|
@@ -425,6 +425,24 @@ End
|
|
|
|
#endif
|
|
|
|
+#ifdef ENABLE_TDEAB
|
|
+File gid_File_Lib_Tdeab_1
|
|
+ TXT_FILE_BODY;
|
|
+ Styles = (PACKED,UNO_COMPONENT);
|
|
+ RegistryID = gid_Starregistry_Services_Rdb;
|
|
+ Dir = SCP2_OOO_BIN_DIR;
|
|
+ Name = STRING(CONCAT2(libtdeab1,UNXSUFFIX));
|
|
+End
|
|
+
|
|
+File gid_File_Lib_Tdeab_Drv_1
|
|
+ TXT_FILE_BODY;
|
|
+ Styles = (PACKED);
|
|
+ Dir = SCP2_OOO_BIN_DIR;
|
|
+ Name = STRING(CONCAT2(libtdeabdrv1,UNXSUFFIX));
|
|
+End
|
|
+
|
|
+#endif
|
|
+
|
|
#ifdef MACOSX
|
|
File gid_File_Lib_Macab_1
|
|
TXT_FILE_BODY;
|
|
@@ -525,6 +543,23 @@ File gid_File_Bin_KdeFilePicker
|
|
End
|
|
#endif
|
|
#endif
|
|
+#ifdef ENABLE_TDE
|
|
+#ifndef MACOSX
|
|
+File gid_File_Lib_Fps_Tde
|
|
+ TXT_FILE_BODY;
|
|
+ Styles = (PACKED);
|
|
+ Dir = SCP2_OOO_BIN_DIR;
|
|
+ Name = SPECIAL_COMPONENT_LIB_NAME(fps_tde.uno);
|
|
+End
|
|
+File gid_File_Bin_TdeFilePicker
|
|
+ BIN_FILE_BODY;
|
|
+ Styles = (PACKED);
|
|
+ Dir = gid_Brand_Dir_Program;
|
|
+ Name = "tdefilepicker";
|
|
+End
|
|
+#endif
|
|
+#endif
|
|
+
|
|
#endif
|
|
|
|
#ifdef QUARTZ
|
|
@@ -992,6 +1027,17 @@ File gid_File_Lib_Vclplug_Kde4
|
|
End
|
|
#endif
|
|
#endif
|
|
+#ifdef ENABLE_TDE
|
|
+#ifndef MACOSX
|
|
+File gid_File_Lib_Vclplug_Tde
|
|
+ Name = LIBNAME(vclplug_tde);
|
|
+ TXT_FILE_BODY;
|
|
+ Styles = (PACKED);
|
|
+ Dir = SCP2_OOO_BIN_DIR;
|
|
+End
|
|
+#endif
|
|
+#endif
|
|
+
|
|
#endif
|
|
|
|
#if defined(QUARTZ)
|
|
diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp
|
|
index 34ed8a9..5291d0d 100644
|
|
--- a/scp2/source/ooo/file_ooo.scp
|
|
+++ b/scp2/source/ooo/file_ooo.scp
|
|
@@ -169,6 +169,13 @@ File gid_File_Bin_Kde_Open_Url
|
|
Styles = (PACKED);
|
|
End
|
|
|
|
+File gid_File_Bin_Tde_Open_Url
|
|
+ BIN_FILE_BODY;
|
|
+ Dir = gid_Brand_Dir_Program;
|
|
+ Name = "tde-open-url";
|
|
+ Styles = (PACKED);
|
|
+End
|
|
+
|
|
File gid_File_Bin_Cde_Open_Url
|
|
BIN_FILE_BODY;
|
|
Dir = gid_Brand_Dir_Program;
|
|
diff --git a/scp2/source/ooo/makefile.mk b/scp2/source/ooo/makefile.mk
|
|
index ce2ab52..0b8d12b 100644
|
|
--- a/scp2/source/ooo/makefile.mk
|
|
+++ b/scp2/source/ooo/makefile.mk
|
|
@@ -84,6 +84,14 @@ SCPDEFS+=-DENABLE_KDE4
|
|
SCPDEFS+=-DENABLE_KAB
|
|
.ENDIF
|
|
|
|
+.IF "$(ENABLE_TDE)" != ""
|
|
+SCPDEFS+=-DENABLE_TDE
|
|
+.ENDIF
|
|
+
|
|
+.IF "$(ENABLE_TDEAB)" != ""
|
|
+SCPDEFS+=-DENABLE_TDEAB
|
|
+.ENDIF
|
|
+
|
|
.IF "$(ENABLE_EVOAB2)" != ""
|
|
SCPDEFS+=-DENABLE_EVOAB2
|
|
.ENDIF
|
|
diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp
|
|
index 20d9b16..fce92ce 100644
|
|
--- a/scp2/source/ooo/module_hidden_ooo.scp
|
|
+++ b/scp2/source/ooo/module_hidden_ooo.scp
|
|
@@ -84,6 +84,7 @@ Module gid_Module_Root_Files_2
|
|
Styles = (HIDDEN_ROOT);
|
|
Files = (gid_File_Bin_Cde_Open_Url,
|
|
gid_File_Bin_Kde_Open_Url,
|
|
+ gid_File_Bin_Tde_Open_Url,
|
|
gid_File_Bin_Open_Url,
|
|
gid_File_Bin_Pagein,
|
|
gid_File_Bin_Pluginapp,
|
|
@@ -277,6 +278,7 @@ Module gid_Module_Root_Files_4
|
|
gid_File_Lib_Vclplug_Gen,
|
|
gid_File_Lib_Vclplug_Kde,
|
|
gid_File_Lib_Vclplug_Kde4,
|
|
+ gid_File_Lib_Vclplug_Tde,
|
|
gid_File_Lib_Vclplug_Svp,
|
|
gid_File_Lib_Basctl,
|
|
gid_File_Lib_CanvasTools,
|
|
@@ -348,6 +350,8 @@ Module gid_Module_Root_Files_5
|
|
gid_File_Lib_Emboleobj,
|
|
gid_File_Lib_Kab_1,
|
|
gid_File_Lib_Kab_Drv_1,
|
|
+ gid_File_Lib_Tdeab_1,
|
|
+ gid_File_Lib_Tdeab_Drv_1,
|
|
gid_File_Lib_Macab_1,
|
|
gid_File_Lib_Macab_Drv_1,
|
|
gid_File_Lib_Evtatt,
|
|
diff --git a/scp2/source/tde/file_tde.scp b/scp2/source/tde/file_tde.scp
|
|
new file mode 100644
|
|
index 0000000..6387a57
|
|
--- /dev/null
|
|
+++ b/scp2/source/tde/file_tde.scp
|
|
@@ -0,0 +1,37 @@
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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));
|
|
+End
|
|
+#endif
|
|
diff --git a/scp2/source/tde/makefile.mk b/scp2/source/tde/makefile.mk
|
|
new file mode 100644
|
|
index 0000000..78d5728
|
|
--- /dev/null
|
|
+++ b/scp2/source/tde/makefile.mk
|
|
@@ -0,0 +1,59 @@
|
|
+#*************************************************************************
|
|
+#
|
|
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+#
|
|
+# Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+# Copyright 2011 Timothy Pearson
|
|
+#
|
|
+# OpenOffice.org - a multi-platform office productivity suite
|
|
+#
|
|
+# This file is part of OpenOffice.org.
|
|
+#
|
|
+# OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+# it under the terms of the GNU Lesser General Public License version 3
|
|
+# only, as published by the Free Software Foundation.
|
|
+#
|
|
+# OpenOffice.org is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU Lesser General Public License version 3 for more details
|
|
+# (a copy is included in the LICENSE file that accompanied this code).
|
|
+#
|
|
+# You should have received a copy of the GNU Lesser General Public License
|
|
+# version 3 along with OpenOffice.org. If not, see
|
|
+# <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 --git a/scp2/source/tde/module_tde.scp b/scp2/source/tde/module_tde.scp
|
|
new file mode 100644
|
|
index 0000000..9fdfecd
|
|
--- /dev/null
|
|
+++ b/scp2/source/tde/module_tde.scp
|
|
@@ -0,0 +1,45 @@
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/scp2/source/tde/module_tde.ulf b/scp2/source/tde/module_tde.ulf
|
|
new file mode 100644
|
|
index 0000000..e55735f
|
|
--- /dev/null
|
|
+++ b/scp2/source/tde/module_tde.ulf
|
|
@@ -0,0 +1,34 @@
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 --git a/scp2/util/makefile.mk b/scp2/util/makefile.mk
|
|
index 1d6d694..c59e04c 100644
|
|
--- a/scp2/util/makefile.mk
|
|
+++ b/scp2/util/makefile.mk
|
|
@@ -200,6 +200,12 @@ SCP1FILES += \
|
|
module_kde.par \
|
|
file_kde.par
|
|
.ENDIF
|
|
+
|
|
+.IF "$(ENABLE_TDE)" == "TRUE"
|
|
+SCP1FILES += \
|
|
+ module_tde.par \
|
|
+ file_tde.par
|
|
+.ENDIF
|
|
.ENDIF
|
|
|
|
.IF "$(ENABLE_CRASHDUMP)" != ""
|
|
diff --git a/set_soenv.in b/set_soenv.in
|
|
index dc2d996..e0d7c39 100755
|
|
--- a/set_soenv.in
|
|
+++ b/set_soenv.in
|
|
@@ -1546,6 +1546,10 @@ ToFile( "KDE_GLIB_CFLAGS", "@KDE_GLIB_CFLAGS@", "e" );
|
|
ToFile( "KDE_GLIB_LIBS", "@KDE_GLIB_LIBS@", "e" );
|
|
ToFile( "KDE_HAVE_GLIB", "@KDE_HAVE_GLIB@", "e" );
|
|
ToFile( "ENABLE_KAB", "@ENABLE_KAB@", "e" );
|
|
+ToFile( "ENABLE_TDE", "@ENABLE_TDE@", "e" );
|
|
+ToFile( "TDE_CFLAGS", "@TDE_CFLAGS@", "e" );
|
|
+ToFile( "TDE_LIBS", "@TDE_LIBS@", "e" );
|
|
+ToFile( "ENABLE_TDEAB", "@ENABLE_TDEAB@", "e" );
|
|
ToFile( "PSPRINT", "TRUE", "e" );
|
|
ToFile( "MKDEPENDSOLVER", "TRUE", "e" );
|
|
ToFile( "nodep", "@nodep@", "e" );
|
|
diff --git a/setup_native/source/packinfo/packinfo_office.txt b/setup_native/source/packinfo/packinfo_office.txt
|
|
index 63bb1fe..c5bb1d1 100644
|
|
--- a/setup_native/source/packinfo/packinfo_office.txt
|
|
+++ b/setup_native/source/packinfo/packinfo_office.txt
|
|
@@ -48,6 +48,21 @@ packageversion = "%OOOPACKAGEVERSION"
|
|
End
|
|
|
|
Start
|
|
+module = "gid_Module_Optional_Tde"
|
|
+solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-tde-integration"
|
|
+solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01"
|
|
+packagename = "%BASISPACKAGEPREFIX%OOOBASEVERSION-tde-integration"
|
|
+freebsdrequires = "%BASISPACKAGEPREFIX%OOOBASEVERSION-core01"
|
|
+requires = "%BASISPACKAGEPREFIX%OOOBASEVERSION-core01"
|
|
+copyright = "1999-2009 by OpenOffice.org"
|
|
+solariscopyright = "solariscopyrightfile"
|
|
+vendor = "The Document Foundation"
|
|
+description = "TDE integration module for LibreOffice %OOOBASEVERSION"
|
|
+destpath = "/opt"
|
|
+packageversion = "%OOOPACKAGEVERSION"
|
|
+End
|
|
+
|
|
+Start
|
|
module = "gid_Module_Root"
|
|
# script = "shellscripts_core01.txt"
|
|
solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01"
|
|
diff --git a/shell/inc/tde_headers.h b/shell/inc/tde_headers.h
|
|
new file mode 100644
|
|
index 0000000..91f59f9
|
|
--- /dev/null
|
|
+++ b/shell/inc/tde_headers.h
|
|
@@ -0,0 +1,98 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 <kaboutdata.h>
|
|
+#include <kapplication.h>
|
|
+#include <kcmdlineargs.h>
|
|
+#include <kconfig.h>
|
|
+#include <kdeversion.h>
|
|
+#include <kemailsettings.h>
|
|
+#include <kglobal.h>
|
|
+#include <kglobalsettings.h>
|
|
+#include <klocale.h>
|
|
+#include <kmainwindow.h>
|
|
+#include <kmenubar.h>
|
|
+#include <kprotocolmanager.h>
|
|
+#include <kstartupinfo.h>
|
|
+#include <kstyle.h>
|
|
+
|
|
+
|
|
+/* ********* TDE address book connectivity headers */
|
|
+#include <kabc/addressbook.h>
|
|
+#include <kabc/addressee.h>
|
|
+#include <kabc/field.h>
|
|
+#include <kabc/stdaddressbook.h>
|
|
+
|
|
+
|
|
+#endif
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/shell/prj/build.lst b/shell/prj/build.lst
|
|
index 6dc5270..700c989 100644
|
|
--- a/shell/prj/build.lst
|
|
+++ b/shell/prj/build.lst
|
|
@@ -25,5 +25,6 @@ sl shell\source\backends\macbe nmake - u sl_backends_m
|
|
sl shell\source\backends\gconfbe nmake - u sl_backends_gconfbe sl_inc NULL
|
|
sl shell\source\backends\kdebe nmake - u sl_backends_kdebe sl_inc NULL
|
|
sl shell\source\backends\kde4be nmake - u sl_backends_kde4be sl_inc NULL
|
|
+sl shell\source\backends\tdebe nmake - u sl_backends_tdebe sl_inc NULL
|
|
sl shell\source\backends\desktopbe nmake - u sl_backends_desktopbe sl_inc NULL
|
|
sl shell\source\win32\shlxthandler\ooofilt nmake - w sl_win32_shlxthandler_ooofilt sl_win32_zipfile.w sl_win32_ooofilereader.w sl_win32_shlxthandler_util.w sl_all sl_inc NULL
|
|
diff --git a/shell/prj/d.lst b/shell/prj/d.lst
|
|
index 62dfa80..7665b62 100644
|
|
--- a/shell/prj/d.lst
|
|
+++ b/shell/prj/d.lst
|
|
@@ -15,6 +15,7 @@
|
|
..\%__SRC%\bin\open-url %_DEST%\bin\open-url
|
|
..\%__SRC%\bin\cde-open-url %_DEST%\bin\cde-open-url
|
|
..\%__SRC%\bin\kde-open-url %_DEST%\bin\kde-open-url
|
|
+..\%__SRC%\bin\tde-open-url %_DEST%\bin\tde-open-url
|
|
..\%__SRC%\bin\gnome-open-url %_DEST%\bin\gnome-open-url
|
|
..\%__SRC%\bin\gnome-open-url.bin %_DEST%\bin\gnome-open-url.bin
|
|
..\%__SRC%\bin\senddoc %_DEST%\bin\senddoc
|
|
@@ -27,7 +28,9 @@
|
|
..\%__SRC%\misc\gconfbe1.component %_DEST%\xml\gconfbe1.component
|
|
..\%__SRC%\misc\kde4be1.component %_DEST%\xml\kde4be1.component
|
|
..\%__SRC%\misc\kdebe1.component %_DEST%\xml\kdebe1.component
|
|
+..\%__SRC%\misc\tdebe1.component %_DEST%\xml\tdebe1.component
|
|
..\inc\kde_headers.h %_DEST%\inc\shell\kde_headers.h
|
|
+..\inc\tde_headers.h %_DEST%\inc\shell\tde_headers.h
|
|
..\%__SRC%\misc\localebe1.component %_DEST%\xml\localebe1.component
|
|
..\%__SRC%\misc\macbe1.component %_DEST%\xml\macbe1.component
|
|
..\%__SRC%\misc\smplmail.component %_DEST%\xml\smplmail.component
|
|
diff --git a/shell/source/backends/tdebe/makefile.mk b/shell/source/backends/tdebe/makefile.mk
|
|
new file mode 100644
|
|
index 0000000..5243da4
|
|
--- /dev/null
|
|
+++ b/shell/source/backends/tdebe/makefile.mk
|
|
@@ -0,0 +1,88 @@
|
|
+#*************************************************************************
|
|
+#
|
|
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+#
|
|
+# Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+# Copyright 2011 Timothy Pearson
|
|
+#
|
|
+# OpenOffice.org - a multi-platform office productivity suite
|
|
+#
|
|
+# This file is part of OpenOffice.org.
|
|
+#
|
|
+# OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+# it under the terms of the GNU Lesser General Public License version 3
|
|
+# only, as published by the Free Software Foundation.
|
|
+#
|
|
+# OpenOffice.org is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU Lesser General Public License version 3 for more details
|
|
+# (a copy is included in the LICENSE file that accompanied this code).
|
|
+#
|
|
+# You should have received a copy of the GNU Lesser General Public License
|
|
+# version 3 along with OpenOffice.org. If not, see
|
|
+# <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
|
|
+
|
|
+# no "lib" prefix
|
|
+DLLPRE =
|
|
+
|
|
+.IF "$(ENABLE_TDE)" == "TRUE"
|
|
+
|
|
+CFLAGS+=$(TDE_CFLAGS)
|
|
+
|
|
+# --- Files ---
|
|
+
|
|
+SLOFILES=\
|
|
+ $(SLO)$/tdeaccess.obj \
|
|
+ $(SLO)$/tdebackend.obj
|
|
+
|
|
+SHL1NOCHECK=TRUE
|
|
+SHL1TARGET=$(TARGET)1.uno
|
|
+SHL1OBJS=$(SLOFILES)
|
|
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
|
|
+
|
|
+SHL1IMPLIB=i$(SHL1TARGET)
|
|
+SHL1LINKFLAGS+=$(TDE_LIBS) -lkio
|
|
+SHL1STDLIBS= \
|
|
+ $(CPPUHELPERLIB) \
|
|
+ $(CPPULIB) \
|
|
+ $(SALLIB)
|
|
+
|
|
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
|
|
+DEF1NAME=$(SHL1TARGET)
|
|
+
|
|
+.ENDIF # "$(ENABLE_TDE)" == "TRUE"
|
|
+
|
|
+# --- Targets ---
|
|
+
|
|
+.INCLUDE : target.mk
|
|
+
|
|
+ALLTAR : $(MISC)/tdebe1.component
|
|
+
|
|
+$(MISC)/tdebe1.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
|
|
+ tdebe1.component
|
|
+ $(XSLTPROC) --nonet --stringparam uri \
|
|
+ '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \
|
|
+ $(SOLARENV)/bin/createcomponent.xslt tdebe1.component
|
|
diff --git a/shell/source/backends/tdebe/tdeaccess.cxx b/shell/source/backends/tdebe/tdeaccess.cxx
|
|
new file mode 100644
|
|
index 0000000..1dbd64f
|
|
--- /dev/null
|
|
+++ b/shell/source/backends/tdebe/tdeaccess.cxx
|
|
@@ -0,0 +1,319 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+*
|
|
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+*
|
|
+* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+* Copyright 2011 Timothy Pearson
|
|
+*
|
|
+* OpenOffice.org - a multi-platform office productivity suite
|
|
+*
|
|
+* This file is part of OpenOffice.org.
|
|
+*
|
|
+* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+* it under the terms of the GNU Lesser General Public License version 3
|
|
+* only, as published by the Free Software Foundation.
|
|
+*
|
|
+* OpenOffice.org is distributed in the hope that it will be useful,
|
|
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+* GNU Lesser General Public License version 3 for more details
|
|
+* (a copy is included in the LICENSE file that accompanied this code).
|
|
+*
|
|
+* You should have received a copy of the GNU Lesser General Public License
|
|
+* version 3 along with OpenOffice.org. If not, see
|
|
+* <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 = KGlobalSettings::fixedFont();
|
|
+ nFontHeight = aFixedFont.pointSize();
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( nFontHeight ) );
|
|
+ } else if (id.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")))
|
|
+ {
|
|
+ TQFont aFixedFont;
|
|
+ TQString aFontName;
|
|
+ :: rtl::OUString sFontName;
|
|
+
|
|
+ aFixedFont = KGlobalSettings::fixedFont();
|
|
+ aFontName = aFixedFont.family();
|
|
+ sFontName = (const sal_Unicode *) aFontName.ucs2();
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( sFontName ) );
|
|
+ } else if (id.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")))
|
|
+ {
|
|
+ /* does not make much sense without an accessibility bridge */
|
|
+ sal_Bool ATToolSupport = sal_False;
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( rtl::OUString::valueOf( ATToolSupport ) ) );
|
|
+ } else if (id.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")))
|
|
+ {
|
|
+ TQString aDocumentsDir( KGlobalSettings::documentPath() );
|
|
+ rtl::OUString sDocumentsDir;
|
|
+ rtl::OUString sDocumentsURL;
|
|
+ if ( aDocumentsDir.endsWith(TQChar('/')) )
|
|
+ aDocumentsDir.truncate ( aDocumentsDir.length() - 1 );
|
|
+ sDocumentsDir = (const sal_Unicode *) aDocumentsDir.ucs2();
|
|
+ osl_getFileURLFromSystemPath( sDocumentsDir.pData, &sDocumentsURL.pData );
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( sDocumentsURL ) );
|
|
+ } else if (id.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")))
|
|
+ {
|
|
+ TQString aFTPProxy;
|
|
+ switch ( KProtocolManager::proxyType() )
|
|
+ {
|
|
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
+ aFTPProxy = KProtocolManager::proxyFor( "FTP" );
|
|
+ break;
|
|
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
+// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
+// The best we can do here is to ask the current value for a given address.
|
|
+ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" );
|
|
+ break;
|
|
+ default: // No proxy is used
|
|
+ break;
|
|
+ }
|
|
+ if ( !aFTPProxy.isEmpty() )
|
|
+ {
|
|
+ KURL aProxy(aFTPProxy);
|
|
+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( sProxy ) );
|
|
+ }
|
|
+ } else if (id.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")))
|
|
+ {
|
|
+ TQString aFTPProxy;
|
|
+ switch ( KProtocolManager::proxyType() )
|
|
+ {
|
|
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
+ aFTPProxy = KProtocolManager::proxyFor( "FTP" );
|
|
+ break;
|
|
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
+// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
+// The best we can do here is to ask the current value for a given address.
|
|
+ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" );
|
|
+ break;
|
|
+ default: // No proxy is used
|
|
+ break;
|
|
+ }
|
|
+ if ( !aFTPProxy.isEmpty() )
|
|
+ {
|
|
+ KURL aProxy(aFTPProxy);
|
|
+ sal_Int32 nPort = aProxy.port();
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( nPort ) );
|
|
+ }
|
|
+ } else if (id.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")))
|
|
+ {
|
|
+ TQString aHTTPProxy;
|
|
+ switch ( KProtocolManager::proxyType() )
|
|
+ {
|
|
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
+ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
|
|
+ break;
|
|
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
+// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
+// The best we can do here is to ask the current value for a given address.
|
|
+ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" );
|
|
+ break;
|
|
+ default: // No proxy is used
|
|
+ break;
|
|
+ }
|
|
+ if ( !aHTTPProxy.isEmpty() )
|
|
+ {
|
|
+ KURL aProxy(aHTTPProxy);
|
|
+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( sProxy ) );
|
|
+ }
|
|
+ } else if (id.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")))
|
|
+ {
|
|
+ TQString aHTTPProxy;
|
|
+ switch ( KProtocolManager::proxyType() )
|
|
+ {
|
|
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
+ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
|
|
+ break;
|
|
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
+// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
+// The best we can do here is to ask the current value for a given address.
|
|
+ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" );
|
|
+ break;
|
|
+ default: // No proxy is used
|
|
+ break;
|
|
+ }
|
|
+ if ( !aHTTPProxy.isEmpty() )
|
|
+ {
|
|
+ KURL aProxy(aHTTPProxy);
|
|
+ sal_Int32 nPort = aProxy.port();
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( nPort ) );
|
|
+ }
|
|
+ } else if (id.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")))
|
|
+ {
|
|
+ TQString aHTTPSProxy;
|
|
+ switch ( KProtocolManager::proxyType() )
|
|
+ {
|
|
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
+ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" );
|
|
+ break;
|
|
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
+// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
+// The best we can do here is to ask the current value for a given address.
|
|
+ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" );
|
|
+ break;
|
|
+ default: // No proxy is used
|
|
+ break;
|
|
+ }
|
|
+ if ( !aHTTPSProxy.isEmpty() )
|
|
+ {
|
|
+ KURL aProxy(aHTTPSProxy);
|
|
+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( sProxy ) );
|
|
+ }
|
|
+ } else if (id.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")))
|
|
+ {
|
|
+ TQString aHTTPSProxy;
|
|
+ switch ( KProtocolManager::proxyType() )
|
|
+ {
|
|
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
+ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" );
|
|
+ break;
|
|
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
+// In such cases, the proxy address is not stored in TDE, but determined dynamically.
|
|
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
|
|
+// The best we can do here is to ask the current value for a given address.
|
|
+ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" );
|
|
+ break;
|
|
+ default: // No proxy is used
|
|
+ break;
|
|
+ }
|
|
+ if ( !aHTTPSProxy.isEmpty() )
|
|
+ {
|
|
+ KURL aProxy(aHTTPSProxy);
|
|
+ sal_Int32 nPort = aProxy.port();
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( nPort ) );
|
|
+ }
|
|
+ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy"))) {
|
|
+ TQString aNoProxyFor;
|
|
+ switch ( KProtocolManager::proxyType() )
|
|
+ {
|
|
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
+ aNoProxyFor = KProtocolManager::noProxyFor();
|
|
+ break;
|
|
+ default: // No proxy is used
|
|
+ break;
|
|
+ }
|
|
+ if ( !aNoProxyFor.isEmpty() )
|
|
+ {
|
|
+ ::rtl::OUString sNoProxyFor;
|
|
+
|
|
+ aNoProxyFor = aNoProxyFor.replace( COMMA, SEMI_COLON );
|
|
+ sNoProxyFor = (const sal_Unicode *) aNoProxyFor.ucs2();
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( sNoProxyFor ) );
|
|
+ }
|
|
+ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) {
|
|
+ int nProxyType;
|
|
+ switch ( KProtocolManager::proxyType() )
|
|
+ {
|
|
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
|
|
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
|
|
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
|
|
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
|
|
+ nProxyType = 1;
|
|
+ break;
|
|
+ default: // No proxy is used
|
|
+ nProxyType = 0;
|
|
+ }
|
|
+ return css::beans::Optional< css::uno::Any >(
|
|
+ true, uno::makeAny( (sal_Int32) nProxyType ) );
|
|
+ } else {
|
|
+ OSL_ASSERT(false); // this cannot happen
|
|
+ }
|
|
+ return css::beans::Optional< css::uno::Any >();
|
|
+}
|
|
+
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/shell/source/backends/tdebe/tdeaccess.hxx b/shell/source/backends/tdebe/tdeaccess.hxx
|
|
new file mode 100644
|
|
index 0000000..5029c12
|
|
--- /dev/null
|
|
+++ b/shell/source/backends/tdebe/tdeaccess.hxx
|
|
@@ -0,0 +1,51 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+*
|
|
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+*
|
|
+* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+* Copyright 2011 Timothy Pearson
|
|
+*
|
|
+* OpenOffice.org - a multi-platform office productivity suite
|
|
+*
|
|
+* This file is part of OpenOffice.org.
|
|
+*
|
|
+* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+* it under the terms of the GNU Lesser General Public License version 3
|
|
+* only, as published by the Free Software Foundation.
|
|
+*
|
|
+* OpenOffice.org is distributed in the hope that it will be useful,
|
|
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+* GNU Lesser General Public License version 3 for more details
|
|
+* (a copy is included in the LICENSE file that accompanied this code).
|
|
+*
|
|
+* You should have received a copy of the GNU Lesser General Public License
|
|
+* version 3 along with OpenOffice.org. If not, see
|
|
+* <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 --git a/shell/source/backends/tdebe/tdebackend.cxx b/shell/source/backends/tdebe/tdebackend.cxx
|
|
new file mode 100644
|
|
index 0000000..19eaa60
|
|
--- /dev/null
|
|
+++ b/shell/source/backends/tdebe/tdebackend.cxx
|
|
@@ -0,0 +1,262 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+*
|
|
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+*
|
|
+* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+* Copyright 2011 Timothy Pearson
|
|
+*
|
|
+* OpenOffice.org - a multi-platform office productivity suite
|
|
+*
|
|
+* This file is part of OpenOffice.org.
|
|
+*
|
|
+* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+* it under the terms of the GNU Lesser General Public License version 3
|
|
+* only, as published by the Free Software Foundation.
|
|
+*
|
|
+* OpenOffice.org is distributed in the hope that it will be useful,
|
|
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+* GNU Lesser General Public License version 3 for more details
|
|
+* (a copy is included in the LICENSE file that accompanied this code).
|
|
+*
|
|
+* You should have received a copy of the GNU Lesser General Public License
|
|
+* version 3 along with OpenOffice.org. If not, see
|
|
+* <http://www.openoffice.org/license.html>
|
|
+* for a copy of the LGPLv3 License.
|
|
+*
|
|
+************************************************************************/
|
|
+
|
|
+#include "precompiled_shell.hxx"
|
|
+#include "sal/config.h"
|
|
+
|
|
+#include "boost/noncopyable.hpp"
|
|
+#include "com/sun/star/beans/Optional.hpp"
|
|
+#include "com/sun/star/beans/PropertyVetoException.hpp"
|
|
+#include "com/sun/star/beans/UnknownPropertyException.hpp"
|
|
+#include "com/sun/star/beans/XPropertyChangeListener.hpp"
|
|
+#include "com/sun/star/beans/XPropertySet.hpp"
|
|
+#include "com/sun/star/beans/XPropertySetInfo.hpp"
|
|
+#include "com/sun/star/beans/XVetoableChangeListener.hpp"
|
|
+#include "com/sun/star/lang/IllegalArgumentException.hpp"
|
|
+#include "com/sun/star/lang/WrappedTargetException.hpp"
|
|
+#include "com/sun/star/lang/XMultiComponentFactory.hpp"
|
|
+#include "com/sun/star/lang/XServiceInfo.hpp"
|
|
+#include "com/sun/star/lang/WrappedTargetException.hpp"
|
|
+#include "com/sun/star/uno/Any.hxx"
|
|
+#include "com/sun/star/uno/Reference.hxx"
|
|
+#include "com/sun/star/uno/RuntimeException.hpp"
|
|
+#include "com/sun/star/uno/Sequence.hxx"
|
|
+#include "com/sun/star/uno/XComponentContext.hpp"
|
|
+#include "com/sun/star/uno/XCurrentContext.hpp"
|
|
+#include "cppuhelper/factory.hxx"
|
|
+#include "cppuhelper/implbase2.hxx"
|
|
+#include "cppuhelper/implementationentry.hxx"
|
|
+#include "cppuhelper/weak.hxx"
|
|
+#include "rtl/string.h"
|
|
+#include "rtl/ustring.h"
|
|
+#include "rtl/ustring.hxx"
|
|
+#include "sal/types.h"
|
|
+#include "uno/current_context.hxx"
|
|
+#include "uno/lbnames.h"
|
|
+
|
|
+#include "tde_headers.h"
|
|
+
|
|
+#include "tdeaccess.hxx"
|
|
+
|
|
+namespace {
|
|
+
|
|
+namespace css = com::sun::star;
|
|
+
|
|
+rtl::OUString SAL_CALL getServiceImplementationName() {
|
|
+ return rtl::OUString(
|
|
+ RTL_CONSTASCII_USTRINGPARAM(
|
|
+ "com.sun.star.comp.configuration.backend.TDEBackend"));
|
|
+}
|
|
+
|
|
+css::uno::Sequence< rtl::OUString > SAL_CALL getServiceSupportedServiceNames() {
|
|
+ rtl::OUString name(
|
|
+ RTL_CONSTASCII_USTRINGPARAM(
|
|
+ "com.sun.star.configuration.backend.TDEBackend"));
|
|
+ return css::uno::Sequence< rtl::OUString >(&name, 1);
|
|
+}
|
|
+
|
|
+class Service:
|
|
+ public cppu::WeakImplHelper2<
|
|
+ css::lang::XServiceInfo, css::beans::XPropertySet >,
|
|
+ private boost::noncopyable
|
|
+{
|
|
+public:
|
|
+ Service();
|
|
+
|
|
+private:
|
|
+ virtual ~Service() {}
|
|
+
|
|
+ virtual rtl::OUString SAL_CALL getImplementationName()
|
|
+ throw (css::uno::RuntimeException)
|
|
+ { return getServiceImplementationName(); }
|
|
+
|
|
+ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
|
|
+ throw (css::uno::RuntimeException)
|
|
+ { return ServiceName == getSupportedServiceNames()[0]; }
|
|
+
|
|
+ virtual css::uno::Sequence< rtl::OUString > SAL_CALL
|
|
+ getSupportedServiceNames() throw (css::uno::RuntimeException)
|
|
+ { return getServiceSupportedServiceNames(); }
|
|
+
|
|
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
|
|
+ getPropertySetInfo() throw (css::uno::RuntimeException)
|
|
+ { return css::uno::Reference< css::beans::XPropertySetInfo >(); }
|
|
+
|
|
+ virtual void SAL_CALL setPropertyValue(
|
|
+ rtl::OUString const &, css::uno::Any const &)
|
|
+ throw (
|
|
+ css::beans::UnknownPropertyException,
|
|
+ css::beans::PropertyVetoException,
|
|
+ css::lang::IllegalArgumentException,
|
|
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
|
|
+
|
|
+ virtual css::uno::Any SAL_CALL getPropertyValue(
|
|
+ rtl::OUString const & PropertyName)
|
|
+ throw (
|
|
+ css::beans::UnknownPropertyException,
|
|
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
|
|
+
|
|
+ virtual void SAL_CALL addPropertyChangeListener(
|
|
+ rtl::OUString const &,
|
|
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
|
|
+ throw (
|
|
+ css::beans::UnknownPropertyException,
|
|
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
|
|
+ {}
|
|
+
|
|
+ virtual void SAL_CALL removePropertyChangeListener(
|
|
+ rtl::OUString const &,
|
|
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
|
|
+ throw (
|
|
+ css::beans::UnknownPropertyException,
|
|
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
|
|
+ {}
|
|
+
|
|
+ virtual void SAL_CALL addVetoableChangeListener(
|
|
+ rtl::OUString const &,
|
|
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
|
|
+ throw (
|
|
+ css::beans::UnknownPropertyException,
|
|
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
|
|
+ {}
|
|
+
|
|
+ virtual void SAL_CALL removeVetoableChangeListener(
|
|
+ rtl::OUString const &,
|
|
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
|
|
+ throw (
|
|
+ css::beans::UnknownPropertyException,
|
|
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
|
|
+ {}
|
|
+
|
|
+ bool enabled_;
|
|
+};
|
|
+
|
|
+Service::Service(): enabled_(false) {
|
|
+ css::uno::Reference< css::uno::XCurrentContext > context(
|
|
+ css::uno::getCurrentContext());
|
|
+ if (context.is()) {
|
|
+ rtl::OUString desktop;
|
|
+ context->getValueByName(
|
|
+ rtl::OUString(
|
|
+ RTL_CONSTASCII_USTRINGPARAM("system.desktop-environment"))) >>=
|
|
+ desktop;
|
|
+ enabled_ = desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("TDE")) &&
|
|
+ KApplication::kApplication() != 0;
|
|
+ }
|
|
+}
|
|
+
|
|
+void Service::setPropertyValue(rtl::OUString const &, css::uno::Any const &)
|
|
+ throw (
|
|
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
|
|
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
|
|
+ css::uno::RuntimeException)
|
|
+{
|
|
+ throw css::lang::IllegalArgumentException(
|
|
+ rtl::OUString(
|
|
+ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")),
|
|
+ static_cast< cppu::OWeakObject * >(this), -1);
|
|
+}
|
|
+
|
|
+css::uno::Any Service::getPropertyValue(rtl::OUString const & PropertyName)
|
|
+ throw (
|
|
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
|
|
+ css::uno::RuntimeException)
|
|
+{
|
|
+ if (PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ExternalMailer")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")) ||
|
|
+ PropertyName.equalsAsciiL(
|
|
+ RTL_CONSTASCII_STRINGPARAM("ooInetProxyType")))
|
|
+ {
|
|
+ return css::uno::makeAny(
|
|
+ enabled_
|
|
+ ? tdeaccess::getValue(PropertyName)
|
|
+ : css::beans::Optional< css::uno::Any >());
|
|
+ }
|
|
+ throw css::beans::UnknownPropertyException(
|
|
+ PropertyName, static_cast< cppu::OWeakObject * >(this));
|
|
+}
|
|
+
|
|
+css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance(
|
|
+ css::uno::Reference< css::uno::XComponentContext > const &)
|
|
+{
|
|
+ return static_cast< cppu::OWeakObject * >(new Service);
|
|
+}
|
|
+
|
|
+static cppu::ImplementationEntry const services[] = {
|
|
+ { &createInstance, &getServiceImplementationName,
|
|
+ &getServiceSupportedServiceNames, &cppu::createSingleComponentFactory, 0,
|
|
+ 0 },
|
|
+ { 0, 0, 0, 0, 0, 0 }
|
|
+};
|
|
+
|
|
+}
|
|
+
|
|
+extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
|
|
+ char const * pImplName, void * pServiceManager, void * pRegistryKey)
|
|
+{
|
|
+ return cppu::component_getFactoryHelper(
|
|
+ pImplName, pServiceManager, pRegistryKey, services);
|
|
+}
|
|
+
|
|
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL
|
|
+component_getImplementationEnvironment(
|
|
+ char const ** ppEnvTypeName, uno_Environment **)
|
|
+{
|
|
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
|
|
+}
|
|
+
|
|
+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo(
|
|
+ void * pServiceManager, void * pRegistryKey)
|
|
+{
|
|
+ return component_writeInfoHelper(pServiceManager, pRegistryKey, services);
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/shell/source/backends/tdebe/tdebe1.component b/shell/source/backends/tdebe/tdebe1.component
|
|
new file mode 100755
|
|
index 0000000..9eb7ca2
|
|
--- /dev/null
|
|
+++ b/shell/source/backends/tdebe/tdebe1.component
|
|
@@ -0,0 +1,35 @@
|
|
+<?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.
|
|
+*
|
|
+**********************************************************************-->
|
|
+
|
|
+<component loader="com.sun.star.loader.SharedLibrary"
|
|
+ xmlns="http://openoffice.org/2010/uno-components">
|
|
+ <implementation name="com.sun.star.comp.configuration.backend.TDEBackend">
|
|
+ <service name="com.sun.star.configuration.backend.TDEBackend"/>
|
|
+ </implementation>
|
|
+</component>
|
|
diff --git a/shell/source/unix/misc/makefile.mk b/shell/source/unix/misc/makefile.mk
|
|
index 840f372..df4efa8 100644
|
|
--- a/shell/source/unix/misc/makefile.mk
|
|
+++ b/shell/source/unix/misc/makefile.mk
|
|
@@ -45,7 +45,8 @@ SCRIPTFILES = \
|
|
$(BIN)$/open-url \
|
|
$(BIN)$/cde-open-url \
|
|
$(BIN)$/gnome-open-url \
|
|
- $(BIN)$/kde-open-url
|
|
+ $(BIN)$/kde-open-url \
|
|
+ $(BIN)$/tde-open-url
|
|
|
|
APP1TARGET = gnome-open-url.bin
|
|
APP1OBJS = \
|
|
diff --git a/shell/source/unix/misc/tde-open-url.sh b/shell/source/unix/misc/tde-open-url.sh
|
|
new file mode 100644
|
|
index 0000000..fa05bde
|
|
--- /dev/null
|
|
+++ b/shell/source/unix/misc/tde-open-url.sh
|
|
@@ -0,0 +1,10 @@
|
|
+#!/bin/sh
|
|
+
|
|
+# special handling for mailto: uris
|
|
+if echo $1 | grep '^mailto:' > /dev/null; then
|
|
+ kmailservice "$1" &
|
|
+else
|
|
+ kfmclient openURL "$1" &
|
|
+fi
|
|
+
|
|
+exit 0
|
|
diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk
|
|
index 4ff643a..d871b05 100644
|
|
--- a/solenv/gbuild/gbuild.mk
|
|
+++ b/solenv/gbuild/gbuild.mk
|
|
@@ -268,6 +268,10 @@ ifneq ($(strip $(ENABLE_KDE)),)
|
|
gb_GLOBALDEFS += -DENABLE_KDE
|
|
endif
|
|
|
|
+ifneq ($(strip $(ENABLE_TDE)),)
|
|
+gb_GLOBALDEFS += -DENABLE_TDE
|
|
+endif
|
|
+
|
|
ifneq ($(strip $(ENABLE_KDE4)),)
|
|
gb_GLOBALDEFS += -DENABLE_KDE4
|
|
endif
|
|
diff --git a/solenv/inc/unx.mk b/solenv/inc/unx.mk
|
|
index 74ed8d5..d6ce918 100644
|
|
--- a/solenv/inc/unx.mk
|
|
+++ b/solenv/inc/unx.mk
|
|
@@ -179,4 +179,13 @@ SOLARLIB+=-L$(KDE_ROOT)/lib64
|
|
.ENDIF # "$(KDE_ROOT)"!=""
|
|
.ENDIF # "$(ENABLE_KDE)" != ""
|
|
|
|
+# enable building/linking TDE-dependent code in both OOo and SO build environment
|
|
+.IF "$(ENABLE_TDE)" != ""
|
|
+.IF "$(TDE_ROOT)"!=""
|
|
+TDE_CFLAGS:=-I$(TDE_ROOT)/include -I/usr/include/tqt -DQT_CLEAN_NAMESPACE
|
|
+TDE_LIBS:=-lkdeui -lkdecore -ltqt -lqt-mt
|
|
+SOLARLIB+=-L$(TDE_ROOT)/lib
|
|
+.ENDIF # "$(TDE_ROOT)"!=""
|
|
+.ENDIF # "$(ENABLE_TDE)" != ""
|
|
+
|
|
OOO_LIBRARY_PATH_VAR *= LD_LIBRARY_PATH
|
|
diff --git a/toolkit/source/layout/core/dialogbuttonhbox.cxx b/toolkit/source/layout/core/dialogbuttonhbox.cxx
|
|
index 9c19306..741fc1c 100644
|
|
--- a/toolkit/source/layout/core/dialogbuttonhbox.cxx
|
|
+++ b/toolkit/source/layout/core/dialogbuttonhbox.cxx
|
|
@@ -48,6 +48,8 @@ DialogButtonHBox::Ordering const DialogButtonHBox::DEFAULT_ORDERING =
|
|
DialogButtonHBox::WINDOWS;
|
|
#elif defined( ENABLE_KDE )
|
|
DialogButtonHBox::KDE;
|
|
+#elif defined( ENABLE_TDE )
|
|
+DialogButtonHBox::TDE;
|
|
#else /* !MACOSX && !SAL_W32 && !ENABLE_KDE */
|
|
DialogButtonHBox::GNOME;
|
|
#endif /* !MACOSX && !SAL_W32 && !ENABLE_KDE */
|
|
@@ -75,6 +77,8 @@ DialogButtonHBox::setOrdering( rtl::OUString const& ordering )
|
|
mnOrdering = GNOME;
|
|
else if ( ordering.equalsIgnoreAsciiCaseAscii( "KDE" ) )
|
|
mnOrdering = KDE;
|
|
+ else if ( ordering.equalsIgnoreAsciiCaseAscii( "TDE" ) )
|
|
+ mnOrdering = TDE;
|
|
else if ( ordering.equalsIgnoreAsciiCaseAscii( "MacOS" ) )
|
|
mnOrdering = MACOS;
|
|
else if ( ordering.equalsIgnoreAsciiCaseAscii( "Windows" ) )
|
|
@@ -135,6 +139,8 @@ DialogButtonHBox::orderChildren()
|
|
macosOrdering();
|
|
else if ( mnOrdering == KDE )
|
|
kdeOrdering();
|
|
+ else if ( mnOrdering == TDE )
|
|
+ tdeOrdering();
|
|
else if ( 1 || mnOrdering == GNOME )
|
|
gnomeOrdering();
|
|
}
|
|
@@ -229,6 +235,30 @@ DialogButtonHBox::kdeOrdering()
|
|
}
|
|
|
|
void
|
|
+DialogButtonHBox::tdeOrdering()
|
|
+{
|
|
+ std::list< Box_Base::ChildData * > ordered;
|
|
+ if ( mpHelp )
|
|
+ ordered.push_back( mpHelp );
|
|
+ if ( mpReset )
|
|
+ ordered.push_back( mpReset );
|
|
+ if ( mpFlow && ( mpHelp || mpReset ) )
|
|
+ ordered.push_back( mpFlow );
|
|
+ ordered.insert( ordered.end(), maOther.begin(), maOther.end() );
|
|
+ if ( mpAction )
|
|
+ ordered.push_back( mpAction );
|
|
+ if ( mpAffirmative )
|
|
+ ordered.push_back( mpAffirmative );
|
|
+ if ( mpApply )
|
|
+ ordered.push_back( mpApply );
|
|
+ if ( mpAlternate )
|
|
+ ordered.push_back( mpAlternate );
|
|
+ if ( mpCancel )
|
|
+ ordered.push_back( mpCancel );
|
|
+ maChildren = ordered;
|
|
+}
|
|
+
|
|
+void
|
|
DialogButtonHBox::macosOrdering()
|
|
{
|
|
std::list< Box_Base::ChildData * > ordered;
|
|
diff --git a/toolkit/source/layout/core/dialogbuttonhbox.hxx b/toolkit/source/layout/core/dialogbuttonhbox.hxx
|
|
index aead7fc..67845a1 100644
|
|
--- a/toolkit/source/layout/core/dialogbuttonhbox.hxx
|
|
+++ b/toolkit/source/layout/core/dialogbuttonhbox.hxx
|
|
@@ -45,11 +45,12 @@ public:
|
|
void SAL_CALL removeChild( css::uno::Reference< css::awt::XLayoutConstrains > const& xChild ) throw ( css::uno::RuntimeException );
|
|
|
|
private:
|
|
- enum Ordering { PLATFORM, GNOME, KDE, MACOS, WINDOWS };
|
|
+ enum Ordering { PLATFORM, GNOME, KDE, TDE, MACOS, WINDOWS };
|
|
|
|
void orderChildren();
|
|
void gnomeOrdering();
|
|
void kdeOrdering();
|
|
+ void tdeOrdering();
|
|
void macosOrdering();
|
|
void windowsOrdering();
|
|
|
|
diff --git a/vcl/Library_vclplug_kde.mk b/vcl/Library_vclplug_kde.mk
|
|
index 19c42e0..014a96e 100644
|
|
--- a/vcl/Library_vclplug_kde.mk
|
|
+++ b/vcl/Library_vclplug_kde.mk
|
|
@@ -4,6 +4,7 @@
|
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
#
|
|
# Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+# Copyright 2011 Timothy Pearson
|
|
#
|
|
# OpenOffice.org - a multi-platform office productivity suite
|
|
#
|
|
@@ -26,9 +27,9 @@
|
|
#
|
|
#*************************************************************************
|
|
|
|
-$(eval $(call gb_Library_Library,vclplug_kde))
|
|
+$(eval $(call gb_Library_Library,vclplug_tde))
|
|
|
|
-$(eval $(call gb_Library_set_include,vclplug_kde,\
|
|
+$(eval $(call gb_Library_set_include,vclplug_tde,\
|
|
$$(INCLUDE) \
|
|
-I$(SRCDIR)/vcl/inc \
|
|
-I$(SRCDIR)/vcl/inc/pch \
|
|
@@ -36,25 +37,25 @@ $(eval $(call gb_Library_set_include,vclplug_kde,\
|
|
-I$(OUTDIR)/inc \
|
|
))
|
|
|
|
-$(eval $(call gb_Library_set_include,vclplug_kde,\
|
|
+$(eval $(call gb_Library_set_include,vclplug_tde,\
|
|
$$(INCLUDE) \
|
|
- $$(KDE_CFLAGS) \
|
|
+ $$(TDE_CFLAGS) \
|
|
))
|
|
|
|
-$(eval $(call gb_Library_add_defs,vclplug_kde,\
|
|
- -DVCLPLUG_KDE_IMPLEMENTATION \
|
|
+$(eval $(call gb_Library_add_defs,vclplug_tde,\
|
|
+ -DVCLPLUG_TDE_IMPLEMENTATION \
|
|
))
|
|
|
|
-$(eval $(call gb_Library_add_api,vclplug_kde,\
|
|
+$(eval $(call gb_Library_add_api,vclplug_tde,\
|
|
offapi \
|
|
udkapi \
|
|
))
|
|
|
|
-$(eval $(call gb_Library_add_libs,vclplug_kde,\
|
|
- $$(KDE_LIBS) \
|
|
+$(eval $(call gb_Library_add_libs,vclplug_tde,\
|
|
+ $$(TDE_LIBS) \
|
|
))
|
|
|
|
-$(eval $(call gb_Library_add_linked_libs,vclplug_kde,\
|
|
+$(eval $(call gb_Library_add_linked_libs,vclplug_tde,\
|
|
vclplug_gen \
|
|
vcl \
|
|
tl \
|
|
@@ -76,18 +77,18 @@ $(eval $(call gb_Library_add_linked_libs,vclplug_kde,\
|
|
ICE \
|
|
))
|
|
|
|
-$(eval $(call gb_Library_use_externals,vclplug_kde,\
|
|
+$(eval $(call gb_Library_use_externals,vclplug_tde,\
|
|
icule \
|
|
icuuc \
|
|
))
|
|
|
|
-$(eval $(call gb_Library_add_exception_objects,vclplug_kde,\
|
|
- vcl/unx/kde/kdedata \
|
|
- vcl/unx/kde/salnativewidgets-kde \
|
|
+$(eval $(call gb_Library_add_exception_objects,vclplug_tde,\
|
|
+ vcl/unx/tde/tdedata \
|
|
+ vcl/unx/tde/salnativewidgets-tde \
|
|
))
|
|
|
|
ifeq ($(OS),LINUX)
|
|
-$(eval $(call gb_Library_add_linked_libs,vclplug_kde,\
|
|
+$(eval $(call gb_Library_add_linked_libs,vclplug_tde,\
|
|
dl \
|
|
m \
|
|
pthread \
|
|
diff --git a/vcl/Library_vclplug_tde.mk b/vcl/Library_vclplug_tde.mk
|
|
new file mode 100644
|
|
index 0000000..9a324a8
|
|
--- /dev/null
|
|
+++ b/vcl/Library_vclplug_tde.mk
|
|
@@ -0,0 +1,96 @@
|
|
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
|
|
+#*************************************************************************
|
|
+#
|
|
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+#
|
|
+# Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+#
|
|
+# OpenOffice.org - a multi-platform office productivity suite
|
|
+#
|
|
+# This file is part of OpenOffice.org.
|
|
+#
|
|
+# OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+# it under the terms of the GNU Lesser General Public License version 3
|
|
+# only, as published by the Free Software Foundation.
|
|
+#
|
|
+# OpenOffice.org is distributed in the hope that it will be useful,
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+# GNU Lesser General Public License version 3 for more details
|
|
+# (a copy is included in the LICENSE file that accompanied this code).
|
|
+#
|
|
+# You should have received a copy of the GNU Lesser General Public License
|
|
+# version 3 along with OpenOffice.org. If not, see
|
|
+# <http://www.openoffice.org/license.html>
|
|
+# for a copy of the LGPLv3 License.
|
|
+#
|
|
+#*************************************************************************
|
|
+
|
|
+$(eval $(call gb_Library_Library,vclplug_tde))
|
|
+
|
|
+$(eval $(call gb_Library_set_include,vclplug_tde,\
|
|
+ $$(INCLUDE) \
|
|
+ -I$(SRCDIR)/vcl/inc \
|
|
+ -I$(SRCDIR)/vcl/inc/pch \
|
|
+ -I$(SRCDIR)/solenv/inc \
|
|
+ -I$(OUTDIR)/inc \
|
|
+))
|
|
+
|
|
+$(eval $(call gb_Library_set_include,vclplug_tde,\
|
|
+ $$(INCLUDE) \
|
|
+ $$(TDE_CFLAGS) \
|
|
+))
|
|
+
|
|
+$(eval $(call gb_Library_add_defs,vclplug_tde,\
|
|
+ -DVCLPLUG_TDE_IMPLEMENTATION \
|
|
+))
|
|
+
|
|
+$(eval $(call gb_Library_add_api,vclplug_tde,\
|
|
+ offapi \
|
|
+ udkapi \
|
|
+))
|
|
+
|
|
+$(eval $(call gb_Library_add_libs,vclplug_tde,\
|
|
+ $$(TDE_LIBS) \
|
|
+))
|
|
+
|
|
+$(eval $(call gb_Library_add_linked_libs,vclplug_tde,\
|
|
+ vclplug_gen \
|
|
+ vcl \
|
|
+ tl \
|
|
+ utl \
|
|
+ sot \
|
|
+ ucbhelper \
|
|
+ basegfx \
|
|
+ comphelper \
|
|
+ cppuhelper \
|
|
+ i18nisolang1 \
|
|
+ i18npaper \
|
|
+ i18nutil \
|
|
+ jvmaccess \
|
|
+ cppu \
|
|
+ sal \
|
|
+ X11 \
|
|
+ Xext \
|
|
+ SM \
|
|
+ ICE \
|
|
+))
|
|
+
|
|
+$(eval $(call gb_Library_use_externals,vclplug_tde,\
|
|
+ icule \
|
|
+ icuuc \
|
|
+))
|
|
+
|
|
+$(eval $(call gb_Library_add_exception_objects,vclplug_tde,\
|
|
+ vcl/unx/tde/tdedata \
|
|
+ vcl/unx/tde/salnativewidgets-tde \
|
|
+))
|
|
+
|
|
+ifeq ($(OS),LINUX)
|
|
+$(eval $(call gb_Library_add_linked_libs,vclplug_tde,\
|
|
+ dl \
|
|
+ m \
|
|
+ pthread \
|
|
+))
|
|
+endif
|
|
+# vim: set noet sw=4 ts=4:
|
|
diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk
|
|
index 0a91f87..1de0022 100644
|
|
--- a/vcl/Module_vcl.mk
|
|
+++ b/vcl/Module_vcl.mk
|
|
@@ -59,6 +59,11 @@ $(eval $(call gb_Module_add_targets,vcl,\
|
|
Library_vclplug_kde \
|
|
))
|
|
endif
|
|
+ifneq ($(ENABLE_TDE),)
|
|
+$(eval $(call gb_Module_add_targets,vcl,\
|
|
+ Library_vclplug_tde \
|
|
+))
|
|
+endif
|
|
ifneq ($(ENABLE_KDE4),)
|
|
$(eval $(call gb_Module_add_targets,vcl,\
|
|
Library_vclplug_kde4 \
|
|
diff --git a/vcl/inc/generic/gendata.hxx b/vcl/inc/generic/gendata.hxx
|
|
index c52e891..e5b7b25 100644
|
|
--- a/vcl/inc/generic/gendata.hxx
|
|
+++ b/vcl/inc/generic/gendata.hxx
|
|
@@ -38,7 +38,7 @@ class SalGenericDisplay;
|
|
class SalDisplay;
|
|
class GtkSalDisplay;
|
|
enum SalGenericDataType { SAL_DATA_GTK, SAL_DATA_GTK3,
|
|
- SAL_DATA_KDE3, SAL_DATA_KDE4,
|
|
+ SAL_DATA_KDE3, SAL_DATA_TDE, SAL_DATA_KDE4,
|
|
SAL_DATA_UNX, SAL_DATA_SVP };
|
|
|
|
class VCL_DLLPUBLIC SalGenericData : public SalData
|
|
diff --git a/vcl/inc/unx/desktops.hxx b/vcl/inc/unx/desktops.hxx
|
|
index de4ebb8..1d29c7d 100644
|
|
--- a/vcl/inc/unx/desktops.hxx
|
|
+++ b/vcl/inc/unx/desktops.hxx
|
|
@@ -34,6 +34,7 @@ enum DesktopType {
|
|
DESKTOP_UNKNOWN, // unknown desktop, simple WM, etc.
|
|
DESKTOP_GNOME,
|
|
DESKTOP_KDE,
|
|
+ DESKTOP_TDE,
|
|
DESKTOP_KDE4,
|
|
DESKTOP_CDE
|
|
}; // keep in sync with desktop_strings[] in salplug.cxx
|
|
diff --git a/vcl/inc/unx/tde/tde_headers.h b/vcl/inc/unx/tde/tde_headers.h
|
|
new file mode 100644
|
|
index 0000000..9c9f008
|
|
--- /dev/null
|
|
+++ b/vcl/inc/unx/tde/tde_headers.h
|
|
@@ -0,0 +1,98 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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"
|
|
+
|
|
+#include <cstddef>
|
|
+
|
|
+#if defined __GNUC__
|
|
+#pragma GCC system_header
|
|
+#endif
|
|
+
|
|
+
|
|
+/* ********* Hack, but needed because of conflicting types... */
|
|
+#define Region TQtXRegion
|
|
+
|
|
+
|
|
+/* ********* 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 <kaboutdata.h>
|
|
+#include <kapplication.h>
|
|
+#include <kcmdlineargs.h>
|
|
+#include <kconfig.h>
|
|
+#include <kdeversion.h>
|
|
+#include <kemailsettings.h>
|
|
+#include <kglobal.h>
|
|
+#include <kglobalsettings.h>
|
|
+#include <klocale.h>
|
|
+#include <kmainwindow.h>
|
|
+#include <kmenubar.h>
|
|
+#include <kprotocolmanager.h>
|
|
+#include <kstartupinfo.h>
|
|
+#include <kstyle.h>
|
|
+
|
|
+
|
|
+/* ********* TDE address book connectivity headers */
|
|
+#include <kabc/addressbook.h>
|
|
+#include <kabc/addressee.h>
|
|
+#include <kabc/field.h>
|
|
+#include <kabc/stdaddressbook.h>
|
|
+
|
|
+#endif
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/vcl/inc/unx/tde/tdedata.hxx b/vcl/inc/unx/tde/tdedata.hxx
|
|
new file mode 100644
|
|
index 0000000..fccdb49
|
|
--- /dev/null
|
|
+++ b/vcl/inc/unx/tde/tdedata.hxx
|
|
@@ -0,0 +1,114 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <http://www.openoffice.org/license.html>
|
|
+ * for a copy of the LGPLv3 License.
|
|
+ *
|
|
+ ************************************************************************/
|
|
+
|
|
+#ifndef _VCL_TDEDATA_HXX
|
|
+#define _VCL_TDEDATA_HXX
|
|
+
|
|
+#include <unx/saldisp.hxx>
|
|
+#include <unx/saldata.hxx>
|
|
+#include <unx/salframe.h>
|
|
+
|
|
+class TDEData : public X11SalData
|
|
+{
|
|
+public:
|
|
+ TDEData( SalInstance *pInstance ) : X11SalData( SAL_DATA_TDE, pInstance ) {}
|
|
+ virtual ~TDEData();
|
|
+
|
|
+ virtual void Init();
|
|
+ virtual void initNWF();
|
|
+ virtual void deInitNWF();
|
|
+};
|
|
+
|
|
+class SalTDEDisplay : public SalX11Display
|
|
+{
|
|
+public:
|
|
+ SalTDEDisplay( Display* pDisp );
|
|
+ virtual ~SalTDEDisplay();
|
|
+};
|
|
+
|
|
+class TDESalFrame : public X11SalFrame
|
|
+{
|
|
+ static const int nMaxGraphics = 2;
|
|
+
|
|
+ struct GraphicsHolder
|
|
+ {
|
|
+ X11SalGraphics* pGraphics;
|
|
+ bool bInUse;
|
|
+ GraphicsHolder()
|
|
+ : pGraphics( NULL ),
|
|
+ bInUse( false )
|
|
+ {}
|
|
+ ~GraphicsHolder();
|
|
+ };
|
|
+ GraphicsHolder m_aGraphics[ nMaxGraphics ];
|
|
+
|
|
+public:
|
|
+ TDESalFrame( SalFrame* pParent, sal_uLong );
|
|
+ virtual ~TDESalFrame();
|
|
+
|
|
+ virtual SalGraphics* GetGraphics();
|
|
+ virtual void ReleaseGraphics( SalGraphics *pGraphics );
|
|
+ virtual void updateGraphics( bool bClear );
|
|
+ virtual void UpdateSettings( AllSettings& rSettings );
|
|
+ virtual void Show( sal_Bool bVisible, sal_Bool bNoActivate );
|
|
+};
|
|
+
|
|
+class TDESalInstance : public X11SalInstance
|
|
+{
|
|
+public:
|
|
+ TDESalInstance( SalYieldMutex* pMutex )
|
|
+ : X11SalInstance( pMutex ) {}
|
|
+ virtual ~TDESalInstance() {}
|
|
+ virtual SalFrame* CreateFrame( SalFrame* pParent, sal_uLong nStyle );
|
|
+};
|
|
+
|
|
+class TDEXLib : public SalXLib
|
|
+{
|
|
+ bool m_bStartupDone;
|
|
+ void* m_pApplication;
|
|
+ char** m_pFreeCmdLineArgs;
|
|
+ char** m_pAppCmdLineArgs;
|
|
+ int m_nFakeCmdLineArgs;
|
|
+public:
|
|
+ TDEXLib() : SalXLib(),
|
|
+ m_bStartupDone( false ),
|
|
+ m_pApplication( NULL ),
|
|
+ m_pFreeCmdLineArgs( NULL ),
|
|
+ m_pAppCmdLineArgs( NULL ),
|
|
+ m_nFakeCmdLineArgs( 0 )
|
|
+ {}
|
|
+ virtual ~TDEXLib();
|
|
+ virtual void Init();
|
|
+
|
|
+ void doStartup();
|
|
+};
|
|
+
|
|
+#endif // _VCL_TDEDATA_HXX
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/vcl/inc/vclpluginapi.h b/vcl/inc/vclpluginapi.h
|
|
index 462943b..ae4123e 100644
|
|
--- a/vcl/inc/vclpluginapi.h
|
|
+++ b/vcl/inc/vclpluginapi.h
|
|
@@ -50,6 +50,12 @@
|
|
#define VCLPLUG_KDE_PUBLIC SAL_DLLPUBLIC_IMPORT
|
|
#endif
|
|
|
|
+#if defined VCLPLUG_TDE_IMPLEMENTATION
|
|
+#define VCLPLUG_TDE_PUBLIC SAL_DLLPUBLIC_EXPORT
|
|
+#else
|
|
+#define VCLPLUG_TDE_PUBLIC SAL_DLLPUBLIC_IMPORT
|
|
+#endif
|
|
+
|
|
#if defined VCLPLUG_KDE4_IMPLEMENTATION
|
|
#define VCLPLUG_KDE4_PUBLIC SAL_DLLPUBLIC_EXPORT
|
|
#else
|
|
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
|
|
index 1795d5a..62ebffd 100644
|
|
--- a/vcl/source/app/settings.cxx
|
|
+++ b/vcl/source/app/settings.cxx
|
|
@@ -831,6 +831,8 @@ sal_uLong StyleSettings::GetAutoSymbolsStyle() const
|
|
nRet = STYLE_SYMBOLS_CRYSTAL;
|
|
else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "kde4" ) )
|
|
nRet = STYLE_SYMBOLS_OXYGEN;
|
|
+ else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "tde" ) )
|
|
+ nRet = STYLE_SYMBOLS_CRYSTAL;
|
|
}
|
|
|
|
// falback to any existing style
|
|
diff --git a/vcl/unx/generic/desktopdetect/desktopdetector.cxx b/vcl/unx/generic/desktopdetect/desktopdetector.cxx
|
|
index 12ea4fc..2b9e2c9 100644
|
|
--- a/vcl/unx/generic/desktopdetect/desktopdetector.cxx
|
|
+++ b/vcl/unx/generic/desktopdetect/desktopdetector.cxx
|
|
@@ -210,6 +210,15 @@ static bool is_kde_desktop( Display* pDisplay )
|
|
return false;
|
|
}
|
|
|
|
+static bool is_tde_desktop( Display* pDisplay )
|
|
+{
|
|
+ if ( NULL != getenv( "TDE_FULL_SESSION" ) )
|
|
+ {
|
|
+ return true;
|
|
+ }
|
|
+ return false;
|
|
+}
|
|
+
|
|
static bool is_kde4_desktop( Display* pDisplay )
|
|
{
|
|
if ( NULL != getenv( "KDE_FULL_SESSION" ) )
|
|
@@ -238,6 +247,8 @@ DESKTOP_DETECTOR_PUBLIC DesktopType get_desktop_environment()
|
|
{
|
|
OString aOver( pOverride );
|
|
|
|
+ if ( aOver.equalsIgnoreAsciiCase( "tde" ) )
|
|
+ return DESKTOP_TDE;
|
|
if ( aOver.equalsIgnoreAsciiCase( "kde4" ) )
|
|
return DESKTOP_KDE4;
|
|
if ( aOver.equalsIgnoreAsciiCase( "gnome" ) )
|
|
@@ -301,7 +312,9 @@ DESKTOP_DETECTOR_PUBLIC DesktopType get_desktop_environment()
|
|
|
|
XErrorHandler pOldHdl = XSetErrorHandler( autodect_error_handler );
|
|
|
|
- if ( is_kde4_desktop( pDisplay ) )
|
|
+ if ( is_tde_desktop( pDisplay ) )
|
|
+ ret = DESKTOP_TDE;
|
|
+ else if ( is_kde4_desktop( pDisplay ) )
|
|
ret = DESKTOP_KDE4;
|
|
else if ( is_gnome_desktop( pDisplay ) )
|
|
ret = DESKTOP_GNOME;
|
|
diff --git a/vcl/unx/generic/plugadapt/salplug.cxx b/vcl/unx/generic/plugadapt/salplug.cxx
|
|
index 90f0d3e..875a9fb 100644
|
|
--- a/vcl/unx/generic/plugadapt/salplug.cxx
|
|
+++ b/vcl/unx/generic/plugadapt/salplug.cxx
|
|
@@ -148,7 +148,12 @@ static SalInstance* autodetect_plugin()
|
|
{
|
|
static const char* pKDEFallbackList[] =
|
|
{
|
|
- "kde4", "kde", "gtk3", "gtk", "gen", 0
|
|
+ "kde4", "kde", "tde", "gtk3", "gtk", "gen", 0
|
|
+ };
|
|
+
|
|
+ static const char* pTDEFallbackList[] =
|
|
+ {
|
|
+ "tde", "gtk3", "gtk", "gen", 0
|
|
};
|
|
|
|
static const char* pStandardFallbackList[] =
|
|
@@ -177,6 +182,8 @@ static SalInstance* autodetect_plugin()
|
|
}
|
|
else if( desktop == DESKTOP_KDE4 )
|
|
pList = pKDEFallbackList;
|
|
+ else if( desktop == DESKTOP_TDE )
|
|
+ pList = pTDEFallbackList;
|
|
|
|
SalInstance* pInst = NULL;
|
|
while( pList[nListEntry] && pInst == NULL )
|
|
@@ -224,7 +231,7 @@ SalInstance *CreateSalInstance()
|
|
pInst = autodetect_plugin();
|
|
|
|
// fallback, try everything
|
|
- const char* pPlugin[] = { "gtk3", "gtk", "kde4", "kde", "gen", 0 };
|
|
+ const char* pPlugin[] = { "gtk3", "gtk", "kde4", "kde", "tde", "gen", 0 };
|
|
|
|
for ( int i = 0; !pInst && pPlugin[ i ]; ++i )
|
|
pInst = tryInstance( OUString::createFromAscii( pPlugin[ i ] ) );
|
|
@@ -279,7 +286,7 @@ void SalAbort( const XubString& rErrorText, bool bDumpCore )
|
|
_exit(1);
|
|
}
|
|
|
|
-static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4" };
|
|
+static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "TDE", "KDE4" };
|
|
|
|
const OUString& SalGetDesktopEnvironment()
|
|
{
|
|
diff --git a/vcl/unx/tde/salnativewidgets-tde.cxx b/vcl/unx/tde/salnativewidgets-tde.cxx
|
|
new file mode 100644
|
|
index 0000000..7c173cc
|
|
--- /dev/null
|
|
+++ b/vcl/unx/tde/salnativewidgets-tde.cxx
|
|
@@ -0,0 +1,2119 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 <unx/salunx.h>
|
|
+#include <unx/saldata.hxx>
|
|
+#include <unx/saldisp.hxx>
|
|
+#include <unx/salgdi.h>
|
|
+#include <unx/tde/tdedata.hxx>
|
|
+
|
|
+#include <vcl/settings.hxx>
|
|
+#include <vcl/fontmanager.hxx>
|
|
+#include <vcl/vclenum.hxx>
|
|
+#include <rtl/ustrbuf.hxx>
|
|
+
|
|
+#define USHORT unsigned short
|
|
+#define BYTE unsigned char
|
|
+
|
|
+using namespace ::rtl;
|
|
+
|
|
+/** Cached native widgets.
|
|
+
|
|
+ A class which caches and paints the native widgets.
|
|
+*/
|
|
+class WidgetPainter
|
|
+{
|
|
+ protected:
|
|
+ /** Cached push button.
|
|
+
|
|
+ It is necessary for the TQStyle::drawControl(). The buttons are created
|
|
+ on demand and they are still hidden (no TQWidget::show() is called).
|
|
+ */
|
|
+ TQPushButton *m_pPushButton;
|
|
+
|
|
+ /** Cached radio button.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQRadioButton *m_pRadioButton;
|
|
+
|
|
+ /** Cached check box.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQCheckBox *m_pCheckBox;
|
|
+
|
|
+ /** Cached combo box.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQComboBox *m_pComboBox;
|
|
+
|
|
+ /** Cached editable combo box.
|
|
+
|
|
+ Needed, because some styles do not like dynamic changes
|
|
+ (TQComboBox::setEditable()).
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQComboBox *m_pEditableComboBox;
|
|
+
|
|
+ /** Cached line edit box.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQLineEdit *m_pLineEdit;
|
|
+
|
|
+ /** Cached spin box.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQSpinWidget *m_pSpinWidget;
|
|
+
|
|
+ /** Cached spin box'es line edit.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQLineEdit *m_pSpinEdit;
|
|
+
|
|
+ /** Cached tab.
|
|
+
|
|
+ Left, middle, right tab and a tab which is alone.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQTab *m_pTabLeft, *m_pTabMiddle, *m_pTabRight, *m_pTabAlone;
|
|
+
|
|
+ /** Cached tab bar's parent widget.
|
|
+
|
|
+ Needed, because the Qt windows style checks for the availability
|
|
+ of tab bar's parent. We cannot use m_pTabWidget, because
|
|
+ TabWidget::setTabBar() and TabWidget::tabBar() methods are
|
|
+ protected.
|
|
+
|
|
+ @see m_pPushButton, m_pTabWidget
|
|
+ */
|
|
+ TQWidget *m_pTabBarParent;
|
|
+
|
|
+ /** Cached tab bar widget.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQTabBar *m_pTabBar;
|
|
+
|
|
+ /** Cached tab widget.
|
|
+
|
|
+ We need it to draw the tab page. It cannot be used to draw the
|
|
+ tabs themselves, because the drawing has to be tweaked a little
|
|
+ due to not enough information from VCL.
|
|
+
|
|
+ @see m_pPushButton, m_pTabBarParent
|
|
+ */
|
|
+ TQTabWidget *m_pTabWidget;
|
|
+
|
|
+ /** Cached list view.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQListView *m_pListView;
|
|
+
|
|
+ /** Cached scroll bar.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQScrollBar *m_pScrollBar;
|
|
+
|
|
+ /** Cached dock area. Needed for proper functionality of tool bars.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQMainWindow *m_pMainWindow;
|
|
+
|
|
+ /** Cached tool bar.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQToolBar *m_pToolBarHoriz, *m_pToolBarVert;
|
|
+
|
|
+ /** Cached tool button.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQToolButton *m_pToolButton;
|
|
+
|
|
+ /** Cached menu bar.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQMenuBar *m_pMenuBar;
|
|
+
|
|
+ /** Identifiers of menu bar items.
|
|
+ */
|
|
+ int m_nMenuBarEnabledItem, m_nMenuBarDisabledItem;
|
|
+
|
|
+ /** Cached popup menu.
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ TQPopupMenu *m_pPopupMenu;
|
|
+
|
|
+ /** Identifiers of popup menu items.
|
|
+ */
|
|
+ int m_nPopupMenuEnabledItem, m_nPopupMenuDisabledItem;
|
|
+
|
|
+ /** cached progress bar
|
|
+ */
|
|
+ TQProgressBar *m_pProgressBar;
|
|
+
|
|
+ // TODO other widgets
|
|
+
|
|
+ public:
|
|
+ /** Implicit constructor.
|
|
+
|
|
+ It creates an empty WidgetPainter with all the cached widgets initialized
|
|
+ to NULL. The widgets are created on demand and they are still hidden
|
|
+ (no TQWidget::show()), because they are needed just as a parameter for
|
|
+ TQStyle::drawControl().
|
|
+
|
|
+ @see m_pPushButton
|
|
+ */
|
|
+ WidgetPainter( void );
|
|
+
|
|
+ /** Destructor.
|
|
+
|
|
+ Destruct all the cached widgets.
|
|
+ */
|
|
+ virtual ~WidgetPainter( void );
|
|
+
|
|
+ /** Paints the specified widget to the X window.
|
|
+
|
|
+ Use X calls to bitblt (bit block transfer) the widget qWidget to
|
|
+ the window specified by drawable with the style defined by nStyle.
|
|
+
|
|
+ @param qWidget
|
|
+ A pointer to the cached widget.
|
|
+
|
|
+ @param nState
|
|
+ The state of the control (focused, on/off, ...)
|
|
+
|
|
+ @param aValue
|
|
+ The value (true/false, ...)
|
|
+
|
|
+ @param dpy
|
|
+ The display to be used by the X calls.
|
|
+
|
|
+ @param drawable
|
|
+ The destination X window.
|
|
+
|
|
+ @param gc
|
|
+ The graphics context.
|
|
+ */
|
|
+ sal_Bool drawStyledWidget( TQWidget *pWidget,
|
|
+ ControlState nState, const ImplControlValue& aValue,
|
|
+ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc,
|
|
+ ControlPart nPart = PART_ENTIRE_CONTROL );
|
|
+
|
|
+ /** 'Get' method for push button.
|
|
+
|
|
+ The method returns the cached push button. It is constructed if it
|
|
+ does not exist. It has NULL as a parent and it stays hidden, but it
|
|
+ is necessary for the drawStyledWidget() method.
|
|
+
|
|
+ @return valid push button.
|
|
+ */
|
|
+ TQPushButton *pushButton( const Rectangle& rControlRegion, sal_Bool bDefault );
|
|
+
|
|
+ /** 'Get' method for radio button.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQRadioButton *radioButton( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for check box.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQCheckBox *checkBox( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for combo box.
|
|
+
|
|
+ It returns m_pComboBox or m_pEditableComboBox according to
|
|
+ bEditable.
|
|
+
|
|
+ @see pushButton(), m_pEditableComboBox
|
|
+ */
|
|
+ TQComboBox *comboBox( const Rectangle& rControlRegion, sal_Bool bEditable );
|
|
+
|
|
+ /** 'Get' method for line edit box.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQLineEdit *lineEdit( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for spin box.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQSpinWidget *spinWidget( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for tab bar.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQTabBar *tabBar( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for tab widget.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQTabWidget *tabWidget( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for list view.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQListView *listView( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for scroll bar.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQScrollBar *scrollBar( const Rectangle& rControlRegion,
|
|
+ sal_Bool bHorizontal, const ImplControlValue& aValue );
|
|
+
|
|
+ /** 'Get' method for tool bar.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQToolBar *toolBar( const Rectangle& rControlRegion, sal_Bool bHorizontal );
|
|
+
|
|
+ /** 'Get' method for tool button.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQToolButton *toolButton( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for menu bar.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQMenuBar *menuBar( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for popup menu.
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQPopupMenu *popupMenu( const Rectangle& rControlRegion );
|
|
+
|
|
+ /** 'Get' method for progress bar
|
|
+
|
|
+ @see pushButton()
|
|
+ */
|
|
+ TQProgressBar *progressBar( const Rectangle& rControlRegion );
|
|
+
|
|
+ // TODO other widgets
|
|
+
|
|
+ protected:
|
|
+ /** Style conversion function.
|
|
+
|
|
+ Conversion function between VCL ControlState together with
|
|
+ ImplControlValue and Qt state flags.
|
|
+
|
|
+ @param nState
|
|
+ State of the widget (default, focused, ...) as defined in Native
|
|
+ Widget Framework.
|
|
+
|
|
+ @param aValue
|
|
+ Value held by the widget (on, off, ...)
|
|
+ */
|
|
+ TQStyle::SFlags vclStateValue2SFlags( ControlState nState, const ImplControlValue& aValue );
|
|
+
|
|
+ public:
|
|
+ /** Convert VCL Rectangle to TQRect.
|
|
+
|
|
+ @param rControlRegion
|
|
+ The region to convert.
|
|
+
|
|
+ @return
|
|
+ The bounding box of the region.
|
|
+ */
|
|
+ static TQRect region2TQRect( const Rectangle& rControlRegion );
|
|
+};
|
|
+
|
|
+WidgetPainter::WidgetPainter( void )
|
|
+ : m_pPushButton( NULL ),
|
|
+ m_pRadioButton( NULL ),
|
|
+ m_pCheckBox( NULL ),
|
|
+ m_pComboBox( NULL ),
|
|
+ m_pEditableComboBox( NULL ),
|
|
+ m_pLineEdit( NULL ),
|
|
+ m_pSpinWidget( NULL ),
|
|
+ m_pSpinEdit( NULL ),
|
|
+ m_pTabLeft( NULL ),
|
|
+ m_pTabMiddle( NULL ),
|
|
+ m_pTabRight( NULL ),
|
|
+ m_pTabAlone( NULL ),
|
|
+ m_pTabBarParent( NULL ),
|
|
+ m_pTabBar( NULL ),
|
|
+ m_pTabWidget( NULL ),
|
|
+ m_pListView( NULL ),
|
|
+ m_pScrollBar( NULL ),
|
|
+ m_pMainWindow( NULL ),
|
|
+ m_pToolBarHoriz( NULL ),
|
|
+ m_pToolBarVert( NULL ),
|
|
+ m_pToolButton( NULL ),
|
|
+ m_pMenuBar( NULL ),
|
|
+ m_pPopupMenu( NULL ),
|
|
+ m_pProgressBar( NULL )
|
|
+{
|
|
+}
|
|
+
|
|
+WidgetPainter::~WidgetPainter( void )
|
|
+{
|
|
+ delete m_pPushButton, m_pPushButton = NULL;
|
|
+ delete m_pRadioButton, m_pRadioButton = NULL;
|
|
+ delete m_pCheckBox, m_pCheckBox = NULL;
|
|
+ delete m_pComboBox, m_pComboBox = NULL;
|
|
+ delete m_pEditableComboBox, m_pEditableComboBox = NULL;
|
|
+ delete m_pLineEdit, m_pLineEdit = NULL;
|
|
+ delete m_pSpinWidget, m_pSpinWidget = NULL;
|
|
+ m_pSpinEdit = NULL; // Deleted in m_pSpinWidget's destructor
|
|
+ delete m_pTabAlone, m_pTabAlone = NULL;
|
|
+ delete m_pTabBarParent, m_pTabBarParent = NULL;
|
|
+ m_pTabBar = NULL; // Deleted in m_pTabBarParent's destructor
|
|
+ m_pTabLeft = NULL;
|
|
+ m_pTabMiddle = NULL;
|
|
+ m_pTabRight = NULL;
|
|
+ delete m_pTabWidget, m_pTabWidget = NULL;
|
|
+ delete m_pListView, m_pListView = NULL;
|
|
+ delete m_pScrollBar, m_pScrollBar = NULL;
|
|
+ delete m_pToolBarHoriz, m_pToolBarHoriz = NULL;
|
|
+ delete m_pToolBarVert, m_pToolBarVert = NULL;
|
|
+ delete m_pMainWindow, m_pMainWindow = NULL;
|
|
+ delete m_pToolButton, m_pToolButton = NULL;
|
|
+ delete m_pMenuBar, m_pMenuBar = NULL;
|
|
+ delete m_pPopupMenu, m_pPopupMenu = NULL;
|
|
+ delete m_pProgressBar, m_pProgressBar = NULL;
|
|
+}
|
|
+
|
|
+sal_Bool WidgetPainter::drawStyledWidget( TQWidget *pWidget,
|
|
+ ControlState nState, const ImplControlValue& aValue,
|
|
+ Display *dpy, XLIB_Window drawable, int nScreen, int nDepth, GC gc,
|
|
+ ControlPart nPart )
|
|
+{
|
|
+ if ( !pWidget )
|
|
+ return FALSE;
|
|
+
|
|
+ // Normalize the widget
|
|
+ TQPoint qWidgetPos( pWidget->pos() );
|
|
+ pWidget->move( 0, 0 );
|
|
+
|
|
+ // Enable/disable the widget
|
|
+ pWidget->setEnabled( nState & CTRL_STATE_ENABLED );
|
|
+
|
|
+ // Create pixmap to paint to
|
|
+ TQPixmap qPixmap( pWidget->width(), pWidget->height() );
|
|
+ TQPainter qPainter( &qPixmap );
|
|
+ TQRect qRect( 0, 0, pWidget->width(), pWidget->height() );
|
|
+
|
|
+ // Use the background of the widget
|
|
+ qPixmap.fill( pWidget, TQPoint(0, 0) );
|
|
+
|
|
+ // Convert the flags
|
|
+ TQStyle::SFlags nStyle = vclStateValue2SFlags( nState, aValue );
|
|
+
|
|
+ // Store the widget class
|
|
+ const char *pClassName = pWidget->className();
|
|
+
|
|
+ // Draw the widget to the pixmap
|
|
+ if ( strcmp( TQPUSHBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
+ {
|
|
+ // Workaround for the Platinum style.
|
|
+ // Platinum takes the state directly from the widget, not from SFlags.
|
|
+ TQPushButton *pPushButton = static_cast<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 KStyle::drawPrimitive()
|
|
+ KStyle *pStyle = static_cast< KStyle * >( &kapp->style() );
|
|
+ pStyle->drawKStylePrimitive( KStyle::KPE_ToolBarHandle,
|
|
+ &qPainter, pToolBar, qThumbRect,
|
|
+ pWidget->colorGroup(), nStyle );
|
|
+ }
|
|
+ else
|
|
+ kapp->style().drawPrimitive( TQStyle::PE_DockWindowHandle,
|
|
+ &qPainter, qThumbRect, pWidget->colorGroup(), nStyle );
|
|
+ }
|
|
+ }
|
|
+ else if ( strcmp( TQTOOLBUTTON_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
+ {
|
|
+ if( (nStyle & TQStyle::Style_MouseOver) )
|
|
+ nStyle &= ~TQStyle::Style_Off;
|
|
+ kapp->style().drawComplexControl( TQStyle::CC_ToolButton,
|
|
+ &qPainter, pWidget, qRect,
|
|
+ pWidget->colorGroup(), nStyle,
|
|
+ TQStyle::SC_ToolButton );
|
|
+ }
|
|
+ else if ( strcmp( TQMENUBAR_OBJECT_NAME_STRING, pClassName ) == 0 )
|
|
+ {
|
|
+ if ( nPart == PART_ENTIRE_CONTROL )
|
|
+ {
|
|
+ kapp->style().drawControl( TQStyle::CE_MenuBarEmptyArea,
|
|
+ &qPainter, pWidget, qRect,
|
|
+ pWidget->colorGroup(), nStyle );
|
|
+ }
|
|
+ else if ( nPart == PART_MENU_ITEM )
|
|
+ {
|
|
+ int nMenuItem = ( nStyle & TQStyle::Style_Enabled )? m_nMenuBarEnabledItem: m_nMenuBarDisabledItem;
|
|
+ TQMenuItem *pMenuItem = static_cast<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,
|
|
+ sal_Bool bDefault )
|
|
+{
|
|
+ if ( !m_pPushButton )
|
|
+ m_pPushButton = new TQPushButton( NULL, "push_button" );
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ // Workaround for broken styles which do not add
|
|
+ // TQStyle::PM_ButtonDefaultIndicator to the size of the default button
|
|
+ // (for example Keramik)
|
|
+ // FIXME Fix Keramik style to be consistant with Qt built-in styles. Aargh!
|
|
+ if ( bDefault )
|
|
+ {
|
|
+ TQSize qContentsSize( 50, 50 );
|
|
+ m_pPushButton->setDefault( false );
|
|
+ TQSize qNormalSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton,
|
|
+ m_pPushButton, qContentsSize );
|
|
+ m_pPushButton->setDefault( true );
|
|
+ TQSize qDefSize = kapp->style().sizeFromContents( TQStyle::CT_PushButton,
|
|
+ m_pPushButton, qContentsSize );
|
|
+
|
|
+ int nIndicatorSize = kapp->style().pixelMetric(
|
|
+ TQStyle::PM_ButtonDefaultIndicator, m_pPushButton );
|
|
+ if ( qNormalSize.width() == qDefSize.width() )
|
|
+ qRect.addCoords( nIndicatorSize, 0, -nIndicatorSize, 0 );
|
|
+ if ( qNormalSize.height() == qDefSize.height() )
|
|
+ qRect.addCoords( 0, nIndicatorSize, 0, -nIndicatorSize );
|
|
+ }
|
|
+
|
|
+ m_pPushButton->move( qRect.topLeft() );
|
|
+ m_pPushButton->resize( qRect.size() );
|
|
+ m_pPushButton->setDefault( bDefault );
|
|
+
|
|
+ return m_pPushButton;
|
|
+}
|
|
+
|
|
+TQRadioButton *WidgetPainter::radioButton( const Rectangle& rControlRegion )
|
|
+{
|
|
+ if ( !m_pRadioButton )
|
|
+ m_pRadioButton = new TQRadioButton( NULL, "radio_button" );
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ // Workaround for broken themes which do not honor the given size.
|
|
+ // Quite ugly, but I do not know about a better solution.
|
|
+ const char *pStyleName = kapp->style().className();
|
|
+ if ( strcmp( "KThemeStyle", pStyleName ) == 0 )
|
|
+ {
|
|
+ TQRect qOldRect( qRect );
|
|
+
|
|
+ qRect.setWidth( kapp->style().pixelMetric(
|
|
+ TQStyle::PM_ExclusiveIndicatorWidth, m_pRadioButton ) );
|
|
+ qRect.setHeight( kapp->style().pixelMetric(
|
|
+ TQStyle::PM_ExclusiveIndicatorHeight, m_pRadioButton ) );
|
|
+
|
|
+ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2,
|
|
+ ( qOldRect.height() - qRect.height() ) / 2 );
|
|
+ }
|
|
+
|
|
+ m_pRadioButton->move( qRect.topLeft() );
|
|
+ m_pRadioButton->resize( qRect.size() );
|
|
+
|
|
+ return m_pRadioButton;
|
|
+}
|
|
+
|
|
+TQCheckBox *WidgetPainter::checkBox( const Rectangle& rControlRegion )
|
|
+{
|
|
+ if ( !m_pCheckBox )
|
|
+ m_pCheckBox = new TQCheckBox( NULL, "check_box" );
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ // Workaround for broken themes which do not honor the given size.
|
|
+ // Quite ugly, but I do not know about a better solution.
|
|
+ const char *pStyleName = kapp->style().className();
|
|
+ if ( strcmp( "KThemeStyle", pStyleName ) == 0 )
|
|
+ {
|
|
+ TQRect qOldRect( qRect );
|
|
+
|
|
+ qRect.setWidth( kapp->style().pixelMetric(
|
|
+ TQStyle::PM_IndicatorWidth, m_pCheckBox ) );
|
|
+ qRect.setHeight( kapp->style().pixelMetric(
|
|
+ TQStyle::PM_IndicatorHeight, m_pCheckBox ) );
|
|
+
|
|
+ qRect.moveBy( ( qOldRect.width() - qRect.width() ) / 2,
|
|
+ ( qOldRect.height() - qRect.height() ) / 2 );
|
|
+ }
|
|
+
|
|
+ m_pCheckBox->move( qRect.topLeft() );
|
|
+ m_pCheckBox->resize( qRect.size() );
|
|
+
|
|
+ return m_pCheckBox;
|
|
+}
|
|
+
|
|
+TQComboBox *WidgetPainter::comboBox( const Rectangle& rControlRegion,
|
|
+ sal_Bool bEditable )
|
|
+{
|
|
+ TQComboBox *pComboBox = NULL;
|
|
+ if ( bEditable )
|
|
+ {
|
|
+ if ( !m_pEditableComboBox )
|
|
+ m_pEditableComboBox = new TQComboBox( true, NULL, "combo_box_edit" );
|
|
+ pComboBox = m_pEditableComboBox;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ if ( !m_pComboBox )
|
|
+ m_pComboBox = new TQComboBox( false, NULL, "combo_box" );
|
|
+ pComboBox = m_pComboBox;
|
|
+ }
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ pComboBox->move( qRect.topLeft() );
|
|
+ pComboBox->resize( qRect.size() );
|
|
+
|
|
+ return pComboBox;
|
|
+}
|
|
+
|
|
+TQLineEdit *WidgetPainter::lineEdit( const Rectangle& rControlRegion )
|
|
+{
|
|
+ if ( !m_pLineEdit )
|
|
+ m_pLineEdit = new TQLineEdit( NULL, "line_edit" );
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ m_pLineEdit->move( qRect.topLeft() );
|
|
+ m_pLineEdit->resize( qRect.size() );
|
|
+
|
|
+ return m_pLineEdit;
|
|
+}
|
|
+
|
|
+TQSpinWidget *WidgetPainter::spinWidget( const Rectangle& rControlRegion )
|
|
+{
|
|
+ if ( !m_pSpinWidget )
|
|
+ {
|
|
+ m_pSpinWidget = new TQSpinWidget( NULL, "spin_widget" );
|
|
+
|
|
+ m_pSpinEdit = new TQLineEdit( NULL, "line_edit_spin" );
|
|
+ m_pSpinWidget->setEditWidget( m_pSpinEdit );
|
|
+ }
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ m_pSpinWidget->move( qRect.topLeft() );
|
|
+ m_pSpinWidget->resize( qRect.size() );
|
|
+ m_pSpinWidget->arrange();
|
|
+
|
|
+ return m_pSpinWidget;
|
|
+}
|
|
+
|
|
+TQTabBar *WidgetPainter::tabBar( const Rectangle& rControlRegion )
|
|
+{
|
|
+ if ( !m_pTabBar )
|
|
+ {
|
|
+ if ( !m_pTabBarParent )
|
|
+ m_pTabBarParent = new TQWidget( NULL, "tab_bar_parent" );
|
|
+
|
|
+ m_pTabBar = new TQTabBar( m_pTabBarParent, "tab_bar" );
|
|
+
|
|
+ m_pTabLeft = new TQTab();
|
|
+ m_pTabMiddle = new TQTab();
|
|
+ m_pTabRight = new TQTab();
|
|
+ m_pTabAlone = new TQTab();
|
|
+
|
|
+ m_pTabBar->addTab( m_pTabLeft );
|
|
+ m_pTabBar->addTab( m_pTabMiddle );
|
|
+ m_pTabBar->addTab( m_pTabRight );
|
|
+ }
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ m_pTabBar->move( qRect.topLeft() );
|
|
+ m_pTabBar->resize( qRect.size() );
|
|
+
|
|
+ m_pTabBar->setShape( TQTabBar::RoundedAbove );
|
|
+
|
|
+ return m_pTabBar;
|
|
+}
|
|
+
|
|
+TQTabWidget *WidgetPainter::tabWidget( const Rectangle& rControlRegion )
|
|
+{
|
|
+ if ( !m_pTabWidget )
|
|
+ m_pTabWidget = new TQTabWidget( NULL, "tab_widget" );
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+ --qRect.rTop();
|
|
+
|
|
+ m_pTabWidget->move( qRect.topLeft() );
|
|
+ m_pTabWidget->resize( qRect.size() );
|
|
+
|
|
+ return m_pTabWidget;
|
|
+}
|
|
+
|
|
+TQListView *WidgetPainter::listView( const Rectangle& rControlRegion )
|
|
+{
|
|
+ if ( !m_pListView )
|
|
+ m_pListView = new TQListView( NULL, "list_view" );
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ m_pListView->move( qRect.topLeft() );
|
|
+ m_pListView->resize( qRect.size() );
|
|
+
|
|
+ return m_pListView;
|
|
+}
|
|
+
|
|
+TQScrollBar *WidgetPainter::scrollBar( const Rectangle& rControlRegion,
|
|
+ sal_Bool bHorizontal, const ImplControlValue& aValue )
|
|
+{
|
|
+ if ( !m_pScrollBar )
|
|
+ {
|
|
+ m_pScrollBar = new TQScrollBar( NULL, "scroll_bar" );
|
|
+ m_pScrollBar->setTracking( false );
|
|
+ m_pScrollBar->setLineStep( 1 );
|
|
+ }
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ m_pScrollBar->move( qRect.topLeft() );
|
|
+ m_pScrollBar->resize( qRect.size() );
|
|
+ m_pScrollBar->setOrientation( bHorizontal? Qt::Horizontal: Qt::Vertical );
|
|
+
|
|
+ const ScrollbarValue *pValue = static_cast<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, sal_Bool bHorizontal )
|
|
+{
|
|
+ if ( !m_pMainWindow )
|
|
+ m_pMainWindow = new TQMainWindow( NULL, "main_window" );
|
|
+
|
|
+ TQToolBar *pToolBar;
|
|
+ if ( bHorizontal )
|
|
+ {
|
|
+ if ( !m_pToolBarHoriz )
|
|
+ {
|
|
+ m_pToolBarHoriz = new TQToolBar( m_pMainWindow, "tool_bar_horiz" );
|
|
+ m_pMainWindow->moveDockWindow( m_pToolBarHoriz, Qt::DockTop );
|
|
+ }
|
|
+ pToolBar = m_pToolBarHoriz;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ if ( !m_pToolBarVert )
|
|
+ {
|
|
+ m_pToolBarVert = new TQToolBar( m_pMainWindow, "tool_bar_horiz" );
|
|
+ m_pMainWindow->moveDockWindow( m_pToolBarVert, Qt::DockLeft );
|
|
+ }
|
|
+ pToolBar = m_pToolBarVert;
|
|
+ }
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ pToolBar->move( qRect.topLeft() );
|
|
+ pToolBar->resize( qRect.size() );
|
|
+
|
|
+ return pToolBar;
|
|
+}
|
|
+
|
|
+TQToolButton *WidgetPainter::toolButton( const Rectangle& rControlRegion)
|
|
+{
|
|
+ if ( !m_pToolButton )
|
|
+ m_pToolButton = new TQToolButton( NULL, "tool_button" );
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ m_pToolButton->move( qRect.topLeft() );
|
|
+ m_pToolButton->resize( qRect.size() );
|
|
+
|
|
+ return m_pToolButton;
|
|
+}
|
|
+
|
|
+TQMenuBar *WidgetPainter::menuBar( const Rectangle& rControlRegion)
|
|
+{
|
|
+ if ( !m_pMenuBar )
|
|
+ {
|
|
+ m_pMenuBar = new TQMenuBar( NULL, "menu_bar" );
|
|
+
|
|
+ m_nMenuBarEnabledItem = m_pMenuBar->insertItem( "" );
|
|
+ m_nMenuBarDisabledItem = m_pMenuBar->insertItem( "" );
|
|
+
|
|
+ m_pMenuBar->setItemEnabled( m_nMenuBarEnabledItem, true );
|
|
+ m_pMenuBar->setItemEnabled( m_nMenuBarDisabledItem, false );
|
|
+ }
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ m_pMenuBar->move( qRect.topLeft() );
|
|
+ m_pMenuBar->resize( qRect.size() );
|
|
+
|
|
+ return m_pMenuBar;
|
|
+}
|
|
+
|
|
+TQPopupMenu *WidgetPainter::popupMenu( const Rectangle& rControlRegion)
|
|
+{
|
|
+ if ( !m_pPopupMenu )
|
|
+ {
|
|
+ m_pPopupMenu = new TQPopupMenu( NULL, "popup_menu" );
|
|
+
|
|
+ m_nPopupMenuEnabledItem = m_pPopupMenu->insertItem( "" );
|
|
+ m_nPopupMenuDisabledItem = m_pPopupMenu->insertItem( "" );
|
|
+
|
|
+ m_pPopupMenu->setItemEnabled( m_nPopupMenuEnabledItem, true );
|
|
+ m_pPopupMenu->setItemEnabled( m_nPopupMenuDisabledItem, false );
|
|
+ }
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ m_pPopupMenu->move( qRect.topLeft() );
|
|
+ m_pPopupMenu->resize( qRect.size() );
|
|
+
|
|
+ return m_pPopupMenu;
|
|
+}
|
|
+
|
|
+TQProgressBar *WidgetPainter::progressBar( const Rectangle& rControlRegion )
|
|
+{
|
|
+ if ( !m_pProgressBar )
|
|
+ m_pProgressBar = new TQProgressBar( NULL, "progress_bar" );
|
|
+
|
|
+ TQRect qRect = region2TQRect( rControlRegion );
|
|
+
|
|
+ m_pProgressBar->move( qRect.topLeft() );
|
|
+ m_pProgressBar->resize( qRect.size() );
|
|
+
|
|
+ return m_pProgressBar;
|
|
+}
|
|
+
|
|
+TQStyle::SFlags WidgetPainter::vclStateValue2SFlags( ControlState nState,
|
|
+ const ImplControlValue& aValue )
|
|
+{
|
|
+ TQStyle::SFlags nStyle =
|
|
+ ( (nState & CTRL_STATE_DEFAULT)? TQStyle::Style_ButtonDefault: TQStyle::Style_Default ) |
|
|
+ ( (nState & CTRL_STATE_ENABLED)? TQStyle::Style_Enabled: TQStyle::Style_Default ) |
|
|
+ ( (nState & CTRL_STATE_FOCUSED)? TQStyle::Style_HasFocus: TQStyle::Style_Default ) |
|
|
+ ( (nState & CTRL_STATE_PRESSED)? TQStyle::Style_Down: TQStyle::Style_Raised ) |
|
|
+ ( (nState & CTRL_STATE_SELECTED)? TQStyle::Style_Selected : TQStyle::Style_Default ) |
|
|
+ ( (nState & CTRL_STATE_ROLLOVER)? TQStyle::Style_MouseOver: TQStyle::Style_Default );
|
|
+ //TODO ( (nState & CTRL_STATE_HIDDEN)? TQStyle::Style_: TQStyle::Style_Default ) |
|
|
+
|
|
+ switch ( aValue.getTristateVal() )
|
|
+ {
|
|
+ case BUTTONVALUE_ON: nStyle |= TQStyle::Style_On; break;
|
|
+ case BUTTONVALUE_OFF: nStyle |= TQStyle::Style_Off; break;
|
|
+ case BUTTONVALUE_MIXED: nStyle |= TQStyle::Style_NoChange; break;
|
|
+ default: break;
|
|
+ }
|
|
+
|
|
+ return nStyle;
|
|
+}
|
|
+
|
|
+TQRect WidgetPainter::region2TQRect( const Rectangle& rControlRegion )
|
|
+{
|
|
+ return TQRect( TQPoint( rControlRegion.Left(), rControlRegion.Top() ),
|
|
+ TQPoint( rControlRegion.Right(), rControlRegion.Bottom() ) );
|
|
+}
|
|
+
|
|
+/** Instance of WidgetPainter.
|
|
+
|
|
+ It is used to paint the widgets requested by NWF.
|
|
+*/
|
|
+static WidgetPainter *pWidgetPainter;
|
|
+
|
|
+class TDESalGraphics : public X11SalGraphics
|
|
+{
|
|
+ public:
|
|
+ TDESalGraphics() {}
|
|
+ virtual ~TDESalGraphics() {}
|
|
+ virtual sal_Bool IsNativeControlSupported( ControlType nType, ControlPart nPart );
|
|
+ virtual sal_Bool hitTestNativeControl( ControlType nType, ControlPart nPart,
|
|
+ const Rectangle& rControlRegion, const Point& aPos,
|
|
+ sal_Bool& rIsInside );
|
|
+ virtual sal_Bool drawNativeControl( ControlType nType, ControlPart nPart,
|
|
+ const Rectangle& rControlRegion, ControlState nState,
|
|
+ const ImplControlValue& aValue,
|
|
+ const OUString& aCaption );
|
|
+ virtual sal_Bool drawNativeControlText( ControlType nType, ControlPart nPart,
|
|
+ const Rectangle& rControlRegion, ControlState nState,
|
|
+ const ImplControlValue& aValue,
|
|
+ const OUString& aCaption );
|
|
+ virtual sal_Bool getNativeControlRegion( ControlType nType, ControlPart nPart,
|
|
+ const Rectangle& rControlRegion, ControlState nState,
|
|
+ const ImplControlValue& aValue,
|
|
+ const OUString& aCaption,
|
|
+ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion );
|
|
+};
|
|
+
|
|
+/** What widgets can be drawn the native way.
|
|
+
|
|
+ @param nType
|
|
+ Type of the widget.
|
|
+
|
|
+ @param nPart
|
|
+ Specification of the widget's part if it consists of more than one.
|
|
+
|
|
+ @return TRUE if the platform supports native drawing of the widget nType
|
|
+ defined by nPart.
|
|
+*/
|
|
+sal_Bool TDESalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nPart )
|
|
+{
|
|
+ return
|
|
+ ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
+ ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
+ ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
+ ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) ||
|
|
+ ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) ||
|
|
+ ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_WINDOW || nPart == HAS_BACKGROUND_TEXTURE ) ) ||
|
|
+ ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL || nPart == HAS_BACKGROUND_TEXTURE) ) ||
|
|
+ // no CTRL_SPINBUTTONS for TDE
|
|
+ ( (nType == CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
+ ( (nType == CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) ) ||
|
|
+ // no CTRL_TAB_BODY for TDE
|
|
+ ( (nType == CTRL_SCROLLBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) ) ||
|
|
+ ( (nType == CTRL_SCROLLBAR) && (nPart == HAS_THREE_BUTTONS) ) || // TODO small optimization is possible here: return this only if the style really has 3 buttons
|
|
+ // CTRL_GROUPBOX not supported
|
|
+ // CTRL_FIXEDLINE not supported
|
|
+ // CTRL_FIXEDBORDER not supported
|
|
+ ( (nType == CTRL_TOOLBAR) && (nPart == PART_ENTIRE_CONTROL ||
|
|
+ nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT ||
|
|
+ nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT ||
|
|
+ nPart == PART_BUTTON) ) ||
|
|
+ ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) ||
|
|
+ ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) ) ||
|
|
+ ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ ;
|
|
+}
|
|
+
|
|
+
|
|
+/** Test whether the position is in the native widget.
|
|
+
|
|
+ If the return value is TRUE, bIsInside contains information whether
|
|
+ aPos was or was not inside the native widget specified by the
|
|
+ nType/nPart combination.
|
|
+*/
|
|
+sal_Bool TDESalGraphics::hitTestNativeControl( ControlType nType, ControlPart nPart,
|
|
+ const Rectangle& rControlRegion, const Point& rPos,
|
|
+ sal_Bool& rIsInside )
|
|
+{
|
|
+ if ( nType == CTRL_SCROLLBAR )
|
|
+ {
|
|
+ // make position relative to rControlRegion
|
|
+ Point aPos = rPos - rControlRegion.TopLeft();
|
|
+ rIsInside = FALSE;
|
|
+
|
|
+ sal_Bool bHorizontal = ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT );
|
|
+
|
|
+ TQScrollBar *pScrollBar = pWidgetPainter->scrollBar( rControlRegion,
|
|
+ bHorizontal, ImplControlValue() );
|
|
+ TQRect qRectSubLine = kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubLine );
|
|
+ TQRect qRectAddLine = kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarAddLine );
|
|
+
|
|
+ // There are 2 buttons on the right/bottom side of the scrollbar
|
|
+ sal_Bool bTwoSubButtons = FALSE;
|
|
+
|
|
+ // It is a Platinum style scroll bar
|
|
+ sal_Bool bPlatinumStyle = FALSE;
|
|
+
|
|
+ // Workaround for Platinum and 3 button style scroll bars.
|
|
+ // It makes the right/down button bigger.
|
|
+ if ( bHorizontal )
|
|
+ {
|
|
+ qRectAddLine.setLeft( kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pScrollBar,
|
|
+ TQStyle::SC_ScrollBarAddPage ).right() + 1 );
|
|
+ if ( qRectAddLine.width() > qRectSubLine.width() )
|
|
+ bTwoSubButtons = TRUE;
|
|
+ if ( qRectSubLine.left() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).left() )
|
|
+ bPlatinumStyle = TRUE;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ qRectAddLine.setTop( kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pScrollBar,
|
|
+ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 );
|
|
+ if ( qRectAddLine.height() > qRectSubLine.height() )
|
|
+ bTwoSubButtons = TRUE;
|
|
+ if ( qRectSubLine.top() > kapp->style().querySubControlMetrics( TQStyle::CC_ScrollBar, pScrollBar, TQStyle::SC_ScrollBarSubPage ).top() )
|
|
+ bPlatinumStyle = TRUE;
|
|
+ }
|
|
+
|
|
+ switch ( nPart )
|
|
+ {
|
|
+ case PART_BUTTON_LEFT:
|
|
+ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) )
|
|
+ rIsInside = TRUE;
|
|
+ else if ( bTwoSubButtons )
|
|
+ {
|
|
+ qRectAddLine.setWidth( qRectAddLine.width() / 2 );
|
|
+ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() );
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ case PART_BUTTON_UP:
|
|
+ if ( !bPlatinumStyle && qRectSubLine.contains( aPos.getX(), aPos.getY() ) )
|
|
+ rIsInside = TRUE;
|
|
+ else if ( bTwoSubButtons )
|
|
+ {
|
|
+ qRectAddLine.setHeight( qRectAddLine.height() / 2 );
|
|
+ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() );
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ case PART_BUTTON_RIGHT:
|
|
+ if ( bTwoSubButtons )
|
|
+ qRectAddLine.setLeft( qRectAddLine.left() + qRectAddLine.width() / 2 );
|
|
+
|
|
+ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() );
|
|
+ break;
|
|
+
|
|
+ case PART_BUTTON_DOWN:
|
|
+ if ( bTwoSubButtons )
|
|
+ qRectAddLine.setTop( qRectAddLine.top() + qRectAddLine.height() / 2 );
|
|
+
|
|
+ rIsInside = qRectAddLine.contains( aPos.getX(), aPos.getY() );
|
|
+ break;
|
|
+
|
|
+ // cases PART_TRACK_HORZ_AREA and PART_TRACK_VERT_AREA
|
|
+ default:
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+ return TRUE;
|
|
+ }
|
|
+
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
+
|
|
+/** Draw the requested control described by nPart/nState.
|
|
+
|
|
+ @param rControlRegion
|
|
+ The bounding region of the complete control in VCL frame coordinates.
|
|
+
|
|
+ @param aValue
|
|
+ An optional value (tristate/numerical/string).
|
|
+
|
|
+ @param aCaption
|
|
+ A caption or title string (like button text etc.)
|
|
+*/
|
|
+sal_Bool TDESalGraphics::drawNativeControl( ControlType nType, ControlPart nPart,
|
|
+ const Rectangle& rControlRegion, ControlState nState,
|
|
+ const ImplControlValue& aValue,
|
|
+ const OUString& )
|
|
+{
|
|
+ sal_Bool bReturn = FALSE;
|
|
+
|
|
+ Display *dpy = GetXDisplay();
|
|
+ XLIB_Window drawable = GetDrawable();
|
|
+ GC gc = SelectPen(); //SelectFont(); // GC with current clipping region set
|
|
+
|
|
+ if ( (nType == CTRL_PUSHBUTTON) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->pushButton( rControlRegion, (nState & CTRL_STATE_DEFAULT) ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_RADIOBUTTON) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->radioButton( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_CHECKBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->checkBox( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_COMBOBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->comboBox( rControlRegion, TRUE ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_EDITBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->lineEdit( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->comboBox( rControlRegion, FALSE ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_LISTBOX) && (nPart == PART_WINDOW) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->listView( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_SPINBOX) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->spinWidget( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType==CTRL_TAB_ITEM) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->tabBar( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType==CTRL_TAB_PANE) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->tabWidget( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_SCROLLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->scrollBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ, aValue ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_DRAW_BACKGROUND_VERT || nPart == PART_THUMB_HORZ || nPart == PART_THUMB_VERT) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->toolBar( rControlRegion, nPart == PART_DRAW_BACKGROUND_HORZ || nPart == PART_THUMB_VERT ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart );
|
|
+ }
|
|
+ else if ( (nType == CTRL_TOOLBAR) && (nPart == PART_BUTTON) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->toolButton( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart );
|
|
+ }
|
|
+ else if ( (nType == CTRL_MENUBAR) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->menuBar( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc, nPart );
|
|
+ }
|
|
+ else if ( (nType == CTRL_MENU_POPUP) && (nPart == PART_ENTIRE_CONTROL || nPart == PART_MENU_ITEM) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->popupMenu( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+ else if ( (nType == CTRL_PROGRESS) && (nPart == PART_ENTIRE_CONTROL) )
|
|
+ {
|
|
+ bReturn = pWidgetPainter->drawStyledWidget(
|
|
+ pWidgetPainter->progressBar( rControlRegion ),
|
|
+ nState, aValue,
|
|
+ dpy, drawable, GetScreenNumber(), GetVisual().GetDepth(), gc );
|
|
+ }
|
|
+
|
|
+ return bReturn;
|
|
+}
|
|
+
|
|
+
|
|
+/** Draw text on the widget.
|
|
+
|
|
+ OPTIONAL. Draws the requested text for the control described by nPart/nState.
|
|
+ Used if text is not drawn by DrawNativeControl().
|
|
+
|
|
+ @param rControlRegion
|
|
+ The bounding region of the complete control in VCL frame coordinates.
|
|
+
|
|
+ @param aValue
|
|
+ An optional value (tristate/numerical/string)
|
|
+
|
|
+ @param aCaption
|
|
+ A caption or title string (like button text etc.)
|
|
+*/
|
|
+sal_Bool TDESalGraphics::drawNativeControlText( ControlType, ControlPart,
|
|
+ const Rectangle&, ControlState,
|
|
+ const ImplControlValue&,
|
|
+ const OUString& )
|
|
+{
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
+/** Check if the bounding regions match.
|
|
+
|
|
+ If the return value is TRUE, rNativeBoundingRegion
|
|
+ contains the true bounding region covered by the control
|
|
+ including any adornment, while rNativeContentRegion contains the area
|
|
+ within the control that can be safely drawn into without drawing over
|
|
+ the borders of the control.
|
|
+
|
|
+ @param rControlRegion
|
|
+ The bounding region of the control in VCL frame coordinates.
|
|
+
|
|
+ @param aValue
|
|
+ An optional value (tristate/numerical/string)
|
|
+
|
|
+ @param aCaption
|
|
+ A caption or title string (like button text etc.)
|
|
+*/
|
|
+sal_Bool TDESalGraphics::getNativeControlRegion( ControlType nType, ControlPart nPart,
|
|
+ const Rectangle& rControlRegion, ControlState nState,
|
|
+ const ImplControlValue&,
|
|
+ const OUString&,
|
|
+ Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion )
|
|
+{
|
|
+ sal_Bool bReturn = FALSE;
|
|
+ TQRect qBoundingRect = WidgetPainter::region2TQRect( rControlRegion );
|
|
+ TQRect qRect;
|
|
+
|
|
+ TQWidget *pWidget = NULL;
|
|
+ switch ( nType )
|
|
+ {
|
|
+ // Metrics of the push button
|
|
+ case CTRL_PUSHBUTTON:
|
|
+ pWidget = pWidgetPainter->pushButton( rControlRegion, ( nState & CTRL_STATE_DEFAULT ) );
|
|
+
|
|
+ switch ( nPart )
|
|
+ {
|
|
+ case PART_ENTIRE_CONTROL:
|
|
+ qRect = qBoundingRect;
|
|
+
|
|
+ if ( nState & CTRL_STATE_DEFAULT )
|
|
+ {
|
|
+ int nIndicatorSize = kapp->style().pixelMetric(
|
|
+ TQStyle::PM_ButtonDefaultIndicator, pWidget );
|
|
+ qBoundingRect.addCoords( -nIndicatorSize, -nIndicatorSize,
|
|
+ nIndicatorSize, nIndicatorSize );
|
|
+ bReturn = TRUE;
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ // Metrics of the radio button
|
|
+ case CTRL_RADIOBUTTON:
|
|
+ pWidget = pWidgetPainter->radioButton( rControlRegion );
|
|
+
|
|
+ if ( nPart == PART_ENTIRE_CONTROL )
|
|
+ {
|
|
+ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorWidth, pWidget ) );
|
|
+ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_ExclusiveIndicatorHeight, pWidget ) );
|
|
+
|
|
+ bReturn = TRUE;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ // Metrics of the check box
|
|
+ case CTRL_CHECKBOX:
|
|
+ pWidget = pWidgetPainter->checkBox( rControlRegion );
|
|
+
|
|
+ if ( nPart == PART_ENTIRE_CONTROL )
|
|
+ {
|
|
+ qRect.setWidth( kapp->style().pixelMetric( TQStyle::PM_IndicatorWidth, pWidget ) );
|
|
+ qRect.setHeight( kapp->style().pixelMetric( TQStyle::PM_IndicatorHeight, pWidget ) );
|
|
+
|
|
+ bReturn = TRUE;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ // Metrics of the combo box
|
|
+ case CTRL_COMBOBOX:
|
|
+ case CTRL_LISTBOX:
|
|
+ pWidget = pWidgetPainter->comboBox( rControlRegion, ( nType == CTRL_COMBOBOX ) );
|
|
+ switch ( nPart )
|
|
+ {
|
|
+ case PART_BUTTON_DOWN:
|
|
+ qRect = kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxArrow );
|
|
+ qRect.setLeft( kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ComboBox, pWidget,
|
|
+ TQStyle::SC_ComboBoxEditField ).right() + 1 );
|
|
+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
+ bReturn = TRUE;
|
|
+ break;
|
|
+
|
|
+ case PART_SUB_EDIT:
|
|
+ qRect = kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ComboBox, pWidget, TQStyle::SC_ComboBoxEditField );
|
|
+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
+ bReturn = TRUE;
|
|
+ break;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ // Metrics of the spin box
|
|
+ case CTRL_SPINBOX:
|
|
+ pWidget = pWidgetPainter->spinWidget( rControlRegion );
|
|
+ switch ( nPart )
|
|
+ {
|
|
+ case PART_BUTTON_UP:
|
|
+ qRect = kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetUp );
|
|
+ bReturn = TRUE;
|
|
+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
+ break;
|
|
+
|
|
+ case PART_BUTTON_DOWN:
|
|
+ qRect = kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetDown );
|
|
+ bReturn = TRUE;
|
|
+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
+ break;
|
|
+
|
|
+ case PART_SUB_EDIT:
|
|
+ qRect = kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_SpinWidget, pWidget, TQStyle::SC_SpinWidgetEditField );
|
|
+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
+ bReturn = TRUE;
|
|
+ break;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ // Metrics of the scroll bar
|
|
+ case CTRL_SCROLLBAR:
|
|
+ pWidget = pWidgetPainter->scrollBar( rControlRegion,
|
|
+ ( nPart == PART_BUTTON_LEFT || nPart == PART_BUTTON_RIGHT ),
|
|
+ ImplControlValue() );
|
|
+ switch ( nPart )
|
|
+ {
|
|
+ case PART_BUTTON_LEFT:
|
|
+ case PART_BUTTON_UP:
|
|
+ qRect = kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarSubLine );
|
|
+
|
|
+ // Workaround for Platinum style scroll bars. It makes the
|
|
+ // left/up button invisible.
|
|
+ if ( nPart == PART_BUTTON_LEFT )
|
|
+ {
|
|
+ if ( qRect.left() > kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pWidget,
|
|
+ TQStyle::SC_ScrollBarSubPage ).left() )
|
|
+ {
|
|
+ qRect.setLeft( 0 );
|
|
+ qRect.setRight( 0 );
|
|
+ }
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ if ( qRect.top() > kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pWidget,
|
|
+ TQStyle::SC_ScrollBarSubPage ).top() )
|
|
+ {
|
|
+ qRect.setTop( 0 );
|
|
+ qRect.setBottom( 0 );
|
|
+ }
|
|
+ }
|
|
+
|
|
+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
+
|
|
+ bReturn = TRUE;
|
|
+ break;
|
|
+
|
|
+ case PART_BUTTON_RIGHT:
|
|
+ case PART_BUTTON_DOWN:
|
|
+ qRect = kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pWidget, TQStyle::SC_ScrollBarAddLine );
|
|
+
|
|
+ // Workaround for Platinum and 3 button style scroll bars.
|
|
+ // It makes the right/down button bigger.
|
|
+ if ( nPart == PART_BUTTON_RIGHT )
|
|
+ qRect.setLeft( kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pWidget,
|
|
+ TQStyle::SC_ScrollBarAddPage ).right() + 1 );
|
|
+ else
|
|
+ qRect.setTop( kapp->style().querySubControlMetrics(
|
|
+ TQStyle::CC_ScrollBar, pWidget,
|
|
+ TQStyle::SC_ScrollBarAddPage ).bottom() + 1 );
|
|
+
|
|
+ qRect.moveBy( qBoundingRect.left(), qBoundingRect.top() );
|
|
+
|
|
+ bReturn = TRUE;
|
|
+ break;
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ // Fill rNativeBoundingRegion and rNativeContentRegion
|
|
+ if ( bReturn )
|
|
+ {
|
|
+ // Bounding region
|
|
+ Point aBPoint( qBoundingRect.x(), qBoundingRect.y() );
|
|
+ Size aBSize( qBoundingRect.width(), qBoundingRect.height() );
|
|
+ rNativeBoundingRegion = Rectangle( aBPoint, aBSize );
|
|
+
|
|
+ // Region of the content
|
|
+ Point aPoint( qRect.x(), qRect.y() );
|
|
+ Size aSize( qRect.width(), qRect.height() );
|
|
+ rNativeContentRegion = Rectangle( aPoint, aSize );
|
|
+ }
|
|
+
|
|
+ return bReturn;
|
|
+}
|
|
+
|
|
+// -----------------------------------------------------------------------
|
|
+// TDESalFrame implementation
|
|
+// -----------------------------------------------------------------------
|
|
+
|
|
+TDESalFrame::TDESalFrame( SalFrame* pParent, sal_uLong nStyle ) :
|
|
+ X11SalFrame( pParent, nStyle )
|
|
+{
|
|
+}
|
|
+
|
|
+void TDESalFrame::Show( sal_Bool bVisible, sal_Bool bNoActivate )
|
|
+{
|
|
+ if ( !GetParent() && ! (GetStyle() & SAL_FRAME_STYLE_INTRO) )
|
|
+ {
|
|
+ TDEXLib* pXLib = static_cast<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 KConfig configuration repository.
|
|
+*/
|
|
+static OUString readEntryUntranslated( KConfig *pConfig, const char *pKey )
|
|
+{
|
|
+ return OUString::createFromAscii( pConfig->readEntryUntranslated( pKey ).ascii() );
|
|
+}
|
|
+
|
|
+/** Helper function to read color from KConfig configuration repository.
|
|
+*/
|
|
+static Color readColor( KConfig *pConfig, const char *pKey )
|
|
+{
|
|
+ return toColor( pConfig->readColorEntry( pKey ) );
|
|
+}
|
|
+
|
|
+/** Helper function to add information to Font from TQFont.
|
|
+
|
|
+ Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx).
|
|
+*/
|
|
+static Font toFont( const TQFont &rTQFont, const ::com::sun::star::lang::Locale& rLocale )
|
|
+{
|
|
+ psp::FastPrintFontInfo aInfo;
|
|
+ TQFontInfo qFontInfo( rTQFont );
|
|
+
|
|
+ // set family name
|
|
+ aInfo.m_aFamilyName = String( rTQFont.family().utf8(), RTL_TEXTENCODING_UTF8 );
|
|
+
|
|
+ // set italic
|
|
+ aInfo.m_eItalic = ( qFontInfo.italic()? ITALIC_NORMAL: ITALIC_NONE );
|
|
+
|
|
+ // set weight
|
|
+ int nWeight = qFontInfo.weight();
|
|
+ if ( nWeight <= TQFont::Light )
|
|
+ aInfo.m_eWeight = WEIGHT_LIGHT;
|
|
+ else if ( nWeight <= TQFont::Normal )
|
|
+ aInfo.m_eWeight = WEIGHT_NORMAL;
|
|
+ else if ( nWeight <= TQFont::DemiBold )
|
|
+ aInfo.m_eWeight = WEIGHT_SEMIBOLD;
|
|
+ else if ( nWeight <= TQFont::Bold )
|
|
+ aInfo.m_eWeight = WEIGHT_BOLD;
|
|
+ else
|
|
+ aInfo.m_eWeight = WEIGHT_ULTRABOLD;
|
|
+
|
|
+ // set width
|
|
+ int nStretch = rTQFont.stretch();
|
|
+ if ( nStretch <= TQFont::UltraCondensed )
|
|
+ aInfo.m_eWidth = WIDTH_ULTRA_CONDENSED;
|
|
+ else if ( nStretch <= TQFont::ExtraCondensed )
|
|
+ aInfo.m_eWidth = WIDTH_EXTRA_CONDENSED;
|
|
+ else if ( nStretch <= TQFont::Condensed )
|
|
+ aInfo.m_eWidth = WIDTH_CONDENSED;
|
|
+ else if ( nStretch <= TQFont::SemiCondensed )
|
|
+ aInfo.m_eWidth = WIDTH_SEMI_CONDENSED;
|
|
+ else if ( nStretch <= TQFont::Unstretched )
|
|
+ aInfo.m_eWidth = WIDTH_NORMAL;
|
|
+ else if ( nStretch <= TQFont::SemiExpanded )
|
|
+ aInfo.m_eWidth = WIDTH_SEMI_EXPANDED;
|
|
+ else if ( nStretch <= TQFont::Expanded )
|
|
+ aInfo.m_eWidth = WIDTH_EXPANDED;
|
|
+ else if ( nStretch <= TQFont::ExtraExpanded )
|
|
+ aInfo.m_eWidth = WIDTH_EXTRA_EXPANDED;
|
|
+ else
|
|
+ aInfo.m_eWidth = WIDTH_ULTRA_EXPANDED;
|
|
+
|
|
+#if OSL_DEBUG_LEVEL > 1
|
|
+ fprintf( stderr, "font name BEFORE system match: \"%s\"\n", OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
|
|
+#endif
|
|
+
|
|
+ // match font to e.g. resolve "Sans"
|
|
+ psp::PrintFontManager::get().matchFont( aInfo, rLocale );
|
|
+
|
|
+#if OSL_DEBUG_LEVEL > 1
|
|
+ fprintf( stderr, "font match %s, name AFTER: \"%s\"\n",
|
|
+ aInfo.m_nID != 0 ? "succeeded" : "failed",
|
|
+ OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
|
|
+#endif
|
|
+
|
|
+ // font height
|
|
+ int nPointHeight = qFontInfo.pointSize();
|
|
+ if ( nPointHeight <= 0 )
|
|
+ nPointHeight = rTQFont.pointSize();
|
|
+
|
|
+ // Create the font
|
|
+ Font aFont( aInfo.m_aFamilyName, Size( 0, nPointHeight ) );
|
|
+ if( aInfo.m_eWeight != WEIGHT_DONTKNOW )
|
|
+ aFont.SetWeight( aInfo.m_eWeight );
|
|
+ if( aInfo.m_eWidth != WIDTH_DONTKNOW )
|
|
+ aFont.SetWidthType( aInfo.m_eWidth );
|
|
+ if( aInfo.m_eItalic != ITALIC_DONTKNOW )
|
|
+ aFont.SetItalic( aInfo.m_eItalic );
|
|
+ if( aInfo.m_ePitch != PITCH_DONTKNOW )
|
|
+ aFont.SetPitch( aInfo.m_ePitch );
|
|
+
|
|
+ return aFont;
|
|
+}
|
|
+
|
|
+/** Implementation of TDE integration's main method.
|
|
+*/
|
|
+void TDESalFrame::UpdateSettings( AllSettings& rSettings )
|
|
+{
|
|
+ StyleSettings aStyleSettings( rSettings.GetStyleSettings() );
|
|
+ bool bSetTitleFont = false;
|
|
+
|
|
+ aStyleSettings.SetToolbarIconSize( STYLE_TOOLBAR_ICONSIZE_LARGE );
|
|
+
|
|
+ // WM settings
|
|
+ KConfig *pConfig = KGlobal::config();
|
|
+ if ( pConfig )
|
|
+ {
|
|
+ pConfig->setGroup( "WM" );
|
|
+ const char *pKey;
|
|
+
|
|
+ pKey = "activeBackground";
|
|
+ if ( pConfig->hasKey( pKey ) )
|
|
+ aStyleSettings.SetActiveColor( readColor( pConfig, pKey ) );
|
|
+
|
|
+ pKey = "activeBlend";
|
|
+ if ( pConfig->hasKey( pKey ) )
|
|
+ aStyleSettings.SetActiveColor2( readColor( pConfig, pKey ) );
|
|
+
|
|
+ pKey = "inactiveBackground";
|
|
+ if ( pConfig->hasKey( pKey ) )
|
|
+ aStyleSettings.SetDeactiveColor( readColor( pConfig, pKey ) );
|
|
+
|
|
+ pKey = "inactiveBlend";
|
|
+ if ( pConfig->hasKey( pKey ) )
|
|
+ aStyleSettings.SetDeactiveColor2( readColor( pConfig, pKey ) );
|
|
+
|
|
+ pKey = "inactiveForeground";
|
|
+ if ( pConfig->hasKey( pKey ) )
|
|
+ aStyleSettings.SetDeactiveTextColor( readColor( pConfig, pKey ) );
|
|
+
|
|
+ pKey = "activeForeground";
|
|
+ if ( pConfig->hasKey( pKey ) )
|
|
+ aStyleSettings.SetActiveTextColor( readColor( pConfig, pKey ) );
|
|
+
|
|
+ pKey = "titleFont";
|
|
+ if ( pConfig->hasKey( pKey ) )
|
|
+ {
|
|
+ Font aFont = toFont( pConfig->readFontEntry( pKey ), rSettings.GetUILocale() );
|
|
+ aStyleSettings.SetTitleFont( aFont );
|
|
+ bSetTitleFont = true;
|
|
+ }
|
|
+
|
|
+ pConfig->setGroup( "Icons" );
|
|
+
|
|
+ pKey = "Theme";
|
|
+ if ( pConfig->hasKey( pKey ) )
|
|
+ aStyleSettings.SetPreferredSymbolsStyleName( readEntryUntranslated( pConfig, pKey ) );
|
|
+ }
|
|
+
|
|
+ // General settings
|
|
+ TQColorGroup qColorGroup = kapp->palette().active();
|
|
+
|
|
+ Color aFore = toColor( qColorGroup.foreground() );
|
|
+ Color aBack = toColor( qColorGroup.background() );
|
|
+ Color aText = toColor( qColorGroup.text() );
|
|
+ Color aBase = toColor( qColorGroup.base() );
|
|
+
|
|
+ // Foreground
|
|
+ aStyleSettings.SetRadioCheckTextColor( aFore );
|
|
+ aStyleSettings.SetLabelTextColor( aFore );
|
|
+ aStyleSettings.SetInfoTextColor( aFore );
|
|
+ aStyleSettings.SetDialogTextColor( aFore );
|
|
+ aStyleSettings.SetGroupTextColor( aFore );
|
|
+
|
|
+ // Text
|
|
+ aStyleSettings.SetFieldTextColor( aText );
|
|
+ aStyleSettings.SetFieldRolloverTextColor( aText );
|
|
+ aStyleSettings.SetWindowTextColor( aText );
|
|
+ aStyleSettings.SetHelpTextColor( aText );
|
|
+
|
|
+ // Base
|
|
+ aStyleSettings.SetFieldColor( aBase );
|
|
+ aStyleSettings.SetHelpColor( aBase );
|
|
+ aStyleSettings.SetWindowColor( aBase );
|
|
+ aStyleSettings.SetActiveTabColor( aBase );
|
|
+
|
|
+ // Buttons
|
|
+ aStyleSettings.SetButtonTextColor( toColor( qColorGroup.buttonText() ) );
|
|
+ aStyleSettings.SetButtonRolloverTextColor( toColor( qColorGroup.buttonText() ) );
|
|
+
|
|
+ // Disable color
|
|
+ aStyleSettings.SetDisableColor( toColor( qColorGroup.mid() ) );
|
|
+
|
|
+ // Workspace
|
|
+ aStyleSettings.SetWorkspaceColor( toColor( qColorGroup.mid() ) );
|
|
+
|
|
+ // Background
|
|
+ aStyleSettings.Set3DColors( aBack );
|
|
+ aStyleSettings.SetFaceColor( aBack );
|
|
+ aStyleSettings.SetInactiveTabColor( aBack );
|
|
+ aStyleSettings.SetDialogColor( aBack );
|
|
+ if( aBack == COL_LIGHTGRAY )
|
|
+ aStyleSettings.SetCheckedColor( Color( 0xCC, 0xCC, 0xCC ) );
|
|
+ else
|
|
+ {
|
|
+ Color aColor2 = aStyleSettings.GetLightColor();
|
|
+ aStyleSettings.
|
|
+ SetCheckedColor( Color( (BYTE)(((USHORT)aBack.GetRed()+(USHORT)aColor2.GetRed())/2),
|
|
+ (BYTE)(((USHORT)aBack.GetGreen()+(USHORT)aColor2.GetGreen())/2),
|
|
+ (BYTE)(((USHORT)aBack.GetBlue()+(USHORT)aColor2.GetBlue())/2)
|
|
+ ) );
|
|
+ }
|
|
+
|
|
+ // Selection
|
|
+ aStyleSettings.SetHighlightColor( toColor( qColorGroup.highlight() ) );
|
|
+ aStyleSettings.SetHighlightTextColor( toColor( qColorGroup.highlightedText() ) );
|
|
+
|
|
+ // Font
|
|
+ Font aFont = toFont( kapp->font(), rSettings.GetUILocale() );
|
|
+
|
|
+ aStyleSettings.SetAppFont( aFont );
|
|
+ aStyleSettings.SetHelpFont( aFont );
|
|
+ aStyleSettings.SetMenuFont( aFont ); // will be changed according to pMenuBar
|
|
+ aStyleSettings.SetToolFont( aFont ); // will be changed according to pToolBar
|
|
+ aStyleSettings.SetLabelFont( aFont );
|
|
+ aStyleSettings.SetInfoFont( aFont );
|
|
+ aStyleSettings.SetRadioCheckFont( aFont );
|
|
+ aStyleSettings.SetPushButtonFont( aFont );
|
|
+ aStyleSettings.SetFieldFont( aFont );
|
|
+ aStyleSettings.SetIconFont( aFont );
|
|
+ aStyleSettings.SetGroupFont( aFont );
|
|
+
|
|
+ aFont.SetWeight( WEIGHT_BOLD );
|
|
+ if( !bSetTitleFont )
|
|
+ aStyleSettings.SetTitleFont( aFont );
|
|
+ aStyleSettings.SetFloatTitleFont( aFont );
|
|
+
|
|
+ int flash_time = TQApplication::cursorFlashTime();
|
|
+ aStyleSettings.SetCursorBlinkTime( flash_time != 0 ? flash_time/2 : STYLE_CURSOR_NOBLINKTIME );
|
|
+
|
|
+ KMainWindow qMainWindow;
|
|
+ qMainWindow.createGUI( "/dev/null" ); // hack
|
|
+
|
|
+ // Menu
|
|
+ aStyleSettings.SetSkipDisabledInMenus( TRUE );
|
|
+ KMenuBar *pMenuBar = qMainWindow.menuBar();
|
|
+ if ( pMenuBar )
|
|
+ {
|
|
+ // Color
|
|
+ TQColorGroup qMenuCG = pMenuBar->colorGroup();
|
|
+
|
|
+ // Menu text and background color, theme specific
|
|
+ Color aMenuFore = toColor( qMenuCG.foreground() );
|
|
+ Color aMenuBack = toColor( qMenuCG.background() );
|
|
+ if ( kapp->style().inherits( "LightStyleV2" ) ||
|
|
+ kapp->style().inherits( "LightStyleV3" ) ||
|
|
+ ( kapp->style().inherits( "QMotifStyle" ) && !kapp->style().inherits( "QSGIStyle" ) ) ||
|
|
+ kapp->style().inherits( "QWindowsStyle" ) )
|
|
+ {
|
|
+ aMenuFore = toColor( qMenuCG.buttonText() );
|
|
+ aMenuBack = toColor( qMenuCG.button() );
|
|
+ }
|
|
+
|
|
+ aStyleSettings.SetMenuTextColor( aMenuFore );
|
|
+ aStyleSettings.SetMenuBarTextColor( aMenuFore );
|
|
+ aStyleSettings.SetMenuColor( aMenuBack );
|
|
+ aStyleSettings.SetMenuBarColor( aMenuBack );
|
|
+
|
|
+ aStyleSettings.SetMenuHighlightColor( toColor ( qMenuCG.highlight() ) );
|
|
+
|
|
+ // Menu items higlight text color, theme specific
|
|
+ if ( kapp->style().inherits( "HighContrastStyle" ) ||
|
|
+ kapp->style().inherits( "KeramikStyle" ) ||
|
|
+ kapp->style().inherits( "QWindowsStyle" ) ||
|
|
+ kapp->style().inherits( "ThinKeramikStyle" ) ||
|
|
+ kapp->style().inherits( "PlastikStyle" ) )
|
|
+ {
|
|
+ aStyleSettings.SetMenuHighlightTextColor( toColor ( qMenuCG.highlightedText() ) );
|
|
+ }
|
|
+ else
|
|
+ aStyleSettings.SetMenuHighlightTextColor( aMenuFore );
|
|
+
|
|
+ // set special menubar higlight text color
|
|
+ if ( kapp->style().inherits( "HighContrastStyle" ) )
|
|
+ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = toColor( qMenuCG.highlightedText() );
|
|
+ else
|
|
+ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = aMenuFore;
|
|
+
|
|
+ // Font
|
|
+ aFont = toFont( pMenuBar->font(), rSettings.GetUILocale() );
|
|
+ aStyleSettings.SetMenuFont( aFont );
|
|
+ }
|
|
+
|
|
+ // Tool bar
|
|
+ KToolBar *pToolBar = qMainWindow.toolBar();
|
|
+ if ( pToolBar )
|
|
+ {
|
|
+ aFont = toFont( pToolBar->font(), rSettings.GetUILocale() );
|
|
+ aStyleSettings.SetToolFont( aFont );
|
|
+ }
|
|
+
|
|
+ // Scroll bar size
|
|
+ aStyleSettings.SetScrollBarSize( kapp->style().pixelMetric( TQStyle::PM_ScrollBarExtent ) );
|
|
+
|
|
+ rSettings.SetStyleSettings( aStyleSettings );
|
|
+}
|
|
+
|
|
+SalGraphics* TDESalFrame::GetGraphics()
|
|
+{
|
|
+ if( GetWindow() )
|
|
+ {
|
|
+ for( int i = 0; i < nMaxGraphics; i++ )
|
|
+ {
|
|
+ if( ! m_aGraphics[i].bInUse )
|
|
+ {
|
|
+ m_aGraphics[i].bInUse = true;
|
|
+ if( ! m_aGraphics[i].pGraphics )
|
|
+ {
|
|
+ m_aGraphics[i].pGraphics = new TDESalGraphics();
|
|
+ m_aGraphics[i].pGraphics->Init( this, GetWindow(), GetScreenNumber() );
|
|
+ }
|
|
+ return m_aGraphics[i].pGraphics;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+void TDESalFrame::ReleaseGraphics( SalGraphics *pGraphics )
|
|
+{
|
|
+ for( int i = 0; i < nMaxGraphics; i++ )
|
|
+ {
|
|
+ if( m_aGraphics[i].pGraphics == pGraphics )
|
|
+ {
|
|
+ m_aGraphics[i].bInUse = false;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+void TDESalFrame::updateGraphics( bool bClear )
|
|
+{
|
|
+ Drawable aDrawable = bClear ? None : GetWindow();
|
|
+ for( int i = 0; i < nMaxGraphics; i++ )
|
|
+ {
|
|
+ if( m_aGraphics[i].bInUse )
|
|
+ m_aGraphics[i].pGraphics->SetDrawable( aDrawable, GetScreenNumber() );
|
|
+ }
|
|
+}
|
|
+
|
|
+TDESalFrame::~TDESalFrame()
|
|
+{
|
|
+}
|
|
+
|
|
+TDESalFrame::GraphicsHolder::~GraphicsHolder()
|
|
+{
|
|
+ delete pGraphics;
|
|
+}
|
|
+
|
|
+// -----------------------------------------------------------------------
|
|
+// TDESalInstance implementation
|
|
+// -----------------------------------------------------------------------
|
|
+
|
|
+SalFrame *
|
|
+TDESalInstance::CreateFrame( SalFrame *pParent, sal_uLong nStyle )
|
|
+{
|
|
+ return new TDESalFrame( pParent, nStyle );
|
|
+}
|
|
+
|
|
+// -----------------------------------------------------------------------
|
|
+// TDESalData pieces
|
|
+// -----------------------------------------------------------------------
|
|
+
|
|
+// Create the widget painter so we have some control over
|
|
+// the destruction sequence, so Qt doesn't die in action.
|
|
+
|
|
+void TDEData::initNWF()
|
|
+{
|
|
+ ImplSVData *pSVData = ImplGetSVData();
|
|
+ // draw toolbars on separate lines
|
|
+ pSVData->maNWFData.mbDockingAreaSeparateTB = true;
|
|
+
|
|
+ pWidgetPainter = new WidgetPainter();
|
|
+}
|
|
+
|
|
+void TDEData::deInitNWF()
|
|
+{
|
|
+ delete pWidgetPainter;
|
|
+ pWidgetPainter = NULL;
|
|
+
|
|
+ // We have to destroy the style early
|
|
+ kapp->setStyle( NULL );
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
diff --git a/vcl/unx/tde/tdedata.cxx b/vcl/unx/tde/tdedata.cxx
|
|
new file mode 100644
|
|
index 0000000..adeb628
|
|
--- /dev/null
|
|
+++ b/vcl/unx/tde/tdedata.cxx
|
|
@@ -0,0 +1,267 @@
|
|
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
+/*************************************************************************
|
|
+ *
|
|
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+ *
|
|
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+ * Copyright 2011 Timothy Pearson
|
|
+ *
|
|
+ * OpenOffice.org - a multi-platform office productivity suite
|
|
+ *
|
|
+ * This file is part of OpenOffice.org.
|
|
+ *
|
|
+ * OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Lesser General Public License version 3
|
|
+ * only, as published by the Free Software Foundation.
|
|
+ *
|
|
+ * OpenOffice.org is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU Lesser General Public License version 3 for more details
|
|
+ * (a copy is included in the LICENSE file that accompanied this code).
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public License
|
|
+ * version 3 along with OpenOffice.org. If not, see
|
|
+ * <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 <unx/tde/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 <osl/thread.h>
|
|
+#include <osl/process.h>
|
|
+#include <osl/module.h>
|
|
+#include <osl/mutex.hxx>
|
|
+
|
|
+#include <tools/debug.hxx>
|
|
+
|
|
+#include "unx/tde/tdedata.hxx"
|
|
+#include "unx/i18n_im.hxx"
|
|
+#include "unx/i18n_xkb.hxx"
|
|
+
|
|
+#include "vclpluginapi.h"
|
|
+
|
|
+/* #i59042# override KApplications method for session management
|
|
+ * since it will interfere badly with our own.
|
|
+ */
|
|
+class VCLTDEApplication : public KApplication
|
|
+{
|
|
+ public:
|
|
+ VCLTDEApplication() : KApplication() {}
|
|
+
|
|
+ virtual void commitData(QSessionManager &sm);
|
|
+};
|
|
+
|
|
+void VCLTDEApplication::commitData(QSessionManager&)
|
|
+{
|
|
+}
|
|
+
|
|
+/***************************************************************************
|
|
+ * class SalTDEDisplay *
|
|
+ ***************************************************************************/
|
|
+
|
|
+SalTDEDisplay::SalTDEDisplay( Display* pDisp )
|
|
+ : SalX11Display( pDisp )
|
|
+{
|
|
+}
|
|
+
|
|
+SalTDEDisplay::~SalTDEDisplay()
|
|
+{
|
|
+ // in case never a frame opened
|
|
+ static_cast<TDEXLib*>(GetXLib())->doStartup();
|
|
+ // clean up own members
|
|
+ doDestruct();
|
|
+ // prevent SalDisplay from closing KApplication's display
|
|
+ pDisp_ = NULL;
|
|
+}
|
|
+
|
|
+/***************************************************************************
|
|
+ * class TDEXLib *
|
|
+ ***************************************************************************/
|
|
+
|
|
+TDEXLib::~TDEXLib()
|
|
+{
|
|
+ // on 64 bit linux using libXRandr.so.2 will crash in
|
|
+ // XCloseDisplay when freeing extension data
|
|
+ // no known work around, therefor currently leak. Hopefully
|
|
+ // this does not make problems since we're shutting down anyway
|
|
+ // should we ever get a real tde plugin that uses the TDE event loop
|
|
+ // we should use tde's method to signal screen changes similar
|
|
+ // to the gtk plugin
|
|
+ #if ! defined USE_RANDR || ! (defined LINUX && defined X86_64)
|
|
+ // properly deinitialize KApplication
|
|
+ delete (VCLTDEApplication*)m_pApplication;
|
|
+ #endif
|
|
+ // free the faked cmdline arguments no longer needed by KApplication
|
|
+ for( int i = 0; i < m_nFakeCmdLineArgs; i++ )
|
|
+ free( m_pFreeCmdLineArgs[i] );
|
|
+ delete [] m_pFreeCmdLineArgs;
|
|
+ delete [] m_pAppCmdLineArgs;
|
|
+}
|
|
+
|
|
+void TDEXLib::Init()
|
|
+{
|
|
+ SalI18N_InputMethod* pInputMethod = new SalI18N_InputMethod;
|
|
+ pInputMethod->SetLocale();
|
|
+ XrmInitialize();
|
|
+
|
|
+ KAboutData *kAboutData = new KAboutData( "LibreOffice",
|
|
+ I18N_NOOP( "LibreOffice" ),
|
|
+ "1.1.0",
|
|
+ I18N_NOOP( "LibreOffice with TDE Native Widget Support." ),
|
|
+ KAboutData::License_LGPL,
|
|
+ "(c) 2003, 2004 Novell, Inc\n(c) 2010 Timothy Pearson",
|
|
+ I18N_NOOP( "LibreOffice is an office suite.\n" ),
|
|
+ "http://libreoffice.org",
|
|
+ "libreoffice@lists.freedesktop.org");
|
|
+ kAboutData->addAuthor( "Jan Holesovsky",
|
|
+ I18N_NOOP( "Original author and maintainer of the TDE NWF." ),
|
|
+ "kendy@artax.karlin.mff.cuni.cz",
|
|
+ "http://artax.karlin.mff.cuni.cz/~kendy" );
|
|
+
|
|
+ m_nFakeCmdLineArgs = 1;
|
|
+ sal_uInt16 nIdx;
|
|
+ int nParams = osl_getCommandArgCount();
|
|
+ rtl::OString aDisplay;
|
|
+ rtl::OUString aParam, aBin;
|
|
+
|
|
+ for ( nIdx = 0; nIdx < nParams; ++nIdx )
|
|
+ {
|
|
+ osl_getCommandArg( nIdx, &aParam.pData );
|
|
+ if ( !m_pFreeCmdLineArgs && aParam.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-display" ) ) && nIdx + 1 < nParams )
|
|
+ {
|
|
+ osl_getCommandArg( nIdx + 1, &aParam.pData );
|
|
+ aDisplay = rtl::OUStringToOString( aParam, osl_getThreadTextEncoding() );
|
|
+
|
|
+ m_nFakeCmdLineArgs = 3;
|
|
+ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
|
|
+ m_pFreeCmdLineArgs[ 1 ] = strdup( "-display" );
|
|
+ m_pFreeCmdLineArgs[ 2 ] = strdup( aDisplay.getStr() );
|
|
+ }
|
|
+ }
|
|
+ if ( !m_pFreeCmdLineArgs )
|
|
+ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
|
|
+
|
|
+ osl_getExecutableFile( &aParam.pData );
|
|
+ osl_getSystemPathFromFileURL( aParam.pData, &aBin.pData );
|
|
+ rtl::OString aExec = rtl::OUStringToOString( aBin, osl_getThreadTextEncoding() );
|
|
+ m_pFreeCmdLineArgs[0] = strdup( aExec.getStr() );
|
|
+
|
|
+ // make a copy of the string list for freeing it since
|
|
+ // KApplication manipulates the pointers inside the argument vector
|
|
+ // note: KApplication bad !
|
|
+ m_pAppCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
|
|
+ for( int i = 0; i < m_nFakeCmdLineArgs; i++ )
|
|
+ m_pAppCmdLineArgs[i] = m_pFreeCmdLineArgs[i];
|
|
+
|
|
+ KCmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData );
|
|
+
|
|
+ KApplication::disableAutoDcopRegistration();
|
|
+ m_pApplication = new VCLTDEApplication();
|
|
+ kapp->disableSessionManagement();
|
|
+
|
|
+ Display* pDisp = QPaintDevice::x11AppDisplay();
|
|
+
|
|
+ SalX11Display *pSalDisplay = new SalTDEDisplay( pDisp );
|
|
+
|
|
+ pInputMethod->CreateMethod( pDisp );
|
|
+ pSalDisplay->SetupInput( pInputMethod );
|
|
+}
|
|
+
|
|
+void TDEXLib::doStartup()
|
|
+{
|
|
+ if( ! m_bStartupDone )
|
|
+ {
|
|
+ KStartupInfo::appStarted();
|
|
+ m_bStartupDone = true;
|
|
+ #if OSL_DEBUG_LEVEL > 1
|
|
+ fprintf( stderr, "called KStartupInfo::appStarted()\n" );
|
|
+ #endif
|
|
+ }
|
|
+}
|
|
+
|
|
+/**********************************************************************
|
|
+ * class TDEData *
|
|
+ **********************************************************************/
|
|
+
|
|
+TDEData::~TDEData()
|
|
+{
|
|
+}
|
|
+
|
|
+void TDEData::Init()
|
|
+{
|
|
+ pXLib_ = new TDEXLib();
|
|
+ pXLib_->Init();
|
|
+}
|
|
+
|
|
+/**********************************************************************
|
|
+ * plugin entry point *
|
|
+ **********************************************************************/
|
|
+
|
|
+extern "C" {
|
|
+ VCLPLUG_TDE_PUBLIC SalInstance* create_SalInstance( oslModule )
|
|
+ {
|
|
+ /* #i92121# workaround deadlocks in the X11 implementation
|
|
+ */
|
|
+ static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" );
|
|
+ /* #i90094#
|
|
+ from now on we know that an X connection will be
|
|
+ established, so protect X against itself
|
|
+ */
|
|
+ if( ! ( pNoXInitThreads && *pNoXInitThreads ) )
|
|
+ XInitThreads();
|
|
+
|
|
+ rtl::OString aVersion( qVersion() );
|
|
+#if OSL_DEBUG_LEVEL > 1
|
|
+ fprintf( stderr, "qt version string is \"%s\"\n", aVersion.getStr() );
|
|
+#endif
|
|
+ sal_Int32 nIndex = 0, nMajor = 0, nMinor = 0, nMicro = 0;
|
|
+ nMajor = aVersion.getToken( 0, '.', nIndex ).toInt32();
|
|
+ if( nIndex > 0 )
|
|
+ nMinor = aVersion.getToken( 0, '.', nIndex ).toInt32();
|
|
+ if( nIndex > 0 )
|
|
+ nMicro = aVersion.getToken( 0, '.', nIndex ).toInt32();
|
|
+ if( nMajor != 3 || nMinor < 2 || (nMinor == 2 && nMicro < 2) )
|
|
+ {
|
|
+#if OSL_DEBUG_LEVEL > 1
|
|
+ fprintf( stderr, "unsuitable qt version %d.%d.%d\n", (int)nMajor, (int)nMinor, (int)nMicro );
|
|
+#endif
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ TDESalInstance* pInstance = new TDESalInstance( new SalYieldMutex() );
|
|
+#if OSL_DEBUG_LEVEL > 1
|
|
+ fprintf( stderr, "created TDESalInstance 0x%p\n", pInstance );
|
|
+#endif
|
|
+
|
|
+ // initialize SalData
|
|
+ TDEData *pSalData = new TDEData( pInstance );
|
|
+ pSalData->Init();
|
|
+ pInstance->SetLib( pSalData->GetLib() );
|
|
+ pSalData->initNWF();
|
|
+
|
|
+ return pInstance;
|
|
+ }
|
|
+}
|
|
+
|
|
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|