diff options
Diffstat (limited to 'dbaccess/source/ui/misc/TokenWriter.cxx')
-rw-r--r-- | dbaccess/source/ui/misc/TokenWriter.cxx | 1161 |
1 files changed, 1161 insertions, 0 deletions
diff --git a/dbaccess/source/ui/misc/TokenWriter.cxx b/dbaccess/source/ui/misc/TokenWriter.cxx new file mode 100644 index 000000000000..b66778138d57 --- /dev/null +++ b/dbaccess/source/ui/misc/TokenWriter.cxx @@ -0,0 +1,1161 @@ +/************************************************************************* + * + * 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_dbaccess.hxx" +#include "TokenWriter.hxx" +#include <tools/debug.hxx> +#include <tools/diagnose_ex.h> +#include "RtfReader.hxx" +#include "HtmlReader.hxx" +#include "dbustrings.hrc" +#include <connectivity/dbtools.hxx> +#include <comphelper/types.hxx> +#include <com/sun/star/sdbc/XConnection.hpp> +#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> +#include <com/sun/star/sdbc/XRowSet.hpp> +#include <com/sun/star/sdbcx/XTablesSupplier.hpp> +#include <com/sun/star/sdb/XQueriesSupplier.hpp> +#include <com/sun/star/sdbc/XDataSource.hpp> +#include <com/sun/star/awt/FontWeight.hpp> +#include <com/sun/star/awt/FontStrikeout.hpp> +#include <com/sun/star/awt/FontSlant.hpp> +#include <com/sun/star/awt/FontUnderline.hpp> +#include <com/sun/star/document/XDocumentProperties.hpp> +#include <svtools/htmlkywd.hxx> +#include <svtools/rtfkeywd.hxx> +#include <tools/color.hxx> +#include <svtools/htmlout.hxx> +#include <sfx2/frmhtmlw.hxx> +#include <svl/numuno.hxx> +#include <vcl/svapp.hxx> +#include "UITools.hxx" +#include <toolkit/helper/vclunohelper.hxx> +#include <vcl/outdev.hxx> +#include <svtools/rtfout.hxx> +#include <svtools/htmlcfg.hxx> +#include <connectivity/formattedcolumnvalue.hxx> +#include <unotools/syslocale.hxx> +#include <comphelper/componentcontext.hxx> +#include <rtl/logfile.hxx> + +using namespace dbaui; +using namespace dbtools; +using namespace svx; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::container; +using namespace ::com::sun::star::sdbc; +using namespace ::com::sun::star::sdb; +using namespace ::com::sun::star::frame; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::sdbcx; +using namespace ::com::sun::star::awt; +using namespace ::com::sun::star::util; +using ::com::sun::star::frame::XModel; + +#if defined(UNX) +const char __FAR_DATA ODatabaseImportExport::sNewLine = '\012'; +#else +const char __FAR_DATA ODatabaseImportExport::sNewLine[] = "\015\012"; +#endif + +const static char __FAR_DATA sMyBegComment[] = "<!-- "; +const static char __FAR_DATA sMyEndComment[] = " -->"; +const static char __FAR_DATA sFontFamily[] = "font-family: "; +const static char __FAR_DATA sFontSize[] = "font-size: "; + +#define SBA_FORMAT_SELECTION_COUNT 4 +#define CELL_X 1437 + +DBG_NAME(ODatabaseImportExport) +//====================================================================== +ODatabaseImportExport::ODatabaseImportExport(const ::svx::ODataAccessDescriptor& _aDataDescriptor, + const Reference< XMultiServiceFactory >& _rM, + const Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF, + const String& rExchange) + :m_bBookmarkSelection( sal_False ) + ,m_xFormatter(_rxNumberF) + ,m_xFactory(_rM) + ,m_nCommandType(CommandType::TABLE) + ,m_bNeedToReInitialize(sal_False) + ,m_pReader(NULL) + ,m_pRowMarker(NULL) + ,m_bInInitialize(sal_False) + ,m_bCheckOnly(sal_False) +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ODatabaseImportExport::ODatabaseImportExport" ); + DBG_CTOR(ODatabaseImportExport,NULL); + + m_eDestEnc = osl_getThreadTextEncoding(); + + osl_incrementInterlockedCount( &m_refCount ); + impl_initFromDescriptor( _aDataDescriptor, false ); + + xub_StrLen nCount = rExchange.GetTokenCount(char(11)); + if( nCount > SBA_FORMAT_SELECTION_COUNT && rExchange.GetToken(4).Len()) + { + m_pRowMarker = new sal_Int32[nCount-SBA_FORMAT_SELECTION_COUNT]; + for(xub_StrLen i=SBA_FORMAT_SELECTION_COUNT;i<nCount;++i) + m_pRowMarker[i-SBA_FORMAT_SELECTION_COUNT] = rExchange.GetToken(i,char(11)).ToInt32(); + } + osl_decrementInterlockedCount( &m_refCount ); +} +// ----------------------------------------------------------------------------- +// import data +ODatabaseImportExport::ODatabaseImportExport( const ::dbtools::SharedConnection& _rxConnection, + const Reference< XNumberFormatter >& _rxNumberF, const Reference< XMultiServiceFactory >& _rM ) + :m_bBookmarkSelection( sal_False ) + ,m_xConnection(_rxConnection) + ,m_xFormatter(_rxNumberF) + ,m_xFactory(_rM) + ,m_nCommandType(::com::sun::star::sdb::CommandType::TABLE) + ,m_bNeedToReInitialize(sal_False) + ,m_pReader(NULL) + ,m_pRowMarker(NULL) + ,m_bInInitialize(sal_False) + ,m_bCheckOnly(sal_False) +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ODatabaseImportExport::ODatabaseImportExport" ); + DBG_CTOR(ODatabaseImportExport,NULL); + m_eDestEnc = osl_getThreadTextEncoding(); + try + { + SvtSysLocale aSysLocale; + m_aLocale = aSysLocale.GetLocaleData().getLocale(); + } + catch(Exception&) + { + } +} +//------------------------------------------------------------------- +ODatabaseImportExport::~ODatabaseImportExport() +{ + DBG_DTOR(ODatabaseImportExport,NULL); + acquire(); + + dispose(); + + if(m_pReader) + m_pReader->release(); + delete m_pRowMarker; +} +// ----------------------------------------------------------------------------- +void ODatabaseImportExport::dispose() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ODatabaseImportExport::disposing" ); + DBG_CHKTHIS(ODatabaseImportExport,NULL); + // remove me as listener + Reference< XComponent > xComponent(m_xConnection, UNO_QUERY); + if (xComponent.is()) + { + Reference< XEventListener> xEvt((::cppu::OWeakObject*)this,UNO_QUERY); + xComponent->removeEventListener(xEvt); + } + m_xConnection.clear(); + + ::comphelper::disposeComponent(m_xRow); + + m_xObject.clear(); + m_xResultSetMetaData.clear(); + m_xResultSet.clear(); + m_xRow.clear(); + m_xRowLocate.clear(); + m_xFormatter.clear(); +} +// ----------------------------------------------------------------------------- +void SAL_CALL ODatabaseImportExport::disposing( const EventObject& Source ) throw(::com::sun::star::uno::RuntimeException) +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ODatabaseImportExport::disposing" ); + DBG_CHKTHIS(ODatabaseImportExport,NULL); + Reference<XConnection> xCon(Source.Source,UNO_QUERY); + if(m_xConnection.is() && m_xConnection == xCon) + { + m_xConnection.clear(); + dispose(); + m_bNeedToReInitialize = true; + //if(!m_bInInitialize) + // initialize(); + } +} +// ----------------------------------------------------------------------------- +void ODatabaseImportExport::initialize( const ODataAccessDescriptor& _aDataDescriptor ) +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ODatabaseImportExport::initialize" ); + impl_initFromDescriptor( _aDataDescriptor, true ); +} + +// ----------------------------------------------------------------------------- +void ODatabaseImportExport::impl_initFromDescriptor( const ODataAccessDescriptor& _aDataDescriptor, bool _bPlusDefaultInit) +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ODatabaseImportExport::impl_initFromDescriptor" ); + DBG_CHKTHIS(ODatabaseImportExport,NULL); + if ( !_bPlusDefaultInit ) + { + m_sDataSourceName = _aDataDescriptor.getDataSource(); + _aDataDescriptor[daCommandType] >>= m_nCommandType; + _aDataDescriptor[daCommand] >>= m_sName; + // some additonal information + if(_aDataDescriptor.has(daConnection)) + { + Reference< XConnection > xPureConn( _aDataDescriptor[daConnection], UNO_QUERY ); + m_xConnection.reset( xPureConn, SharedConnection::NoTakeOwnership ); + Reference< XEventListener> xEvt((::cppu::OWeakObject*)this,UNO_QUERY); + Reference< XComponent > xComponent(m_xConnection, UNO_QUERY); + if (xComponent.is() && xEvt.is()) + xComponent->addEventListener(xEvt); + } + + if ( _aDataDescriptor.has( daSelection ) ) + _aDataDescriptor[ daSelection ] >>= m_aSelection; + + if ( _aDataDescriptor.has( daBookmarkSelection ) ) + _aDataDescriptor[ daBookmarkSelection ] >>= m_bBookmarkSelection; + + if ( _aDataDescriptor.has( daCursor ) ) + { + _aDataDescriptor[ daCursor ] >>= m_xResultSet; + m_xRowLocate.set( m_xResultSet, UNO_QUERY ); + } + + if ( m_aSelection.getLength() != 0 ) + { + if ( !m_xResultSet.is() ) + { + OSL_ENSURE( false, "ODatabaseImportExport::impl_initFromDescriptor: selection without result set is nonsense!" ); + m_aSelection.realloc( 0 ); + } + } + + if ( m_aSelection.getLength() != 0 ) + { + if ( m_bBookmarkSelection && !m_xRowLocate.is() ) + { + OSL_ENSURE( false, "ODatabaseImportExport::impl_initFromDescriptor: no XRowLocate -> no bookmars!" ); + m_aSelection.realloc( 0 ); + } + } + } + else + initialize(); + + try + { + SvtSysLocale aSysLocale; + m_aLocale = aSysLocale.GetLocaleData().getLocale(); + } + catch(Exception&) + { + } +} +// ----------------------------------------------------------------------------- +void ODatabaseImportExport::initialize() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ODatabaseImportExport::initialize" ); + DBG_CHKTHIS(ODatabaseImportExport,NULL); + m_bInInitialize = sal_True; + m_bNeedToReInitialize = false; + + if ( !m_xConnection.is() ) + { // we need a connection + OSL_ENSURE(m_sDataSourceName.getLength(),"There must be a datsource name!"); + Reference<XNameAccess> xDatabaseContext = Reference< XNameAccess >(m_xFactory->createInstance(SERVICE_SDB_DATABASECONTEXT), UNO_QUERY); + Reference< XEventListener> xEvt((::cppu::OWeakObject*)this,UNO_QUERY); + + Reference< XConnection > xConnection; + SQLExceptionInfo aInfo = ::dbaui::createConnection( m_sDataSourceName, xDatabaseContext, m_xFactory, xEvt, xConnection ); + m_xConnection.reset( xConnection ); + + if(aInfo.isValid() && aInfo.getType() == SQLExceptionInfo::SQL_EXCEPTION) + throw *static_cast<const SQLException*>(aInfo); + } + + Reference<XNameAccess> xNameAccess; + switch(m_nCommandType) + { + case CommandType::TABLE: + { + // only for tables + Reference<XTablesSupplier> xSup(m_xConnection,UNO_QUERY); + if(xSup.is()) + xNameAccess = xSup->getTables(); + } + break; + case CommandType::QUERY: + { + Reference<XQueriesSupplier> xSup(m_xConnection,UNO_QUERY); + if(xSup.is()) + xNameAccess = xSup->getQueries(); + } + break; + } + if(xNameAccess.is() && xNameAccess->hasByName(m_sName)) + { + Reference<XPropertySet> xSourceObject; + xNameAccess->getByName(m_sName) >>= m_xObject; + } + + if(m_xObject.is()) + { + try + { + if(m_xObject->getPropertySetInfo()->hasPropertyByName(PROPERTY_FONT)) + m_xObject->getPropertyValue(PROPERTY_FONT) >>= m_aFont; + + // the result set may be already set with the datadescriptor + if ( !m_xResultSet.is() ) + { + m_xResultSet.set( m_xFactory->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.sdb.RowSet" ) ), UNO_QUERY ); + Reference< XPropertySet > xProp( m_xResultSet, UNO_QUERY_THROW ); + xProp->setPropertyValue( PROPERTY_ACTIVE_CONNECTION, makeAny( m_xConnection.getTyped() ) ); + xProp->setPropertyValue( PROPERTY_COMMAND_TYPE, makeAny( m_nCommandType ) ); + xProp->setPropertyValue( PROPERTY_COMMAND, makeAny( m_sName ) ); + Reference< XRowSet > xRowSet( xProp, UNO_QUERY ); + xRowSet->execute(); + } + impl_initializeRowMember_throw(); + } + catch(Exception& ) + { + m_xRow = NULL; + m_xResultSetMetaData = NULL; + ::comphelper::disposeComponent(m_xResultSet); + throw; + } + } + if ( !m_aFont.Name.getLength() ) + { + Font aApplicationFont = OutputDevice::GetDefaultFont( + DEFAULTFONT_SANS_UNICODE, + Application::GetSettings().GetUILanguage(), + DEFAULTFONT_FLAGS_ONLYONE + ); + m_aFont = VCLUnoHelper::CreateFontDescriptor( aApplicationFont ); + } + + m_bInInitialize = sal_False; +} +// ----------------------------------------------------------------------------- +BOOL ODatabaseImportExport::Write() +{ + if ( m_bNeedToReInitialize ) + { + if ( !m_bInInitialize ) + initialize(); + } // if ( m_bNeedToReInitialize ) + return TRUE; +} +// ----------------------------------------------------------------------------- +BOOL ODatabaseImportExport::Read() +{ + if ( m_bNeedToReInitialize ) + { + if ( !m_bInInitialize ) + initialize(); + } // if ( m_bNeedToReInitialize ) + return TRUE; +} +// ----------------------------------------------------------------------------- +void ODatabaseImportExport::impl_initializeRowMember_throw() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ODatabaseImportExport::impl_initializeRowMember_throw" ); + if ( !m_xRow.is() && m_xResultSet.is() ) + { + m_xRow.set( m_xResultSet, UNO_QUERY ); + m_xRowLocate.set( m_xResultSet, UNO_QUERY ); + m_xResultSetMetaData = Reference<XResultSetMetaDataSupplier>(m_xRow,UNO_QUERY)->getMetaData(); + Reference<XColumnsSupplier> xSup(m_xResultSet,UNO_QUERY_THROW); + m_xRowSetColumns.set(xSup->getColumns(),UNO_QUERY_THROW); + } +} +//====================================================================== +BOOL ORTFImportExport::Write() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ORTFImportExport::Write" ); + ODatabaseImportExport::Write(); + (*m_pStream) << '{' << OOO_STRING_SVTOOLS_RTF_RTF; + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_ANSI << ODatabaseImportExport::sNewLine; + rtl_TextEncoding eDestEnc = RTL_TEXTENCODING_MS_1252; + + /* + // Access RTF Export Beispiel + {\rtf1\ansi + {\colortbl\red0\green0\blue0;\red255\green255\blue255;\red192\green192\blue192;} + {\fonttbl\f0\fcharset0\fnil MS Sans Serif;\f1\fcharset0\fnil Arial;\f2\fcharset0\fnil Arial;} + \trowd\trgaph40 + \clbrdrl\brdrs\brdrcf0\clbrdrt\brdrs\brdrcf0\clbrdrb\brdrs\brdrcf0\clbrdrr\brdrs\brdrcf0\clshdng10000\clcfpat2\cellx1437 + \clbrdrl\brdrs\brdrcf0\clbrdrt\brdrs\brdrcf0\clbrdrb\brdrs\brdrcf0\clbrdrr\brdrs\brdrcf0\clshdng10000\clcfpat2\cellx2874 + { + \trrh-270\pard\intbl + {\qc\fs20\b\f1\cf0\cb2 text\cell} + \pard\intbl + {\qc\fs20\b\f1\cf0\cb2 datum\cell} + \pard\intbl\row + } + \trowd\trgaph40\clbrdrl\brdrs\brdrcf2\clbrdrt\brdrs\brdrcf2\clbrdrb\brdrs\brdrcf2\clbrdrr\brdrs\brdrcf2\clshdng10000\clcfpat1\cellx1437\clbrdrl\brdrs\brdrcf2\clbrdrt\brdrs\brdrcf2\clbrdrb\brdrs\brdrcf2\clbrdrr\brdrs\brdrcf2\clshdng10000\clcfpat1\cellx2874 + {\trrh-270\pard\intbl + {\ql\fs20\f2\cf0\cb1 heute\cell} + \pard\intbl + {\qr\fs20\f2\cf0\cb1 10.11.98\cell} + \pard\intbl\row + } + \trowd\trgaph40\clbrdrl\brdrs\brdrcf2\clbrdrt\brdrs\brdrcf2\clbrdrb\brdrs\brdrcf2\clbrdrr\brdrs\brdrcf2\clshdng10000\clcfpat1\cellx1437\clbrdrl\brdrs\brdrcf2\clbrdrt\brdrs\brdrcf2\clbrdrb\brdrs\brdrcf2\clbrdrr\brdrs\brdrcf2\clshdng10000\clcfpat1\cellx2874 + {\trrh-270\pard\intbl + {\ql\fs20\f2\cf0\cb1 morgen\cell} + \pard\intbl + {\qr\fs20\f2\cf0\cb1 11.11.98\cell} + \pard\intbl\row + } + \trowd\trgaph40\clbrdrl\brdrs\brdrcf2\clbrdrt\brdrs\brdrcf2\clbrdrb\brdrs\brdrcf2\clbrdrr\brdrs\brdrcf2\clshdng10000\clcfpat1\cellx1437\clbrdrl\brdrs\brdrcf2\clbrdrt\brdrs\brdrcf2\clbrdrb\brdrs\brdrcf2\clbrdrr\brdrs\brdrcf2\clshdng10000\clcfpat1\cellx2874 + {\trrh-270\pard\intbl + {\ql\fs20\f2\cf0\cb1 bruder\cell} + \pard\intbl + {\qr\fs20\f2\cf0\cb1 21.04.98\cell} + \pard\intbl\row + } + \trowd\trgaph40 + \clbrdrl\brdrs\brdrcf2\clbrdrt\brdrs\brdrcf2\clbrdrb\brdrs\brdrcf2\clbrdrr\brdrs\brdrcf2\clshdng10000\clcfpat1\cellx + \clbrdrl\brdrs\brdrcf2\clbrdrt\brdrs\brdrcf2\clbrdrb\brdrs\brdrcf2\clbrdrr\brdrs\brdrcf2\clshdng10000\clcfpat1\cellx2874 + {\trrh-270\pard\intbl + {\ql\fs20\f2\cf0\cb1 vater\cell} + \pard\intbl + {\qr\fs20\f2\cf0\cb1 28.06.98\cell} + \pard\intbl\row + } + } + */ + + BOOL bBold = ( ::com::sun::star::awt::FontWeight::BOLD == m_aFont.Weight ); + BOOL bItalic = ( ::com::sun::star::awt::FontSlant_ITALIC == m_aFont.Slant ); + BOOL bUnderline = ( ::com::sun::star::awt::FontUnderline::NONE != m_aFont.Underline ); + BOOL bStrikeout = ( ::com::sun::star::awt::FontStrikeout::NONE != m_aFont.Strikeout ); + + sal_Int32 nColor = 0; + if(m_xObject.is()) + m_xObject->getPropertyValue(PROPERTY_TEXTCOLOR) >>= nColor; + ::Color aColor(nColor); + + ByteString aFonts(String(m_aFont.Name),eDestEnc); + if(!aFonts.Len()) + { + String aName = Application::GetSettings().GetStyleSettings().GetAppFont().GetName(); + aFonts = ByteString (aName,eDestEnc); + } + ::rtl::OString aFormat("\\fcharset0\\fnil "); + ByteString aFontNr; + + (*m_pStream) << "{\\fonttbl"; + xub_StrLen nTokenCount = aFonts.GetTokenCount(); + for(xub_StrLen j=0;j<nTokenCount;++j) + { + (*m_pStream) << "\\f"; + m_pStream->WriteNumber(j); + (*m_pStream) << aFormat; + (*m_pStream) << aFonts.GetToken(j).GetBuffer(); + (*m_pStream) << ';'; + } + (*m_pStream) << '}' ; + (*m_pStream) << ODatabaseImportExport::sNewLine; + // write the rtf color table + (*m_pStream) << '{' << OOO_STRING_SVTOOLS_RTF_COLORTBL << OOO_STRING_SVTOOLS_RTF_RED; + m_pStream->WriteNumber(aColor.GetRed()); + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_GREEN; + m_pStream->WriteNumber(aColor.GetGreen()); + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_BLUE; + m_pStream->WriteNumber(aColor.GetBlue()); + + (*m_pStream) << ";\\red255\\green255\\blue255;\\red192\\green192\\blue192;}" + << ODatabaseImportExport::sNewLine; + + ::rtl::OString aTRRH("\\trrh-270\\pard\\intbl"); + ::rtl::OString aFS("\\fs20\\f0\\cf0\\cb2"); + ::rtl::OString aCell1("\\clbrdrl\\brdrs\\brdrcf0\\clbrdrt\\brdrs\\brdrcf0\\clbrdrb\\brdrs\\brdrcf0\\clbrdrr\\brdrs\\brdrcf0\\clshdng10000\\clcfpat2\\cellx"); + + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_TROWD << OOO_STRING_SVTOOLS_RTF_TRGAPH; + m_pStream->WriteNumber(40); + (*m_pStream) << ODatabaseImportExport::sNewLine; + + if(m_xObject.is()) + { + Reference<XColumnsSupplier> xColSup(m_xObject,UNO_QUERY); + Reference<XNameAccess> xColumns = xColSup->getColumns(); + Sequence< ::rtl::OUString> aNames(xColumns->getElementNames()); + const ::rtl::OUString* pIter = aNames.getConstArray(); + + sal_Int32 nCount = aNames.getLength(); + sal_Bool bUseResultMetaData = sal_False; + if ( !nCount ) + { + nCount = m_xResultSetMetaData->getColumnCount(); + bUseResultMetaData = sal_True; + } + + for( sal_Int32 i=1; i<=nCount; ++i ) + { + (*m_pStream) << aCell1; + m_pStream->WriteNumber(i*CELL_X); + (*m_pStream) << ODatabaseImportExport::sNewLine; + } + + // Spaltenbeschreibung + (*m_pStream) << '{' << ODatabaseImportExport::sNewLine; + (*m_pStream) << aTRRH; + + + ::rtl::OString* pHorzChar = new ::rtl::OString[nCount]; + + for ( sal_Int32 i=1; i <= nCount; ++i ) + { + sal_Int32 nAlign = 0; + ::rtl::OUString sColumnName; + if ( bUseResultMetaData ) + sColumnName = m_xResultSetMetaData->getColumnName(i); + else + { + sColumnName = *pIter; + Reference<XPropertySet> xColumn; + xColumns->getByName(sColumnName) >>= xColumn; + xColumn->getPropertyValue(PROPERTY_ALIGN) >>= nAlign; + ++pIter; + } + + const char* pChar; + switch( nAlign ) + { + case 1: pChar = OOO_STRING_SVTOOLS_RTF_QC; break; + case 2: pChar = OOO_STRING_SVTOOLS_RTF_QR; break; + case 0: + default:pChar = OOO_STRING_SVTOOLS_RTF_QL; break; + } + + pHorzChar[i-1] = pChar; // um sp"ater nicht immer im ITEMSET zuw"uhlen + + (*m_pStream) << ODatabaseImportExport::sNewLine; + (*m_pStream) << '{'; + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_QC; // column header always centered + + if ( bBold ) (*m_pStream) << OOO_STRING_SVTOOLS_RTF_B; + if ( bItalic ) (*m_pStream) << OOO_STRING_SVTOOLS_RTF_I; + if ( bUnderline ) (*m_pStream) << OOO_STRING_SVTOOLS_RTF_UL; + if ( bStrikeout ) (*m_pStream) << OOO_STRING_SVTOOLS_RTF_STRIKE; + + (*m_pStream) << aFS; + (*m_pStream) << ' '; + RTFOutFuncs::Out_String(*m_pStream,sColumnName,eDestEnc); + + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_CELL; + (*m_pStream) << '}'; + (*m_pStream) << ODatabaseImportExport::sNewLine; + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_PARD << OOO_STRING_SVTOOLS_RTF_INTBL; + } + + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_ROW; + (*m_pStream) << ODatabaseImportExport::sNewLine << '}'; + (*m_pStream) << ODatabaseImportExport::sNewLine; + + ::comphelper::ComponentContext aContext(m_xFactory); + Reference< XRowSet > xRowSet(m_xRow,UNO_QUERY); + sal_Int32 k=1; + sal_Int32 kk=0; + if ( m_aSelection.getLength() ) + { + const Any* pSelIter = m_aSelection.getConstArray(); + const Any* pEnd = pSelIter + m_aSelection.getLength(); + + sal_Bool bContinue = sal_True; + for( ; pSelIter != pEnd && bContinue; ++pSelIter ) + { + if ( m_bBookmarkSelection ) + { + bContinue = m_xRowLocate->moveToBookmark( *pSelIter ); + } + else + { + sal_Int32 nPos = -1; + OSL_VERIFY( *pSelIter >>= nPos ); + bContinue = ( m_xResultSet->absolute( nPos ) ); + } + + if ( bContinue ) + appendRow( pHorzChar, nCount, k, kk ); + } + } + else + { + m_xResultSet->beforeFirst(); // set back before the first row + while(m_xResultSet->next()) + { + appendRow(pHorzChar,nCount,k,kk); + } + } + delete [] pHorzChar; + } + + (*m_pStream) << '}' << ODatabaseImportExport::sNewLine; + (*m_pStream) << (BYTE) 0; + return ((*m_pStream).GetError() == SVSTREAM_OK); +} +// ----------------------------------------------------------------------------- +void ORTFImportExport::appendRow(::rtl::OString* pHorzChar,sal_Int32 _nColumnCount,sal_Int32& k,sal_Int32& kk) +{ + if(!m_pRowMarker || m_pRowMarker[kk] == k) + { + ++kk; + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_TROWD << OOO_STRING_SVTOOLS_RTF_TRGAPH; + m_pStream->WriteNumber(40); + (*m_pStream) << ODatabaseImportExport::sNewLine; + + static const ::rtl::OString aCell2("\\clbrdrl\\brdrs\\brdrcf2\\clbrdrt\\brdrs\\brdrcf2\\clbrdrb\\brdrs\\brdrcf2\\clbrdrr\\brdrs\\brdrcf2\\clshdng10000\\clcfpat1\\cellx"); + static const ::rtl::OString aTRRH("\\trrh-270\\pard\\intbl"); + + for ( sal_Int32 i=1; i<=_nColumnCount; ++i ) + { + (*m_pStream) << aCell2; + m_pStream->WriteNumber(i*CELL_X); + (*m_pStream) << ODatabaseImportExport::sNewLine; + } + + const BOOL bBold = ( ::com::sun::star::awt::FontWeight::BOLD == m_aFont.Weight ); + const BOOL bItalic = ( ::com::sun::star::awt::FontSlant_ITALIC == m_aFont.Slant ); + const BOOL bUnderline = ( ::com::sun::star::awt::FontUnderline::NONE != m_aFont.Underline ); + const BOOL bStrikeout = ( ::com::sun::star::awt::FontStrikeout::NONE != m_aFont.Strikeout ); + static const ::rtl::OString aFS2("\\fs20\\f1\\cf0\\cb1"); + ::comphelper::ComponentContext aContext(m_xFactory); + Reference< XRowSet > xRowSet(m_xRow,UNO_QUERY); + + (*m_pStream) << '{'; + (*m_pStream) << aTRRH; + for ( sal_Int32 i=1; i <= _nColumnCount; ++i ) + { + (*m_pStream) << ODatabaseImportExport::sNewLine; + (*m_pStream) << '{'; + (*m_pStream) << pHorzChar[i-1]; + + if ( bBold ) (*m_pStream) << OOO_STRING_SVTOOLS_RTF_B; + if ( bItalic ) (*m_pStream) << OOO_STRING_SVTOOLS_RTF_I; + if ( bUnderline ) (*m_pStream) << OOO_STRING_SVTOOLS_RTF_UL; + if ( bStrikeout ) (*m_pStream) << OOO_STRING_SVTOOLS_RTF_STRIKE; + + (*m_pStream) << aFS2; + (*m_pStream) << ' '; + + try + { + Reference<XPropertySet> xColumn(m_xRowSetColumns->getByIndex(i-1),UNO_QUERY_THROW); + dbtools::FormattedColumnValue aFormatedValue(aContext,xRowSet,xColumn); + ::rtl::OUString sValue = aFormatedValue.getFormattedValue(); + // m_xRow->getString(i); + //if (!m_xRow->wasNull()) + if ( sValue.getLength() ) + RTFOutFuncs::Out_String(*m_pStream,sValue,m_eDestEnc); + } + catch (Exception&) + { + OSL_ENSURE(0,"RTF WRITE!"); + } + + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_CELL; + (*m_pStream) << '}'; + (*m_pStream) << ODatabaseImportExport::sNewLine; + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_PARD << OOO_STRING_SVTOOLS_RTF_INTBL; + } + (*m_pStream) << OOO_STRING_SVTOOLS_RTF_ROW << ODatabaseImportExport::sNewLine; + (*m_pStream) << '}'; + } + ++k; +} +//------------------------------------------------------------------- +BOOL ORTFImportExport::Read() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "ORTFImportExport::Read" ); + ODatabaseImportExport::Read(); + SvParserState eState = SVPAR_ERROR; + if ( m_pStream ) + { + m_pReader = new ORTFReader((*m_pStream),m_xConnection,m_xFormatter,m_xFactory); + ((ORTFReader*)m_pReader)->AddRef(); + if ( isCheckEnabled() ) + m_pReader->enableCheckOnly(); + eState = ((ORTFReader*)m_pReader)->CallParser(); + m_pReader->release(); + m_pReader = NULL; + } + + return eState != SVPAR_ERROR; +} +//------------------------------------------------------------------- +//=================================================================== +const sal_Int16 __FAR_DATA OHTMLImportExport::nDefaultFontSize[SBA_HTML_FONTSIZES] = +{ + HTMLFONTSZ1_DFLT, HTMLFONTSZ2_DFLT, HTMLFONTSZ3_DFLT, HTMLFONTSZ4_DFLT, + HTMLFONTSZ5_DFLT, HTMLFONTSZ6_DFLT, HTMLFONTSZ7_DFLT +}; + +sal_Int16 OHTMLImportExport::nFontSize[SBA_HTML_FONTSIZES] = { 0 }; + +const sal_Int16 OHTMLImportExport::nCellSpacing = 0; +const char __FAR_DATA OHTMLImportExport::sIndentSource[nIndentMax+1] = "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"; + +//======================================================================== +// Makros fuer HTML-Export +//======================================================================== +#define OUT_PROLOGUE() ((*m_pStream) << sHTML30_Prologue << ODatabaseImportExport::sNewLine << ODatabaseImportExport::sNewLine) +#define TAG_ON( tag ) HTMLOutFuncs::Out_AsciiTag( (*m_pStream), tag ) +#define TAG_OFF( tag ) HTMLOutFuncs::Out_AsciiTag( (*m_pStream), tag, FALSE ) +#define OUT_STR( str ) HTMLOutFuncs::Out_String( (*m_pStream), str ) +#define OUT_LF() (*m_pStream) << ODatabaseImportExport::sNewLine << GetIndentStr() +#define lcl_OUT_LF() (*m_pStream) << ODatabaseImportExport::sNewLine +#define TAG_ON_LF( tag ) (TAG_ON( tag ) << ODatabaseImportExport::sNewLine << GetIndentStr()) +#define TAG_OFF_LF( tag ) (TAG_OFF( tag ) << ODatabaseImportExport::sNewLine << GetIndentStr()) +#define OUT_HR() TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_horzrule ) +#define OUT_COMMENT( comment ) ((*m_pStream) << sMyBegComment, OUT_STR( comment ) << sMyEndComment << ODatabaseImportExport::sNewLine << GetIndentStr()) +#define lcl_OUT_COMMENT( comment ) ((*m_pStream) << sMyBegComment, OUT_STR( comment ) << sMyEndComment << ODatabaseImportExport::sNewLine) + +//------------------------------------------------------------------- +OHTMLImportExport::OHTMLImportExport(const ::svx::ODataAccessDescriptor& _aDataDescriptor, + const Reference< XMultiServiceFactory >& _rM, + const Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF, + const String& rExchange) + : ODatabaseImportExport(_aDataDescriptor,_rM,_rxNumberF,rExchange) + ,m_nIndent(0) +#ifdef DBG_UTIL + ,m_bCheckFont(FALSE) +#endif +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::OHTMLImportExport" ); + // set HTML configuration + SvxHtmlOptions* pHtmlOptions = SvxHtmlOptions::Get(); + m_eDestEnc = pHtmlOptions->GetTextEncoding(); + strncpy( sIndent, sIndentSource ,std::min(sizeof(sIndent),sizeof(sIndentSource))); + sIndent[0] = 0; +} +//------------------------------------------------------------------- +BOOL OHTMLImportExport::Write() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::Write" ); + ODatabaseImportExport::Write(); + if(m_xObject.is()) + { + (*m_pStream) << '<' << OOO_STRING_SVTOOLS_HTML_doctype << ' ' << OOO_STRING_SVTOOLS_HTML_doctype32 << '>' << ODatabaseImportExport::sNewLine << ODatabaseImportExport::sNewLine; + TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_html ); + WriteHeader(); + OUT_LF(); + WriteBody(); + OUT_LF(); + TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_html ); + + return ((*m_pStream).GetError() == SVSTREAM_OK); + } + return sal_False; +} +//------------------------------------------------------------------- +BOOL OHTMLImportExport::Read() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::Read" ); + ODatabaseImportExport::Read(); + SvParserState eState = SVPAR_ERROR; + if ( m_pStream ) + { + m_pReader = new OHTMLReader((*m_pStream),m_xConnection,m_xFormatter,m_xFactory); + ((OHTMLReader*)m_pReader)->AddRef(); + if ( isCheckEnabled() ) + m_pReader->enableCheckOnly(); + //dyf add 20070601 + m_pReader->SetTableName(m_sDefaultTableName); + //dyf add end + eState = ((OHTMLReader*)m_pReader)->CallParser(); + m_pReader->release(); + m_pReader = NULL; + } + + return eState != SVPAR_ERROR; +} +//------------------------------------------------------------------- +void OHTMLImportExport::WriteHeader() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::WriteHeader" ); + uno::Reference<document::XDocumentProperties> xDocProps( + m_xFactory->createInstance(::rtl::OUString::createFromAscii( + "com.sun.star.document.DocumentProperties")), + uno::UNO_QUERY); + if (xDocProps.is()) { + xDocProps->setTitle(m_sName); + } + + IncIndent(1); TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_head ); + + SfxFrameHTMLWriter::Out_DocInfo( (*m_pStream), String(), + xDocProps, sIndent ); + OUT_LF(); + IncIndent(-1); OUT_LF(); TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_head ); +} +//----------------------------------------------------------------------- +void OHTMLImportExport::WriteBody() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::WriteBody" ); + + IncIndent(1); TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_style ); + + (*m_pStream) << sMyBegComment; OUT_LF(); + (*m_pStream) << OOO_STRING_SVTOOLS_HTML_body << " { " << sFontFamily << '\"' << ::rtl::OString(m_aFont.Name,m_aFont.Name.getLength(), gsl_getSystemTextEncoding()) << '\"'; + // TODO : think about the encoding of the font name + (*m_pStream) << "; " << sFontSize; + m_pStream->WriteNumber(m_aFont.Height); + (*m_pStream) << '}'; + + OUT_LF(); + (*m_pStream) << sMyEndComment; + IncIndent(-1); OUT_LF(); TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_style ); + OUT_LF(); + + // default Textfarbe schwarz + (*m_pStream) << '<' << OOO_STRING_SVTOOLS_HTML_body << ' ' << OOO_STRING_SVTOOLS_HTML_O_text << '='; + sal_Int32 nColor = 0; + if(m_xObject.is()) + m_xObject->getPropertyValue(PROPERTY_TEXTCOLOR) >>= nColor; + ::Color aColor(nColor); + HTMLOutFuncs::Out_Color( (*m_pStream), aColor ); + + ::rtl::OString sOut( ' ' ); + sOut = sOut + OOO_STRING_SVTOOLS_HTML_O_bgcolor; + sOut = sOut + "="; + (*m_pStream) << sOut; + HTMLOutFuncs::Out_Color( (*m_pStream), aColor ); + + (*m_pStream) << '>'; OUT_LF(); + + WriteTables(); + + TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_body ); +} +//----------------------------------------------------------------------- +void OHTMLImportExport::WriteTables() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::WriteTables" ); + ::rtl::OString aStrOut = OOO_STRING_SVTOOLS_HTML_table; + aStrOut = aStrOut + " "; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_frame; + aStrOut = aStrOut + "="; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_TF_void; + + Sequence< ::rtl::OUString> aNames; + Reference<XNameAccess> xColumns; + sal_Bool bUseResultMetaData = sal_False; + if(m_xObject.is()) + { + Reference<XColumnsSupplier> xColSup(m_xObject,UNO_QUERY); + xColumns = xColSup->getColumns(); + aNames = xColumns->getElementNames(); + if ( !aNames.getLength() ) + { + sal_Int32 nCount = m_xResultSetMetaData->getColumnCount(); + aNames.realloc(nCount); + for (sal_Int32 i= 0; i < nCount; ++i) + aNames[i] = m_xResultSetMetaData->getColumnName(i+1); + bUseResultMetaData = sal_True; + } + } + + aStrOut = aStrOut + " "; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_O_align; + aStrOut = aStrOut + "="; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_AL_left; + aStrOut = aStrOut + " "; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_O_cellspacing; + aStrOut = aStrOut + "="; + aStrOut = aStrOut + ::rtl::OString::valueOf((sal_Int32)nCellSpacing); + aStrOut = aStrOut + " "; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_O_cols; + aStrOut = aStrOut + "="; + aStrOut = aStrOut + ::rtl::OString::valueOf(aNames.getLength()); + aStrOut = aStrOut + " "; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_O_border; + aStrOut = aStrOut + "=1"; + + IncIndent(1); + TAG_ON( aStrOut ); + + FontOn(); + + TAG_ON( OOO_STRING_SVTOOLS_HTML_caption ); + TAG_ON( OOO_STRING_SVTOOLS_HTML_bold ); + + (*m_pStream) << ::rtl::OString(m_sName,m_sName.getLength(), gsl_getSystemTextEncoding()); + // TODO : think about the encoding of the name + TAG_OFF( OOO_STRING_SVTOOLS_HTML_bold ); + TAG_OFF( OOO_STRING_SVTOOLS_HTML_caption ); + + FontOff(); + OUT_LF(); + // </FONT> + + IncIndent(1); + TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_thead ); + + IncIndent(1); + TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_tablerow ); + + if(m_xObject.is()) + { + sal_Int32* pFormat = new sal_Int32[aNames.getLength()]; + + const char **pHorJustify = new const char*[aNames.getLength()]; + sal_Int32 *pColWidth = new sal_Int32[aNames.getLength()]; + + + sal_Int32 nHeight = 0; + m_xObject->getPropertyValue(PROPERTY_ROW_HEIGHT) >>= nHeight; + + // 1. die Spaltenbeschreibung rauspusten + const ::rtl::OUString* pIter = aNames.getConstArray(); + const ::rtl::OUString* pEnd = pIter + aNames.getLength(); + + for( sal_Int32 i=0;pIter != pEnd; ++pIter,++i ) + { + sal_Int32 nAlign = 0; + pFormat[i] = 0; + pColWidth[i] = 100; + if ( !bUseResultMetaData ) + { + Reference<XPropertySet> xColumn; + xColumns->getByName(*pIter) >>= xColumn; + xColumn->getPropertyValue(PROPERTY_ALIGN) >>= nAlign; + pFormat[i] = ::comphelper::getINT32(xColumn->getPropertyValue(PROPERTY_FORMATKEY)); + pColWidth[i] = ::comphelper::getINT32(xColumn->getPropertyValue(PROPERTY_WIDTH)); + } + + switch( nAlign ) + { + case 1: pHorJustify[i] = OOO_STRING_SVTOOLS_HTML_AL_center; break; + case 2: pHorJustify[i] = OOO_STRING_SVTOOLS_HTML_AL_right; break; + default: pHorJustify[i] = OOO_STRING_SVTOOLS_HTML_AL_left; break; + } + + if(i == aNames.getLength()-1) + IncIndent(-1); + + WriteCell(pFormat[i],pColWidth[i],nHeight,pHorJustify[i],*pIter,OOO_STRING_SVTOOLS_HTML_tableheader); + } + + IncIndent(-1); + TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_tablerow ); + TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_thead ); + + IncIndent(1); + TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_tbody ); + + // 2. und jetzt die Daten + ::comphelper::ComponentContext aContext(m_xFactory); + Reference< XRowSet > xRowSet(m_xRow,UNO_QUERY); + sal_Int32 j=1; + sal_Int32 kk=0; + m_xResultSet->beforeFirst(); // set back before the first row + while(m_xResultSet->next()) + { + IncIndent(1); + TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_tablerow ); + + if(!m_pRowMarker || m_pRowMarker[kk] == j) + { + ++kk; + for(sal_Int32 i=1;i<=aNames.getLength();++i) + { + if(i == aNames.getLength()) + IncIndent(-1); + + String aValue; + try + { + Reference<XPropertySet> xColumn(m_xRowSetColumns->getByIndex(i-1),UNO_QUERY_THROW); + dbtools::FormattedColumnValue aFormatedValue(aContext,xRowSet,xColumn); + ::rtl::OUString sValue = aFormatedValue.getFormattedValue(); + if (sValue.getLength()) + { + aValue = sValue; + } + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + WriteCell(pFormat[i-1],pColWidth[i-1],nHeight,pHorJustify[i-1],aValue,OOO_STRING_SVTOOLS_HTML_tabledata); + } + } + ++j; + TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_tablerow ); + } + + delete [] pFormat; + delete [] pHorJustify; + delete [] pColWidth; + } + else + { + IncIndent(-1); + TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_tablerow ); + TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_thead ); + + IncIndent(1); + TAG_ON_LF( OOO_STRING_SVTOOLS_HTML_tbody ); + } + + IncIndent(-1); OUT_LF(); TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_tbody ); + IncIndent(-1); TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_table ); +} +//----------------------------------------------------------------------- +void OHTMLImportExport::WriteCell( sal_Int32 nFormat,sal_Int32 nWidthPixel,sal_Int32 nHeightPixel,const char* pChar, + const String& rValue,const char* pHtmlTag) +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::WriteCell" ); + ::rtl::OString aStrTD = pHtmlTag; + + nWidthPixel = nWidthPixel ? nWidthPixel : 86; + nHeightPixel = nHeightPixel ? nHeightPixel : 17; + + // trotz der <TABLE COLS=n> und <COL WIDTH=x> Angaben noetig, + // da die nicht von Netscape beachtet werden.. + // Spaltenbreite + aStrTD = aStrTD + " "; + aStrTD = aStrTD + OOO_STRING_SVTOOLS_HTML_O_width; + aStrTD = aStrTD + "="; + aStrTD = aStrTD + ::rtl::OString::valueOf((sal_Int32)nWidthPixel); + // Zeilenhoehe + aStrTD = aStrTD + " "; + aStrTD = aStrTD + OOO_STRING_SVTOOLS_HTML_O_height; + aStrTD = aStrTD + "="; + aStrTD = aStrTD + ::rtl::OString::valueOf((sal_Int32)nHeightPixel); + + aStrTD = aStrTD + " "; + aStrTD = aStrTD + OOO_STRING_SVTOOLS_HTML_O_align; + aStrTD = aStrTD + "="; + aStrTD = aStrTD + pChar; + + double fVal = 0.0; + + Reference< ::com::sun::star::util::XNumberFormatsSupplier > xSupplier = m_xFormatter->getNumberFormatsSupplier(); + SvNumberFormatsSupplierObj* pSupplierImpl = SvNumberFormatsSupplierObj::getImplementation( xSupplier ); + SvNumberFormatter* pFormatter = pSupplierImpl ? pSupplierImpl->GetNumberFormatter() : NULL; + if(pFormatter) + { + try + { + fVal = m_xFormatter->convertStringToNumber(nFormat,rValue); + ByteString aTmpString(aStrTD); + HTMLOutFuncs::CreateTableDataOptionsValNum( aTmpString, FALSE, fVal,nFormat, *pFormatter ); + } + catch(Exception&) + { + ByteString aTmpString(aStrTD); + HTMLOutFuncs::CreateTableDataOptionsValNum( aTmpString, FALSE, fVal,nFormat, *pFormatter ); + } + } + + TAG_ON( aStrTD ); + + FontOn(); + + BOOL bBold = ( ::com::sun::star::awt::FontWeight::BOLD == m_aFont.Weight ); + BOOL bItalic = ( ::com::sun::star::awt::FontSlant_ITALIC == m_aFont.Slant ); + BOOL bUnderline = ( ::com::sun::star::awt::FontUnderline::NONE != m_aFont.Underline ); + BOOL bStrikeout = ( ::com::sun::star::awt::FontStrikeout::NONE != m_aFont.Strikeout ); + + if ( bBold ) TAG_ON( OOO_STRING_SVTOOLS_HTML_bold ); + if ( bItalic ) TAG_ON( OOO_STRING_SVTOOLS_HTML_italic ); + if ( bUnderline ) TAG_ON( OOO_STRING_SVTOOLS_HTML_underline ); + if ( bStrikeout ) TAG_ON( OOO_STRING_SVTOOLS_HTML_strike ); + + if ( !rValue.Len() ) + TAG_ON( OOO_STRING_SVTOOLS_HTML_linebreak ); // #42573# keine komplett leere Zelle + else + HTMLOutFuncs::Out_String( (*m_pStream), rValue ,m_eDestEnc); + + + if ( bStrikeout ) TAG_OFF( OOO_STRING_SVTOOLS_HTML_strike ); + if ( bUnderline ) TAG_OFF( OOO_STRING_SVTOOLS_HTML_underline ); + if ( bItalic ) TAG_OFF( OOO_STRING_SVTOOLS_HTML_italic ); + if ( bBold ) TAG_OFF( OOO_STRING_SVTOOLS_HTML_bold ); + + FontOff(); + + TAG_OFF_LF( pHtmlTag ); +} +//----------------------------------------------------------------------- +void OHTMLImportExport::FontOn() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::FontOn" ); +#ifdef DBG_UTIL + m_bCheckFont = TRUE; +#endif + + // <FONT FACE="xxx"> + ::rtl::OString aStrOut = "<"; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_font; + aStrOut = aStrOut + " "; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_O_face; + aStrOut = aStrOut + "="; + aStrOut = aStrOut + "\""; + aStrOut = aStrOut + ::rtl::OString(m_aFont.Name,m_aFont.Name.getLength(),gsl_getSystemTextEncoding()); + // TODO : think about the encoding of the font name + aStrOut = aStrOut + "\""; + aStrOut = aStrOut + " "; + aStrOut = aStrOut + OOO_STRING_SVTOOLS_HTML_O_color; + aStrOut = aStrOut + "="; + (*m_pStream) << aStrOut; + + sal_Int32 nColor = 0; + if(m_xObject.is()) + m_xObject->getPropertyValue(PROPERTY_TEXTCOLOR) >>= nColor; + ::Color aColor(nColor); + + HTMLOutFuncs::Out_Color( (*m_pStream), aColor ); + (*m_pStream) << ">"; +} +//----------------------------------------------------------------------- +inline void OHTMLImportExport::FontOff() +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::FontOff" ); + DBG_ASSERT(m_bCheckFont,"Kein FontOn() gerufen"); + TAG_OFF( OOO_STRING_SVTOOLS_HTML_font ); +#ifdef DBG_UTIL + m_bCheckFont = FALSE; +#endif +} +//----------------------------------------------------------------------- +void OHTMLImportExport::IncIndent( sal_Int16 nVal ) +{ + RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLImportExport::IncIndent" ); + sIndent[m_nIndent] = '\t'; + m_nIndent = m_nIndent + nVal; + if ( m_nIndent < 0 ) + m_nIndent = 0; + else if ( m_nIndent > nIndentMax ) + m_nIndent = nIndentMax; + sIndent[m_nIndent] = 0; +} +// ----------------------------------------------------------------------------- |